Skip to content

Commit 47ccf96

Browse files
committed
runtime: darwin/386 entrypoint for c-archive
Change-Id: Ic22597b5e2824cffe9598cb9b506af3426c285fd Reviewed-on: https://go-review.googlesource.com/12412 Run-TryBot: David Crawshaw <[email protected]> TryBot-Result: Gobot Gobot <[email protected]> Reviewed-by: Ian Lance Taylor <[email protected]>
1 parent 2c91114 commit 47ccf96

File tree

3 files changed

+57
-2
lines changed

3 files changed

+57
-2
lines changed

src/cmd/dist/test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -573,7 +573,7 @@ func (t *tester) supportedBuildmode(mode string) bool {
573573
return false
574574
}
575575
switch pair {
576-
case "darwin-amd64", "darwin-arm", "darwin-arm64",
576+
case "darwin-386", "darwin-amd64", "darwin-arm", "darwin-arm64",
577577
"linux-amd64", "linux-386":
578578
return true
579579
}

src/cmd/link/internal/ld/macho.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -444,7 +444,7 @@ func Asmbmacho() {
444444
ms = newMachoSeg("", 40)
445445

446446
ms.fileoffset = Segtext.Fileoff
447-
if Thearch.Thechar == '5' {
447+
if Thearch.Thechar == '5' || Buildmode == BuildmodeCArchive {
448448
ms.filesize = Segdata.Fileoff + Segdata.Filelen - Segtext.Fileoff
449449
} else {
450450
ms.filesize = Segdwarf.Fileoff + Segdwarf.Filelen - Segtext.Fileoff

src/runtime/rt0_darwin_386.s

+55
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,60 @@ TEXT _rt0_386_darwin(SB),NOSPLIT,$8
1212
CALL main(SB)
1313
INT $3
1414

15+
// With -buildmode=c-archive, this symbol is called from a global constructor.
16+
TEXT _rt0_386_darwin_lib(SB),NOSPLIT,$0
17+
PUSHL BP
18+
MOVL SP, BP
19+
PUSHL BX
20+
PUSHL SI
21+
PUSHL DI
22+
23+
MOVL 8(BP), AX
24+
MOVL AX, _rt0_386_darwin_lib_argc<>(SB)
25+
MOVL 12(BP), AX
26+
MOVL AX, _rt0_386_darwin_lib_argv<>(SB)
27+
28+
SUBL $12, SP
29+
30+
// Create a new thread to do the runtime initialization and return.
31+
MOVL _cgo_sys_thread_create(SB), AX
32+
TESTL AX, AX
33+
JZ nocgo
34+
MOVL $_rt0_386_darwin_lib_go(SB), BX
35+
MOVL BX, 0(SP)
36+
MOVL $0, 4(SP)
37+
CALL AX
38+
JMP restore
39+
40+
nocgo:
41+
MOVL $0x800000, 0(SP) // stacksize = 8192KB
42+
MOVL $_rt0_386_darwin_lib_go(SB), AX
43+
MOVL AX, 4(SP) // fn
44+
MOVL $0, 8(SP) // fnarg
45+
MOVL $runtime·newosproc0(SB), AX
46+
CALL AX
47+
48+
restore:
49+
ADDL $12, SP
50+
POPL DI
51+
POPL SI
52+
POPL BX
53+
POPL BP
54+
RET
55+
56+
TEXT _rt0_386_darwin_lib_go(SB),NOSPLIT,$12
57+
MOVL _rt0_386_darwin_lib_argc<>(SB), AX
58+
MOVL AX, 0(SP)
59+
MOVL _rt0_386_darwin_lib_argv<>(SB), AX
60+
MOVL AX, 4(SP)
61+
MOVL $runtime·rt0_go(SB), AX
62+
CALL AX
63+
RET
64+
65+
DATA _rt0_386_darwin_lib_argc<>(SB)/4, $0
66+
GLOBL _rt0_386_darwin_lib_argc<>(SB),NOPTR, $4
67+
DATA _rt0_386_darwin_lib_argv<>(SB)/4, $0
68+
GLOBL _rt0_386_darwin_lib_argv<>(SB),NOPTR, $4
69+
1570
TEXT main(SB),NOSPLIT,$0
1671
JMP runtime·rt0_go(SB)

0 commit comments

Comments
 (0)