Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* Script for ld --shared: link shared library */ | 1 /* Script for ld --shared: link shared library */ |
| 2 OUTPUT_FORMAT("elf64-nacl", "elf64-nacl", | 2 OUTPUT_FORMAT("elf64-nacl", "elf64-nacl", |
| 3 "elf64-nacl") | 3 "elf64-nacl") |
| 4 OUTPUT_ARCH(i386:x86-64) | 4 OUTPUT_ARCH(i386:x86-64) |
| 5 ENTRY(_start) | 5 ENTRY(_start) |
| 6 SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); | 6 SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); |
| 7 PHDRS | 7 PHDRS |
| 8 { | 8 { |
| 9 seg_code PT_LOAD FLAGS(5) ; /* read + execute */ | 9 seg_code PT_LOAD FLAGS(5) ; /* read + execute */ |
| 10 seg_rodata PT_LOAD FLAGS(4) ; /* read */ | 10 seg_rodata PT_LOAD FLAGS(4) ; /* read */ |
| 11 seg_rwdata PT_LOAD FLAGS(6) ; /* read + write */ | 11 seg_rwdata PT_LOAD FLAGS(6) ; /* read + write */ |
| 12 seg_bss PT_LOAD FLAGS(6) ; /* read + write */ | |
| 12 seg_dynamic PT_DYNAMIC FLAGS(6) ; | 13 seg_dynamic PT_DYNAMIC FLAGS(6) ; |
| 13 seg_stack PT_GNU_STACK FLAGS(6) ; | 14 seg_stack PT_GNU_STACK FLAGS(6) ; |
| 14 seg_tls PT_TLS FLAGS(4) ; | 15 seg_tls PT_TLS FLAGS(4) ; |
| 15 } | 16 } |
| 16 SECTIONS | 17 SECTIONS |
| 17 { | 18 { |
| 18 /* ELF headers are not included in any PT_LOAD segment */ | 19 /* ELF headers are not included in any PT_LOAD segment */ |
| 19 . = SEGMENT_START("text", 0); | 20 . = SEGMENT_START("text", 0); |
| 20 _begin = .; | 21 _begin = .; |
| 21 /* The ALIGN(32) instructions below are workarounds. | 22 /* The ALIGN(32) instructions below are workarounds. |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 156 .got.plt : { *(.got.plt) } | 157 .got.plt : { *(.got.plt) } |
| 157 . = ALIGN(CONSTANT (MAXPAGESIZE)); /* nacl wants page alignment */ | 158 . = ALIGN(CONSTANT (MAXPAGESIZE)); /* nacl wants page alignment */ |
| 158 .data : | 159 .data : |
| 159 { | 160 { |
| 160 *(.data .data.* .gnu.linkonce.d.*) | 161 *(.data .data.* .gnu.linkonce.d.*) |
| 161 KEEP (*(.gnu.linkonce.d.*personality*)) | 162 KEEP (*(.gnu.linkonce.d.*personality*)) |
| 162 SORT(CONSTRUCTORS) | 163 SORT(CONSTRUCTORS) |
| 163 } | 164 } |
| 164 .data1 : { *(.data1) } | 165 .data1 : { *(.data1) } |
| 165 _edata = .; PROVIDE (edata = .); | 166 _edata = .; PROVIDE (edata = .); |
| 167 | |
| 168 /* We place the BSS in a separate segment as a workaround for the | |
| 169 behaviour of NaCl's mmap() on the last page in a file. When using | |
| 170 copy-on-write MAP_PRIVATE, we cannot necessarily write beyond the | |
| 171 file's extent within the 64k page. | |
| 172 See http://code.google.com/p/nativeclient/issues/detail?id=824. | |
| 173 TODO(mseaborn): A better fix would be to change the dynamic linker | |
| 174 to copy the last page. This would save a page of memory because | |
| 175 the BSS could share a page with the data segment. But for now, it | |
| 176 is simpler to change the linker script. */ | |
| 177 . = DATA_SEGMENT_END (.); | |
| 178 . = ALIGN (CONSTANT (COMMONPAGESIZE)); | |
|
pasko-google - do not use
2011/08/24 16:38:14
please, take a look it it did not significantly in
khim
2011/08/24 17:03:07
It adds few kilobytes to file with debug info (but
| |
| 179 | |
| 166 __bss_start = .; | 180 __bss_start = .; |
| 167 .bss : | 181 .bss : |
| 168 { | 182 { |
| 169 *(.dynbss) | 183 *(.dynbss) |
| 170 *(.bss .bss.* .gnu.linkonce.b.*) | 184 *(.bss .bss.* .gnu.linkonce.b.*) |
| 171 *(COMMON) | 185 *(COMMON) |
| 172 /* Align here to ensure that the .bss section occupies space up to | 186 /* Align here to ensure that the .bss section occupies space up to |
| 173 _end. Align after .bss to ensure correct alignment even if the | 187 _end. Align after .bss to ensure correct alignment even if the |
| 174 .bss section disappears because there are no input sections. | 188 .bss section disappears because there are no input sections. |
| 175 FIXME: Why do we need it? When there is no .bss section, we don't | 189 FIXME: Why do we need it? When there is no .bss section, we don't |
| 176 pad the .data section. */ | 190 pad the .data section. */ |
| 177 . = ALIGN(. != 0 ? 32 / 8 : 1); | 191 . = ALIGN(. != 0 ? 32 / 8 : 1); |
| 178 } | 192 } :seg_bss |
| 179 . = ALIGN(32 / 8); | 193 . = ALIGN(32 / 8); |
| 180 . = ALIGN(32 / 8); | 194 . = ALIGN(32 / 8); |
| 181 _end = .; PROVIDE (end = .); | 195 _end = .; PROVIDE (end = .); |
| 182 . = DATA_SEGMENT_END (.); | |
| 183 /* Stabs debugging sections. */ | 196 /* Stabs debugging sections. */ |
| 184 .stab 0 : { *(.stab) } | 197 .stab 0 : { *(.stab) } |
| 185 .stabstr 0 : { *(.stabstr) } | 198 .stabstr 0 : { *(.stabstr) } |
| 186 .stab.excl 0 : { *(.stab.excl) } | 199 .stab.excl 0 : { *(.stab.excl) } |
| 187 .stab.exclstr 0 : { *(.stab.exclstr) } | 200 .stab.exclstr 0 : { *(.stab.exclstr) } |
| 188 .stab.index 0 : { *(.stab.index) } | 201 .stab.index 0 : { *(.stab.index) } |
| 189 .stab.indexstr 0 : { *(.stab.indexstr) } | 202 .stab.indexstr 0 : { *(.stab.indexstr) } |
| 190 .comment 0 : { *(.comment) } | 203 .comment 0 : { *(.comment) } |
| 191 /* DWARF debug sections. | 204 /* DWARF debug sections. |
| 192 Symbols in the DWARF debugging sections are relative to the beginning | 205 Symbols in the DWARF debugging sections are relative to the beginning |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 213 .debug_funcnames 0 : { *(.debug_funcnames) } | 226 .debug_funcnames 0 : { *(.debug_funcnames) } |
| 214 .debug_typenames 0 : { *(.debug_typenames) } | 227 .debug_typenames 0 : { *(.debug_typenames) } |
| 215 .debug_varnames 0 : { *(.debug_varnames) } | 228 .debug_varnames 0 : { *(.debug_varnames) } |
| 216 /* DWARF 3 */ | 229 /* DWARF 3 */ |
| 217 .debug_pubtypes 0 : { *(.debug_pubtypes) } | 230 .debug_pubtypes 0 : { *(.debug_pubtypes) } |
| 218 .debug_ranges 0 : { *(.debug_ranges) } | 231 .debug_ranges 0 : { *(.debug_ranges) } |
| 219 .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } | 232 .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } |
| 220 /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) } | 233 /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) } |
| 221 /DISCARD/ : { *(.note.ABI-tag) } | 234 /DISCARD/ : { *(.note.ABI-tag) } |
| 222 } | 235 } |
| OLD | NEW |