diff options
author | Marcin Kościelnicki <koriakin@0x04.net> | 2016-02-06 01:52:00 +0100 |
---|---|---|
committer | Marcin Kościelnicki <koriakin@0x04.net> | 2016-02-06 01:52:00 +0100 |
commit | bd8d853f779692d3d4f8dfb65cf173f7e080f498 (patch) | |
tree | 2b7e6d2aa27455655e4413672b2136071ae8700c | |
parent | 148ec36086d9f59825f9c11be450cc8f5f250ed2 (diff) | |
download | gdb-bd8d853f779692d3d4f8dfb65cf173f7e080f498.zip gdb-bd8d853f779692d3d4f8dfb65cf173f7e080f498.tar.gz gdb-bd8d853f779692d3d4f8dfb65cf173f7e080f498.tar.bz2 |
gold: Add view and view_size parameters to is_call_to_non_split.
This is needed by s390 split-stack support, to distinguish call
and load-address relocations.
gold/ChangeLog:
* i386.cc (Target_i386::is_call_to_non_split): Add view and view_size
parameters.
* reloc.cc (Sized_relobj_file::split_stack_adjust_reltype): Pass view
and view_size to is_call_to_non_split.
* target.cc (Target::is_call_to_non_split): Add view and view_size
parameters.
* target.h (class Target): Likewise.
-rw-r--r-- | gold/ChangeLog | 10 | ||||
-rw-r--r-- | gold/i386.cc | 7 | ||||
-rw-r--r-- | gold/reloc.cc | 3 | ||||
-rw-r--r-- | gold/target.cc | 3 | ||||
-rw-r--r-- | gold/target.h | 9 |
5 files changed, 25 insertions, 7 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog index 501c91b..c883077 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,3 +1,13 @@ +2016-02-06 Marcin Kościelnicki <koriakin@0x04.net> + + * i386.cc (Target_i386::is_call_to_non_split): Add view and view_size + parameters. + * reloc.cc (Sized_relobj_file::split_stack_adjust_reltype): Pass view + and view_size to is_call_to_non_split. + * target.cc (Target::is_call_to_non_split): Add view and view_size + parameters. + * target.h (class Target): Likewise. + 2016-02-05 Sriraman Tallam <tmsriram@google.com> * icf.cc (get_rel_addend): New function. diff --git a/gold/i386.cc b/gold/i386.cc index 7946cf7..8bcd44e 100644 --- a/gold/i386.cc +++ b/gold/i386.cc @@ -500,7 +500,8 @@ class Target_i386 : public Sized_target<32, false> // Return whether SYM is call to a non-split function. bool - do_is_call_to_non_split(const Symbol* sym, const unsigned char*) const; + do_is_call_to_non_split(const Symbol* sym, const unsigned char*, + const unsigned char*, section_size_type) const; // Adjust -fsplit-stack code which calls non-split-stack code. void @@ -3916,7 +3917,9 @@ Target_i386::do_ehframe_datarel_base() const bool Target_i386::do_is_call_to_non_split(const Symbol* sym, - const unsigned char*) const + const unsigned char*, + const unsigned char*, + section_size_type) const { return (sym->type() == elfcpp::STT_FUNC && !is_prefix_of("__i686.get_pc_thunk.", sym->name())); diff --git a/gold/reloc.cc b/gold/reloc.cc index b1a50e6..ca54f15 100644 --- a/gold/reloc.cc +++ b/gold/reloc.cc @@ -1251,7 +1251,8 @@ Sized_relobj_file<size, big_endian>::split_stack_adjust_reltype( && gsym->source() == Symbol::FROM_OBJECT && !gsym->object()->uses_split_stack()) { - if (parameters->target().is_call_to_non_split(gsym, pr)) + if (parameters->target().is_call_to_non_split(gsym, pr, view, + view_size)) { Reltype reloc(pr); section_offset_type offset = diff --git a/gold/target.cc b/gold/target.cc index cc3765a..3bae2dd 100644 --- a/gold/target.cc +++ b/gold/target.cc @@ -152,7 +152,8 @@ Target::do_make_output_section(const char* name, elfcpp::Elf_Word type, // whether the symbol is a function. bool -Target::do_is_call_to_non_split(const Symbol* sym, const unsigned char*) const +Target::do_is_call_to_non_split(const Symbol* sym, const unsigned char*, + const unsigned char*, section_size_type) const { return sym->type() == elfcpp::STT_FUNC; } diff --git a/gold/target.h b/gold/target.h index c0f24ee..d20044e 100644 --- a/gold/target.h +++ b/gold/target.h @@ -326,8 +326,10 @@ class Target // without -fsplit-stack. SYM is known to be defined in an object // compiled without -fsplit-stack. bool - is_call_to_non_split(const Symbol* sym, const unsigned char* preloc) const - { return this->do_is_call_to_non_split(sym, preloc); } + is_call_to_non_split(const Symbol* sym, const unsigned char* preloc, + const unsigned char* view, + section_size_type view_size) const + { return this->do_is_call_to_non_split(sym, preloc, view, view_size); } // A function starts at OFFSET in section SHNDX in OBJECT. That // function was compiled with -fsplit-stack, but it refers to a @@ -661,7 +663,8 @@ class Target // default implementation is that any function not defined by the // ABI is a call to a non-split function. virtual bool - do_is_call_to_non_split(const Symbol* sym, const unsigned char*) const; + do_is_call_to_non_split(const Symbol* sym, const unsigned char*, + const unsigned char*, section_size_type) const; // Virtual function which may be overridden by the child class. virtual void |