mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-08-03 02:27:48 +00:00
compiler: Implement -ffunction-sections work
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user