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