Skip to content

Commit 9834bbf

Browse files
committed
support 32-bit arches
1 parent 8080a52 commit 9834bbf

File tree

2 files changed

+64
-12
lines changed

2 files changed

+64
-12
lines changed

cmd/mkcgo/generate.go

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1069,15 +1069,42 @@ func generateAssembly(src *mkcgo.Source, w io.Writer) {
10691069
tags += " && (" + *extratags + ")"
10701070
}
10711071
fmt.Fprintf(w, "//go:build %s\n\n", tags)
1072-
fmt.Fprintf(w, "#include \"textflag.h\"\n \n")
1072+
fmt.Fprintf(w, "#include \"textflag.h\"\n\n")
1073+
1074+
fmt.Fprintf(w, `
1075+
#ifndef GOARCH_amd64
1076+
#ifndef GOARCH_arm64
1077+
#ifndef GOARCH_riscv64
1078+
#ifndef GOARCH_loong64
1079+
#ifndef GOARCH_mips64
1080+
#ifndef GOARCH_mips64le
1081+
#ifndef GOARCH_ppc64
1082+
#ifndef GOARCH_ppc64le
1083+
#ifndef GOARCH_sparc64
1084+
#define _GOPTRSIZE 4
1085+
#endif
1086+
#endif
1087+
#endif
1088+
#endif
1089+
#endif
1090+
#endif
1091+
#endif
1092+
#endif
1093+
#endif
1094+
1095+
1096+
#ifndef _GOPTRSIZE
1097+
#define _GOPTRSIZE 8
1098+
#endif
1099+
`)
10731100

10741101
// Generate trampolines for each function
10751102
for _, fn := range src.Funcs {
10761103
fnName := fn.Name
10771104
fmt.Fprintf(w, "TEXT _mkcgo_%s_trampoline<>(SB),NOSPLIT,$0-0\n", fnName)
10781105
fmt.Fprintf(w, " JMP _mkcgo_%s(SB)\n", fnName)
1079-
fmt.Fprintf(w, "GLOBL ·_mkcgo_%s_trampoline_addr(SB), RODATA, $8\n", fnName)
1080-
fmt.Fprintf(w, "DATA ·_mkcgo_%s_trampoline_addr(SB)/8, $_mkcgo_%s_trampoline<>(SB)\n\n", fnName, fnName)
1106+
fmt.Fprintf(w, "GLOBL ·_mkcgo_%s_trampoline_addr(SB), RODATA, $_GOPTRSIZE\n", fnName)
1107+
fmt.Fprintf(w, "DATA ·_mkcgo_%s_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_%s_trampoline<>(SB)\n\n", fnName, fnName)
10811108
}
10821109
}
10831110

internal/ossl/zdl.s

Lines changed: 34 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,49 @@
33
//go:build !cgo && (unix)
44

55
#include "textflag.h"
6-
6+
7+
8+
#ifndef GOARCH_amd64
9+
#ifndef GOARCH_arm64
10+
#ifndef GOARCH_riscv64
11+
#ifndef GOARCH_loong64
12+
#ifndef GOARCH_mips64
13+
#ifndef GOARCH_mips64le
14+
#ifndef GOARCH_ppc64
15+
#ifndef GOARCH_ppc64le
16+
#ifndef GOARCH_sparc64
17+
#define _GOPTRSIZE 4
18+
#endif
19+
#endif
20+
#endif
21+
#endif
22+
#endif
23+
#endif
24+
#endif
25+
#endif
26+
#endif
27+
28+
29+
#ifndef _GOPTRSIZE
30+
#define _GOPTRSIZE 8
31+
#endif
732
TEXT _mkcgo_dlclose_trampoline<>(SB),NOSPLIT,$0-0
833
JMP _mkcgo_dlclose(SB)
9-
GLOBL ·_mkcgo_dlclose_trampoline_addr(SB), RODATA, $8
10-
DATA ·_mkcgo_dlclose_trampoline_addr(SB)/8, $_mkcgo_dlclose_trampoline<>(SB)
34+
GLOBL ·_mkcgo_dlclose_trampoline_addr(SB), RODATA, $_GOPTRSIZE
35+
DATA ·_mkcgo_dlclose_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_dlclose_trampoline<>(SB)
1136

1237
TEXT _mkcgo_dlerror_trampoline<>(SB),NOSPLIT,$0-0
1338
JMP _mkcgo_dlerror(SB)
14-
GLOBL ·_mkcgo_dlerror_trampoline_addr(SB), RODATA, $8
15-
DATA ·_mkcgo_dlerror_trampoline_addr(SB)/8, $_mkcgo_dlerror_trampoline<>(SB)
39+
GLOBL ·_mkcgo_dlerror_trampoline_addr(SB), RODATA, $_GOPTRSIZE
40+
DATA ·_mkcgo_dlerror_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_dlerror_trampoline<>(SB)
1641

1742
TEXT _mkcgo_dlopen_trampoline<>(SB),NOSPLIT,$0-0
1843
JMP _mkcgo_dlopen(SB)
19-
GLOBL ·_mkcgo_dlopen_trampoline_addr(SB), RODATA, $8
20-
DATA ·_mkcgo_dlopen_trampoline_addr(SB)/8, $_mkcgo_dlopen_trampoline<>(SB)
44+
GLOBL ·_mkcgo_dlopen_trampoline_addr(SB), RODATA, $_GOPTRSIZE
45+
DATA ·_mkcgo_dlopen_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_dlopen_trampoline<>(SB)
2146

2247
TEXT _mkcgo_dlsym_trampoline<>(SB),NOSPLIT,$0-0
2348
JMP _mkcgo_dlsym(SB)
24-
GLOBL ·_mkcgo_dlsym_trampoline_addr(SB), RODATA, $8
25-
DATA ·_mkcgo_dlsym_trampoline_addr(SB)/8, $_mkcgo_dlsym_trampoline<>(SB)
49+
GLOBL ·_mkcgo_dlsym_trampoline_addr(SB), RODATA, $_GOPTRSIZE
50+
DATA ·_mkcgo_dlsym_trampoline_addr(SB)/_GOPTRSIZE, $_mkcgo_dlsym_trampoline<>(SB)
2651

0 commit comments

Comments
 (0)