File avr-binutils-relocs.patch of Package binutils

===================================================================
RCS file: /cvs/src/src/bfd/elf32-avr.c,v
retrieving revision 1.51
retrieving revision 1.51.2.1
diff -u -r1.51 -r1.51.2.1
--- src/bfd/elf32-avr.c	2011/06/02 13:43:14	1.51
+++ src/bfd/elf32-avr.c	2012/02/01 17:07:37	1.51.2.1
@@ -1503,11 +1503,18 @@
        bfd_vma symval;
        bfd_vma shrinked_insn_address;
 
+       if (isec->reloc_count == 0)
+	 continue;
+
        shrinked_insn_address = (sec->output_section->vma
                                 + sec->output_offset + addr - count);
 
-       irelend = elf_section_data (isec)->relocs + isec->reloc_count;
-       for (irel = elf_section_data (isec)->relocs;
+       irel = elf_section_data (isec)->relocs;
+       /* PR 12161: Read in the relocs for this section if necessary.  */
+       if (irel == NULL)
+	 irel = _bfd_elf_link_read_relocs (abfd, isec, NULL, NULL, FALSE);
+
+       for (irelend = irel + isec->reloc_count;
             irel < irelend;
             irel++)
          {
@@ -1564,6 +1571,9 @@
 	   /* else...Reference symbol is extern.  No need for adjusting
 	      the addend.  */
 	 }
+
+       if (elf_section_data (isec)->relocs == NULL)
+	 free (irelend - isec->reloc_count);
      }
   }