diff options
author | Jakub Jelinek <jakub@redhat.com> | 2005-01-07 09:52:00 +0000 |
---|---|---|
committer | Jakub Jelinek <jakub@redhat.com> | 2005-01-07 09:52:00 +0000 |
commit | 6f79b21913185d4d44a805bdd03922fb7851eec7 (patch) | |
tree | 1ba242a038238b835fd3f064ea087c3886d3909b /bfd | |
parent | 77690eeaa4149023edf2895a687cd53ceb77e64a (diff) | |
download | gdb-6f79b21913185d4d44a805bdd03922fb7851eec7.zip gdb-6f79b21913185d4d44a805bdd03922fb7851eec7.tar.gz gdb-6f79b21913185d4d44a805bdd03922fb7851eec7.tar.bz2 |
* bfd/elf.c (INCLUDE_SECTION_IN_SEGMENT): Don't put empty sections into
PT_DYNAMIC segment, unless .dynamic.
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/ChangeLog | 5 | ||||
-rw-r--r-- | bfd/elf.c | 11 |
2 files changed, 15 insertions, 1 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 77186e0..309f84b0 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2005-01-07 Jakub Jelinek <jakub@redhat.com> + + * bfd/elf.c (INCLUDE_SECTION_IN_SEGMENT): Don't put empty sections into + PT_DYNAMIC segment, unless .dynamic. + 2005-01-06 Paul Brook <paul@codesourcery.com> * config.bfd: Add entry for arm-*-vxworks and arm-*-windiss. @@ -4965,7 +4965,9 @@ copy_private_bfd_data (bfd *ibfd, bfd *obfd) 4. The section has not already been allocated to a previous segment. 5. PT_GNU_STACK segments do not include any sections. 6. PT_TLS segment includes only SHF_TLS sections. - 7. SHF_TLS sections are only in PT_TLS or PT_LOAD segments. */ + 7. SHF_TLS sections are only in PT_TLS or PT_LOAD segments. + 8. PT_DYNAMIC should not contain empty sections at the beginning + (with the possible exception of .dynamic). */ #define INCLUDE_SECTION_IN_SEGMENT(section, segment, bed) \ ((((segment->p_paddr \ ? IS_CONTAINED_BY_LMA (section, segment, segment->p_paddr) \ @@ -4979,6 +4981,13 @@ copy_private_bfd_data (bfd *ibfd, bfd *obfd) && (segment->p_type == PT_LOAD \ || segment->p_type == PT_TLS \ || (section->flags & SEC_THREAD_LOCAL) == 0) \ + && (segment->p_type != PT_DYNAMIC \ + || SECTION_SIZE (section, segment) > 0 \ + || (segment->p_paddr \ + ? segment->p_paddr != section->lma \ + : segment->p_vaddr != section->vma) \ + || (strcmp (bfd_get_section_name (ibfd, section), ".dynamic") \ + == 0)) \ && ! section->segment_mark) /* Returns TRUE iff seg1 starts after the end of seg2. */ |