Remove unnecessary target dependencies on relocation format.
authorCary Coutant <ccoutant@gmail.com>
Mon, 9 Nov 2015 16:43:46 +0000 (08:43 -0800)
committerCary Coutant <ccoutant@gmail.com>
Mon, 9 Nov 2015 18:33:37 +0000 (10:33 -0800)
2015-11-09  Cary Coutant  <ccoutant@gmail.com>
    Vladimir Radosavljevic <Vladimir.Radosavljevic@imgtec.com>

gold/
* copy-relocs.h (Copy_relocs::copy_reloc): Replace reloc parameter
with type, offset, addend.
(Copy_relocs::save): Likewise.
* copy-relocs.cc (Copy_relocs::copy_reloc): Likewise.
(Copy_relocs::save): Likewise.
* aarch64.cc (Target_aarch64::copy_reloc): Pass r_type, r_offset,
and r_addend to Copy_relocs::copy_reloc.
* arm.cc (Target_arm::copy_reloc): Likewise.
* i386.cc (Target_i386::copy_reloc): Likewise.
* mips.cc (Target_mips::copy_reloc): Likewise.
* powerpc.cc (Target_powerpc::copy_reloc): Likewise.
* s390.cc (Target_s390::copy_reloc): Likewise.
* sparc.cc (Target_sparc::copy_reloc): Likewise.
* tilegx.cc (Target_tilegx::copy_reloc): Likewise.
* x86_64.cc (Target_x86_64::copy_reloc): Likewise.

12 files changed:
gold/ChangeLog
gold/aarch64.cc
gold/arm.cc
gold/copy-relocs.cc
gold/copy-relocs.h
gold/i386.cc
gold/mips.cc
gold/powerpc.cc
gold/s390.cc
gold/sparc.cc
gold/tilegx.cc
gold/x86_64.cc

index 7996229c8facccf1d48495599af7c7c261173e5f..6013ba3b367ee194d4d5b3a8172d4f1d176040a0 100644 (file)
@@ -1,3 +1,22 @@
+2015-11-09  Cary Coutant  <ccoutant@gmail.com>
+           Vladimir Radosavljevic <Vladimir.Radosavljevic@imgtec.com>
+
+       * copy-relocs.h (Copy_relocs::copy_reloc): Replace reloc parameter
+       with type, offset, addend.
+       (Copy_relocs::save): Likewise.
+       * copy-relocs.cc (Copy_relocs::copy_reloc): Likewise.
+       (Copy_relocs::save): Likewise.
+       * aarch64.cc (Target_aarch64::copy_reloc): Pass r_type, r_offset,
+       and r_addend to Copy_relocs::copy_reloc.
+       * arm.cc (Target_arm::copy_reloc): Likewise.
+       * i386.cc (Target_i386::copy_reloc): Likewise.
+       * mips.cc (Target_mips::copy_reloc): Likewise.
+       * powerpc.cc (Target_powerpc::copy_reloc): Likewise.
+       * s390.cc (Target_s390::copy_reloc): Likewise.
+       * sparc.cc (Target_sparc::copy_reloc): Likewise.
+       * tilegx.cc (Target_tilegx::copy_reloc): Likewise.
+       * x86_64.cc (Target_x86_64::copy_reloc): Likewise.
+
 2015-11-05  Cary Coutant  <ccoutant@gmail.com>
 
        PR gold/19119
index bc85c833415cbfb0ef9a22951908eac54eb079fd..5ca5e0accfff921463a4714224802ba0099d6d71 100644 (file)
@@ -3338,10 +3338,13 @@ class Target_aarch64 : public Sized_target<size, big_endian>
             unsigned int shndx, Output_section* output_section,
             Symbol* sym, const elfcpp::Rela<size, big_endian>& reloc)
   {
+    unsigned int r_type = elfcpp::elf_r_type<size>(reloc.get_r_info());
     this->copy_relocs_.copy_reloc(symtab, layout,
                                  symtab->get_sized_symbol<size>(sym),
                                  object, shndx, output_section,
-                                 reloc, this->rela_dyn_section(layout));
+                                 r_type, reloc.get_r_offset(),
+                                 reloc.get_r_addend(),
+                                 this->rela_dyn_section(layout));
   }
 
   // Information about this specific target which we pass to the
index 2795c943c644ae4cf06ed2ed05ffd224215a6da4..4a6d41443209af249e03c189625bc01b54f9387a 100644 (file)
@@ -2806,9 +2806,11 @@ class Target_arm : public Sized_target<32, big_endian>
             unsigned int shndx, Output_section* output_section,
             Symbol* sym, const elfcpp::Rel<32, big_endian>& reloc)
   {
+    unsigned int r_type = elfcpp::elf_r_type<32>(reloc.get_r_info());
     this->copy_relocs_.copy_reloc(symtab, layout,
                                  symtab->get_sized_symbol<32>(sym),
-                                 object, shndx, output_section, reloc,
+                                 object, shndx, output_section,
+                                 r_type, reloc.get_r_offset(), 0,
                                  this->rel_dyn_section(layout));
   }
 
index a7824fe36a2827e45d3bb864fefa9e123cbac105..2d03b1a01b6eb644238105ee08d4a43b6a45d4c5 100644 (file)
@@ -42,7 +42,9 @@ Copy_relocs<sh_type, size, big_endian>::copy_reloc(
     Sized_relobj_file<size, big_endian>* object,
     unsigned int shndx,
     Output_section* output_section,
-    const Reloc& rel,
+    unsigned int r_type,
+    typename elfcpp::Elf_types<size>::Elf_Addr r_offset,
+    typename elfcpp::Elf_types<size>::Elf_Swxword r_addend,
     Output_data_reloc<sh_type, true, size, big_endian>* reloc_section)
 {
   if (this->need_copy_reloc(sym, object, shndx))
@@ -51,7 +53,8 @@ Copy_relocs<sh_type, size, big_endian>::copy_reloc(
     {
       // We may not need a COPY relocation.  Save this relocation to
       // possibly be emitted later.
-      this->save(sym, object, shndx, output_section, rel);
+      this->save(sym, object, shndx, output_section,
+                r_type, r_offset, r_addend);
     }
 }
 
@@ -176,14 +179,13 @@ Copy_relocs<sh_type, size, big_endian>::save(
     Sized_relobj_file<size, big_endian>* object,
     unsigned int shndx,
     Output_section* output_section,
-    const Reloc& rel)
+    unsigned int r_type,
+    typename elfcpp::Elf_types<size>::Elf_Addr r_offset,
+    typename elfcpp::Elf_types<size>::Elf_Swxword r_addend)
 {
-  unsigned int reloc_type = elfcpp::elf_r_type<size>(rel.get_r_info());
-  typename elfcpp::Elf_types<size>::Elf_Addr addend =
-    Reloc_types<sh_type, size, big_endian>::get_reloc_addend_noerror(&rel);
-  this->entries_.push_back(Copy_reloc_entry(sym, reloc_type, object, shndx,
-                                           output_section, rel.get_r_offset(),
-                                           addend));
+  this->entries_.push_back(Copy_reloc_entry(sym, r_type, object, shndx,
+                                           output_section, r_offset,
+                                           r_addend));
 }
 
 // Emit any saved relocs.
index 6724fd9d3b4179cad9ff64453c69698f1863bbec..a9a9ec172cad323e69912070fba6812187b8711f 100644 (file)
@@ -65,10 +65,15 @@ class Copy_relocs
   // will wind up.  REL is the reloc itself.  The Output_data_reloc
   // section is where the dynamic relocs are put.
   void
-  copy_reloc(Symbol_table*, Layout*, Sized_symbol<size>* sym,
+  copy_reloc(Symbol_table*,
+            Layout*,
+            Sized_symbol<size>* sym,
              Sized_relobj_file<size, big_endian>* object,
-            unsigned int shndx, Output_section* output_section,
-            const Reloc& rel,
+            unsigned int shndx,
+            Output_section* output_section,
+            unsigned int r_type,
+            typename elfcpp::Elf_types<size>::Elf_Addr r_offset,
+            typename elfcpp::Elf_types<size>::Elf_Swxword r_addend,
             Output_data_reloc<sh_type, true, size, big_endian>*);
 
   // Return whether there are any saved relocations.
@@ -135,8 +140,13 @@ class Copy_relocs
 
   // Save a reloc against SYM for possible emission later.
   void
-  save(Symbol*, Sized_relobj_file<size, big_endian>*, unsigned int shndx,
-       Output_section*, const Reloc& rel);
+  save(Symbol*,
+       Sized_relobj_file<size, big_endian>*,
+       unsigned int shndx,
+       Output_section*,
+       unsigned int r_type,
+       typename elfcpp::Elf_types<size>::Elf_Addr r_offset,
+       typename elfcpp::Elf_types<size>::Elf_Swxword r_addend);
 
   // The target specific relocation type of the COPY relocation.
   const unsigned int copy_reloc_type_;
index 386de03cfe11cee9130ee91ab0be6fc5f7c27f4b..4f41be4a61731610a10ef175a0b3130c94d1d094 100644 (file)
@@ -828,9 +828,11 @@ class Target_i386 : public Sized_target<32, false>
             unsigned int shndx, Output_section* output_section,
             Symbol* sym, const elfcpp::Rel<32, false>& reloc)
   {
+    unsigned int r_type = elfcpp::elf_r_type<32>(reloc.get_r_info());
     this->copy_relocs_.copy_reloc(symtab, layout,
                                  symtab->get_sized_symbol<32>(sym),
-                                 object, shndx, output_section, reloc,
+                                 object, shndx, output_section,
+                                 r_type, reloc.get_r_offset(), 0,
                                  this->rel_dyn_section(layout));
   }
 
index 6cfe924ecd58ca15046761aea2dad26d199292f3..051d49a1d3fdffd0398cba0cbae96b1ca798246a 100644 (file)
@@ -3602,10 +3602,12 @@ class Target_mips : public Sized_target<size, big_endian>
              unsigned int shndx, Output_section* output_section,
              Symbol* sym, const elfcpp::Rel<size, big_endian>& reloc)
   {
+    unsigned int r_type = elfcpp::elf_r_type<size>(reloc.get_r_info());
     this->copy_relocs_.copy_reloc(symtab, layout,
                                   symtab->get_sized_symbol<size>(sym),
                                   object, shndx, output_section,
-                                  reloc, this->rel_dyn_section(layout));
+                                 r_type, reloc.get_r_offset(), 0,
+                                  this->rel_dyn_section(layout));
   }
 
   void
index 28bcd56ad55c9dae95d8df62b443ab4ef6e2236f..e99137169959e1763ee944c78f242bdd13b32edf 100644 (file)
@@ -1207,10 +1207,13 @@ class Target_powerpc : public Sized_target<size, big_endian>
             unsigned int shndx, Output_section* output_section,
             Symbol* sym, const elfcpp::Rela<size, big_endian>& reloc)
   {
+    unsigned int r_type = elfcpp::elf_r_type<size>(reloc.get_r_info());
     this->copy_relocs_.copy_reloc(symtab, layout,
                                  symtab->get_sized_symbol<size>(sym),
                                  object, shndx, output_section,
-                                 reloc, this->rela_dyn_section(layout));
+                                 r_type, reloc.get_r_offset(),
+                                 reloc.get_r_addend(),
+                                 this->rela_dyn_section(layout));
   }
 
   // Look over all the input sections, deciding where to place stubs.
index 020fb15c973cdf47710dc8935d9e7730c7203232..e329703c383a1e32ab0dbac66879a180a7799a33 100644 (file)
@@ -681,10 +681,13 @@ class Target_s390 : public Sized_target<size, true>
             unsigned int shndx, Output_section* output_section,
             Symbol* sym, const elfcpp::Rela<size, true>& reloc)
   {
+    unsigned int r_type = elfcpp::elf_r_type<size>(reloc.get_r_info());
     this->copy_relocs_.copy_reloc(symtab, layout,
                                  symtab->get_sized_symbol<size>(sym),
                                  object, shndx, output_section,
-                                 reloc, this->rela_dyn_section(layout));
+                                 r_type, reloc.get_r_offset(),
+                                 reloc.get_r_addend(),
+                                 this->rela_dyn_section(layout));
   }
 
   // Information about this specific target which we pass to the
index fc0dc81180811abe65e3cc69ae7dc8b047576718..2b11550e098263206a9aabf46f02bf3afcdf382a 100644 (file)
@@ -415,10 +415,13 @@ class Target_sparc : public Sized_target<size, big_endian>
             unsigned int shndx, Output_section* output_section,
             Symbol* sym, const elfcpp::Rela<size, big_endian>& reloc)
   {
+    unsigned int r_type = elfcpp::elf_r_type<size>(reloc.get_r_info());
     this->copy_relocs_.copy_reloc(symtab, layout,
                                  symtab->get_sized_symbol<size>(sym),
                                  object, shndx, output_section,
-                                 reloc, this->rela_dyn_section(layout));
+                                 r_type, reloc.get_r_offset(),
+                                 reloc.get_r_addend(),
+                                 this->rela_dyn_section(layout));
   }
 
   // Information about this specific target which we pass to the
index ce449a425b56096d65ee732e70f5792e0623074a..b74c8c749d72006482e722e1abf08a5e342bae0c 100644 (file)
@@ -594,10 +594,13 @@ class Target_tilegx : public Sized_target<size, big_endian>
              unsigned int shndx, Output_section* output_section,
              Symbol* sym, const elfcpp::Rela<size, big_endian>& reloc)
   {
+    unsigned int r_type = elfcpp::elf_r_type<size>(reloc.get_r_info());
     this->copy_relocs_.copy_reloc(symtab, layout,
                                   symtab->get_sized_symbol<size>(sym),
                                   object, shndx, output_section,
-                                  reloc, this->rela_dyn_section(layout));
+                                 r_type, reloc.get_r_offset(),
+                                 reloc.get_r_addend(),
+                                  this->rela_dyn_section(layout));
   }
 
   // Information about this specific target which we pass to the
index 3651d398ff673ab0d56ed8a0211482ccf132ead7..503a677a00ef10f408c510d0db4d5b27609631b4 100644 (file)
@@ -968,10 +968,13 @@ class Target_x86_64 : public Sized_target<size, false>
             unsigned int shndx, Output_section* output_section,
             Symbol* sym, const elfcpp::Rela<size, false>& reloc)
   {
+    unsigned int r_type = elfcpp::elf_r_type<size>(reloc.get_r_info());
     this->copy_relocs_.copy_reloc(symtab, layout,
                                  symtab->get_sized_symbol<size>(sym),
                                  object, shndx, output_section,
-                                 reloc, this->rela_dyn_section(layout));
+                                 r_type, reloc.get_r_offset(),
+                                 reloc.get_r_addend(),
+                                 this->rela_dyn_section(layout));
   }
 
   // Information about this specific target which we pass to the
This page took 0.061665 seconds and 4 git commands to generate.