// When building with -buildmode=c-shared, this symbol is called when the shared
// library is loaded.
-TEXT _rt0_386_linux_lib(SB),NOSPLIT,$12
- MOVL 16(SP), AX
+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 20(SP), AX
+ MOVL 12(BP), AX
MOVL AX, _rt0_386_linux_lib_argv<>(SB)
+ SUBL $8, SP
+
// Create a new thread to do the runtime initialization.
MOVL _cgo_sys_thread_create(SB), AX
TESTL AX, AX
MOVL BX, 0(SP)
MOVL $0, 4(SP)
CALL AX
- RET
+ JMP restore
nocgo:
MOVL $0x800000, 0(SP) // stacksize = 8192KB
MOVL $0, 8(SP) // fnarg
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
// When building with -buildmode=c-shared, this symbol is called when the shared
// library is loaded.
-TEXT _rt0_amd64_linux_lib(SB),NOSPLIT,$40
+TEXT _rt0_amd64_linux_lib(SB),NOSPLIT,$0x58
+ MOVQ BX, 0x18(SP)
+ MOVQ BP, 0x20(SP)
+ MOVQ R12, 0x28(SP)
+ MOVQ R13, 0x30(SP)
+ MOVQ R14, 0x38(SP)
+ MOVQ R15, 0x40(SP)
+
MOVQ DI, _rt0_amd64_linux_lib_argc<>(SB)
MOVQ SI, _rt0_amd64_linux_lib_argv<>(SB)
MOVQ $_rt0_amd64_linux_lib_go(SB), DI
MOVQ $0, SI
CALL AX
- RET
+ JMP restore
+
nocgo:
MOVQ $8388608, 0(SP) // stacksize
MOVQ $_rt0_amd64_linux_lib_go(SB), AX
MOVQ AX, 8(SP) // fn
- MOVQ $0, 16(SP) // fnarg
+ MOVQ $0, 0x10(SP) // fnarg
MOVQ $runtime·newosproc0(SB), AX
CALL AX
+
+restore:
+ MOVQ 0x18(SP), BX
+ MOVQ 0x20(SP), BP
+ MOVQ 0x28(SP), R12
+ MOVQ 0x30(SP), R13
+ MOVQ 0x38(SP), R14
+ MOVQ 0x40(SP), R15
RET
TEXT _rt0_amd64_linux_lib_go(SB),NOSPLIT,$0