mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-04 15:54:25 +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>
|
2010-12-07 Doug Kwan <dougkwan@google.com>
|
||||||
|
|
||||||
* arm.cc (Target_arm::Scan::get_reference_flags): Treat R_ARM_PREL31
|
* 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.
|
// object. On some targets that will force an executable stack.
|
||||||
|
|
||||||
void
|
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)
|
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
|
else
|
||||||
{
|
{
|
||||||
this->input_with_gnu_stack_note_ = true;
|
this->input_with_gnu_stack_note_ = true;
|
||||||
if ((gnu_stack_flags & elfcpp::SHF_EXECINSTR) != 0)
|
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
|
// .note.GNU-stack section. GNU_STACK_FLAGS is the section flags
|
||||||
// from that section if there was one.
|
// from that section if there was one.
|
||||||
void
|
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
|
// Add an Output_section_data to the layout. This is used for
|
||||||
// special sections like the GOT section. ORDER is where the
|
// 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)
|
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
|
// When doing a relocatable link handle the reloc sections at the
|
||||||
// end. Garbage collection and Identical Code Folding is not
|
// 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,
|
DEFINE_bool(warn_constructors, options::TWO_DASHES, '\0', false,
|
||||||
N_("Ignored"), N_("Ignored"));
|
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,
|
DEFINE_bool(warn_mismatch, options::TWO_DASHES, '\0', true,
|
||||||
NULL, N_("Don't warn about mismatched input files"));
|
NULL, N_("Don't warn about mismatched input files"));
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user