summaryrefslogtreecommitdiffstats
path: root/binutils-2.25/gold/layout.cc
diff options
context:
space:
mode:
authorAndrew Hsieh <andrewhsieh@google.com>2015-02-24 18:17:57 +0800
committerAndrew Hsieh <andrewhsieh@google.com>2015-02-24 18:17:57 +0800
commitfd6fc0c5f6ec26b3b526655a721b7b0af0b14644 (patch)
tree487c69cb82b68612b53ad40569a54e060973eca2 /binutils-2.25/gold/layout.cc
parentaff326d7fffe9111be0900d433c6de6661c48af3 (diff)
downloadtoolchain_binutils-fd6fc0c5f6ec26b3b526655a721b7b0af0b14644.tar.gz
toolchain_binutils-fd6fc0c5f6ec26b3b526655a721b7b0af0b14644.tar.bz2
toolchain_binutils-fd6fc0c5f6ec26b3b526655a721b7b0af0b14644.zip
Update binutils-2.25/gold to ToT
commit be66981e1605eff305ac9c561825f4bd6801fca2 Author: H.J. Lu <hjl.tools@gmail.com> Date: Sun Feb 22 05:18:50 2015 -0800 Set GOLD_DEFAULT_SIZE to 32 for x32 * configure.ac (default_size): Set to 32 for x32. * configure: Regenerated. Change-Id: I4b2d8927e4e41cf2fac3c92d00e8aef69b5ce21f
Diffstat (limited to 'binutils-2.25/gold/layout.cc')
-rw-r--r--binutils-2.25/gold/layout.cc33
1 files changed, 27 insertions, 6 deletions
diff --git a/binutils-2.25/gold/layout.cc b/binutils-2.25/gold/layout.cc
index 32ac384a..7836640a 100644
--- a/binutils-2.25/gold/layout.cc
+++ b/binutils-2.25/gold/layout.cc
@@ -1,6 +1,6 @@
// layout.cc -- lay out output file sections for gold
-// Copyright (C) 2006-2014 Free Software Foundation, Inc.
+// Copyright (C) 2006-2015 Free Software Foundation, Inc.
// Written by Ian Lance Taylor <iant@google.com>.
// This file is part of gold.
@@ -524,6 +524,7 @@ static const char* gdb_sections[] =
"addr", // Fission extension
// "aranges", // not used by gdb as of 7.4
"frame",
+ "gdb_scripts",
"info",
"types",
"line",
@@ -532,8 +533,11 @@ static const char* gdb_sections[] =
"macro",
// "pubnames", // not used by gdb as of 7.4
// "pubtypes", // not used by gdb as of 7.4
+ // "gnu_pubnames", // Fission extension
+ // "gnu_pubtypes", // Fission extension
"ranges",
"str",
+ "str_offsets",
};
// This is the minimum set of sections needed for line numbers.
@@ -544,6 +548,7 @@ static const char* lines_only_debug_sections[] =
// "addr", // Fission extension
// "aranges", // not used by gdb as of 7.4
// "frame",
+ // "gdb_scripts",
"info",
// "types",
"line",
@@ -552,8 +557,11 @@ static const char* lines_only_debug_sections[] =
// "macro",
// "pubnames", // not used by gdb as of 7.4
// "pubtypes", // not used by gdb as of 7.4
+ // "gnu_pubnames", // Fission extension
+ // "gnu_pubtypes", // Fission extension
// "ranges",
"str",
+ "str_offsets", // Fission extension
};
// These sections are the DWARF fast-lookup tables, and are not needed
@@ -2093,8 +2101,7 @@ Layout::layout_gnu_stack(bool seen_gnu_stack, uint64_t gnu_stack_flags,
if ((gnu_stack_flags & elfcpp::SHF_EXECINSTR) != 0)
{
this->input_requires_executable_stack_ = true;
- if (parameters->options().warn_execstack()
- || parameters->options().is_stack_executable())
+ if (parameters->options().warn_execstack())
gold_warning(_("%s: requires executable stack"),
obj->name().c_str());
}
@@ -2967,7 +2974,14 @@ Layout::create_executable_stack_info()
{
bool is_stack_executable;
if (parameters->options().is_execstack_set())
- is_stack_executable = parameters->options().is_stack_executable();
+ {
+ is_stack_executable = parameters->options().is_stack_executable();
+ if (!is_stack_executable
+ && this->input_requires_executable_stack_
+ && parameters->options().warn_execstack())
+ gold_warning(_("one or more inputs require executable stack, "
+ "but -z noexecstack was given"));
+ }
else if (!this->input_with_gnu_stack_note_)
return;
else
@@ -3510,7 +3524,9 @@ Layout::set_segment_offsets(const Target* target, Output_segment* load_seg,
// put them on different pages in memory. We will revisit this
// decision once we know the size of the segment.
- addr = align_address(addr, (*p)->maximum_alignment());
+ uint64_t max_align = (*p)->maximum_alignment();
+ if (max_align > abi_pagesize)
+ addr = align_address(addr, max_align);
aligned_addr = addr;
if (load_seg == *p)
@@ -4857,7 +4873,8 @@ Layout::finish_dynamic_section(const Input_objects* input_objects,
flags |= elfcpp::DF_STATIC_TLS;
if (parameters->options().origin())
flags |= elfcpp::DF_ORIGIN;
- if (parameters->options().Bsymbolic())
+ if (parameters->options().Bsymbolic()
+ && !parameters->options().have_dynamic_list())
{
flags |= elfcpp::DF_SYMBOLIC;
// Add DT_SYMBOLIC for compatibility with older loaders.
@@ -4869,6 +4886,8 @@ Layout::finish_dynamic_section(const Input_objects* input_objects,
odyn->add_constant(elfcpp::DT_FLAGS, flags);
flags = 0;
+ if (parameters->options().global())
+ flags |= elfcpp::DF_1_GLOBAL;
if (parameters->options().initfirst())
flags |= elfcpp::DF_1_INITFIRST;
if (parameters->options().interpose())
@@ -5534,6 +5553,8 @@ void
Write_sections_task::locks(Task_locker* tl)
{
tl->add(this, this->output_sections_blocker_);
+ if (this->input_sections_blocker_ != NULL)
+ tl->add(this, this->input_sections_blocker_);
tl->add(this, this->final_blocker_);
}