mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-08-11 22:43:40 +00:00
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:
committed by
Ron Evans
parent
d435fc868b
commit
0ddcf4af96
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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(),
|
||||
|
||||
Reference in New Issue
Block a user