]> granicus.if.org Git - llvm/commitdiff
[gold] Enable function-sections by default.
authorDavide Italiano <davide@freebsd.org>
Tue, 25 Jul 2017 23:32:50 +0000 (23:32 +0000)
committerDavide Italiano <davide@freebsd.org>
Tue, 25 Jul 2017 23:32:50 +0000 (23:32 +0000)
This is needed, among others, to respect --section-ordering-file
with LTO. I'll follow up with a similar change for data sections.

I hope every version of gold available on the bots has support for
--section-ordering file.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309056 91177308-0d34-0410-b5e6-96231b3b80d8

test/tools/gold/X86/multiple-sections.ll [new file with mode: 0644]
tools/gold/gold-plugin.cpp

diff --git a/test/tools/gold/X86/multiple-sections.ll b/test/tools/gold/X86/multiple-sections.ll
new file mode 100644 (file)
index 0000000..899de0c
--- /dev/null
@@ -0,0 +1,40 @@
+; RUN: echo ".text.tin" > %t_order_lto.txt
+; RUN: echo ".text._start" >> %t_order_lto.txt
+; RUN: echo ".text.pat" >> %t_order_lto.txt
+; RUN: llvm-as %s -o %t.o
+; RUN: %gold -plugin %llvmshlibdir/LLVMgold.so \
+; RUN:     -m elf_x86_64 -o %t.exe %t.o \
+; RUN:     --section-ordering-file=%t_order_lto.txt
+; RUN: llvm-readobj -elf-output-style=GNU -t %t.exe | FileCheck %s
+
+; Check that the order of the sections is tin -> _start -> pat.
+
+; CHECK: Symbol table '.symtab' contains 8 entries:
+; CHECK-NEXT:    Num:    Value          Size Type    Bind   Vis      Ndx Name
+; CHECK-NEXT:      0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND
+; CHECK-NEXT:      1: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS ld-temp.o
+; CHECK-NEXT:      2: 00000000004000d0     1 FUNC    LOCAL  DEFAULT    1 pat
+; CHECK-NEXT:      3: 00000000004000b0     1 FUNC    LOCAL  DEFAULT    1 tin
+; CHECK-NEXT:      4: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  ABS _end
+; CHECK-NEXT:      5: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  ABS __bss_start
+; CHECK-NEXT:      6: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  ABS _edata
+; CHECK-NEXT:      7: 00000000004000c0    15 FUNC    GLOBAL DEFAULT    1 _start
+
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+
+define void @pat() #0 {
+  ret void
+}
+
+define void @tin() #0 {
+  ret void
+}
+
+define i32 @_start() {
+  call void @pat()
+  call void @tin()
+  ret i32 0
+}
+
+attributes #0 = { noinline optnone }
index cf9f37a5b1e5ca43fe43a2f352933f03e569524b..ac99a08d81da4056c97fefc9107c1b4fac577d20 100644 (file)
@@ -750,6 +750,9 @@ static std::unique_ptr<LTO> createLTO() {
   // FIXME: Check the gold version or add a new option to enable them.
   Conf.Options.RelaxELFRelocations = false;
 
+  // Enable function sections by default.
+  Conf.Options.FunctionSections = true;
+
   Conf.MAttrs = MAttrs;
   Conf.RelocModel = RelocationModel;
   Conf.CGOptLevel = getCGOptLevel();