diff options
author | Cary Coutant <ccoutant@google.com> | 2010-12-09 23:19:50 +0000 |
---|---|---|
committer | Cary Coutant <ccoutant@google.com> | 2010-12-09 23:19:50 +0000 |
commit | 83e17bd5ed3c2586f558202172bf9f52ac80650c (patch) | |
tree | 3e1249454b28872800852006958bd7e5e27c2705 /gold/layout.cc | |
parent | f9bbfb18bec91f344bcc74343ad77c8a0e49ed4e (diff) | |
download | gdb-83e17bd5ed3c2586f558202172bf9f52ac80650c.zip gdb-83e17bd5ed3c2586f558202172bf9f52ac80650c.tar.gz gdb-83e17bd5ed3c2586f558202172bf9f52ac80650c.tar.bz2 |
* 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.
Diffstat (limited to 'gold/layout.cc')
-rw-r--r-- | gold/layout.cc | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/gold/layout.cc b/gold/layout.cc index 52120cc..9bf9a9f 100644 --- a/gold/layout.cc +++ b/gold/layout.cc @@ -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()); + } } } |