diff options
Diffstat (limited to 'src/runtime/rt0_linux_386.s')
| -rw-r--r-- | src/runtime/rt0_linux_386.s | 70 |
1 files changed, 6 insertions, 64 deletions
diff --git a/src/runtime/rt0_linux_386.s b/src/runtime/rt0_linux_386.s index 23bfc98b10..325066fc1d 100644 --- a/src/runtime/rt0_linux_386.s +++ b/src/runtime/rt0_linux_386.s @@ -4,72 +4,14 @@ #include "textflag.h" -TEXT _rt0_386_linux(SB),NOSPLIT,$8 - MOVL 8(SP), AX - LEAL 12(SP), BX - MOVL AX, 0(SP) - MOVL BX, 4(SP) - CALL main(SB) - INT $3 +TEXT _rt0_386_linux(SB),NOSPLIT,$0 + JMP _rt0_386(SB) -// When building with -buildmode=c-shared, this symbol is called when the shared -// library is loaded. TEXT _rt0_386_linux_lib(SB),NOSPLIT,$0 - PUSHL BP - MOVL SP, BP - PUSHL BX - PUSHL SI - PUSHL DI - - MOVL 8(BP), AX - MOVL AX, _rt0_386_linux_lib_argc<>(SB) - MOVL 12(BP), AX - MOVL AX, _rt0_386_linux_lib_argv<>(SB) - - // Synchronous initialization. - MOVL $runtime·libpreinit(SB), AX - CALL AX - - SUBL $8, SP - - // Create a new thread to do the runtime initialization. - MOVL _cgo_sys_thread_create(SB), AX - TESTL AX, AX - JZ nocgo - MOVL $_rt0_386_linux_lib_go(SB), BX - MOVL BX, 0(SP) - MOVL $0, 4(SP) - CALL AX - JMP restore - -nocgo: - MOVL $0x800000, 0(SP) // stacksize = 8192KB - MOVL $_rt0_386_linux_lib_go(SB), AX - MOVL AX, 4(SP) // fn - MOVL $runtime·newosproc0(SB), AX - CALL AX - -restore: - ADDL $8, SP - POPL DI - POPL SI - POPL BX - POPL BP - RET - -TEXT _rt0_386_linux_lib_go(SB),NOSPLIT,$12 - MOVL _rt0_386_linux_lib_argc<>(SB), AX - MOVL AX, 0(SP) - MOVL _rt0_386_linux_lib_argv<>(SB), AX - MOVL AX, 4(SP) - MOVL $runtime·rt0_go(SB), AX - CALL AX - RET - -DATA _rt0_386_linux_lib_argc<>(SB)/4, $0 -GLOBL _rt0_386_linux_lib_argc<>(SB),NOPTR, $4 -DATA _rt0_386_linux_lib_argv<>(SB)/4, $0 -GLOBL _rt0_386_linux_lib_argv<>(SB),NOPTR, $4 + JMP _rt0_386_lib(SB) TEXT main(SB),NOSPLIT,$0 + // Remove the return address from the stack. + // rt0_go doesn't expect it to be there. + ADDL $4, SP JMP runtime·rt0_go(SB) |
