From 28e40441e57e859f9e2e6d3dc92f48fbee2f9667 Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Thu, 5 Jan 2012 09:57:18 +0000 Subject: [PATCH] PR ld/12161 * elf32-avr.c (elf32_avr_relax_delete_bytes): Read in relocs if necessary. --- bfd/ChangeLog | 6 ++++++ bfd/elf32-avr.c | 14 ++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index eeef5a6c1..e5444993e 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2012-01-05 Nick Clifton + + PR ld/12161 + * elf32-avr.c (elf32_avr_relax_delete_bytes): Read in relocs if + necessary. + 2012-01-05 Jan Kratochvil Fix zero registers core files when built by gcc-4.7. diff --git a/bfd/elf32-avr.c b/bfd/elf32-avr.c index 6d20aefdc..a7f921741 100644 --- a/bfd/elf32-avr.c +++ b/bfd/elf32-avr.c @@ -1503,11 +1503,18 @@ elf32_avr_relax_delete_bytes (bfd *abfd, 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 @@ elf32_avr_relax_delete_bytes (bfd *abfd, /* else...Reference symbol is extern. No need for adjusting the addend. */ } + + if (elf_section_data (isec)->relocs == NULL) + free (irelend - isec->reloc_count); } } -- 2.11.4.GIT