diff --git a/Makefile b/Makefile index da489c44..332e924f 100644 --- a/Makefile +++ b/Makefile @@ -18,7 +18,7 @@ TARGET ?= unix ifeq ($(TARGET),pca10040) GCC = arm-none-eabi-gcc -LD = arm-none-eabi-ld -T arm.ld +LD = arm-none-eabi-ld -T arm.ld --gc-sections SIZE = arm-none-eabi-size OBJCOPY = arm-none-eabi-objcopy LLFLAGS += -target armv7m-none-eabi diff --git a/tgo.go b/tgo.go index 4bff69ac..e596387c 100644 --- a/tgo.go +++ b/tgo.go @@ -1082,6 +1082,16 @@ func (c *Compiler) LinkModule(mod llvm.Module) error { return llvm.LinkModules(c.mod, mod) } +func (c *Compiler) ApplyFunctionSections() { + llvmFn := c.mod.FirstFunction() + for !llvmFn.IsNil() { + if !llvmFn.IsDeclaration() { + llvmFn.SetSection(".text." + llvmFn.Name()) + } + llvmFn = llvm.NextFunction(llvmFn) + } +} + func (c *Compiler) Optimize(optLevel, sizeLevel int) { builder := llvm.NewPassManagerBuilder() defer builder.Dispose() @@ -1159,6 +1169,8 @@ func Compile(pkgName, runtimePath, outpath, target string, printIR bool) error { return err } + c.ApplyFunctionSections() // -ffunction-sections + if err := c.Verify(); err != nil { return err }