// 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.
"addr", // Fission extension
// "aranges", // not used by gdb as of 7.4
"frame",
+ "gdb_scripts",
"info",
"types",
"line",
"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.
// "addr", // Fission extension
// "aranges", // not used by gdb as of 7.4
// "frame",
+ // "gdb_scripts",
"info",
// "types",
"line",
// "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
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());
}
{
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
// 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)
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())