itlibthread: use libc functions in ucontext for macOS (#417) - plan9port - [fork] Plan 9 from user space Err mx1.adamsgaard.dk 70 hgit clone git://src.adamsgaard.dk/plan9port URL:git://src.adamsgaard.dk/plan9port mx1.adamsgaard.dk 70 1Log /src/plan9port/log.gph mx1.adamsgaard.dk 70 1Files /src/plan9port/files.gph mx1.adamsgaard.dk 70 1Refs /src/plan9port/refs.gph mx1.adamsgaard.dk 70 1README /src/plan9port/file/README.md.gph mx1.adamsgaard.dk 70 1LICENSE /src/plan9port/file/LICENSE.gph mx1.adamsgaard.dk 70 i--- Err mx1.adamsgaard.dk 70 1commit 329831171dd6ef81c113f101093c7b4947381003 /src/plan9port/commit/329831171dd6ef81c113f101093c7b4947381003.gph mx1.adamsgaard.dk 70 1parent c3d31baca0a73a9e8033db8a0b47093233c636c1 /src/plan9port/commit/c3d31baca0a73a9e8033db8a0b47093233c636c1.gph mx1.adamsgaard.dk 70 hAuthor: Xiao-Yong URL:mailto:xjin@anl.gov mx1.adamsgaard.dk 70 iDate: Mon, 15 Jun 2020 22:18:03 -0500 Err mx1.adamsgaard.dk 70 i Err mx1.adamsgaard.dk 70 ilibthread: use libc functions in ucontext for macOS (#417) Err mx1.adamsgaard.dk 70 i Err mx1.adamsgaard.dk 70 i Err mx1.adamsgaard.dk 70 iDiffstat: Err mx1.adamsgaard.dk 70 i D src/libthread/Darwin-x86_64-asm.s | 44 ------------------------------- Err mx1.adamsgaard.dk 70 i M src/libthread/sysofiles.sh | 4 ++-- Err mx1.adamsgaard.dk 70 i M src/libthread/threadimpl.h | 36 +------------------------------ Err mx1.adamsgaard.dk 70 i Err mx1.adamsgaard.dk 70 i3 files changed, 3 insertions(+), 81 deletions(-) Err mx1.adamsgaard.dk 70 i--- Err mx1.adamsgaard.dk 70 1diff --git a/src/libthread/Darwin-x86_64-asm.s b/src/libthread/Darwin-x86_64-asm.s /src/plan9port/file/src/libthread/Darwin-x86_64-asm.s.gph mx1.adamsgaard.dk 70 it@@ -1,44 +0,0 @@ Err mx1.adamsgaard.dk 70 i-.text Err mx1.adamsgaard.dk 70 i-.align 8 Err mx1.adamsgaard.dk 70 i- Err mx1.adamsgaard.dk 70 i-.globl _libthread_getmcontext Err mx1.adamsgaard.dk 70 i-_libthread_getmcontext: Err mx1.adamsgaard.dk 70 i- movq $1, 0*8(%rdi) // rax Err mx1.adamsgaard.dk 70 i- movq %rbx, 1*8(%rdi) Err mx1.adamsgaard.dk 70 i- movq %rcx, 2*8(%rdi) Err mx1.adamsgaard.dk 70 i- movq %rdx, 3*8(%rdi) Err mx1.adamsgaard.dk 70 i- movq %rsi, 4*8(%rdi) Err mx1.adamsgaard.dk 70 i- movq %rdi, 5*8(%rdi) Err mx1.adamsgaard.dk 70 i- movq %rbp, 6*8(%rdi) Err mx1.adamsgaard.dk 70 i- movq %rsp, 7*8(%rdi) Err mx1.adamsgaard.dk 70 i- movq %r8, 8*8(%rdi) Err mx1.adamsgaard.dk 70 i- movq %r9, 9*8(%rdi) Err mx1.adamsgaard.dk 70 i- movq %r10, 10*8(%rdi) Err mx1.adamsgaard.dk 70 i- movq %r11, 11*8(%rdi) Err mx1.adamsgaard.dk 70 i- movq %r12, 12*8(%rdi) Err mx1.adamsgaard.dk 70 i- movq %r13, 13*8(%rdi) Err mx1.adamsgaard.dk 70 i- movq %r14, 14*8(%rdi) Err mx1.adamsgaard.dk 70 i- movq %r15, 15*8(%rdi) Err mx1.adamsgaard.dk 70 i- movq $0, %rax Err mx1.adamsgaard.dk 70 i- ret Err mx1.adamsgaard.dk 70 i- Err mx1.adamsgaard.dk 70 i-.globl _libthread_setmcontext Err mx1.adamsgaard.dk 70 i-_libthread_setmcontext: Err mx1.adamsgaard.dk 70 i- movq 0*8(%rdi), %rax Err mx1.adamsgaard.dk 70 i- movq 1*8(%rdi), %rbx Err mx1.adamsgaard.dk 70 i- movq 2*8(%rdi), %rcx Err mx1.adamsgaard.dk 70 i- movq 3*8(%rdi), %rdx Err mx1.adamsgaard.dk 70 i- movq 4*8(%rdi), %rsi Err mx1.adamsgaard.dk 70 i- // %rdi later Err mx1.adamsgaard.dk 70 i- movq 6*8(%rdi), %rbp Err mx1.adamsgaard.dk 70 i- movq 7*8(%rdi), %rsp Err mx1.adamsgaard.dk 70 i- movq 8*8(%rdi), %r8 Err mx1.adamsgaard.dk 70 i- movq 9*8(%rdi), %r9 Err mx1.adamsgaard.dk 70 i- movq 10*8(%rdi), %r10 Err mx1.adamsgaard.dk 70 i- movq 11*8(%rdi), %r11 Err mx1.adamsgaard.dk 70 i- movq 12*8(%rdi), %r12 Err mx1.adamsgaard.dk 70 i- movq 13*8(%rdi), %r13 Err mx1.adamsgaard.dk 70 i- movq 14*8(%rdi), %r14 Err mx1.adamsgaard.dk 70 i- movq 15*8(%rdi), %r15 Err mx1.adamsgaard.dk 70 i- movq 5*8(%rdi), %rdi Err mx1.adamsgaard.dk 70 i- ret Err mx1.adamsgaard.dk 70 1diff --git a/src/libthread/sysofiles.sh b/src/libthread/sysofiles.sh /src/plan9port/file/src/libthread/sysofiles.sh.gph mx1.adamsgaard.dk 70 it@@ -15,14 +15,14 @@ esac Err mx1.adamsgaard.dk 70 i Err mx1.adamsgaard.dk 70 i # Various libc don't supply swapcontext, makecontext, so we do. Err mx1.adamsgaard.dk 70 i case "$SYSNAME-$OBJTYPE" in Err mx1.adamsgaard.dk 70 i-Darwin-x86_64 | Linux-arm | Linux-sparc64 | NetBSD-arm | OpenBSD-386 | OpenBSD-power | OpenBSD-x86_64) Err mx1.adamsgaard.dk 70 i+Linux-arm | Linux-sparc64 | NetBSD-arm | OpenBSD-386 | OpenBSD-power | OpenBSD-x86_64) Err mx1.adamsgaard.dk 70 i echo $OBJTYPE-ucontext.o Err mx1.adamsgaard.dk 70 i ;; Err mx1.adamsgaard.dk 70 i esac Err mx1.adamsgaard.dk 70 i Err mx1.adamsgaard.dk 70 i # A few libc don't supply setcontext, getcontext, so we do. Err mx1.adamsgaard.dk 70 i case "$SYSNAME-$OBJTYPE" in Err mx1.adamsgaard.dk 70 i-Darwin-x86_64 | Linux-arm | Linux-sparc64 | OpenBSD-386 | OpenBSD-power | OpenBSD-x86_64) Err mx1.adamsgaard.dk 70 i+Linux-arm | Linux-sparc64 | OpenBSD-386 | OpenBSD-power | OpenBSD-x86_64) Err mx1.adamsgaard.dk 70 i echo $SYSNAME-$OBJTYPE-asm.o Err mx1.adamsgaard.dk 70 i ;; Err mx1.adamsgaard.dk 70 i esac Err mx1.adamsgaard.dk 70 1diff --git a/src/libthread/threadimpl.h b/src/libthread/threadimpl.h /src/plan9port/file/src/libthread/threadimpl.h.gph mx1.adamsgaard.dk 70 it@@ -7,7 +7,7 @@ Err mx1.adamsgaard.dk 70 i #include Err mx1.adamsgaard.dk 70 i #if !defined(__OpenBSD__) Err mx1.adamsgaard.dk 70 i # if defined(__APPLE__) Err mx1.adamsgaard.dk 70 i-# define _XOPEN_SOURCE /* for Snow Leopard */ Err mx1.adamsgaard.dk 70 i+# define _XOPEN_SOURCE /* for Snow Leopard */ Err mx1.adamsgaard.dk 70 i # endif Err mx1.adamsgaard.dk 70 i # include Err mx1.adamsgaard.dk 70 i #endif Err mx1.adamsgaard.dk 70 it@@ -15,31 +15,6 @@ Err mx1.adamsgaard.dk 70 i #include "libc.h" Err mx1.adamsgaard.dk 70 i #include "thread.h" Err mx1.adamsgaard.dk 70 i Err mx1.adamsgaard.dk 70 i-#if defined(__APPLE__) Err mx1.adamsgaard.dk 70 i- /* Err mx1.adamsgaard.dk 70 i- * OS X before 10.5 (Leopard) does not provide Err mx1.adamsgaard.dk 70 i- * swapcontext nor makecontext, so we have to use our own. Err mx1.adamsgaard.dk 70 i- * In theory, Leopard does provide them, but when we use Err mx1.adamsgaard.dk 70 i- * them, they seg fault. Maybe we're using them wrong. Err mx1.adamsgaard.dk 70 i- * So just use our own versions, even on Leopard. Err mx1.adamsgaard.dk 70 i- */ Err mx1.adamsgaard.dk 70 i-# define mcontext libthread_mcontext Err mx1.adamsgaard.dk 70 i-# define mcontext_t libthread_mcontext_t Err mx1.adamsgaard.dk 70 i-# define ucontext libthread_ucontext Err mx1.adamsgaard.dk 70 i-# define ucontext_t libthread_ucontext_t Err mx1.adamsgaard.dk 70 i-# define swapcontext libthread_swapcontext Err mx1.adamsgaard.dk 70 i-# define makecontext libthread_makecontext Err mx1.adamsgaard.dk 70 i-# if defined(__i386__) Err mx1.adamsgaard.dk 70 i-# include "386-ucontext.h" Err mx1.adamsgaard.dk 70 i-# elif defined(__x86_64__) Err mx1.adamsgaard.dk 70 i-# include "x86_64-ucontext.h" Err mx1.adamsgaard.dk 70 i-# elif defined(__ppc__) || defined(__power__) Err mx1.adamsgaard.dk 70 i-# include "power-ucontext.h" Err mx1.adamsgaard.dk 70 i-# else Err mx1.adamsgaard.dk 70 i-# error "unknown architecture" Err mx1.adamsgaard.dk 70 i-# endif Err mx1.adamsgaard.dk 70 i-#endif Err mx1.adamsgaard.dk 70 i- Err mx1.adamsgaard.dk 70 i #if defined(__OpenBSD__) Err mx1.adamsgaard.dk 70 i # define mcontext libthread_mcontext Err mx1.adamsgaard.dk 70 i # define mcontext_t libthread_mcontext_t Err mx1.adamsgaard.dk 70 it@@ -82,15 +57,6 @@ enum Err mx1.adamsgaard.dk 70 i struct Context Err mx1.adamsgaard.dk 70 i { Err mx1.adamsgaard.dk 70 i ucontext_t uc; Err mx1.adamsgaard.dk 70 i-#ifdef __APPLE__ Err mx1.adamsgaard.dk 70 i- /* Err mx1.adamsgaard.dk 70 i- * On Snow Leopard, etc., the context routines exist, Err mx1.adamsgaard.dk 70 i- * so we use them, but apparently they write past the Err mx1.adamsgaard.dk 70 i- * end of the ucontext_t. Sigh. We put some extra Err mx1.adamsgaard.dk 70 i- * scratch space here for them. Err mx1.adamsgaard.dk 70 i- */ Err mx1.adamsgaard.dk 70 i- uchar buf[1024]; Err mx1.adamsgaard.dk 70 i-#endif Err mx1.adamsgaard.dk 70 i }; Err mx1.adamsgaard.dk 70 i Err mx1.adamsgaard.dk 70 i struct Execjob Err mx1.adamsgaard.dk 70 .