summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavide Italiano <davide@freebsd.org>2017-07-25 23:32:50 +0000
committerDavide Italiano <davide@freebsd.org>2017-07-25 23:32:50 +0000
commit756feb2a516879974b1ffb7368ff64a84e1b830a (patch)
treed1a155f31692d7fb57af230a4509b46c41cd65c5
parent8109789a33c079d3c1a4aacb06516304d6a173e7 (diff)
downloadbcm5719-llvm-756feb2a516879974b1ffb7368ff64a84e1b830a.tar.gz
bcm5719-llvm-756feb2a516879974b1ffb7368ff64a84e1b830a.zip
[gold] Enable function-sections by default.
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. llvm-svn: 309056
-rw-r--r--llvm/test/tools/gold/X86/multiple-sections.ll40
-rw-r--r--llvm/tools/gold/gold-plugin.cpp3
2 files changed, 43 insertions, 0 deletions
diff --git a/llvm/test/tools/gold/X86/multiple-sections.ll b/llvm/test/tools/gold/X86/multiple-sections.ll
new file mode 100644
index 00000000000..899de0cb810
--- /dev/null
+++ b/llvm/test/tools/gold/X86/multiple-sections.ll
@@ -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 }
diff --git a/llvm/tools/gold/gold-plugin.cpp b/llvm/tools/gold/gold-plugin.cpp
index cf9f37a5b1e..ac99a08d81d 100644
--- a/llvm/tools/gold/gold-plugin.cpp
+++ b/llvm/tools/gold/gold-plugin.cpp
@@ -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();
OpenPOWER on IntegriCloud