aboutsummaryrefslogtreecommitdiff
path: root/bfd
diff options
context:
space:
mode:
Diffstat (limited to 'bfd')
-rw-r--r--bfd/ChangeLog7
-rw-r--r--bfd/elf.c22
2 files changed, 15 insertions, 14 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 07946e6..7c7ae13 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,10 @@
+2007-03-20 Nick Clifton <nickc@redhat.com>
+
+ PR binutils/3535
+ * elf.c (copy_private_bfd_data): Widen the scope of Solaris
+ specific conditions that need the program headers to be
+ rewritten.
+
2003-03-19 H.J. Lu <hongjiu.lu@intel.com>
* peXXigen.c (_bfd_XXi_swap_aouthdr_in): Store Magic,
diff --git a/bfd/elf.c b/bfd/elf.c
index 05d45e1..0a6eaa0 100644
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -5915,21 +5915,15 @@ copy_private_bfd_data (bfd *ibfd, bfd *obfd)
i < num_segments;
i++, segment++)
{
- /* This is a different version of the IS_SOLARIS_PT_INTERP
- macro to the one defined in rewrite_elf_program_header(). */
-#define IS_SOLARIS_PT_INTERP(p) \
- (p->p_type == PT_INTERP \
- && p->p_vaddr == 0 \
- && p->p_paddr == 0 \
- && p->p_memsz == 0 \
- && p->p_filesz > 0)
-
- /* PR binutils/3535. The Solaris interpreter program header
- needs special treatment, so we always rewrite the headers
- when one is detected. */
- if (IS_SOLARIS_PT_INTERP (segment))
+ /* PR binutils/3535. The Solaris linker always sets the p_paddr
+ and p_memsz fields of special segments (DYNAMIC, INTERP) to 0
+ which severly confuses things, so always regenerate the segment
+ map in this case. */
+ if (segment->p_paddr == 0
+ && segment->p_memsz == 0
+ && (segment->p_type == PT_INTERP || segment->p_type == PT_DYNAMIC))
goto rewrite;
-
+
for (section = ibfd->sections;
section != NULL; section = section->next)
{