PR 7091
authorIan Lance Taylor <ian@airs.com>
Fri, 12 Dec 2008 02:41:39 +0000 (02:41 +0000)
committerIan Lance Taylor <ian@airs.com>
Fri, 12 Dec 2008 02:41:39 +0000 (02:41 +0000)
* target-reloc.h (Default_scan_relocatable_relocs): For each
function, map r_type == 0 to RELOC_DISCARD.

gold/ChangeLog
gold/target-reloc.h

index 85482bb20e7c052cd706e64bbe7bd313af55dfbd..28ba2994b793c39c4e148f163d1989e4b87cfe5c 100644 (file)
@@ -1,3 +1,9 @@
+2008-12-11  Ian Lance Taylor  <iant@google.com>
+
+       PR 7091
+       * target-reloc.h (Default_scan_relocatable_relocs): For each
+       function, map r_type == 0 to RELOC_DISCARD.
+
 2008-12-10  Cary Coutant  <ccoutant@google.com>
 
        * layout.cc (Layout::add_comdat): Allow COMDAT group from a replacement
index 935d76bc24e6e10bfedda8bda5c81e83b11dada1..3205e3666d8ef7fee1639e9591aa0d5c1cae06ba 100644 (file)
@@ -308,14 +308,24 @@ class Default_scan_relocatable_relocs
   // Return the strategy to use for a local symbol which is not a
   // section symbol, given the relocation type.
   inline Relocatable_relocs::Reloc_strategy
-  local_non_section_strategy(unsigned int, Relobj*)
-  { return Relocatable_relocs::RELOC_COPY; }
+  local_non_section_strategy(unsigned int r_type, Relobj*)
+  {
+    // We assume that relocation type 0 is NONE.  Targets which are
+    // different must override.
+    if (r_type == 0)
+      return Relocatable_relocs::RELOC_DISCARD;
+    return Relocatable_relocs::RELOC_COPY;
+  }
 
   // Return the strategy to use for a local symbol which is a section
   // symbol, given the relocation type.
   inline Relocatable_relocs::Reloc_strategy
   local_section_strategy(unsigned int r_type, Relobj* object)
   {
+    // We assume that relocation type 0 is NONE.  Targets which are
+    // different must override.
+    if (r_type == 0)
+      return Relocatable_relocs::RELOC_DISCARD;
     if (sh_type == elfcpp::SHT_RELA)
       return Relocatable_relocs::RELOC_ADJUST_FOR_SECTION_RELA;
     else
@@ -342,8 +352,14 @@ class Default_scan_relocatable_relocs
   // Return the strategy to use for a global symbol, given the
   // relocation type, the object, and the symbol index.
   inline Relocatable_relocs::Reloc_strategy
-  global_strategy(unsigned int, Relobj*, unsigned int)
-  { return Relocatable_relocs::RELOC_COPY; }
+  global_strategy(unsigned int r_type, Relobj*, unsigned int)
+  {
+    // We assume that relocation type 0 is NONE.  Targets which are
+    // different must override.
+    if (r_type == 0)
+      return Relocatable_relocs::RELOC_DISCARD;
+    return Relocatable_relocs::RELOC_COPY;
+  }
 };
 
 // Scan relocs during a relocatable link.  This is a default