}
/* Determine if this segment is eligible to receive the file and program
- headers. It must be non-executable and have contents. Its first
- section must start far enough past the page boundary to allow space
- for the headers. */
+ headers. It must be read-only, non-executable, and have contents.
+ Its first section must start far enough past the page boundary to
+ allow space for the headers. */
static bfd_boolean
segment_eligible_for_headers (struct elf_segment_map *seg,
bfd_vma maxpagesize, bfd_vma sizeof_headers)
return FALSE;
for (i = 0; i < seg->count; ++i)
{
- if (seg->sections[i]->flags & SEC_CODE)
+ if ((seg->sections[i]->flags & (SEC_CODE|SEC_READONLY)) != SEC_READONLY)
return FALSE;
if (seg->sections[i]->flags & SEC_HAS_CONTENTS)
any_contents = TRUE;
bfd_boolean
nacl_modify_segment_map (bfd *abfd, struct bfd_link_info *info)
{
- struct elf_segment_map **m = &elf_tdata (abfd)->segment_map;
+ struct elf_segment_map **m = &elf_seg_map (abfd);
struct elf_segment_map **first_load = NULL;
struct elf_segment_map **last_load = NULL;
bfd_boolean moved_headers = FALSE;
bfd_boolean
nacl_modify_program_headers (bfd *abfd, struct bfd_link_info *info)
{
- struct elf_segment_map **m = &elf_tdata (abfd)->segment_map;
+ struct elf_segment_map **m = &elf_seg_map (abfd);
Elf_Internal_Phdr *phdr = elf_tdata (abfd)->phdr;
Elf_Internal_Phdr *p = phdr;