From 5a9fb06bd59a5f8363794aab89d96dbce57b4452 Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Fri, 28 Dec 2007 14:45:34 +0000 Subject: * elf32-hppa.c (hppa_record_segment_addr): Locate the segment containing the section using the segment map, rather than guessing based upon the section's vma and file position. --- bfd/elf32-hppa.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) (limited to 'bfd/elf32-hppa.c') diff --git a/bfd/elf32-hppa.c b/bfd/elf32-hppa.c index 0da7e6d06d..20a2f8093b 100644 --- a/bfd/elf32-hppa.c +++ b/bfd/elf32-hppa.c @@ -3266,8 +3266,30 @@ hppa_record_segment_addr (bfd *abfd ATTRIBUTE_UNUSED, if ((section->flags & (SEC_ALLOC | SEC_LOAD)) == (SEC_ALLOC | SEC_LOAD)) { - bfd_vma value = section->vma - section->filepos; + bfd_vma value; + struct elf_segment_map *m; + Elf_Internal_Phdr *p; + + /* Find the segment that contains the output_section for this section. */ + for (m = elf_tdata (abfd)->segment_map, + p = elf_tdata (abfd)->phdr; + m != NULL; + m = m->next, p++) + { + int i; + + for (i = m->count - 1; i >= 0; i--) + if (m->sections[i] == section->output_section) + break; + if (i >= 0) + break; + } + if (m == NULL) + return; + + value = p->p_vaddr; + if ((section->flags & SEC_READONLY) != 0) { if (value < htab->text_segment_base) -- cgit v1.2.1