mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-08-16 18:53:29 +00:00
compiler: emit correct alignment in debug info for global variables
Previously we were using a really weird calculation to determine the alignment in bits - written by me (no idea what I was thinking at the time, it's obviously incorrect). Just replace it with the much more obviously correct multiplication by 8 to get bits from bytes. Found while working on properly dealing with alignment in `-size=full`.
This commit is contained in:
committed by
Ron Evans
parent
0b47b99448
commit
0463d34887
+1
-3
@@ -433,7 +433,6 @@ func (c *compilerContext) getGlobal(g *ssa.Global) llvm.Value {
|
|||||||
llvmGlobal = llvm.AddGlobal(c.mod, llvmType, info.linkName)
|
llvmGlobal = llvm.AddGlobal(c.mod, llvmType, info.linkName)
|
||||||
|
|
||||||
// Set alignment from the //go:align comment.
|
// Set alignment from the //go:align comment.
|
||||||
var alignInBits uint32
|
|
||||||
alignment := c.targetData.ABITypeAlignment(llvmType)
|
alignment := c.targetData.ABITypeAlignment(llvmType)
|
||||||
if info.align > alignment {
|
if info.align > alignment {
|
||||||
alignment = info.align
|
alignment = info.align
|
||||||
@@ -444,7 +443,6 @@ func (c *compilerContext) getGlobal(g *ssa.Global) llvm.Value {
|
|||||||
c.addError(g.Pos(), "global variable alignment must be a positive power of two")
|
c.addError(g.Pos(), "global variable alignment must be a positive power of two")
|
||||||
} else {
|
} else {
|
||||||
// Set the alignment only when it is a power of two.
|
// Set the alignment only when it is a power of two.
|
||||||
alignInBits = uint32(alignment) ^ uint32(alignment-1)
|
|
||||||
llvmGlobal.SetAlignment(alignment)
|
llvmGlobal.SetAlignment(alignment)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -459,7 +457,7 @@ func (c *compilerContext) getGlobal(g *ssa.Global) llvm.Value {
|
|||||||
Type: c.getDIType(typ),
|
Type: c.getDIType(typ),
|
||||||
LocalToUnit: false,
|
LocalToUnit: false,
|
||||||
Expr: c.dibuilder.CreateExpression(nil),
|
Expr: c.dibuilder.CreateExpression(nil),
|
||||||
AlignInBits: alignInBits,
|
AlignInBits: uint32(alignment) * 8,
|
||||||
})
|
})
|
||||||
llvmGlobal.AddMetadata(0, diglobal)
|
llvmGlobal.AddMetadata(0, diglobal)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user