tarm - 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 9aa463c541d03ce5389e7015b9a19358a5796e63
 (DIR) parent 6912efc49c6362c46536d79c56dbfa0af1ba944e
 (HTM) Author: rsc <devnull@localhost>
       Date:   Thu,  3 Nov 2005 00:13:33 +0000
       
       arm
       
       Diffstat:
         M src/libthread/Linux-arm-asm.s       |      66 ++++++++++++++++----------------
         M src/libthread/Linux.c               |       3 ++-
       
       2 files changed, 35 insertions(+), 34 deletions(-)
       ---
 (DIR) diff --git a/src/libthread/Linux-arm-asm.s b/src/libthread/Linux-arm-asm.s
       t@@ -11,43 +11,43 @@ _tas:
        
        .globl getmcontext
        getmcontext:
       -        /* r0 will be overwritten */
       -        str        r1, [r0,#4]!
       -        str        r2, [r0,#4]!
       -        str        r3, [r0,#4]!
       -        str        r4, [r0,#4]!
       -        str        r5, [r0,#4]!
       -        str        r6, [r0,#4]!
       -        str        r7, [r0,#4]!
       -        str        r8, [r0,#4]!
       -        str        r9, [r0,#4]!
       -        str        r10, [r0,#4]!
       -        str        r11, [r0,#4]!
       -        str        r12, [r0,#4]!
       -        str        r13, [r0,#4]!
       -        str        r14, [r0,#4]!
       -        /* r15 is pc */
       +        str        r1, [r0,#4]
       +        str        r2, [r0,#8]
       +        str        r3, [r0,#12]
       +        str        r4, [r0,#16]
       +        str        r5, [r0,#20]
       +        str        r6, [r0,#24]
       +        str        r7, [r0,#28]
       +        str        r8, [r0,#32]
       +        str        r9, [r0,#36]
       +        str        r10, [r0,#40]
       +        str        r11, [r0,#44]
       +        str        r12, [r0,#48]
       +        str        r13, [r0,#52]
       +        str        r14, [r0,#56]
       +        /* store 1 as r0-to-restore */
       +        mov        r1, #1
       +        str        r1, [r0]
       +        /* return 0 */
                mov        r0, #0
                mov        pc, lr
        
        .globl setmcontext
        setmcontext:
       -        /* r0 will be overwritten */
       -        ldr        r1, [r0,#4]!
       -        ldr        r2, [r0,#4]!
       -        ldr        r3, [r0,#4]!
       -        ldr        r4, [r0,#4]!
       -        ldr        r5, [r0,#4]!
       -        ldr        r6, [r0,#4]!
       -        ldr        r7, [r0,#4]!
       -        ldr        r8, [r0,#4]!
       -        ldr        r9, [r0,#4]!
       -        ldr        r10, [r0,#4]!
       -        ldr        r11, [r0,#4]!
       -        ldr        r12, [r0,#4]!
       -        ldr        r13, [r0,#4]!
       -        ldr        r14, [r0,#4]!
       -        /* r15 is pc */
       -        mov        r0, #1
       +        ldr        r1, [r0,#4]
       +        ldr        r2, [r0,#8]
       +        ldr        r3, [r0,#12]
       +        ldr        r4, [r0,#16]
       +        ldr        r5, [r0,#20]
       +        ldr        r6, [r0,#24]
       +        ldr        r7, [r0,#28]
       +        ldr        r8, [r0,#32]
       +        ldr        r9, [r0,#36]
       +        ldr        r10, [r0,#40]
       +        ldr        r11, [r0,#44]
       +        ldr        r12, [r0,#48]
       +        ldr        r13, [r0,#52]
       +        ldr        r14, [r0,#56]
       +        ldr        r0, [r0]
                mov        pc, lr
        
 (DIR) diff --git a/src/libthread/Linux.c b/src/libthread/Linux.c
       t@@ -449,7 +449,8 @@ makecontext(ucontext_t *uc, void (*fn)(void), int argc, ...)
                sp = (int*)uc->uc_stack.ss_sp+uc->uc_stack.ss_size/4;
                va_start(arg, argc);
                for(i=0; i<4 && i<argc; i++)
       -                uc->uc_mcontext.gregs[0] = va_arg(arg, uint);
       +                uc->uc_mcontext.gregs[i] = va_arg(arg, uint);
       +        va_end(arg);
                uc->uc_mcontext.gregs[13] = (uint)sp;
                uc->uc_mcontext.gregs[14] = (uint)fn;
        }