OSDN Git Service

* elflink.h (elf_link_input_bfd): Don't call reloc_emitter when
authorAlan Modra <amodra@bigpond.net.au>
Tue, 16 Jul 2002 09:00:42 +0000 (09:00 +0000)
committerAlan Modra <amodra@bigpond.net.au>
Tue, 16 Jul 2002 09:00:42 +0000 (09:00 +0000)
reloc section size is zero.  Correct reloc output location.

bfd/ChangeLog
bfd/elflink.h

index f094220..796858d 100644 (file)
@@ -1,3 +1,8 @@
+2002-07-16  Alan Modra  <amodra@bigpond.net.au>
+
+       * elflink.h (elf_link_input_bfd): Don't call reloc_emitter when
+       reloc section size is zero.  Correct reloc output location.
+
 2002-07-16  John David Anglin  <dave@hiauly1.hia.nrc.ca>
 
        * elf-hppa.h (elf_hppa_reloc_final_type): Use R_PARISC_PCREL16F as
index 7fa2ccb..8d2e1e6 100644 (file)
@@ -6945,7 +6945,7 @@ elf_link_input_bfd (finfo, input_bfd)
              Elf_Internal_Rela *irela;
              Elf_Internal_Rela *irelaend;
              struct elf_link_hash_entry **rel_hash;
-             Elf_Internal_Shdr *input_rel_hdr;
+             Elf_Internal_Shdr *input_rel_hdr, *input_rel_hdr2;
              unsigned int next_erel;
              boolean (*reloc_emitter) PARAMS ((bfd *, asection *,
                                                Elf_Internal_Shdr *,
@@ -7115,16 +7115,17 @@ elf_link_input_bfd (finfo, input_bfd)
              else
                reloc_emitter = elf_link_output_relocs;
 
-             if (! (*reloc_emitter) (output_bfd, o, input_rel_hdr,
-                                     internal_relocs))
+             if (input_rel_hdr->sh_size != 0
+                 && ! (*reloc_emitter) (output_bfd, o, input_rel_hdr,
+                                        internal_relocs))
                return false;
 
-             input_rel_hdr = elf_section_data (o)->rel_hdr2;
-             if (input_rel_hdr)
+             input_rel_hdr2 = elf_section_data (o)->rel_hdr2;
+             if (input_rel_hdr2 && input_rel_hdr2->sh_size != 0)
                {
                  internal_relocs += (NUM_SHDR_ENTRIES (input_rel_hdr)
                                      * bed->s->int_rels_per_ext_rel);
-                 if (! (*reloc_emitter) (output_bfd, o, input_rel_hdr,
+                 if (! (*reloc_emitter) (output_bfd, o, input_rel_hdr2,
                                          internal_relocs))
                    return false;
                }