aboutsummaryrefslogtreecommitdiff
path: root/bfd
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2007-12-24 16:55:39 +0000
committerH.J. Lu <hjl.tools@gmail.com>2007-12-24 16:55:39 +0000
commit147d51c2327f0f36ddab7e2766087a902f8d83c1 (patch)
treef336d7d660e7da2e09b28179f134e0ce1ef90a73 /bfd
parent5a517ebd81c05da8cf39fd9a9b8dddb4042009f6 (diff)
downloadfsf-binutils-gdb-147d51c2327f0f36ddab7e2766087a902f8d83c1.zip
fsf-binutils-gdb-147d51c2327f0f36ddab7e2766087a902f8d83c1.tar.gz
fsf-binutils-gdb-147d51c2327f0f36ddab7e2766087a902f8d83c1.tar.bz2
2007-12-24 H.J. Lu <hongjiu.lu@intel.com>
PR binutils/5449 * elf.c (rewrite_elf_program_header): Don't adjust p_paddr if p_paddr is set to 0. (copy_private_bfd_data): Call rewrite_elf_program_header if p_paddr is set to 0. * elfcode.h (elf_swap_phdr_out): Set p_paddr to 0 if needed. * elfxx-ia64.c (ELF_MAXPAGESIZE): Don't redefine it for HPUX.
Diffstat (limited to 'bfd')
-rw-r--r--bfd/ChangeLog12
-rw-r--r--bfd/elf.c19
-rw-r--r--bfd/elfcode.h8
-rw-r--r--bfd/elfxx-ia64.c2
4 files changed, 36 insertions, 5 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index bd61104..8ebd721 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,15 @@
+2007-12-24 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR binutils/5449
+ * elf.c (rewrite_elf_program_header): Don't adjust p_paddr if
+ p_paddr is set to 0.
+ (copy_private_bfd_data): Call rewrite_elf_program_header if
+ p_paddr is set to 0.
+
+ * elfcode.h (elf_swap_phdr_out): Set p_paddr to 0 if needed.
+
+ * elfxx-ia64.c (ELF_MAXPAGESIZE): Don't redefine it for HPUX.
+
2007-12-21 Bob Wilson <bob.wilson@acm.org>
* elf32-xtensa.c (relax_section): Update DIFF relocations in the
diff --git a/bfd/elf.c b/bfd/elf.c
index f0b2e4d..a4607e5 100644
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -5392,9 +5392,13 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd)
first_matching_lma = TRUE;
first_suggested_lma = TRUE;
- for (j = 0, section = ibfd->sections;
+ for (section = ibfd->sections;
section != NULL;
section = section->next)
+ if (section == first_section)
+ break;
+
+ for (j = 0; section != NULL; section = section->next)
{
if (INCLUDE_SECTION_IN_SEGMENT (section, segment, bed))
{
@@ -5444,6 +5448,9 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd)
suggested_lma = output_section->lma;
first_suggested_lma = FALSE;
}
+
+ if (j == section_count)
+ break;
}
}
@@ -5461,7 +5468,8 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd)
*pointer_to_map = map;
pointer_to_map = &map->next;
- if (matching_lma != map->p_paddr
+ if (!bed->want_p_paddr_set_to_zero
+ && matching_lma != map->p_paddr
&& !map->includes_filehdr && !map->includes_phdrs)
/* There is some padding before the first section in the
segment. So, we must account for that in the output
@@ -5815,6 +5823,13 @@ copy_private_bfd_data (bfd *ibfd, bfd *obfd)
asection *section, *osec;
unsigned int i, num_segments;
Elf_Internal_Shdr *this_hdr;
+ const struct elf_backend_data *bed;
+
+ bed = get_elf_backend_data (ibfd);
+
+ /* Regenerate the segment map if p_paddr is set to 0. */
+ if (bed->want_p_paddr_set_to_zero)
+ goto rewrite;
/* Initialize the segment mark field. */
for (section = obfd->sections; section != NULL;
diff --git a/bfd/elfcode.h b/bfd/elfcode.h
index ea2a6d3..969c25a 100644
--- a/bfd/elfcode.h
+++ b/bfd/elfcode.h
@@ -370,11 +370,17 @@ elf_swap_phdr_out (bfd *abfd,
const Elf_Internal_Phdr *src,
Elf_External_Phdr *dst)
{
+ const struct elf_backend_data *bed;
+ bfd_vma p_paddr;
+
+ bed = get_elf_backend_data (abfd);
+ p_paddr = bed->want_p_paddr_set_to_zero ? 0 : src->p_paddr;
+
/* note that all elements of dst are *arrays of unsigned char* already... */
H_PUT_32 (abfd, src->p_type, dst->p_type);
H_PUT_WORD (abfd, src->p_offset, dst->p_offset);
H_PUT_WORD (abfd, src->p_vaddr, dst->p_vaddr);
- H_PUT_WORD (abfd, src->p_paddr, dst->p_paddr);
+ H_PUT_WORD (abfd, p_paddr, dst->p_paddr);
H_PUT_WORD (abfd, src->p_filesz, dst->p_filesz);
H_PUT_WORD (abfd, src->p_memsz, dst->p_memsz);
H_PUT_32 (abfd, src->p_flags, dst->p_flags);
diff --git a/bfd/elfxx-ia64.c b/bfd/elfxx-ia64.c
index 0c975c5..5aa1a0a 100644
--- a/bfd/elfxx-ia64.c
+++ b/bfd/elfxx-ia64.c
@@ -5715,8 +5715,6 @@ elfNN_hpux_backend_symbol_processing (bfd *abfd ATTRIBUTE_UNUSED,
#undef elf_backend_want_p_paddr_set_to_zero
#define elf_backend_want_p_paddr_set_to_zero 1
-#undef ELF_MAXPAGESIZE
-#define ELF_MAXPAGESIZE 0x1000 /* 4K */
#undef ELF_COMMONPAGESIZE
#undef ELF_OSABI
#define ELF_OSABI ELFOSABI_HPUX