aboutsummaryrefslogtreecommitdiff
path: root/bfd
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2005-01-07 09:52:00 +0000
committerJakub Jelinek <jakub@redhat.com>2005-01-07 09:52:00 +0000
commit6f79b21913185d4d44a805bdd03922fb7851eec7 (patch)
tree1ba242a038238b835fd3f064ea087c3886d3909b /bfd
parent77690eeaa4149023edf2895a687cd53ceb77e64a (diff)
downloadgdb-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/ChangeLog5
-rw-r--r--bfd/elf.c11
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.
diff --git a/bfd/elf.c b/bfd/elf.c
index 3c1f380..a3126b4 100644
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -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. */