]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
* bfd/elf.c (INCLUDE_SECTION_IN_SEGMENT): Don't put empty sections into
authorJakub Jelinek <jakub@redhat.com>
Fri, 7 Jan 2005 09:52:00 +0000 (09:52 +0000)
committerJakub Jelinek <jakub@redhat.com>
Fri, 7 Jan 2005 09:52:00 +0000 (09:52 +0000)
PT_DYNAMIC segment, unless .dynamic.

bfd/ChangeLog
bfd/elf.c

index 77186e00a5c10dad7c1ac5540b8aa8fb505b7bfe..309f84b00d969fea073106189286814e4fc63f82 100644 (file)
@@ -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.
index 3c1f3806f4c01b7670068a451b19246093640968..a3126b4640da53d57b5fbd57b9ac1c5b18b0c730 100644 (file)
--- 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.  */