From 67d8465a234f8d39b9923eeae8b9c814971280b7 Mon Sep 17 00:00:00 2001 From: Davide Italiano Date: Tue, 25 Jul 2017 23:32:50 +0000 Subject: [PATCH] [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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309056 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/tools/gold/X86/multiple-sections.ll | 40 ++++++++++++++++++++++++ tools/gold/gold-plugin.cpp | 3 ++ 2 files changed, 43 insertions(+) create mode 100644 test/tools/gold/X86/multiple-sections.ll diff --git a/test/tools/gold/X86/multiple-sections.ll b/test/tools/gold/X86/multiple-sections.ll new file mode 100644 index 00000000000..899de0cb810 --- /dev/null +++ b/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/tools/gold/gold-plugin.cpp b/tools/gold/gold-plugin.cpp index cf9f37a5b1e..ac99a08d81d 100644 --- a/tools/gold/gold-plugin.cpp +++ b/tools/gold/gold-plugin.cpp @@ -750,6 +750,9 @@ static std::unique_ptr 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(); -- 2.40.0