From: Alan Modra Date: Mon, 29 Sep 2008 14:12:02 +0000 (+0000) Subject: bfd/ X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=ceae84aacf0d5459a74fd5496cd2c0d6708e052a;p=binutils-gdb.git bfd/ PR 6789 * elf.c (assign_file_positions_for_load_sections): Call _bfd_elf_map_sections_to_segments, not elf_modify_segment_map. (get_program_header_size): Protect against NULL info. (_bfd_elf_map_sections_to_segments): Likewise. * elf32-spu.c (spu_elf_additional_program_headers): Likewise. ld/testsuite/ * ld-elf/extract-symbol-1sec.d: Correct section lma. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 54244d91116..5e51bac8c80 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,12 @@ +2008-09-29 Alan Modra + + PR 6789 + * elf.c (assign_file_positions_for_load_sections): Call + _bfd_elf_map_sections_to_segments, not elf_modify_segment_map. + (get_program_header_size): Protect against NULL info. + (_bfd_elf_map_sections_to_segments): Likewise. + * elf32-spu.c (spu_elf_additional_program_headers): Likewise. + 2008-09-29 Nick Clifton * po/vi.po: Updated Vietnamese translation. @@ -16,7 +25,8 @@ 2008-09-17 Bob Wilson - * elf32-xtensa.c (elf_xtensa_check_relocs): Check for negative refcount. + * elf32-xtensa.c (elf_xtensa_check_relocs): Check for negative + refcount. 2008-09-17 Jan Kratochvil diff --git a/bfd/elf.c b/bfd/elf.c index e8c6c239acb..763750b8827 100644 --- a/bfd/elf.c +++ b/bfd/elf.c @@ -3380,7 +3380,7 @@ get_program_header_size (bfd *abfd, struct bfd_link_info *info) ++segs; } - if (info->relro) + if (info != NULL && info->relro) { /* We need a PT_GNU_RELRO segment. */ ++segs; @@ -3762,8 +3762,13 @@ _bfd_elf_map_sections_to_segments (bfd *abfd, struct bfd_link_info *info) } /* Allow interested parties a chance to override our decision. */ - if (last_hdr && info->callbacks->override_segment_assignment) - new_segment = info->callbacks->override_segment_assignment (info, abfd, hdr, last_hdr, new_segment); + if (last_hdr != NULL + && info != NULL + && info->callbacks->override_segment_assignment != NULL) + new_segment + = info->callbacks->override_segment_assignment (info, abfd, hdr, + last_hdr, + new_segment); if (! new_segment) { @@ -3938,7 +3943,7 @@ _bfd_elf_map_sections_to_segments (bfd *abfd, struct bfd_link_info *info) pm = &m->next; } - if (info->relro) + if (info != NULL && info->relro) { for (m = mfirst; m != NULL; m = m->next) { @@ -4122,7 +4127,7 @@ assign_file_positions_for_load_sections (bfd *abfd, unsigned int i, j; if (link_info == NULL - && !elf_modify_segment_map (abfd, link_info, FALSE)) + && !_bfd_elf_map_sections_to_segments (abfd, link_info)) return FALSE; alloc = 0; diff --git a/bfd/elf32-spu.c b/bfd/elf32-spu.c index 17ff079c0cc..00681b2b5b9 100644 --- a/bfd/elf32-spu.c +++ b/bfd/elf32-spu.c @@ -4245,10 +4245,15 @@ spu_elf_post_process_headers (bfd *abfd, static int spu_elf_additional_program_headers (bfd *abfd, struct bfd_link_info *info) { - struct spu_link_hash_table *htab = spu_hash_table (info); - int extra = htab->num_overlays; + int extra = 0; asection *sec; + if (info != NULL) + { + struct spu_link_hash_table *htab = spu_hash_table (info); + extra = htab->num_overlays; + } + if (extra) ++extra; diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index ea0d673c6ac..5e928d54159 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2008-09-29 Alan Modra + + * ld-elf/extract-symbol-1sec.d: Correct section lma. + 2008-09-25 Alan Modra * ld-elf/eh-group.exp: Only run on ELF targets. diff --git a/ld/testsuite/ld-elf/extract-symbol-1sec.d b/ld/testsuite/ld-elf/extract-symbol-1sec.d index 87d42af9250..cbe0144dee8 100644 --- a/ld/testsuite/ld-elf/extract-symbol-1sec.d +++ b/ld/testsuite/ld-elf/extract-symbol-1sec.d @@ -7,7 +7,7 @@ #... Sections: *Idx +Name +Size +VMA +LMA .* - *0 +\.foo +0+ +0+10000 +0+10000 .* + *0 +\.foo +0+ +0+10000 +0+ .* *CONTENTS, ALLOC, LOAD, CODE - *1 +\.bar +0+ +0+20000 +0+20000 .* + *1 +\.bar +0+ +0+20000 +0+10000 .* *ALLOC, READONLY, CODE