tmore - 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 8712d1a38e87e8f51257a80246f51d075aae7f5b
 (DIR) parent 229086e79014909293b56271b529ed97e700932e
 (HTM) Author: rsc <devnull@localhost>
       Date:   Thu, 16 Feb 2006 06:18:19 +0000
       
       more
       
       Diffstat:
         M src/libthread/Linux-sparc64-swapco… |      10 ++++++----
       
       1 file changed, 6 insertions(+), 4 deletions(-)
       ---
 (DIR) diff --git a/src/libthread/Linux-sparc64-swapcontext.c b/src/libthread/Linux-sparc64-swapcontext.c
       t@@ -19,18 +19,21 @@
        
        #include <ucontext.h>
        
       +#define UC_M_PC 40
       +#define UC_M_NPC 48
       +
        extern int __getcontext (ucontext_t *ucp);
        extern int __setcontext (const ucontext_t *ucp, int restoremask);
        
        int
       -__swapcontext (ucontext_t *oucp, const ucontext_t *ucp)
       +swapcontext (ucontext_t *oucp, const ucontext_t *ucp)
        {
          extern void __swapcontext_ret (void);
          /* Save the current machine context to oucp.  */
          __getcontext (oucp);
          /* Modify oucp to skip the __setcontext call on reactivation.  */
       -  oucp->uc_mcontext.mc_gregs[MC_PC] = (long) __swapcontext_ret;
       -  oucp->uc_mcontext.mc_gregs[MC_NPC] = ((long) __swapcontext_ret) + 4;
       +  *(long*)((char*)oucp+UC_M_PC) = (long)__swapcontext_ret;
       +  *(long*)((char*)oucp+UC_M_NPC) = (long)__swapcontext_ret + 4;
          /* Restore the machine context in ucp.  */
          __setcontext (ucp, 1);
          return 0;
       t@@ -45,4 +48,3 @@ __swapcontext_ret:                                        \n\
                .size        __swapcontext_ret, .-__swapcontext_ret        \n\
             ");
        
       -weak_alias (__swapcontext, swapcontext)