mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-03 23:34:02 +08:00
* layout.cc (Layout::layout_gnu_stack): Add warnings for executable
stack. * layout.h (Layout::layout_gnu_stack): Add pointer to Object parameter; change all callers. * object.cc (Sized_relobj::do_layout): Adjust call to layout_gnu_stack. * options.h (warn_execstack): New option.
This commit is contained in:
parent
f9bbfb18be
commit
83e17bd5ed
@ -1,3 +1,12 @@
|
||||
2010-12-09 Cary Coutant <ccoutant@google.com>
|
||||
|
||||
* layout.cc (Layout::layout_gnu_stack): Add warnings for executable
|
||||
stack.
|
||||
* layout.h (Layout::layout_gnu_stack): Add pointer to Object
|
||||
parameter; change all callers.
|
||||
* object.cc (Sized_relobj::do_layout): Adjust call to layout_gnu_stack.
|
||||
* options.h (warn_execstack): New option.
|
||||
|
||||
2010-12-07 Doug Kwan <dougkwan@google.com>
|
||||
|
||||
* arm.cc (Target_arm::Scan::get_reference_flags): Treat R_ARM_PREL31
|
||||
|
@ -1344,15 +1344,29 @@ Layout::expected_segment_count() const
|
||||
// object. On some targets that will force an executable stack.
|
||||
|
||||
void
|
||||
Layout::layout_gnu_stack(bool seen_gnu_stack, uint64_t gnu_stack_flags)
|
||||
Layout::layout_gnu_stack(bool seen_gnu_stack, uint64_t gnu_stack_flags,
|
||||
const Object* obj)
|
||||
{
|
||||
if (!seen_gnu_stack)
|
||||
this->input_without_gnu_stack_note_ = true;
|
||||
{
|
||||
this->input_without_gnu_stack_note_ = true;
|
||||
if (parameters->options().warn_execstack()
|
||||
&& parameters->target().is_default_stack_executable())
|
||||
gold_warning(_("%s: missing .note.GNU-stack section"
|
||||
" implies executable stack"),
|
||||
obj->name().c_str());
|
||||
}
|
||||
else
|
||||
{
|
||||
this->input_with_gnu_stack_note_ = true;
|
||||
if ((gnu_stack_flags & elfcpp::SHF_EXECINSTR) != 0)
|
||||
this->input_requires_executable_stack_ = true;
|
||||
{
|
||||
this->input_requires_executable_stack_ = true;
|
||||
if (parameters->options().warn_execstack()
|
||||
|| parameters->options().is_stack_executable())
|
||||
gold_warning(_("%s: requires executable stack"),
|
||||
obj->name().c_str());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -470,7 +470,8 @@ class Layout
|
||||
// .note.GNU-stack section. GNU_STACK_FLAGS is the section flags
|
||||
// from that section if there was one.
|
||||
void
|
||||
layout_gnu_stack(bool seen_gnu_stack, uint64_t gnu_stack_flags);
|
||||
layout_gnu_stack(bool seen_gnu_stack, uint64_t gnu_stack_flags,
|
||||
const Object*);
|
||||
|
||||
// Add an Output_section_data to the layout. This is used for
|
||||
// special sections like the GOT section. ORDER is where the
|
||||
|
@ -1429,7 +1429,7 @@ Sized_relobj<size, big_endian>::do_layout(Symbol_table* symtab,
|
||||
}
|
||||
|
||||
if (!is_gc_pass_two)
|
||||
layout->layout_gnu_stack(seen_gnu_stack, gnu_stack_flags);
|
||||
layout->layout_gnu_stack(seen_gnu_stack, gnu_stack_flags, this);
|
||||
|
||||
// When doing a relocatable link handle the reloc sections at the
|
||||
// end. Garbage collection and Identical Code Folding is not
|
||||
|
@ -1035,6 +1035,10 @@ class General_options
|
||||
DEFINE_bool(warn_constructors, options::TWO_DASHES, '\0', false,
|
||||
N_("Ignored"), N_("Ignored"));
|
||||
|
||||
DEFINE_bool(warn_execstack, options::TWO_DASHES, '\0', false,
|
||||
N_("Warn if the stack is executable"),
|
||||
N_("Do not warn if the stack is executable (default)"));
|
||||
|
||||
DEFINE_bool(warn_mismatch, options::TWO_DASHES, '\0', true,
|
||||
NULL, N_("Don't warn about mismatched input files"));
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user