* elf.c (assign_file_positions_for_segments): If a segment
authorIan Lance Taylor <ian@airs.com>
Fri, 12 Jan 1996 22:47:04 +0000 (22:47 +0000)
committerIan Lance Taylor <ian@airs.com>
Fri, 12 Jan 1996 22:47:04 +0000 (22:47 +0000)
contains no sections, don't mark it as readable.

bfd/ChangeLog
bfd/elf.c

index a0d55eb024d43004e698c4d9b41019651805538a..65d3a5ce81932f66c17d4df284e0af820ec53f7f 100644 (file)
@@ -5,6 +5,9 @@ Fri Jan 12 15:27:59 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
 
 Fri Jan 12 13:59:16 1996  Ian Lance Taylor  <ian@cygnus.com>
 
+       * elf.c (assign_file_positions_for_segments): If a segment
+       contains no sections, don't mark it as readable.
+
        * elf-bfd.h (_bfd_elf_section_from_bfd_section): Declare.
        * elfcode.h (_bfd_elf_section_from_bfd_section): Don't declare.
 
index dab0c4d8921e07d12df228aab19fdf4db0bfff52..3a7d2af7f9ffc241b6fa2dfa289291097917b702 100644 (file)
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -1908,6 +1908,8 @@ assign_file_positions_for_segments (abfd)
 
       if (m->p_flags_valid)
        p->p_flags = m->p_flags;
+      else
+       p->p_flags = 0;
 
       if (p->p_type == PT_LOAD && m->count > 0)
        off += (m->sections[0]->vma - off) % bed->maxpagesize;
@@ -1937,6 +1939,8 @@ assign_file_positions_for_segments (abfd)
 
       if (m->includes_filehdr)
        {
+         if (! m->p_flags_valid)
+           p->p_flags |= PF_R;
          p->p_offset = 0;
          p->p_filesz = bed->s->sizeof_ehdr;
          p->p_memsz = bed->s->sizeof_ehdr;
@@ -1956,6 +1960,8 @@ assign_file_positions_for_segments (abfd)
 
       if (m->includes_phdrs)
        {
+         if (! m->p_flags_valid)
+           p->p_flags |= PF_R;
          if (m->includes_filehdr)
            {
              if (p->p_type == PT_LOAD)
@@ -1998,8 +2004,6 @@ assign_file_positions_for_segments (abfd)
            }
        }
 
-      if (! m->p_flags_valid)
-       p->p_flags = PF_R;
       for (i = 0, secpp = m->sections; i < m->count; i++, secpp++)
        {
          asection *sec;
@@ -2043,6 +2047,7 @@ assign_file_positions_for_segments (abfd)
 
          if (! m->p_flags_valid)
            {
+             p->p_flags |= PF_R;
              if ((flags & SEC_CODE) != 0)
                p->p_flags |= PF_X;
              if ((flags & SEC_READONLY) == 0)