diff options
| author | Andrew Hsieh <andrewhsieh@google.com> | 2015-02-24 18:17:57 +0800 |
|---|---|---|
| committer | Andrew Hsieh <andrewhsieh@google.com> | 2015-02-24 18:17:57 +0800 |
| commit | fd6fc0c5f6ec26b3b526655a721b7b0af0b14644 (patch) | |
| tree | 487c69cb82b68612b53ad40569a54e060973eca2 /binutils-2.25/gold/layout.cc | |
| parent | aff326d7fffe9111be0900d433c6de6661c48af3 (diff) | |
| download | toolchain_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.cc | 33 |
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_); } |
