From: Alan Modra Date: Mon, 12 Dec 2016 23:00:06 +0000 (+1030) Subject: Don't add PHDR for objcopy/strip or ld script specifying PHDRS X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=22b05d33b4c870d65972ff8aefdd297ddc66d139;p=binutils-gdb.git Don't add PHDR for objcopy/strip or ld script specifying PHDRS HPPA64 needs to add a DT_PHDR header for shared libs. That's fine when linking but shouldn't happen for strip/objcopy. Also PHDR must come first so there's no need to look at all program headers. bfd/ * elf64-hppa.c (elf64_hppa_modify_segment_map): Don't add PHDR for objcopy/strip or when a ld script specifies PHDRS. ld/ * testsuite/ld-elf/nobits-1.d: Remove xfail for hppa64. * testsuite/ld-elf/note-1.d: Likewise. * testsuite/ld-elf/note-2.d: Likewise. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index b461ebeb205..26d4084baae 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2016-12-13 Alan Modra + + * elf64-hppa.c (elf64_hppa_modify_segment_map): Don't add PHDR + for objcopy/strip or when a ld script specifies PHDRS. + 2016-12-13 Alan Modra * elf32-rx.c (elf32_rx_modify_program_headers): Don't adjust diff --git a/bfd/elf64-hppa.c b/bfd/elf64-hppa.c index 0e19f0a728a..46190db2d32 100644 --- a/bfd/elf64-hppa.c +++ b/bfd/elf64-hppa.c @@ -2688,38 +2688,29 @@ elf64_hppa_allow_non_load_phdr (bfd *abfd ATTRIBUTE_UNUSED, existence of a .interp section. */ static bfd_boolean -elf64_hppa_modify_segment_map (bfd *abfd, - struct bfd_link_info *info ATTRIBUTE_UNUSED) +elf64_hppa_modify_segment_map (bfd *abfd, struct bfd_link_info *info) { struct elf_segment_map *m; - asection *s; - s = bfd_get_section_by_name (abfd, ".interp"); - if (! s) + m = elf_seg_map (abfd); + if (info != NULL && !info->user_phdrs && m != NULL && m->p_type != PT_PHDR) { - for (m = elf_seg_map (abfd); m != NULL; m = m->next) - if (m->p_type == PT_PHDR) - break; - + m = ((struct elf_segment_map *) + bfd_zalloc (abfd, (bfd_size_type) sizeof *m)); if (m == NULL) - { - m = ((struct elf_segment_map *) - bfd_zalloc (abfd, (bfd_size_type) sizeof *m)); - if (m == NULL) - return FALSE; + return FALSE; - m->p_type = PT_PHDR; - m->p_flags = PF_R | PF_X; - m->p_flags_valid = 1; - m->p_paddr_valid = 1; - m->includes_phdrs = 1; + m->p_type = PT_PHDR; + m->p_flags = PF_R | PF_X; + m->p_flags_valid = 1; + m->p_paddr_valid = 1; + m->includes_phdrs = 1; - m->next = elf_seg_map (abfd); - elf_seg_map (abfd) = m; - } + m->next = elf_seg_map (abfd); + elf_seg_map (abfd) = m; } - for (m = elf_seg_map (abfd); m != NULL; m = m->next) + for (m = elf_seg_map (abfd) ; m != NULL; m = m->next) if (m->p_type == PT_LOAD) { unsigned int i; diff --git a/ld/ChangeLog b/ld/ChangeLog index 08d5a69e309..7252e6bbdaa 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,9 @@ +2016-12-13 Alan Modra + + * testsuite/ld-elf/nobits-1.d: Remove xfail for hppa64. + * testsuite/ld-elf/note-1.d: Likewise. + * testsuite/ld-elf/note-2.d: Likewise. + 2016-12-13 Alan Modra * testsuite/ld-elf/flags1.d: Run for RX. diff --git a/ld/testsuite/ld-elf/nobits-1.d b/ld/testsuite/ld-elf/nobits-1.d index 89f0e10f6fe..9b90b6f76af 100644 --- a/ld/testsuite/ld-elf/nobits-1.d +++ b/ld/testsuite/ld-elf/nobits-1.d @@ -1,7 +1,5 @@ #ld: -Tnobits-1.t #readelf: -l --wide -#xfail: hppa64-*-* -# hppa64 adds PHDR #... Section to Segment mapping: diff --git a/ld/testsuite/ld-elf/note-1.d b/ld/testsuite/ld-elf/note-1.d index 345a2bb8b32..a5fc40f2e69 100644 --- a/ld/testsuite/ld-elf/note-1.d +++ b/ld/testsuite/ld-elf/note-1.d @@ -1,7 +1,5 @@ #ld: -Tnote-1.t #readelf: -l --wide -#xfail: hppa64-*-* -# hppa64 adds PHDR #... Section to Segment mapping: diff --git a/ld/testsuite/ld-elf/note-2.d b/ld/testsuite/ld-elf/note-2.d index 289134e3eb8..aff32406de2 100644 --- a/ld/testsuite/ld-elf/note-2.d +++ b/ld/testsuite/ld-elf/note-2.d @@ -1,8 +1,6 @@ #ld: -Tnote-2.t #objcopy_linked_file: -R .foo #readelf: -l --wide -#xfail: hppa64-*-* -# hppa64 adds PHDR #... Program Headers: