compiler: use InternalLinkage where appropriate
Internal linkage means that symbols show up in tools like objdump, which is very useful for debugging.
Этот коммит содержится в:
родитель
58c87329d4
коммит
9fca0e99b5
1 изменённых файлов: 7 добавлений и 7 удалений
14
compiler.go
14
compiler.go
|
@ -253,7 +253,7 @@ func (c *Compiler) Parse(mainPath string, buildTags []string) error {
|
||||||
global := llvm.AddGlobal(c.mod, llvmType, g.LinkName())
|
global := llvm.AddGlobal(c.mod, llvmType, g.LinkName())
|
||||||
g.llvmGlobal = global
|
g.llvmGlobal = global
|
||||||
if !strings.HasPrefix(g.LinkName(), "_extern_") {
|
if !strings.HasPrefix(g.LinkName(), "_extern_") {
|
||||||
global.SetLinkage(llvm.PrivateLinkage)
|
global.SetLinkage(llvm.InternalLinkage)
|
||||||
if g.LinkName() == "runtime.TargetBits" {
|
if g.LinkName() == "runtime.TargetBits" {
|
||||||
bitness := c.targetData.PointerSize() * 8
|
bitness := c.targetData.PointerSize() * 8
|
||||||
if bitness < 32 {
|
if bitness < 32 {
|
||||||
|
@ -346,7 +346,7 @@ func (c *Compiler) Parse(mainPath string, buildTags []string) error {
|
||||||
initType := llvm.FunctionType(llvm.VoidType(), nil, false)
|
initType := llvm.FunctionType(llvm.VoidType(), nil, false)
|
||||||
initFn = llvm.AddFunction(c.mod, "runtime.initAll", initType)
|
initFn = llvm.AddFunction(c.mod, "runtime.initAll", initType)
|
||||||
}
|
}
|
||||||
initFn.SetLinkage(llvm.PrivateLinkage)
|
initFn.SetLinkage(llvm.InternalLinkage)
|
||||||
block := c.ctx.AddBasicBlock(initFn, "entry")
|
block := c.ctx.AddBasicBlock(initFn, "entry")
|
||||||
c.builder.SetInsertPointAtEnd(block)
|
c.builder.SetInsertPointAtEnd(block)
|
||||||
for _, fn := range c.initFuncs {
|
for _, fn := range c.initFuncs {
|
||||||
|
@ -364,7 +364,7 @@ func (c *Compiler) Parse(mainPath string, buildTags []string) error {
|
||||||
|
|
||||||
// Set functions referenced in runtime.ll to internal linkage, to improve
|
// Set functions referenced in runtime.ll to internal linkage, to improve
|
||||||
// optimization (hopefully).
|
// optimization (hopefully).
|
||||||
c.mod.NamedFunction("runtime.scheduler").SetLinkage(llvm.PrivateLinkage)
|
c.mod.NamedFunction("runtime.scheduler").SetLinkage(llvm.InternalLinkage)
|
||||||
|
|
||||||
// Only use a scheduler when necessary.
|
// Only use a scheduler when necessary.
|
||||||
if c.ir.NeedsScheduler() {
|
if c.ir.NeedsScheduler() {
|
||||||
|
@ -413,7 +413,7 @@ func (c *Compiler) Parse(mainPath string, buildTags []string) error {
|
||||||
rangeArray := llvm.ConstArray(rangeType, ranges)
|
rangeArray := llvm.ConstArray(rangeType, ranges)
|
||||||
rangeArrayNewGlobal := llvm.AddGlobal(c.mod, rangeArray.Type(), "runtime.methodSetRanges.tmp")
|
rangeArrayNewGlobal := llvm.AddGlobal(c.mod, rangeArray.Type(), "runtime.methodSetRanges.tmp")
|
||||||
rangeArrayNewGlobal.SetInitializer(rangeArray)
|
rangeArrayNewGlobal.SetInitializer(rangeArray)
|
||||||
rangeArrayNewGlobal.SetLinkage(llvm.PrivateLinkage)
|
rangeArrayNewGlobal.SetLinkage(llvm.InternalLinkage)
|
||||||
rangeArrayOldGlobal := c.mod.NamedGlobal("runtime.methodSetRanges")
|
rangeArrayOldGlobal := c.mod.NamedGlobal("runtime.methodSetRanges")
|
||||||
rangeArrayOldGlobal.ReplaceAllUsesWith(llvm.ConstBitCast(rangeArrayNewGlobal, rangeArrayOldGlobal.Type()))
|
rangeArrayOldGlobal.ReplaceAllUsesWith(llvm.ConstBitCast(rangeArrayNewGlobal, rangeArrayOldGlobal.Type()))
|
||||||
rangeArrayOldGlobal.EraseFromParentAsGlobal()
|
rangeArrayOldGlobal.EraseFromParentAsGlobal()
|
||||||
|
@ -421,7 +421,7 @@ func (c *Compiler) Parse(mainPath string, buildTags []string) error {
|
||||||
funcArray := llvm.ConstArray(c.i8ptrType, funcPointers)
|
funcArray := llvm.ConstArray(c.i8ptrType, funcPointers)
|
||||||
funcArrayNewGlobal := llvm.AddGlobal(c.mod, funcArray.Type(), "runtime.methodSetFunctions.tmp")
|
funcArrayNewGlobal := llvm.AddGlobal(c.mod, funcArray.Type(), "runtime.methodSetFunctions.tmp")
|
||||||
funcArrayNewGlobal.SetInitializer(funcArray)
|
funcArrayNewGlobal.SetInitializer(funcArray)
|
||||||
funcArrayNewGlobal.SetLinkage(llvm.PrivateLinkage)
|
funcArrayNewGlobal.SetLinkage(llvm.InternalLinkage)
|
||||||
funcArrayOldGlobal := c.mod.NamedGlobal("runtime.methodSetFunctions")
|
funcArrayOldGlobal := c.mod.NamedGlobal("runtime.methodSetFunctions")
|
||||||
funcArrayOldGlobal.ReplaceAllUsesWith(llvm.ConstBitCast(funcArrayNewGlobal, funcArrayOldGlobal.Type()))
|
funcArrayOldGlobal.ReplaceAllUsesWith(llvm.ConstBitCast(funcArrayNewGlobal, funcArrayOldGlobal.Type()))
|
||||||
funcArrayOldGlobal.EraseFromParentAsGlobal()
|
funcArrayOldGlobal.EraseFromParentAsGlobal()
|
||||||
|
@ -429,7 +429,7 @@ func (c *Compiler) Parse(mainPath string, buildTags []string) error {
|
||||||
signatureArray := llvm.ConstArray(llvm.Int16Type(), signatures)
|
signatureArray := llvm.ConstArray(llvm.Int16Type(), signatures)
|
||||||
signatureArrayNewGlobal := llvm.AddGlobal(c.mod, signatureArray.Type(), "runtime.methodSetSignatures.tmp")
|
signatureArrayNewGlobal := llvm.AddGlobal(c.mod, signatureArray.Type(), "runtime.methodSetSignatures.tmp")
|
||||||
signatureArrayNewGlobal.SetInitializer(signatureArray)
|
signatureArrayNewGlobal.SetInitializer(signatureArray)
|
||||||
signatureArrayNewGlobal.SetLinkage(llvm.PrivateLinkage)
|
signatureArrayNewGlobal.SetLinkage(llvm.InternalLinkage)
|
||||||
signatureArrayOldGlobal := c.mod.NamedGlobal("runtime.methodSetSignatures")
|
signatureArrayOldGlobal := c.mod.NamedGlobal("runtime.methodSetSignatures")
|
||||||
signatureArrayOldGlobal.ReplaceAllUsesWith(llvm.ConstBitCast(signatureArrayNewGlobal, signatureArrayOldGlobal.Type()))
|
signatureArrayOldGlobal.ReplaceAllUsesWith(llvm.ConstBitCast(signatureArrayNewGlobal, signatureArrayOldGlobal.Type()))
|
||||||
signatureArrayOldGlobal.EraseFromParentAsGlobal()
|
signatureArrayOldGlobal.EraseFromParentAsGlobal()
|
||||||
|
@ -1006,7 +1006,7 @@ func (c *Compiler) parseFunc(frame *Frame) error {
|
||||||
if c.dumpSSA {
|
if c.dumpSSA {
|
||||||
fmt.Printf("\nfunc %s:\n", frame.fn.fn)
|
fmt.Printf("\nfunc %s:\n", frame.fn.fn)
|
||||||
}
|
}
|
||||||
frame.fn.llvmFn.SetLinkage(llvm.PrivateLinkage)
|
frame.fn.llvmFn.SetLinkage(llvm.InternalLinkage)
|
||||||
|
|
||||||
// Pre-create all basic blocks in the function.
|
// Pre-create all basic blocks in the function.
|
||||||
for _, block := range frame.fn.fn.DomPreorder() {
|
for _, block := range frame.fn.fn.DomPreorder() {
|
||||||
|
|
Загрузка…
Создание таблицы
Сослаться в новой задаче