Don't add PHDR for objcopy/strip or ld script specifying PHDRS
authorAlan Modra <amodra@gmail.com>
Mon, 12 Dec 2016 23:00:06 +0000 (09:30 +1030)
committerAlan Modra <amodra@gmail.com>
Mon, 12 Dec 2016 23:07:59 +0000 (09:37 +1030)
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.

bfd/ChangeLog
bfd/elf64-hppa.c
ld/ChangeLog
ld/testsuite/ld-elf/nobits-1.d
ld/testsuite/ld-elf/note-1.d
ld/testsuite/ld-elf/note-2.d

index b461ebeb205e49ec3afcea79737a09d8721cfef8..26d4084baae14db077409d8ce8a885ac897398e6 100644 (file)
@@ -1,3 +1,8 @@
+2016-12-13  Alan Modra  <amodra@gmail.com>
+
+       * 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  <amodra@gmail.com>
 
        * elf32-rx.c (elf32_rx_modify_program_headers): Don't adjust
index 0e19f0a728a3a8d46afbccd0916d78f8626ff84c..46190db2d325543cb9f1d260302de7872aeb6415 100644 (file)
@@ -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;
index 08d5a69e3099853a9f45a96dc3023e55db7a1d5d..7252e6bbdaa80e706e3492ad089a836965edf0fb 100644 (file)
@@ -1,3 +1,9 @@
+2016-12-13  Alan Modra  <amodra@gmail.com>
+
+       * 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  <amodra@gmail.com>
 
        * testsuite/ld-elf/flags1.d: Run for RX.
index 89f0e10f6fe3774dc6863252c8f1966d7fdc00d6..9b90b6f76afba9f54f327f2b1d3e655e814f59e8 100644 (file)
@@ -1,7 +1,5 @@
 #ld: -Tnobits-1.t
 #readelf: -l --wide
-#xfail: hppa64-*-*
-# hppa64 adds PHDR
 
 #...
  Section to Segment mapping:
index 345a2bb8b323efaa6cb55b87c452b2d7bbd07c0f..a5fc40f2e697083c4f15ea6b9d4359e339b6d2a0 100644 (file)
@@ -1,7 +1,5 @@
 #ld: -Tnote-1.t
 #readelf: -l --wide
-#xfail: hppa64-*-*
-# hppa64 adds PHDR
 
 #...
  Section to Segment mapping:
index 289134e3eb875ee84ad4dc0923e1556d44ab67f6..aff32406de20e0b6585b5f7b9675f454fe99ebc8 100644 (file)
@@ -1,8 +1,6 @@
 #ld: -Tnote-2.t
 #objcopy_linked_file: -R .foo 
 #readelf: -l --wide
-#xfail: hppa64-*-*
-# hppa64 adds PHDR
 
 #...
 Program Headers: