* merge.h (Output_merge_string::Merged_string): Remove object, shndx,
[binutils-gdb.git] / gold / target-reloc.h
index 04854d2d60eeb4d7f0ad480e54f53d6ece4f28eb..23866e373d5690f8f77dc08f167f5376a331df67 100644 (file)
@@ -341,7 +341,7 @@ relocate_section(
        }
 
       if (sym != NULL
-         && sym->is_undefined()
+         && (sym->is_undefined() || sym->is_placeholder())
          && sym->binding() != elfcpp::STB_WEAK
          && !is_defined_in_discarded_section
           && !target->is_defined_by_abi(sym)
@@ -515,7 +515,7 @@ relocate_for_relocatable(
     const Relocatable_relocs* rr,
     unsigned char* view,
     typename elfcpp::Elf_types<size>::Elf_Addr view_address,
-    section_size_type,
+    section_size_type view_size,
     unsigned char* reloc_view,
     section_size_type reloc_view_size)
 {
@@ -537,6 +537,19 @@ relocate_for_relocatable(
       if (strategy == Relocatable_relocs::RELOC_DISCARD)
        continue;
 
+      if (strategy == Relocatable_relocs::RELOC_SPECIAL)
+       {
+         // Target wants to handle this relocation.
+         Sized_target<size, big_endian>* target =
+           parameters->sized_target<size, big_endian>();
+         target->relocate_special_relocatable(relinfo, sh_type, prelocs,
+                                              i, output_section,
+                                              offset_in_output_section,
+                                              view, view_address,
+                                              view_size, pwrite);
+         pwrite += reloc_size;
+         continue;
+       }
       Reltype reloc(prelocs);
       Reltype_write reloc_write(pwrite);