Skip to content

Commit

Permalink
[gold-plugin] Disable section ordering for relocatable links
Browse files Browse the repository at this point in the history
Not all programs want section ordering when compiled with LTO.
In particular, the Linux kernel is very sensitive when it comes to linking, and
doesn't boot when each function is placed in its own sections.

Reviewed By: pcc

Differential Revision: https://reviews.llvm.org/D48756

llvm-svn: 336943
  • Loading branch information
isanbard committed Jul 12, 2018
1 parent 2bb551c commit 7bd9e94
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 4 deletions.
2 changes: 1 addition & 1 deletion llvm/test/tools/gold/X86/relocatable.ll
Expand Up @@ -10,7 +10,7 @@
; CHECK-NEXT: Binding: Global
; CHECK-NEXT: Type: Function
; CHECK-NEXT: Other: 0
; CHECK-NEXT: Section: .text.foo
; CHECK-NEXT: Section: .text
; CHECK-NEXT: }

target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
Expand Down
8 changes: 5 additions & 3 deletions llvm/tools/gold/gold-plugin.cpp
Expand Up @@ -115,6 +115,7 @@ static ld_plugin_add_input_file add_input_file = nullptr;
static ld_plugin_set_extra_library_path set_extra_library_path = nullptr;
static ld_plugin_get_view get_view = nullptr;
static bool IsExecutable = false;
static bool SplitSections = true;
static Optional<Reloc::Model> RelocationModel = None;
static std::string output_name = "";
static std::list<claimed_file> Modules;
Expand Down Expand Up @@ -324,6 +325,7 @@ ld_plugin_status onload(ld_plugin_tv *tv) {
switch (tv->tv_u.tv_val) {
case LDPO_REL: // .o
IsExecutable = false;
SplitSections = false;
break;
case LDPO_DYN: // .so
IsExecutable = false;
Expand Down Expand Up @@ -834,9 +836,9 @@ static std::unique_ptr<LTO> createLTO(IndexWriteCallback OnIndexWrite,
// FIXME: Check the gold version or add a new option to enable them.
Conf.Options.RelaxELFRelocations = false;

// Enable function/data sections by default.
Conf.Options.FunctionSections = true;
Conf.Options.DataSections = true;
// Toggle function/data sections.
Conf.Options.FunctionSections = SplitSections;
Conf.Options.DataSections = SplitSections;

Conf.MAttrs = MAttrs;
Conf.RelocModel = RelocationModel;
Expand Down

0 comments on commit 7bd9e94

Please sign in to comment.