riscv: add "target-abi" metadata flag

This flag is necessary in LLVM 15 because it appears that LLVM 15 has
changed the default target ABI from lp64 to lp64d. This results in a
linker failure. Setting the "target-abi" forces the RISC-V backend to
use the intended target ABI.
This commit is contained in:
Ayke van Laethem
2022-10-12 22:05:38 +00:00
committed by Ron Evans
parent d435fc868b
commit 0ddcf4af96
8 changed files with 38 additions and 6 deletions
+13
View File
@@ -41,6 +41,7 @@ type Config struct {
Triple string
CPU string
Features string
ABI string
GOOS string
GOARCH string
CodeModel string
@@ -321,6 +322,18 @@ func CompilePackage(moduleName string, pkg *loader.Package, ssaPkg *ssa.Package,
c.dibuilder.Destroy()
}
// Add the "target-abi" flag, which is necessary on RISC-V otherwise it will
// pick one that doesn't match the -mabi Clang flag.
if c.ABI != "" {
c.mod.AddNamedMetadataOperand("llvm.module.flags",
c.ctx.MDNode([]llvm.Metadata{
llvm.ConstInt(c.ctx.Int32Type(), 1, false).ConstantAsMetadata(), // Error on mismatch
c.ctx.MDString("target-abi"),
c.ctx.MDString(c.ABI),
}),
)
}
return c.mod, c.diagnostics
}
+1
View File
@@ -73,6 +73,7 @@ func TestCompiler(t *testing.T) {
compilerConfig := &Config{
Triple: config.Triple(),
Features: config.Features(),
ABI: config.ABI(),
GOOS: config.GOOS(),
GOARCH: config.GOARCH(),
CodeModel: config.CodeModel(),