From 5bbd41e9fb4d02f97ef7af3435d08c367f8f5e0c Mon Sep 17 00:00:00 2001 From: Ayke van Laethem Date: Fri, 27 Apr 2018 01:27:33 +0200 Subject: [PATCH] compiler: Implement -ffunction-sections work --- Makefile | 2 +- tgo.go | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) 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 }