gold: Add view and view_size parameters to is_call_to_non_split.
authorMarcin Kościelnicki <koriakin@0x04.net>
Sat, 6 Feb 2016 00:52:00 +0000 (01:52 +0100)
committerMarcin Kościelnicki <koriakin@0x04.net>
Sat, 6 Feb 2016 00:52:00 +0000 (01:52 +0100)
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.

gold/ChangeLog
gold/i386.cc
gold/reloc.cc
gold/target.cc
gold/target.h

index 501c91b2c028448d23be0a9d73135a7b1ea7c354..c883077e445a249f85fbe4cd9d95aaf37b01ea99 100644 (file)
@@ -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.
index 7946cf79dcd9088115a0293c9956f04fbc6d116d..8bcd44e5c917c5f6309f9162473e8be83b455ac5 100644 (file)
@@ -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()));
index b1a50e6807f1b50b9579fbeddcdb7ba1b7730248..ca54f153a3f1ef6f28cab52711bd19bb44893786 100644 (file)
@@ -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 =
index cc3765a8c0fdb7be315262605a6d36705347b886..3bae2dd5253cf95cf527925782a6ec2067388b83 100644 (file)
@@ -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;
 }
index c0f24eea795e8a658d2074fc8129d82bca9bea05..d20044e58c2611515d836a144b84e634f7c0e163 100644 (file)
@@ -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