OLD | NEW |
1 /* Native Client support for ELF | 1 /* Native Client support for ELF |
2 Copyright 2012, 2013 Free Software Foundation, Inc. | 2 Copyright 2012, 2013 Free Software Foundation, Inc. |
3 | 3 |
4 This file is part of BFD, the Binary File Descriptor library. | 4 This file is part of BFD, the Binary File Descriptor library. |
5 | 5 |
6 This program is free software; you can redistribute it and/or modify | 6 This program is free software; you can redistribute it and/or modify |
7 it under the terms of the GNU General Public License as published by | 7 it under the terms of the GNU General Public License as published by |
8 the Free Software Foundation; either version 3 of the License, or | 8 the Free Software Foundation; either version 3 of the License, or |
9 (at your option) any later version. | 9 (at your option) any later version. |
10 | 10 |
(...skipping 26 matching lines...) Expand all Loading... |
37 so we have to look through the sections. */ | 37 so we have to look through the sections. */ |
38 unsigned int i; | 38 unsigned int i; |
39 for (i = 0; i < seg->count; ++i) | 39 for (i = 0; i < seg->count; ++i) |
40 if (seg->sections[i]->flags & SEC_CODE) | 40 if (seg->sections[i]->flags & SEC_CODE) |
41 return TRUE; | 41 return TRUE; |
42 } | 42 } |
43 return FALSE; | 43 return FALSE; |
44 } | 44 } |
45 | 45 |
46 /* Determine if this segment is eligible to receive the file and program | 46 /* Determine if this segment is eligible to receive the file and program |
47 headers. It must be read-only, non-executable, and have contents. | 47 headers. It must be read-only and non-executable. |
48 Its first section must start far enough past the page boundary to | 48 Its first section must start far enough past the page boundary to |
49 allow space for the headers. */ | 49 allow space for the headers. */ |
50 static bfd_boolean | 50 static bfd_boolean |
51 segment_eligible_for_headers (struct elf_segment_map *seg, | 51 segment_eligible_for_headers (struct elf_segment_map *seg, |
52 bfd_vma minpagesize, bfd_vma sizeof_headers) | 52 bfd_vma minpagesize, bfd_vma sizeof_headers) |
53 { | 53 { |
54 bfd_boolean any_contents = FALSE; | |
55 unsigned int i; | 54 unsigned int i; |
56 if (seg->count == 0 || seg->sections[0]->lma % minpagesize < sizeof_headers) | 55 if (seg->count == 0 || seg->sections[0]->lma % minpagesize < sizeof_headers) |
57 return FALSE; | 56 return FALSE; |
58 for (i = 0; i < seg->count; ++i) | 57 for (i = 0; i < seg->count; ++i) |
59 { | 58 { |
60 if ((seg->sections[i]->flags & (SEC_CODE|SEC_READONLY)) != SEC_READONLY) | 59 if ((seg->sections[i]->flags & (SEC_CODE|SEC_READONLY)) != SEC_READONLY) |
61 return FALSE; | 60 return FALSE; |
62 if (seg->sections[i]->flags & SEC_HAS_CONTENTS) | |
63 any_contents = TRUE; | |
64 } | 61 } |
65 return any_contents; | 62 return TRUE; |
66 } | 63 } |
67 | 64 |
68 | 65 |
69 /* We permute the segment_map to get BFD to do the file layout we want: | 66 /* We permute the segment_map to get BFD to do the file layout we want: |
70 The first non-executable PT_LOAD segment appears first in the file | 67 The first non-executable PT_LOAD segment appears first in the file |
71 and contains the ELF file header and phdrs. */ | 68 and contains the ELF file header and phdrs. */ |
72 bfd_boolean | 69 bfd_boolean |
73 nacl_modify_segment_map (bfd *abfd, struct bfd_link_info *info) | 70 nacl_modify_segment_map (bfd *abfd, struct bfd_link_info *info) |
74 { | 71 { |
75 struct elf_segment_map **m = &elf_tdata (abfd)->segment_map; | 72 struct elf_segment_map **m = &elf_tdata (abfd)->segment_map; |
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
336 { | 333 { |
337 /* We don't have a proper way to report an error here. So | 334 /* We don't have a proper way to report an error here. So |
338 instead fudge things so that elf_write_shdrs_and_ehdr will | 335 instead fudge things so that elf_write_shdrs_and_ehdr will |
339 fail. */ | 336 fail. */ |
340 elf_elfheader (abfd)->e_shoff = (file_ptr) -1; | 337 elf_elfheader (abfd)->e_shoff = (file_ptr) -1; |
341 } | 338 } |
342 | 339 |
343 free (fill); | 340 free (fill); |
344 } | 341 } |
345 } | 342 } |
OLD | NEW |