diff --git a/builder/builtins.go b/builder/builtins.go index f135c83dd..1feeb5d5a 100644 --- a/builder/builtins.go +++ b/builder/builtins.go @@ -207,6 +207,16 @@ var windowsI386Builtins = []string{ "i386/chkstk.S", // also _alloca } +// Builtins needed specifically for windows/amd64. +var windowsAMD64Builtins = []string{ + "x86_64/chkstk.S", +} + +// Builtins needed specifically for windows/arm64. +var windowsARM64Builtins = []string{ + "aarch64/chkstk.S", +} + // libCompilerRT is a library with symbols required by programs compiled with // LLVM. These symbols are for operations that cannot be emitted with a single // instruction or a short sequence of instructions for that target. @@ -233,13 +243,28 @@ var libCompilerRT = Library{ builtins = append(builtins, aeabiBuiltins...) case "avr": builtins = append(builtins, avrBuiltins...) - case "x86_64", "aarch64", "riscv64": // any 64-bit arch + case "x86_64": + builtins = append(builtins, genericBuiltins128...) + if isWindowsTriple(target) { + builtins = append(builtins, windowsAMD64Builtins...) + } + case "aarch64": + builtins = append(builtins, genericBuiltins128...) + if isWindowsTriple(target) { + builtins = append(builtins, windowsARM64Builtins...) + } + case "riscv64": builtins = append(builtins, genericBuiltins128...) case "i386": - if strings.Split(target, "-")[2] == "windows" { + if isWindowsTriple(target) { builtins = append(builtins, windowsI386Builtins...) } } return builtins, nil }, } + +func isWindowsTriple(target string) bool { + parts := strings.Split(target, "-") + return len(parts) > 2 && parts[2] == "windows" +} diff --git a/compileopts/target.go b/compileopts/target.go index 42e373487..92b011b83 100644 --- a/compileopts/target.go +++ b/compileopts/target.go @@ -475,10 +475,12 @@ func defaultTarget(options *Options) (*TargetSpec, error) { "-m", "i386pep", "--image-base", "0x400000", ) + spec.RTLib = "compiler-rt" case "arm64": spec.LDFlags = append(spec.LDFlags, "-m", "arm64pe", ) + spec.RTLib = "compiler-rt" } spec.LDFlags = append(spec.LDFlags, "-Bdynamic",