]> Cypherpunks repositories - gostls13.git/commitdiff
liblink: make GO_ARGS the default for functions beginning with ·
authorRuss Cox <rsc@golang.org>
Tue, 16 Sep 2014 21:39:55 +0000 (17:39 -0400)
committerRuss Cox <rsc@golang.org>
Tue, 16 Sep 2014 21:39:55 +0000 (17:39 -0400)
If there is a leading ·, assume there is a Go prototype and
attach the Go prototype information to the function.
If the function is not called from Go and does not need a
Go prototype, it can be made file-local instead (using name<>(SB)).

This fixes the current BSD build failures, by giving functions like
sync/atomic.StoreUint32 argument stack map information.

Fixes #8753.

LGTM=khr, iant
R=golang-codereviews, iant, khr, bradfitz
CC=golang-codereviews, r, rlh
https://golang.org/cl/142150043

25 files changed:
src/liblink/objfile.c
src/runtime/asm_386.s
src/runtime/asm_amd64.s
src/runtime/asm_arm.s
src/syscall/asm_darwin_386.s
src/syscall/asm_darwin_amd64.s
src/syscall/asm_dragonfly_386.s
src/syscall/asm_dragonfly_amd64.s
src/syscall/asm_freebsd_386.s
src/syscall/asm_freebsd_amd64.s
src/syscall/asm_freebsd_arm.s
src/syscall/asm_linux_386.s
src/syscall/asm_linux_amd64.s
src/syscall/asm_linux_arm.s
src/syscall/asm_nacl_386.s
src/syscall/asm_nacl_amd64p32.s
src/syscall/asm_nacl_arm.s
src/syscall/asm_netbsd_386.s
src/syscall/asm_netbsd_amd64.s
src/syscall/asm_netbsd_arm.s
src/syscall/asm_openbsd_386.s
src/syscall/asm_openbsd_amd64.s
src/syscall/asm_plan9_386.s
src/syscall/asm_plan9_amd64.s
test/nosplit.go

index 02cfae495aa00e86a05bbdb1ca05eabb03331b3d..7d4b28c9ac72d81f41672ddc5807f6950ab8d1fd 100644 (file)
@@ -125,7 +125,7 @@ static LSym *rdsym(Link*, Biobuf*, char*);
 void
 writeobj(Link *ctxt, Biobuf *b)
 {
-       int flag;
+       int flag, found;
        Hist *h;
        LSym *s, *text, *etext, *curtext, *data, *edata;
        Plist *pl;
@@ -251,6 +251,27 @@ writeobj(Link *ctxt, Biobuf *b)
                        s->etext = p;
                }
        }
+       
+       // Add reference to Go arguments for C or assembly functions without them.
+       for(s = text; s != nil; s = s->next) {
+               if(strncmp(s->name, "\"\".", 3) != 0)
+                       continue;
+               found = 0;
+               for(p = s->text; p != nil; p = p->link) {
+                       if(p->as == ctxt->arch->AFUNCDATA && p->from.type == ctxt->arch->D_CONST && p->from.offset == FUNCDATA_ArgsPointerMaps) {
+                               found = 1;
+                               break;
+                       }
+               }
+               if(!found) {
+                       p = appendp(ctxt, s->text);
+                       p->as = ctxt->arch->AFUNCDATA;
+                       p->from.type = ctxt->arch->D_CONST;
+                       p->from.offset = FUNCDATA_ArgsPointerMaps;
+                       p->to.type = ctxt->arch->D_EXTERN;
+                       p->to.sym = linklookup(ctxt, smprint("%s.args_stackmap", s->name), s->version);
+               }
+       }
 
        // Turn functions into machine code images.
        for(s = text; s != nil; s = s->next) {
index 21065b6d6ff6e6a23b68e585bdfb4f5857063883..2961f10f2ab49a55ddaedc17512a01bd767ad963 100644 (file)
@@ -646,15 +646,13 @@ TEXT gosave<>(SB),NOSPLIT,$0
 // Call fn(arg) on the scheduler stack,
 // aligned appropriately for the gcc ABI.
 // See cgocall.c for more details.
-TEXT runtime·asmcgocall(SB),NOSPLIT,$0-8
-       GO_ARGS
+TEXT ·asmcgocall(SB),NOSPLIT,$0-8
        MOVL    fn+0(FP), AX
        MOVL    arg+4(FP), BX
        CALL    asmcgocall<>(SB)
        RET
 
-TEXT runtime·asmcgocall_errno(SB),NOSPLIT,$0-12
-       GO_ARGS
+TEXT ·asmcgocall_errno(SB),NOSPLIT,$0-12
        MOVL    fn+0(FP), AX
        MOVL    arg+4(FP), BX
        CALL    asmcgocall<>(SB)
@@ -714,8 +712,7 @@ TEXT runtime·cgocallback(SB),NOSPLIT,$12-12
 
 // cgocallback_gofunc(FuncVal*, void *frame, uintptr framesize)
 // See cgocall.c for more details.
-TEXT runtime·cgocallback_gofunc(SB),NOSPLIT,$12-12
-       GO_ARGS
+TEXT ·cgocallback_gofunc(SB),NOSPLIT,$12-12
        NO_LOCAL_POINTERS
 
        // If g is nil, Go did not create the current thread.
index da29f61ed84a194b519c251e2ac9f594c63e8d76..44159bb57e6c79444043621ea28a2056a3b8eca5 100644 (file)
@@ -623,15 +623,13 @@ TEXT gosave<>(SB),NOSPLIT,$0
 // Call fn(arg) on the scheduler stack,
 // aligned appropriately for the gcc ABI.
 // See cgocall.c for more details.
-TEXT runtime·asmcgocall(SB),NOSPLIT,$0-16
-       GO_ARGS
+TEXT ·asmcgocall(SB),NOSPLIT,$0-16
        MOVQ    fn+0(FP), AX
        MOVQ    arg+8(FP), BX
        CALL    asmcgocall<>(SB)
        RET
 
-TEXT runtime·asmcgocall_errno(SB),NOSPLIT,$0-20
-       GO_ARGS
+TEXT ·asmcgocall_errno(SB),NOSPLIT,$0-20
        MOVQ    fn+0(FP), AX
        MOVQ    arg+8(FP), BX
        CALL    asmcgocall<>(SB)
@@ -700,8 +698,7 @@ TEXT runtime·cgocallback(SB),NOSPLIT,$24-24
 
 // cgocallback_gofunc(FuncVal*, void *frame, uintptr framesize)
 // See cgocall.c for more details.
-TEXT runtime·cgocallback_gofunc(SB),NOSPLIT,$8-24
-       GO_ARGS
+TEXT ·cgocallback_gofunc(SB),NOSPLIT,$8-24
        NO_LOCAL_POINTERS
 
        // If g is nil, Go did not create the current thread.
index 3e78d91143a69a9d9e8a20a58001aa4853436789..f67f94939b951da0341b5bacd0dffb41dcc53f95 100644 (file)
@@ -480,15 +480,13 @@ TEXT gosave<>(SB),NOSPLIT,$0
 // Call fn(arg) on the scheduler stack,
 // aligned appropriately for the gcc ABI.
 // See cgocall.c for more details.
-TEXT   runtime·asmcgocall(SB),NOSPLIT,$0-8
-       GO_ARGS
+TEXT   ·asmcgocall(SB),NOSPLIT,$0-8
        MOVW    fn+0(FP), R1
        MOVW    arg+4(FP), R0
        BL      asmcgocall<>(SB)
        RET
 
-TEXT runtime·asmcgocall_errno(SB),NOSPLIT,$0-12
-       GO_ARGS
+TEXT ·asmcgocall_errno(SB),NOSPLIT,$0-12
        MOVW    fn+0(FP), R1
        MOVW    arg+4(FP), R0
        BL      asmcgocall<>(SB)
@@ -551,8 +549,7 @@ TEXT runtime·cgocallback(SB),NOSPLIT,$12-12
 
 // cgocallback_gofunc(void (*fn)(void*), void *frame, uintptr framesize)
 // See cgocall.c for more details.
-TEXT   runtime·cgocallback_gofunc(SB),NOSPLIT,$8-12
-       GO_ARGS
+TEXT   ·cgocallback_gofunc(SB),NOSPLIT,$8-12
        NO_LOCAL_POINTERS
        
        // Load m and g from thread-local storage.
index 7d8ddf4378b9d8fefd2236715963a4cf2c920013..7205deb12d21346e88aeb13792a5d9a3b780fcfc 100644 (file)
@@ -17,7 +17,6 @@
 // Trap # in AX, args on stack above caller pc.
 
 TEXT   ·Syscall(SB),NOSPLIT,$0-28
-       GO_ARGS
        CALL    runtime·entersyscall(SB)
        MOVL    4(SP), AX       // syscall entry
        // slide args down on top of system call number
@@ -42,7 +41,6 @@ ok:
        RET
 
 TEXT   ·Syscall6(SB),NOSPLIT,$0-40
-       GO_ARGS
        CALL    runtime·entersyscall(SB)
        MOVL    4(SP), AX       // syscall entry
        // slide args down on top of system call number
@@ -70,7 +68,6 @@ ok6:
        RET
 
 TEXT   ·Syscall9(SB),NOSPLIT,$0-52
-       GO_ARGS
        CALL    runtime·entersyscall(SB)
        MOVL    4(SP), AX       // syscall entry
        // slide args down on top of system call number
@@ -101,7 +98,6 @@ ok9:
        RET
 
 TEXT ·RawSyscall(SB),NOSPLIT,$0-28
-       GO_ARGS
        MOVL    4(SP), AX       // syscall entry
        // slide args down on top of system call number
        LEAL            8(SP), SI
@@ -123,7 +119,6 @@ ok1:
        RET
 
 TEXT   ·RawSyscall6(SB),NOSPLIT,$0-40
-       GO_ARGS
        MOVL    4(SP), AX       // syscall entry
        // slide args down on top of system call number
        LEAL            8(SP), SI
index a3b1bd5346c7c80a8c5228d7362242166f39a6a1..e57199d2b63c9fb4ec252e6aa3167b3cbc64ab8c 100644 (file)
@@ -17,7 +17,6 @@
 // Trap # in AX, args in DI SI DX, return in AX DX
 
 TEXT   ·Syscall(SB),NOSPLIT,$0-56
-       GO_ARGS
        CALL    runtime·entersyscall(SB)
        MOVQ    16(SP), DI
        MOVQ    24(SP), SI
@@ -42,7 +41,6 @@ ok:
        RET
 
 TEXT   ·Syscall6(SB),NOSPLIT,$0-80
-       GO_ARGS
        CALL    runtime·entersyscall(SB)
        MOVQ    16(SP), DI
        MOVQ    24(SP), SI
@@ -67,7 +65,6 @@ ok6:
        RET
 
 TEXT ·RawSyscall(SB),NOSPLIT,$0-56
-       GO_ARGS
        MOVQ    16(SP), DI
        MOVQ    24(SP), SI
        MOVQ    32(SP), DX
@@ -89,7 +86,6 @@ ok1:
        RET
 
 TEXT   ·RawSyscall6(SB),NOSPLIT,$0-80
-       GO_ARGS
        MOVQ    16(SP), DI
        MOVQ    24(SP), SI
        MOVQ    32(SP), DX
index 0d7d6ba1e72d8f9728ad67ccba834c5beee7a467..7012d23c21c26ce553901487dcea1abca17defd9 100644 (file)
@@ -14,7 +14,6 @@
 // Trap # in AX, args on stack above caller pc.
 
 TEXT   ·Syscall(SB),NOSPLIT,$0-32
-       GO_ARGS
        CALL    runtime·entersyscall(SB)
        MOVL    4(SP), AX       // syscall entry
        // slide args down on top of system call number
@@ -39,7 +38,6 @@ ok:
        RET
 
 TEXT   ·Syscall6(SB),NOSPLIT,$0-44
-       GO_ARGS
        CALL    runtime·entersyscall(SB)
        MOVL    4(SP), AX       // syscall entry
        // slide args down on top of system call number
@@ -67,7 +65,6 @@ ok6:
        RET
 
 TEXT   ·Syscall9(SB),NOSPLIT,$0-56
-       GO_ARGS
        CALL    runtime·entersyscall(SB)
        MOVL    4(SP), AX       // syscall entry
        // slide args down on top of system call number
@@ -98,7 +95,6 @@ ok9:
        RET
 
 TEXT ·RawSyscall(SB),NOSPLIT,$0-32
-       GO_ARGS
        MOVL    4(SP), AX       // syscall entry
        // slide args down on top of system call number
        LEAL            8(SP), SI
@@ -120,7 +116,6 @@ ok1:
        RET
 
 TEXT   ·RawSyscall6(SB),NOSPLIT,$0-44
-       GO_ARGS
        MOVL    4(SP), AX       // syscall entry
        // slide args down on top of system call number
        LEAL            8(SP), SI
index b81cf8dda9c4e67a351b134df62c1a349b351368..004d36089a60a6ec84969c32cdd0f30e8e57b63b 100644 (file)
@@ -15,7 +15,6 @@
 // Trap # in AX, args in DI SI DX, return in AX DX
 
 TEXT   ·Syscall(SB),NOSPLIT,$0-64
-       GO_ARGS
        CALL    runtime·entersyscall(SB)
        MOVQ    16(SP), DI
        MOVQ    24(SP), SI
@@ -39,7 +38,6 @@ ok:
        RET
 
 TEXT   ·Syscall6(SB),NOSPLIT,$0-88
-       GO_ARGS
        CALL    runtime·entersyscall(SB)
        MOVQ    16(SP), DI
        MOVQ    24(SP), SI
@@ -63,7 +61,6 @@ ok6:
        RET
 
 TEXT   ·Syscall9(SB),NOSPLIT,$0-112
-       GO_ARGS
        CALL    runtime·entersyscall(SB)
        MOVQ    8(SP), AX
        MOVQ    16(SP), DI
@@ -97,7 +94,6 @@ ok9:
        RET
 
 TEXT ·RawSyscall(SB),NOSPLIT,$0-64
-       GO_ARGS
        MOVQ    16(SP), DI
        MOVQ    24(SP), SI
        MOVQ    32(SP), DX
@@ -118,7 +114,6 @@ ok1:
        RET
 
 TEXT   ·RawSyscall6(SB),NOSPLIT,$0-88
-       GO_ARGS
        MOVQ    16(SP), DI
        MOVQ    24(SP), SI
        MOVQ    32(SP), DX
index ff5f9f4a2add23542353789b1e52fd03fd25fcf7..1400d5fea72445ed21cf96e792f9691eaab07709 100644 (file)
@@ -17,7 +17,6 @@
 // Trap # in AX, args on stack above caller pc.
 
 TEXT   ·Syscall(SB),NOSPLIT,$0-28
-       GO_ARGS
        CALL    runtime·entersyscall(SB)
        MOVL    4(SP), AX       // syscall entry
        // slide args down on top of system call number
@@ -42,7 +41,6 @@ ok:
        RET
 
 TEXT   ·Syscall6(SB),NOSPLIT,$0-40
-       GO_ARGS
        CALL    runtime·entersyscall(SB)
        MOVL    4(SP), AX       // syscall entry
        // slide args down on top of system call number
@@ -70,7 +68,6 @@ ok6:
        RET
 
 TEXT   ·Syscall9(SB),NOSPLIT,$0-52
-       GO_ARGS
        CALL    runtime·entersyscall(SB)
        MOVL    4(SP), AX       // syscall entry
        // slide args down on top of system call number
@@ -101,7 +98,6 @@ ok9:
        RET
 
 TEXT ·RawSyscall(SB),NOSPLIT,$0-28
-       GO_ARGS
        MOVL    4(SP), AX       // syscall entry
        // slide args down on top of system call number
        LEAL            8(SP), SI
@@ -123,7 +119,6 @@ ok1:
        RET
 
 TEXT   ·RawSyscall6(SB),NOSPLIT,$0-40
-       GO_ARGS
        MOVL    4(SP), AX       // syscall entry
        // slide args down on top of system call number
        LEAL            8(SP), SI
index 47ceb9287bc9a90445d351975d635a50e408ba82..c52519098e75659936db5bccf0eb2f5a74e33e62 100644 (file)
@@ -23,7 +23,6 @@
 // Trap # in AX, args in DI SI DX, return in AX DX
 
 TEXT   ·Syscall(SB),NOSPLIT,$0-56
-       GO_ARGS
        CALL    runtime·entersyscall(SB)
        MOVQ    16(SP), DI
        MOVQ    24(SP), SI
@@ -47,7 +46,6 @@ ok:
        RET
 
 TEXT   ·Syscall6(SB),NOSPLIT,$0-80
-       GO_ARGS
        CALL    runtime·entersyscall(SB)
        MOVQ    16(SP), DI
        MOVQ    24(SP), SI
@@ -71,7 +69,6 @@ ok6:
        RET
 
 TEXT   ·Syscall9(SB),NOSPLIT,$0-104
-       GO_ARGS
        CALL    runtime·entersyscall(SB)
        MOVQ    8(SP), AX
        MOVQ    16(SP), DI
@@ -105,7 +102,6 @@ ok9:
        RET
 
 TEXT ·RawSyscall(SB),NOSPLIT,$0-56
-       GO_ARGS
        MOVQ    16(SP), DI
        MOVQ    24(SP), SI
        MOVQ    32(SP), DX
@@ -126,7 +122,6 @@ ok1:
        RET
 
 TEXT   ·RawSyscall6(SB),NOSPLIT,$0-80
-       GO_ARGS
        MOVQ    16(SP), DI
        MOVQ    24(SP), SI
        MOVQ    32(SP), DX
index ed369ce73ef78710b644962750ae2870d0bcb6e0..6b0c182a76ce41b1c36c3324c26fcfb45b870b5f 100644 (file)
@@ -14,7 +14,6 @@
 // func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2, errno uintptr)
 
 TEXT   ·Syscall(SB),NOSPLIT,$0-28
-       GO_ARGS
        BL runtime·entersyscall(SB)
        MOVW 0(FP), R7 // syscall number
        MOVW 4(FP), R0 // a1
@@ -37,7 +36,6 @@ error:
        RET
 
 TEXT   ·Syscall6(SB),NOSPLIT,$0-40
-       GO_ARGS
        BL runtime·entersyscall(SB)
        MOVW 0(FP), R7 // syscall number
        MOVW 4(FP), R0 // a1
@@ -64,7 +62,6 @@ error6:
        RET
 
 TEXT   ·Syscall9(SB),NOSPLIT,$0-52
-       GO_ARGS
        BL runtime·entersyscall(SB)
        MOVW 0(FP), R7 // syscall number
        MOVW 4(FP), R0 // a1
@@ -91,7 +88,6 @@ error9:
        RET
 
 TEXT   ·RawSyscall(SB),NOSPLIT,$0-28
-       GO_ARGS
        MOVW 0(FP), R7 // syscall number
        MOVW 4(FP), R0 // a1
        MOVW 8(FP), R1 // a2
@@ -111,7 +107,6 @@ errorr:
        RET
 
 TEXT   ·RawSyscall6(SB),NOSPLIT,$0-40
-       GO_ARGS
        MOVW 0(FP), R7 // syscall number
        MOVW 4(FP), R0 // a1
        MOVW 8(FP), R1 // a2
index 2ce51822dab59e1123c75187abfe7e72aa54a98e..fa1b3712067fb122905c73c881edb04d73400d02 100644 (file)
@@ -16,7 +16,6 @@
 // Trap # in AX, args in BX CX DX SI DI, return in AX
 
 TEXT   ·Syscall(SB),NOSPLIT,$0-28
-       GO_ARGS
        CALL    runtime·entersyscall(SB)
        MOVL    4(SP), AX       // syscall entry
        MOVL    8(SP), BX
@@ -42,7 +41,6 @@ ok:
 
 // func Syscall6(trap uintptr, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr);
 TEXT   ·Syscall6(SB),NOSPLIT,$0-40
-       GO_ARGS
        CALL    runtime·entersyscall(SB)
        MOVL    4(SP), AX       // syscall entry
        MOVL    8(SP), BX
@@ -69,7 +67,6 @@ ok6:
 
 // func RawSyscall(trap uintptr, a1, a2, a3 uintptr) (r1, r2, err uintptr);
 TEXT ·RawSyscall(SB),NOSPLIT,$0-28
-       GO_ARGS
        MOVL    4(SP), AX       // syscall entry
        MOVL    8(SP), BX
        MOVL    12(SP), CX
@@ -92,7 +89,6 @@ ok1:
 
 // func RawSyscall6(trap uintptr, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr);
 TEXT   ·RawSyscall6(SB),NOSPLIT,$0-40
-       GO_ARGS
        MOVL    4(SP), AX       // syscall entry
        MOVL    8(SP), BX
        MOVL    12(SP), CX
@@ -119,7 +115,6 @@ ok2:
 // func socketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (n int, errno int)
 // Kernel interface gets call sub-number and pointer to a0.
 TEXT ·socketcall(SB),NOSPLIT,$0-36
-       GO_ARGS
        CALL    runtime·entersyscall(SB)
        MOVL    $SYS_SOCKETCALL, AX     // syscall entry
        MOVL    4(SP), BX       // socket call number
@@ -144,7 +139,6 @@ oksock:
 // func rawsocketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (n int, errno int)
 // Kernel interface gets call sub-number and pointer to a0.
 TEXT ·rawsocketcall(SB),NOSPLIT,$0-36
-       GO_ARGS
        MOVL    $SYS_SOCKETCALL, AX     // syscall entry
        MOVL    4(SP), BX       // socket call number
        LEAL            8(SP), CX       // pointer to call arguments
@@ -170,7 +164,6 @@ oksock1:
 // Underlying system call is
 //     llseek(int fd, int offhi, int offlo, int64 *result, int whence)
 TEXT ·seek(SB),NOSPLIT,$0-28
-       GO_ARGS
        CALL    runtime·entersyscall(SB)
        MOVL    $SYS__LLSEEK, AX        // syscall entry
        MOVL    4(SP), BX       // fd
index 0277c506c0b609c12718998a1ae9788ee0aeae50..b3ce2165d6fe187d6b65ca56db4a8980f9a8603d 100644 (file)
@@ -18,7 +18,6 @@
 // would pass 4th arg in CX, not R10.
 
 TEXT   ·Syscall(SB),NOSPLIT,$0-56
-       GO_ARGS
        CALL    runtime·entersyscall(SB)
        MOVQ    16(SP), DI
        MOVQ    24(SP), SI
@@ -44,7 +43,6 @@ ok:
        RET
 
 TEXT ·Syscall6(SB),NOSPLIT,$0-80
-       GO_ARGS
        CALL    runtime·entersyscall(SB)
        MOVQ    16(SP), DI
        MOVQ    24(SP), SI
@@ -70,7 +68,6 @@ ok6:
        RET
 
 TEXT ·RawSyscall(SB),NOSPLIT,$0-56
-       GO_ARGS
        MOVQ    16(SP), DI
        MOVQ    24(SP), SI
        MOVQ    32(SP), DX
@@ -93,7 +90,6 @@ ok1:
        RET
 
 TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
-       GO_ARGS
        MOVQ    16(SP), DI
        MOVQ    24(SP), SI
        MOVQ    32(SP), DX
@@ -116,7 +112,6 @@ ok2:
        RET
 
 TEXT ·gettimeofday(SB),NOSPLIT,$0-16
-       GO_ARGS
        MOVQ    8(SP), DI
        MOVQ    $0, SI
        MOVQ    runtime·__vdso_gettimeofday_sym(SB), AX
index 945101381325012969b195a58ec29e41d40eccd7..3526533019004b409612886ba1fe21ae8fc12a3d 100644 (file)
@@ -14,7 +14,6 @@
 // func Syscall(syscall uintptr, a1, a2, a3 uintptr) (r1, r2, err uintptr);
 
 TEXT   ·Syscall(SB),NOSPLIT,$0-28
-       GO_ARGS
        BL              runtime·entersyscall(SB)
        MOVW    4(SP), R7
        MOVW    8(SP), R0
@@ -46,7 +45,6 @@ ok:
 // func Syscall6(trap uintptr, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr);
 // Actually Syscall5 but the rest of the code expects it to be named Syscall6.
 TEXT   ·Syscall6(SB),NOSPLIT,$0-40
-       GO_ARGS
        BL              runtime·entersyscall(SB)
        MOVW    4(SP), R7       // syscall entry
        MOVW    8(SP), R0
@@ -78,7 +76,6 @@ ok6:
 // func RawSyscall6(trap uintptr, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr);
 // Actually RawSyscall5 but the rest of the code expects it to be named RawSyscall6.
 TEXT   ·RawSyscall6(SB),NOSPLIT,$0-40
-       GO_ARGS
        MOVW    4(SP), R7       // syscall entry
        MOVW    8(SP), R0
        MOVW    12(SP), R1
@@ -111,7 +108,6 @@ ok2:
 // Underlying system call is
 //     llseek(int fd, int offhi, int offlo, int64 *result, int whence)
 TEXT ·seek(SB),NOSPLIT,$0-32
-       GO_ARGS
        BL      runtime·entersyscall(SB)
        MOVW    $SYS__LLSEEK, R7        // syscall entry
        MOVW    4(SP), R0       // fd
@@ -139,7 +135,6 @@ okseek:
 
 // func RawSyscall(trap uintptr, a1, a2, a3 uintptr) (r1, r2, err uintptr);
 TEXT ·RawSyscall(SB),NOSPLIT,$0-28
-       GO_ARGS
        MOVW    4(SP), R7       // syscall entry
        MOVW    8(SP), R0
        MOVW    12(SP), R1
index 5352b7697c10a4ffa00c375380a5ac9b54094982..cb6fb441662061d16ebf5f1639045d0dca4d2c40 100644 (file)
@@ -17,7 +17,6 @@
        MOVL $(0x10000 + ((code)<<5)), AX; JMP AX
 
 TEXT syscall·Syscall(SB),NOSPLIT,$12-28
-       GO_ARGS
        CALL    runtime·entersyscall(SB)
        MOVL    trap+0(FP), AX
        MOVL    a1+4(FP), BX
index 637fafab4578f197e77c5a3e3a46df5d12d4ae7b..72391c431a403d2b93a7d31b54b986397e33e7a8 100644 (file)
@@ -17,7 +17,6 @@
        MOVL $(0x10000 + ((code)<<5)), AX; JMP AX
 
 TEXT syscall·Syscall(SB),NOSPLIT,$0-28
-       GO_ARGS
        CALL    runtime·entersyscall(SB)
        MOVL    trap+0(FP), AX
        MOVL    a1+4(FP), DI
index 3e4479432bbdc6c8b55484009b5a663908626b6b..78e10bf7a2b19836749208121e961df58975c1de 100644 (file)
@@ -17,7 +17,6 @@
        MOVW $(0x10000 + ((code)<<5)), R8; B (R8)
 
 TEXT syscall·Syscall(SB),NOSPLIT,$0-28
-       GO_ARGS
        BL      runtime·entersyscall(SB)
        MOVW    trap+0(FP), R8
        MOVW    a1+4(FP), R0
index 29442ca9ddddd9572521fd3cd4a5c4ec138d7347..a8c4849f23575d26cfdc9ef9f258dbc45f60fdbc 100644 (file)
@@ -17,7 +17,6 @@
 // Trap # in AX, args on stack above caller pc.
 
 TEXT   ·Syscall(SB),NOSPLIT,$0-28
-       GO_ARGS
        CALL    runtime·entersyscall(SB)
        MOVL    4(SP), AX       // syscall entry
        // slide args down on top of system call number
@@ -42,7 +41,6 @@ ok:
        RET
 
 TEXT   ·Syscall6(SB),NOSPLIT,$0-40
-       GO_ARGS
        CALL    runtime·entersyscall(SB)
        MOVL    4(SP), AX       // syscall entry
        // slide args down on top of system call number
@@ -70,7 +68,6 @@ ok6:
        RET
 
 TEXT   ·Syscall9(SB),NOSPLIT,$0-52
-       GO_ARGS
        CALL    runtime·entersyscall(SB)
        MOVL    4(SP), AX       // syscall entry
        // slide args down on top of system call number
@@ -101,7 +98,6 @@ ok9:
        RET
 
 TEXT ·RawSyscall(SB),NOSPLIT,$0-28
-       GO_ARGS
        MOVL    4(SP), AX       // syscall entry
        // slide args down on top of system call number
        LEAL            8(SP), SI
@@ -123,7 +119,6 @@ ok1:
        RET
 
 TEXT   ·RawSyscall6(SB),NOSPLIT,$0-40
-       GO_ARGS
        MOVL    4(SP), AX       // syscall entry
        // slide args down on top of system call number
        LEAL            8(SP), SI
index 6d0f311f411e40a85b0233aef805e537c81b1c5a..b300148f431acb7f3635de49c3bf13e4f2726c06 100644 (file)
@@ -18,7 +18,6 @@
 // Trap # in AX, args in DI SI DX, return in AX DX
 
 TEXT   ·Syscall(SB),NOSPLIT,$0-56
-       GO_ARGS
        CALL    runtime·entersyscall(SB)
        MOVQ    8(SP), AX       // syscall entry
        MOVQ    16(SP), DI
@@ -42,7 +41,6 @@ ok:
        RET
 
 TEXT   ·Syscall6(SB),NOSPLIT,$0-80
-       GO_ARGS
        CALL    runtime·entersyscall(SB)
        MOVQ    8(SP), AX       // syscall entry
        MOVQ    16(SP), DI
@@ -66,7 +64,6 @@ ok6:
        RET
 
 TEXT   ·Syscall9(SB),NOSPLIT,$0-104
-       GO_ARGS
        CALL    runtime·entersyscall(SB)
        MOVQ    8(SP), AX       // syscall entry
        MOVQ    16(SP), DI
@@ -99,7 +96,6 @@ ok9:
        RET
 
 TEXT   ·RawSyscall(SB),NOSPLIT,$0-56
-       GO_ARGS
        MOVQ    16(SP), DI
        MOVQ    24(SP), SI
        MOVQ    32(SP), DX
@@ -120,7 +116,6 @@ ok1:
        RET
 
 TEXT   ·RawSyscall6(SB),NOSPLIT,$0-80
-       GO_ARGS
        MOVQ    16(SP), DI
        MOVQ    24(SP), SI
        MOVQ    32(SP), DX
index c4190ea332a3cd0e33bc08c21f0f999011cf5694..290bb5806194145483278b1825bc4055cf650b6d 100644 (file)
@@ -14,7 +14,6 @@
 // func Syscall9(trap int32, a1, a2, a3, a4, a5, a6, a7, a8, a9 int64) (r1, r2, err int32)
 
 TEXT   ·Syscall(SB),NOSPLIT,$0-28
-       GO_ARGS
        BL runtime·entersyscall(SB)
        MOVW 0(FP), R0 // sigcall num
        MOVW 4(FP), R1 // a1
@@ -37,7 +36,6 @@ error:
        RET
 
 TEXT   ·Syscall6(SB),NOSPLIT,$0-40
-       GO_ARGS
        BL runtime·entersyscall(SB)
        MOVW 0(FP), R0 // sigcall num
        MOVW 4(FP), R1 // a1
@@ -63,7 +61,6 @@ error6:
        RET
 
 TEXT   ·Syscall9(SB),NOSPLIT,$0-52
-       GO_ARGS
        BL runtime·entersyscall(SB)
        MOVW 0(FP), R0 // sigcall num
        MOVW 4(FP), R1 // a1
@@ -89,7 +86,6 @@ error9:
        RET
 
 TEXT   ·RawSyscall(SB),NOSPLIT,$0-28
-       GO_ARGS
        MOVW 0(FP), R0 // sigcall num
        MOVW 4(FP), R1 // a1
        MOVW 8(FP), R2 // a2
@@ -109,7 +105,6 @@ errorr:
        RET
 
 TEXT   ·RawSyscall6(SB),NOSPLIT,$0-40
-       GO_ARGS
        MOVW 0(FP), R0 // sigcall num
        MOVW 4(FP), R1 // a1
        MOVW 8(FP), R2 // a2
index e448a70ca1f767817a6afb51ea050b7c9bee688b..6458bdf0204fb7cd4c75921ebe846644e1d6bb9b 100644 (file)
@@ -17,7 +17,6 @@
 // Trap # in AX, args on stack above caller pc.
 
 TEXT   ·Syscall(SB),NOSPLIT,$0-28
-       GO_ARGS
        CALL    runtime·entersyscall(SB)
        MOVL    4(SP), AX       // syscall entry
        // slide args down on top of system call number
@@ -42,7 +41,6 @@ ok:
        RET
 
 TEXT   ·Syscall6(SB),NOSPLIT,$0-40
-       GO_ARGS
        CALL    runtime·entersyscall(SB)
        MOVL    4(SP), AX       // syscall entry
        // slide args down on top of system call number
@@ -70,7 +68,6 @@ ok6:
        RET
 
 TEXT   ·Syscall9(SB),NOSPLIT,$0-52
-       GO_ARGS
        CALL    runtime·entersyscall(SB)
        MOVL    4(SP), AX       // syscall entry
        // slide args down on top of system call number
@@ -101,7 +98,6 @@ ok9:
        RET
 
 TEXT ·RawSyscall(SB),NOSPLIT,$0-28
-       GO_ARGS
        MOVL    4(SP), AX       // syscall entry
        // slide args down on top of system call number
        LEAL            8(SP), SI
@@ -123,7 +119,6 @@ ok1:
        RET
 
 TEXT   ·RawSyscall6(SB),NOSPLIT,$0-40
-       GO_ARGS
        MOVL    4(SP), AX       // syscall entry
        // slide args down on top of system call number
        LEAL            8(SP), SI
index 654e3df742459d6722588ed193372380fdda8749..1e981fc01d8c7f0fbb2eedb8bbdfee1088f5759d 100644 (file)
@@ -18,7 +18,6 @@
 // Trap # in AX, args in DI SI DX, return in AX DX
 
 TEXT   ·Syscall(SB),NOSPLIT,$0-56
-       GO_ARGS
        CALL    runtime·entersyscall(SB)
        MOVQ    8(SP), AX       // syscall entry
        MOVQ    16(SP), DI
@@ -42,7 +41,6 @@ ok:
        RET
 
 TEXT   ·Syscall6(SB),NOSPLIT,$0-80
-       GO_ARGS
        CALL    runtime·entersyscall(SB)
        MOVQ    8(SP), AX       // syscall entry
        MOVQ    16(SP), DI
@@ -66,7 +64,6 @@ ok6:
        RET
 
 TEXT   ·Syscall9(SB),NOSPLIT,$0-104
-       GO_ARGS
        CALL    runtime·entersyscall(SB)
        MOVQ    8(SP), AX       // syscall entry
        MOVQ    16(SP), DI
@@ -99,7 +96,6 @@ ok9:
        RET
 
 TEXT   ·RawSyscall(SB),NOSPLIT,$0-56
-       GO_ARGS
        MOVQ    16(SP), DI
        MOVQ    24(SP), SI
        MOVQ    32(SP), DX
@@ -120,7 +116,6 @@ ok1:
        RET
 
 TEXT   ·RawSyscall6(SB),NOSPLIT,$0-80
-       GO_ARGS
        MOVQ    16(SP), DI
        MOVQ    24(SP), SI
        MOVQ    32(SP), DX
index 46562de84552af10594c41a312f4da7a0bb263e4..fc13640b930faea0df10cecf8a1ef2c9a6db22d4 100644 (file)
@@ -19,7 +19,6 @@
 
 // Trap # in AX, args on stack above caller pc.
 TEXT   ·Syscall(SB),NOSPLIT,$0-32
-       GO_ARGS
        CALL    runtime·entersyscall(SB)
        MOVL    4(SP), AX       // syscall entry
        // slide args down on top of system call number
@@ -55,7 +54,6 @@ copyresult3:
        RET
 
 TEXT   ·Syscall6(SB),NOSPLIT,$0-44
-       GO_ARGS
        CALL    runtime·entersyscall(SB)
        MOVL    4(SP), AX       // syscall entry
        // slide args down on top of system call number
@@ -94,7 +92,6 @@ copyresult4:
        RET
 
 TEXT ·RawSyscall(SB),NOSPLIT,$0-28
-       GO_ARGS
        MOVL    4(SP), AX       // syscall entry
        // slide args down on top of system call number
        LEAL            8(SP), SI
@@ -110,7 +107,6 @@ TEXT ·RawSyscall(SB),NOSPLIT,$0-28
        RET
 
 TEXT   ·RawSyscall6(SB),NOSPLIT,$0-40
-       GO_ARGS
        MOVL    4(SP), AX       // syscall entry
        // slide args down on top of system call number
        LEAL            8(SP), SI
@@ -132,7 +128,6 @@ TEXT        ·RawSyscall6(SB),NOSPLIT,$0-40
 
 //func seek(placeholder uintptr, fd int, offset int64, whence int) (newoffset int64, err string)
 TEXT ·seek(SB),NOSPLIT,$0-36
-       GO_ARGS
        LEAL    newoffset+24(SP), AX
        MOVL    AX, placeholder+4(SP)
        
@@ -164,7 +159,6 @@ copyresult6:
 //func exit(code int)
 // Import runtime·exit for cleanly exiting.
 TEXT ·exit(SB),NOSPLIT,$4-4
-       GO_ARGS
        NO_LOCAL_POINTERS
        MOVL    code+0(FP), AX
        MOVL    AX, 0(SP)
index 283e28999a940e6f204e31bea5896a57ac853dd8..92419b71726929512f936eec527eac70bd0c8f7d 100644 (file)
@@ -18,7 +18,6 @@
 //func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr)
 
 TEXT   ·Syscall(SB),NOSPLIT,$0-64
-       GO_ARGS
        CALL    runtime·entersyscall(SB)
        MOVQ    8(SP), BP       // syscall entry
        // slide args down on top of system call number
@@ -54,7 +53,6 @@ copyresult3:
        RET
 
 TEXT   ·Syscall6(SB),NOSPLIT,$0-88
-       GO_ARGS
        CALL    runtime·entersyscall(SB)
        MOVQ    8(SP), BP       // syscall entry
        // slide args down on top of system call number
@@ -93,7 +91,6 @@ copyresult4:
        RET
 
 TEXT ·RawSyscall(SB),NOSPLIT,$0-56
-       GO_ARGS
        MOVQ    8(SP), BP       // syscall entry
        // slide args down on top of system call number
        LEAQ            16(SP), SI
@@ -109,7 +106,6 @@ TEXT ·RawSyscall(SB),NOSPLIT,$0-56
        RET
 
 TEXT   ·RawSyscall6(SB),NOSPLIT,$0-80
-       GO_ARGS
        MOVQ    8(SP), BP       // syscall entry
        // slide args down on top of system call number
        LEAQ            16(SP), SI
@@ -131,7 +127,6 @@ TEXT        ·RawSyscall6(SB),NOSPLIT,$0-80
 
 //func seek(placeholder uintptr, fd int, offset int64, whence int) (newoffset int64, err string)
 TEXT ·seek(SB),NOSPLIT,$0-56
-       GO_ARGS
        LEAQ    newoffset+40(SP), AX
        MOVQ    AX, placeholder+8(SP)
        
@@ -162,7 +157,6 @@ copyresult6:
 //func exit(code int)
 // Import runtime·exit for cleanly exiting.
 TEXT ·exit(SB),NOSPLIT,$8-8
-       GO_ARGS
        NO_LOCAL_POINTERS
        MOVQ    code+0(FP), AX
        MOVQ    AX, 0(SP)
index c9d008acd396cc3eaae69353af4bbd9ed525af1a..953a5bf0a61b627745f5c70fe632885eaa77d95c 100644 (file)
@@ -12,6 +12,7 @@ import (
        "bytes"
        "fmt"
        "io/ioutil"
+       "log"
        "os"
        "os/exec"
        "path/filepath"
@@ -190,7 +191,6 @@ func main() {
                return
        }
        defer os.RemoveAll(dir)
-       ioutil.WriteFile(filepath.Join(dir, "main.go"), []byte("package main\nfunc main()\n"), 0666)
 
        tests = strings.Replace(tests, "\t", " ", -1)
        tests = commentRE.ReplaceAllString(tests, "")
@@ -230,6 +230,9 @@ TestCases:
                        continue
                }
 
+               var gobuf bytes.Buffer
+               fmt.Fprintf(&gobuf, "package main\n")
+
                var buf bytes.Buffer
                if goarch == "arm" {
                        fmt.Fprintf(&buf, "#define CALL BL\n#define REGISTER (R0)\n")
@@ -277,11 +280,17 @@ TestCases:
                                body = callRE.ReplaceAllString(body, "CALL ·$1(SB);")
                                body = callindRE.ReplaceAllString(body, "CALL REGISTER;")
 
+                               fmt.Fprintf(&gobuf, "func %s()\n", name)
                                fmt.Fprintf(&buf, "TEXT ·%s(SB)%s,$%d-0\n\t%s\n\tRET\n\n", name, nosplit, size, body)
                        }
                }
 
-               ioutil.WriteFile(filepath.Join(dir, "asm.s"), buf.Bytes(), 0666)
+               if err := ioutil.WriteFile(filepath.Join(dir, "asm.s"), buf.Bytes(), 0666); err != nil {
+                       log.Fatal(err)
+               }
+               if err := ioutil.WriteFile(filepath.Join(dir, "main.go"), gobuf.Bytes(), 0666); err != nil {
+                       log.Fatal(err)
+               }
 
                cmd := exec.Command("go", "build")
                cmd.Dir = dir