This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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/elf64-hppa.c b/bfd/elf64-hppa.c
index 0e19f0a..46190db 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/testsuite/ld-elf/nobits-1.d b/ld/testsuite/ld-elf/nobits-1.d
index 89f0e10..9b90b6f 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 345a2bb..a5fc40f 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 289134e..aff3240 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:

-- 
Alan Modra
Australia Development Lab, IBM


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]