]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: use NOFRAME on arm64
authorAustin Clements <austin@google.com>
Thu, 25 Jan 2018 17:15:23 +0000 (12:15 -0500)
committerAustin Clements <austin@google.com>
Mon, 12 Feb 2018 21:41:31 +0000 (21:41 +0000)
This replaces frame size -8 with the NOFRAME flag in arm64 assembly.

This was automated with:

sed -i -e 's/\(^TEXT.*[A-Z]\),\( *\)\$-8/\1|NOFRAME,\2$0/' $(find -name '*_arm64.s')

Plus a manual fix to mkduff.go.

The go binary is identical before and after this change.

Change-Id: I0310384d1a584118c41d1cd3a042bb8ea7227efa
Reviewed-on: https://go-review.googlesource.com/92043
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
13 files changed:
misc/cgo/test/issue9400/asm_arm64.s
src/runtime/asm_arm64.s
src/runtime/atomic_arm64.s
src/runtime/cgo/asm_arm64.s
src/runtime/cgo/signal_darwin_arm64.s
src/runtime/duff_arm64.s
src/runtime/memmove_arm64.s
src/runtime/mkduff.go
src/runtime/rt0_android_arm64.s
src/runtime/rt0_darwin_arm64.s
src/runtime/rt0_linux_arm64.s
src/runtime/sys_darwin_arm64.s
src/runtime/sys_linux_arm64.s

index 9bb50816b4474b96f278838a54a9caf239d1b761..2ebbfcca3b607580fbd3c93384ef9a40de172171 100644 (file)
@@ -6,7 +6,7 @@
 
 #include "textflag.h"
 
-TEXT ·RewindAndSetgid(SB),NOSPLIT,$-8-0
+TEXT ·RewindAndSetgid(SB),NOSPLIT|NOFRAME,$0-0
        // Save link register
        MOVD    R30, R9
 
index daf3bf79ccf604b8c1e44080112bf1a53389385c..e41ee7004dd50f631f25a9b7d0885f8b624194d6 100644 (file)
@@ -90,11 +90,11 @@ nocgo:
 DATA   runtime·mainPC+0(SB)/8,$runtime·main(SB)
 GLOBL  runtime·mainPC(SB),RODATA,$8
 
-TEXT runtime·breakpoint(SB),NOSPLIT,$-8-0
+TEXT runtime·breakpoint(SB),NOSPLIT|NOFRAME,$0-0
        BRK
        RET
 
-TEXT runtime·asminit(SB),NOSPLIT,$-8-0
+TEXT runtime·asminit(SB),NOSPLIT|NOFRAME,$0-0
        RET
 
 /*
@@ -103,7 +103,7 @@ TEXT runtime·asminit(SB),NOSPLIT,$-8-0
 
 // void gosave(Gobuf*)
 // save state in Gobuf; setjmp
-TEXT runtime·gosave(SB), NOSPLIT, $-8-8
+TEXT runtime·gosave(SB), NOSPLIT|NOFRAME, $0-8
        MOVD    buf+0(FP), R3
        MOVD    RSP, R0
        MOVD    R0, gobuf_sp(R3)
@@ -143,7 +143,7 @@ TEXT runtime·gogo(SB), NOSPLIT, $24-8
 // Switch to m->g0's stack, call fn(g).
 // Fn must never return. It should gogo(&g->sched)
 // to keep running g.
-TEXT runtime·mcall(SB), NOSPLIT, $-8-8
+TEXT runtime·mcall(SB), NOSPLIT|NOFRAME, $0-8
        // Save caller state in g->sched
        MOVD    RSP, R0
        MOVD    R0, (g_sched+gobuf_sp)(g)
@@ -257,7 +257,7 @@ noswitch:
 // the top of a stack (for example, morestack calling newstack
 // calling the scheduler calling newm calling gc), so we must
 // record an argument size. For that purpose, it has no arguments.
-TEXT runtime·morestack(SB),NOSPLIT,$-8-0
+TEXT runtime·morestack(SB),NOSPLIT|NOFRAME,$0-0
        // Cannot grow scheduler stack (m->g0).
        MOVD    g_m(g), R8
        MOVD    m_g0(R8), R4
@@ -300,7 +300,7 @@ TEXT runtime·morestack(SB),NOSPLIT,$-8-0
        // is still in this function, and not the beginning of the next.
        UNDEF
 
-TEXT runtime·morestack_noctxt(SB),NOSPLIT,$-8-0
+TEXT runtime·morestack_noctxt(SB),NOSPLIT|NOFRAME,$0-0
        MOVW    $0, R26
        B runtime·morestack(SB)
 
@@ -321,7 +321,7 @@ TEXT runtime·morestack_noctxt(SB),NOSPLIT,$-8-0
 TEXT reflect·call(SB), NOSPLIT, $0-0
        B       ·reflectcall(SB)
 
-TEXT ·reflectcall(SB), NOSPLIT, $-8-32
+TEXT ·reflectcall(SB), NOSPLIT|NOFRAME, $0-32
        MOVWU argsize+24(FP), R16
        DISPATCH(runtime·call32, 32)
        DISPATCH(runtime·call64, 64)
@@ -436,16 +436,16 @@ CALLFN(·call536870912, 536870920 )
 CALLFN(·call1073741824, 1073741832 )
 
 // AES hashing not implemented for ARM64, issue #10109.
-TEXT runtime·aeshash(SB),NOSPLIT,$-8-0
+TEXT runtime·aeshash(SB),NOSPLIT|NOFRAME,$0-0
        MOVW    $0, R0
        MOVW    (R0), R1
-TEXT runtime·aeshash32(SB),NOSPLIT,$-8-0
+TEXT runtime·aeshash32(SB),NOSPLIT|NOFRAME,$0-0
        MOVW    $0, R0
        MOVW    (R0), R1
-TEXT runtime·aeshash64(SB),NOSPLIT,$-8-0
+TEXT runtime·aeshash64(SB),NOSPLIT|NOFRAME,$0-0
        MOVW    $0, R0
        MOVW    (R0), R1
-TEXT runtime·aeshashstr(SB),NOSPLIT,$-8-0
+TEXT runtime·aeshashstr(SB),NOSPLIT|NOFRAME,$0-0
        MOVW    $0, R0
        MOVW    (R0), R1
        
@@ -462,7 +462,7 @@ again:
 // 1. grab stored LR for caller
 // 2. sub 4 bytes to get back to BL deferreturn
 // 3. BR to fn
-TEXT runtime·jmpdefer(SB), NOSPLIT, $-8-16
+TEXT runtime·jmpdefer(SB), NOSPLIT|NOFRAME, $0-16
        MOVD    0(RSP), R0
        SUB     $4, R0
        MOVD    R0, LR
@@ -475,7 +475,7 @@ TEXT runtime·jmpdefer(SB), NOSPLIT, $-8-16
        B       (R3)
 
 // Save state of caller into g->sched. Smashes R0.
-TEXT gosave<>(SB),NOSPLIT,$-8
+TEXT gosave<>(SB),NOSPLIT|NOFRAME,$0
        MOVD    LR, (g_sched+gobuf_pc)(g)
        MOVD RSP, R0
        MOVD    R0, (g_sched+gobuf_sp)(g)
@@ -703,17 +703,17 @@ TEXT setg_gcc<>(SB),NOSPLIT,$8
        MOVD    savedR27-8(SP), R27
        RET
 
-TEXT runtime·getcallerpc(SB),NOSPLIT,$-8-8
+TEXT runtime·getcallerpc(SB),NOSPLIT|NOFRAME,$0-8
        MOVD    0(RSP), R0              // LR saved by caller
        MOVD    R0, ret+0(FP)
        RET
 
-TEXT runtime·abort(SB),NOSPLIT,$-8-0
+TEXT runtime·abort(SB),NOSPLIT|NOFRAME,$0-0
        B       (ZR)
        UNDEF
 
 // memequal(a, b unsafe.Pointer, size uintptr) bool
-TEXT runtime·memequal(SB),NOSPLIT,$-8-25
+TEXT runtime·memequal(SB),NOSPLIT|NOFRAME,$0-25
        MOVD    size+16(FP), R1
        // short path to handle 0-byte case
        CBZ     R1, equal
@@ -745,7 +745,7 @@ eq:
        MOVB    R3, ret+16(FP)
        RET
 
-TEXT runtime·cmpstring(SB),NOSPLIT,$-8-40
+TEXT runtime·cmpstring(SB),NOSPLIT|NOFRAME,$0-40
        MOVD    s1_base+0(FP), R2
        MOVD    s1_len+8(FP), R0
        MOVD    s2_base+16(FP), R3
@@ -753,7 +753,7 @@ TEXT runtime·cmpstring(SB),NOSPLIT,$-8-40
        ADD     $40, RSP, R7
        B       runtime·cmpbody<>(SB)
 
-TEXT bytes·Compare(SB),NOSPLIT,$-8-56
+TEXT bytes·Compare(SB),NOSPLIT|NOFRAME,$0-56
        MOVD    s1+0(FP), R2
        MOVD    s1+8(FP), R0
        MOVD    s2+24(FP), R3
@@ -770,7 +770,7 @@ TEXT bytes·Compare(SB),NOSPLIT,$-8-56
 //
 // On exit:
 // R4, R5, and R6 are clobbered
-TEXT runtime·cmpbody<>(SB),NOSPLIT,$-8-0
+TEXT runtime·cmpbody<>(SB),NOSPLIT|NOFRAME,$0-0
        CMP     R2, R3
        BEQ     samebytes // same starting pointers; compare lengths
        CMP     R0, R1
@@ -1033,7 +1033,7 @@ TEXT runtime·return0(SB), NOSPLIT, $0
 
 // The top-most function running on a goroutine
 // returns to goexit+PCQuantum.
-TEXT runtime·goexit(SB),NOSPLIT,$-8-0
+TEXT runtime·goexit(SB),NOSPLIT|NOFRAME,$0-0
        MOVD    R0, R0  // NOP
        BL      runtime·goexit1(SB)    // does not return
 
index 4704aa6ffcb109bb4038e5acf89c08508f1194c0..21b4d8ccd5951c9b0452a848ad0616b3683715d5 100644 (file)
@@ -4,6 +4,6 @@
 
 #include "textflag.h"
 
-TEXT ·publicationBarrier(SB),NOSPLIT,$-8-0
+TEXT ·publicationBarrier(SB),NOSPLIT|NOFRAME,$0-0
        DMB     $0xe    // DMB ST
        RET
index 925e9302482cfcd25ff4716be8f175618e657bfd..ce56f9b1c7f77f9f0da543a63f9ac34a1cfc2020 100644 (file)
@@ -7,7 +7,7 @@
 // Called by C code generated by cmd/cgo.
 // func crosscall2(fn func(a unsafe.Pointer, n int32, ctxt uintptr), a unsafe.Pointer, n int32, ctxt uintptr)
 // Saves C callee-saved registers and calls fn with three arguments.
-TEXT crosscall2(SB),NOSPLIT,$-8
+TEXT crosscall2(SB),NOSPLIT|NOFRAME,$0
        /*
         * We still need to save all callee save register as before, and then
         *  push 3 args for fn (R1, R2, R3).
index 17781cf496aa7476a57a491571add7b8ef99fe2b..60443b64c8d208b241de9a1879b94a055e6f5004 100644 (file)
@@ -10,7 +10,7 @@
 //
 //     R1 - LR at moment of fault
 //     R2 - PC at moment of fault
-TEXT xx_cgo_panicmem(SB),NOSPLIT,$-8
+TEXT xx_cgo_panicmem(SB),NOSPLIT|NOFRAME,$0
        // If in external C code, we need to load the g register.
        BL  runtime·load_g(SB)
        CMP $0, g
index 21619ff910e1990dfff6344c180c8346d2670c75..54e6b9967ee358fdf1d89c853dddd4e857ac0d2c 100644 (file)
@@ -4,7 +4,7 @@
 
 #include "textflag.h"
 
-TEXT runtime·duffzero(SB), NOSPLIT, $-8-0
+TEXT runtime·duffzero(SB), NOSPLIT|NOFRAME, $0-0
        STP.P   (ZR, ZR), 16(R16)
        STP.P   (ZR, ZR), 16(R16)
        STP.P   (ZR, ZR), 16(R16)
index 00813d4ef934e4ba45834918965fbfef9cd263c9..42bdffc2691e9de840ca56618beeae67977527b4 100644 (file)
@@ -5,7 +5,7 @@
 #include "textflag.h"
 
 // void runtime·memmove(void*, void*, uintptr)
-TEXT runtime·memmove(SB), NOSPLIT, $-8-24
+TEXT runtime·memmove(SB), NOSPLIT|NOFRAME, $0-24
        MOVD    to+0(FP), R3
        MOVD    from+8(FP), R4
        MOVD    n+16(FP), R5
index fb7cbc28fd6b1d2313dcb3e8792969d00b894987..dc7262f7b076a2dff3add77da8a1284b6daffcc4 100644 (file)
@@ -153,7 +153,7 @@ func zeroARM64(w io.Writer) {
        // ZR: always zero
        // R16 (aka REGRT1): ptr to memory to be zeroed
        // On return, R16 points to the last zeroed dword.
-       fmt.Fprintln(w, "TEXT runtime·duffzero(SB), NOSPLIT, $-8-0")
+       fmt.Fprintln(w, "TEXT runtime·duffzero(SB), NOSPLIT|NOFRAME, $0-0")
        for i := 0; i < 63; i++ {
                fmt.Fprintln(w, "\tSTP.P\t(ZR, ZR), 16(R16)")
        }
index 9378213daca4b7a412bd3e247d305b57aabdde34..4135bf07d5f15cd7a46d558600fcb42c81eccdc5 100644 (file)
@@ -4,13 +4,13 @@
 
 #include "textflag.h"
 
-TEXT _rt0_arm64_android(SB),NOSPLIT,$-8
+TEXT _rt0_arm64_android(SB),NOSPLIT|NOFRAME,$0
        MOVD    $_rt0_arm64_linux(SB), R4
        B       (R4)
 
 // When building with -buildmode=c-shared, this symbol is called when the shared
 // library is loaded.
-TEXT _rt0_arm64_android_lib(SB),NOSPLIT,$-8
+TEXT _rt0_arm64_android_lib(SB),NOSPLIT|NOFRAME,$0
        MOVW    $1, R0                            // argc
        MOVD    $_rt0_arm64_android_argv(SB), R1  // **argv
        MOVD    $_rt0_arm64_linux_lib(SB), R4
index f607683d2c5efcf010030c161e263ad167d80d36..960de06044c27eff34f0494d2deff5bc6dafe3e3 100644 (file)
@@ -6,7 +6,7 @@
 
 // No need for _rt0_arm64_darwin as darwin/arm64 only
 // supports external linking.
-TEXT _rt0_arm64_darwin(SB),NOSPLIT,$-8
+TEXT _rt0_arm64_darwin(SB),NOSPLIT|NOFRAME,$0
        MOVD    $42, R0
        MOVD    $1, R16 // SYS_exit
        SVC     $0x80
@@ -80,7 +80,7 @@ GLOBL _rt0_arm64_darwin_lib_argc<>(SB),NOPTR, $8
 DATA  _rt0_arm64_darwin_lib_argv<>(SB)/8, $0
 GLOBL _rt0_arm64_darwin_lib_argv<>(SB),NOPTR, $8
 
-TEXT main(SB),NOSPLIT,$-8
+TEXT main(SB),NOSPLIT|NOFRAME,$0
        MOVD    $runtime·rt0_go(SB), R2
        BL      (R2)
 exit:
index d01d415945a8c27d766a6e06a608280fd876d8a4..e81e598d3ac060168dc99f0421de753e28bf23c2 100644 (file)
@@ -4,7 +4,7 @@
 
 #include "textflag.h"
 
-TEXT _rt0_arm64_linux(SB),NOSPLIT,$-8
+TEXT _rt0_arm64_linux(SB),NOSPLIT|NOFRAME,$0
        MOVD    0(RSP), R0      // argc
        ADD     $8, RSP, R1     // argv
        BL      main(SB)
@@ -88,7 +88,7 @@ DATA _rt0_arm64_linux_lib_argv<>(SB)/8, $0
 GLOBL _rt0_arm64_linux_lib_argv<>(SB),NOPTR, $8
 
 
-TEXT main(SB),NOSPLIT,$-8
+TEXT main(SB),NOSPLIT|NOFRAME,$0
        MOVD    $runtime·rt0_go(SB), R2
        BL      (R2)
 exit:
index 5663af512d4c1275e0b4104f7001fdd7c50504f7..831e6dd2fcc404f28b0f7c8eeba689920b2e8e9e 100644 (file)
@@ -79,7 +79,7 @@ TEXT runtime·read(SB),NOSPLIT,$0
        MOVW    R0, ret+24(FP)
        RET
 
-TEXT runtime·exit(SB),NOSPLIT,$-8
+TEXT runtime·exit(SB),NOSPLIT|NOFRAME,$0
        MOVW    code+0(FP), R0
        MOVW    $SYS_exit, R16
        SVC     $0x80
index 758e68575bb7d93cafd0f2d0020e5ac1f20811b6..d8efc50072eacf371694735ed56d1a2cfa57e9a4 100644 (file)
 #define SYS_connect            203
 #define SYS_brk                        214
 
-TEXT runtime·exit(SB),NOSPLIT,$-8-4
+TEXT runtime·exit(SB),NOSPLIT|NOFRAME,$0-4
        MOVW    code+0(FP), R0
        MOVD    $SYS_exit_group, R8
        SVC
        RET
 
 // func exitThread(wait *uint32)
-TEXT runtime·exitThread(SB),NOSPLIT,$-8-8
+TEXT runtime·exitThread(SB),NOSPLIT|NOFRAME,$0-8
        MOVD    wait+0(FP), R0
        // We're done using the stack.
        MOVW    $0, R1
@@ -65,7 +65,7 @@ TEXT runtime·exitThread(SB),NOSPLIT,$-8-8
        SVC
        JMP     0(PC)
 
-TEXT runtime·open(SB),NOSPLIT,$-8-20
+TEXT runtime·open(SB),NOSPLIT|NOFRAME,$0-20
        MOVD    $AT_FDCWD, R0
        MOVD    name+0(FP), R1
        MOVW    mode+8(FP), R2
@@ -79,7 +79,7 @@ done:
        MOVW    R0, ret+16(FP)
        RET
 
-TEXT runtime·closefd(SB),NOSPLIT,$-8-12
+TEXT runtime·closefd(SB),NOSPLIT|NOFRAME,$0-12
        MOVW    fd+0(FP), R0
        MOVD    $SYS_close, R8
        SVC
@@ -90,7 +90,7 @@ done:
        MOVW    R0, ret+8(FP)
        RET
 
-TEXT runtime·write(SB),NOSPLIT,$-8-28
+TEXT runtime·write(SB),NOSPLIT|NOFRAME,$0-28
        MOVD    fd+0(FP), R0
        MOVD    p+8(FP), R1
        MOVW    n+16(FP), R2
@@ -103,7 +103,7 @@ done:
        MOVW    R0, ret+24(FP)
        RET
 
-TEXT runtime·read(SB),NOSPLIT,$-8-28
+TEXT runtime·read(SB),NOSPLIT|NOFRAME,$0-28
        MOVW    fd+0(FP), R0
        MOVD    p+8(FP), R1
        MOVW    n+16(FP), R2
@@ -116,7 +116,7 @@ done:
        MOVW    R0, ret+24(FP)
        RET
 
-TEXT runtime·getrlimit(SB),NOSPLIT,$-8-20
+TEXT runtime·getrlimit(SB),NOSPLIT|NOFRAME,$0-20
        MOVW    kind+0(FP), R0
        MOVD    limit+8(FP), R1
        MOVD    $SYS_getrlimit, R8
@@ -153,7 +153,7 @@ TEXT runtime·gettid(SB),NOSPLIT,$0-4
        MOVW    R0, ret+0(FP)
        RET
 
-TEXT runtime·raise(SB),NOSPLIT,$-8
+TEXT runtime·raise(SB),NOSPLIT|NOFRAME,$0
        MOVD    $SYS_gettid, R8
        SVC
        MOVW    R0, R0  // arg 1 tid
@@ -162,7 +162,7 @@ TEXT runtime·raise(SB),NOSPLIT,$-8
        SVC
        RET
 
-TEXT runtime·raiseproc(SB),NOSPLIT,$-8
+TEXT runtime·raiseproc(SB),NOSPLIT|NOFRAME,$0
        MOVD    $SYS_getpid, R8
        SVC
        MOVW    R0, R0          // arg 1 pid
@@ -171,7 +171,7 @@ TEXT runtime·raiseproc(SB),NOSPLIT,$-8
        SVC
        RET
 
-TEXT runtime·setitimer(SB),NOSPLIT,$-8-24
+TEXT runtime·setitimer(SB),NOSPLIT|NOFRAME,$0-24
        MOVW    mode+0(FP), R0
        MOVD    new+8(FP), R1
        MOVD    old+16(FP), R2
@@ -179,7 +179,7 @@ TEXT runtime·setitimer(SB),NOSPLIT,$-8-24
        SVC
        RET
 
-TEXT runtime·mincore(SB),NOSPLIT,$-8-28
+TEXT runtime·mincore(SB),NOSPLIT|NOFRAME,$0-28
        MOVD    addr+0(FP), R0
        MOVD    n+8(FP), R1
        MOVD    dst+16(FP), R2
@@ -215,7 +215,7 @@ TEXT runtime·nanotime(SB),NOSPLIT,$24-8
        MOVD    R3, ret+0(FP)
        RET
 
-TEXT runtime·rtsigprocmask(SB),NOSPLIT,$-8-28
+TEXT runtime·rtsigprocmask(SB),NOSPLIT|NOFRAME,$0-28
        MOVW    how+0(FP), R0
        MOVD    new+8(FP), R1
        MOVD    old+16(FP), R2
@@ -229,7 +229,7 @@ TEXT runtime·rtsigprocmask(SB),NOSPLIT,$-8-28
 done:
        RET
 
-TEXT runtime·rt_sigaction(SB),NOSPLIT,$-8-36
+TEXT runtime·rt_sigaction(SB),NOSPLIT|NOFRAME,$0-36
        MOVD    sig+0(FP), R0
        MOVD    new+8(FP), R1
        MOVD    old+16(FP), R2
@@ -267,7 +267,7 @@ TEXT runtime·cgoSigtramp(SB),NOSPLIT,$0
        MOVD    $runtime·sigtramp(SB), R3
        B       (R3)
 
-TEXT runtime·mmap(SB),NOSPLIT,$-8
+TEXT runtime·mmap(SB),NOSPLIT|NOFRAME,$0
        MOVD    addr+0(FP), R0
        MOVD    n+8(FP), R1
        MOVW    prot+16(FP), R2
@@ -288,7 +288,7 @@ ok:
        MOVD    $0, err+40(FP)
        RET
 
-TEXT runtime·munmap(SB),NOSPLIT,$-8
+TEXT runtime·munmap(SB),NOSPLIT|NOFRAME,$0
        MOVD    addr+0(FP), R0
        MOVD    n+8(FP), R1
        MOVD    $SYS_munmap, R8
@@ -299,7 +299,7 @@ TEXT runtime·munmap(SB),NOSPLIT,$-8
 cool:
        RET
 
-TEXT runtime·madvise(SB),NOSPLIT,$-8
+TEXT runtime·madvise(SB),NOSPLIT|NOFRAME,$0
        MOVD    addr+0(FP), R0
        MOVD    n+8(FP), R1
        MOVW    flags+16(FP), R2
@@ -310,7 +310,7 @@ TEXT runtime·madvise(SB),NOSPLIT,$-8
 
 // int64 futex(int32 *uaddr, int32 op, int32 val,
 //     struct timespec *timeout, int32 *uaddr2, int32 val2);
-TEXT runtime·futex(SB),NOSPLIT,$-8
+TEXT runtime·futex(SB),NOSPLIT|NOFRAME,$0
        MOVD    addr+0(FP), R0
        MOVW    op+8(FP), R1
        MOVW    val+12(FP), R2
@@ -323,7 +323,7 @@ TEXT runtime·futex(SB),NOSPLIT,$-8
        RET
 
 // int64 clone(int32 flags, void *stk, M *mp, G *gp, void (*fn)(void));
-TEXT runtime·clone(SB),NOSPLIT,$-8
+TEXT runtime·clone(SB),NOSPLIT|NOFRAME,$0
        MOVW    flags+0(FP), R0
        MOVD    stk+8(FP), R1
 
@@ -391,7 +391,7 @@ again:
        SVC
        B       again   // keep exiting
 
-TEXT runtime·sigaltstack(SB),NOSPLIT,$-8
+TEXT runtime·sigaltstack(SB),NOSPLIT|NOFRAME,$0
        MOVD    new+0(FP), R0
        MOVD    old+8(FP), R1
        MOVD    $SYS_sigaltstack, R8
@@ -403,12 +403,12 @@ TEXT runtime·sigaltstack(SB),NOSPLIT,$-8
 ok:
        RET
 
-TEXT runtime·osyield(SB),NOSPLIT,$-8
+TEXT runtime·osyield(SB),NOSPLIT|NOFRAME,$0
        MOVD    $SYS_sched_yield, R8
        SVC
        RET
 
-TEXT runtime·sched_getaffinity(SB),NOSPLIT,$-8
+TEXT runtime·sched_getaffinity(SB),NOSPLIT|NOFRAME,$0
        MOVD    pid+0(FP), R0
        MOVD    len+8(FP), R1
        MOVD    buf+16(FP), R2
@@ -418,7 +418,7 @@ TEXT runtime·sched_getaffinity(SB),NOSPLIT,$-8
        RET
 
 // int32 runtime·epollcreate(int32 size);
-TEXT runtime·epollcreate(SB),NOSPLIT,$-8
+TEXT runtime·epollcreate(SB),NOSPLIT|NOFRAME,$0
        MOVW    $0, R0
        MOVD    $SYS_epoll_create1, R8
        SVC
@@ -426,7 +426,7 @@ TEXT runtime·epollcreate(SB),NOSPLIT,$-8
        RET
 
 // int32 runtime·epollcreate1(int32 flags);
-TEXT runtime·epollcreate1(SB),NOSPLIT,$-8
+TEXT runtime·epollcreate1(SB),NOSPLIT|NOFRAME,$0
        MOVW    flags+0(FP), R0
        MOVD    $SYS_epoll_create1, R8
        SVC
@@ -434,7 +434,7 @@ TEXT runtime·epollcreate1(SB),NOSPLIT,$-8
        RET
 
 // func epollctl(epfd, op, fd int32, ev *epollEvent) int
-TEXT runtime·epollctl(SB),NOSPLIT,$-8
+TEXT runtime·epollctl(SB),NOSPLIT|NOFRAME,$0
        MOVW    epfd+0(FP), R0
        MOVW    op+4(FP), R1
        MOVW    fd+8(FP), R2
@@ -445,7 +445,7 @@ TEXT runtime·epollctl(SB),NOSPLIT,$-8
        RET
 
 // int32 runtime·epollwait(int32 epfd, EpollEvent *ev, int32 nev, int32 timeout);
-TEXT runtime·epollwait(SB),NOSPLIT,$-8
+TEXT runtime·epollwait(SB),NOSPLIT|NOFRAME,$0
        MOVW    epfd+0(FP), R0
        MOVD    ev+8(FP), R1
        MOVW    nev+16(FP), R2
@@ -457,7 +457,7 @@ TEXT runtime·epollwait(SB),NOSPLIT,$-8
        RET
 
 // void runtime·closeonexec(int32 fd);
-TEXT runtime·closeonexec(SB),NOSPLIT,$-8
+TEXT runtime·closeonexec(SB),NOSPLIT|NOFRAME,$0
        MOVW    fd+0(FP), R0  // fd
        MOVD    $2, R1  // F_SETFD
        MOVD    $1, R2  // FD_CLOEXEC