| Index: src/trusted/validator_arm/testdata-thumb/ld_script_arm_thumb2_untrusted
|
| diff --git a/src/trusted/validator_arm/testdata-thumb/ld_script_arm_thumb2_untrusted b/src/trusted/validator_arm/testdata-thumb/ld_script_arm_thumb2_untrusted
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..f5ac962d5b846f3dc345c29032b354c071293558
|
| --- /dev/null
|
| +++ b/src/trusted/validator_arm/testdata-thumb/ld_script_arm_thumb2_untrusted
|
| @@ -0,0 +1,270 @@
|
| +/* Script for -z combreloc: combine and sort reloc sections */
|
| +OUTPUT_FORMAT("elf32-littlearm-nacl", "elf32-bigarm-nacl",
|
| + "elf32-littlearm-nacl")
|
| +OUTPUT_ARCH(arm)
|
| +ENTRY(_start)
|
| +SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib");
|
| +
|
| +/* @LOCALMOD-BEGIN */
|
| +PHDRS
|
| +{
|
| + headers PT_PHDR FILEHDR PHDRS FLAGS(4); /* put the headers in a non-loadable
|
| + seg */
|
| + text PT_LOAD FLAGS(5) ; /* read + execute */
|
| + rodata PT_LOAD FLAGS(4) ; /* read */
|
| + data PT_LOAD FLAGS(6) ; /* read + write */
|
| + tls PT_TLS FLAGS(4) ; /* read */
|
| + /* TODO(sehr): do we need a stack? */
|
| +}
|
| +/* @LOCALMOD-END */
|
| +
|
| +SECTIONS
|
| +{
|
| + /* Read-only sections, merged into text segment: */
|
| + /* @LOCALMOD-BEGIN */
|
| + PROVIDE (__executable_start = 0x0001000F);
|
| + /* @LOCALMOD-END */
|
| + .interp : { *(.interp) }
|
| + .note.gnu.build-id : { *(.note.gnu.build-id) }
|
| + .hash : { *(.hash) }
|
| + .gnu.hash : { *(.gnu.hash) }
|
| + .dynsym : { *(.dynsym) }
|
| + .dynstr : { *(.dynstr) }
|
| + .gnu.version : { *(.gnu.version) }
|
| + .gnu.version_d : { *(.gnu.version_d) }
|
| + .gnu.version_r : { *(.gnu.version_r) }
|
| + .rel.dyn :
|
| + {
|
| + *(.rel.init)
|
| + *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*)
|
| + *(.rel.fini)
|
| + *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*)
|
| + *(.rel.data.rel.ro* .rel.gnu.linkonce.d.rel.ro.*)
|
| + *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*)
|
| + *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*)
|
| + *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*)
|
| + *(.rel.ctors)
|
| + *(.rel.dtors)
|
| + *(.rel.got)
|
| + *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*)
|
| + }
|
| + .rela.dyn :
|
| + {
|
| + *(.rela.init)
|
| + *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
|
| + *(.rela.fini)
|
| + *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
|
| + *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
|
| + *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
|
| + *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
|
| + *(.rela.ctors)
|
| + *(.rela.dtors)
|
| + *(.rela.got)
|
| + *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
|
| + }
|
| + .rel.plt : { *(.rel.plt) }
|
| + .rela.plt : { *(.rela.plt) }
|
| + .init :
|
| + {
|
| + KEEP (*(.init))
|
| + /* @LOCALMOD-BEGIN */
|
| + } :text =0
|
| + /* @LOCALMOD-END */
|
| + .plt : { *(.plt) }
|
| + . = 0x10000;
|
| + .text :
|
| + {
|
| + . += 0xE;
|
| + *(.text .stub .text.* .gnu.linkonce.t.*)
|
| + KEEP (*(.text.*personality*))
|
| + /* .gnu.warning sections are handled specially by elf32.em. */
|
| + *(.gnu.warning)
|
| + *(.glue_7t) *(.glue_7) *(.vfp11_veneer)
|
| + } =0
|
| + .fini :
|
| + {
|
| + KEEP (*(.fini))
|
| + } =0
|
| + PROVIDE (__etext = .);
|
| + PROVIDE (_etext = .);
|
| + PROVIDE (etext = .);
|
| + /* @LOCALMOD-BEGIN */
|
| + . = . + 32; /* reserve space for HLTs */
|
| + /* nacl wants 64k alignment */
|
| + .rodata ALIGN(0x10000) : { *(.rodata .rodata.* .gnu.linkonce.r.*) } :rodata
|
| + /* @LOCALMOD-END */
|
| + .rodata1 : { *(.rodata1) }
|
| + /* @LOCALMOD-BEGIN */
|
| + .nacl_rpc_methods : { *(.nacl_rpc_methods) }
|
| + /* @LOCALMOD-END */
|
| + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
|
| + __exidx_start = .;
|
| + .ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
|
| + __exidx_end = .;
|
| + .eh_frame_hdr : { *(.eh_frame_hdr) }
|
| + /* @LOCALMOD-BEGIN */
|
| + /* .eh_frame begin/end is marked by two new sections in nacl_startup.c */
|
| + .eh_frame : ONLY_IF_RO
|
| + {
|
| + KEEP (*(.eh_frame_prolog))
|
| + KEEP (*(.eh_frame))
|
| + KEEP (*(.eh_frame_epilog))
|
| + }
|
| + /* @LOCALMOD-END */
|
| + .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
|
| + /* Adjust the address for the data segment. We want to adjust up to
|
| + the same address within the page on the next page up. */
|
| + . = ALIGN (CONSTANT (MAXPAGESIZE)) - ((CONSTANT (MAXPAGESIZE) - .) & (CONSTANT (MAXPAGESIZE) - 1)); . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE));
|
| + /* Exception handling */
|
| + .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) }
|
| + .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
|
| + /* Thread Local Storage sections */
|
| + /* @LOCALMOD-BEGIN */
|
| + /* nacl wants 64k alignment */
|
| + .tdata ALIGN(0x10000) : {
|
| + PROVIDE (__tls_template_start = .);
|
| + *(.tdata .tdata.* .gnu.linkonce.td.*)
|
| + PROVIDE (__tls_template_tdata_end = .);
|
| + } : rodata :tls
|
| + .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
|
| + /* The total size of the TLS template area must be a multiple of 32 */
|
| + /* . does not advance for tbss because it is not loaded. */
|
| + PROVIDE (__tls_template_end =
|
| + __tls_template_start +
|
| + (((. + SIZEOF(.tbss)) - __tls_template_start + 31) &
|
| + ~(31))
|
| + );
|
| + /* @LOCALMOD-END */
|
| + .preinit_array :
|
| + {
|
| + PROVIDE_HIDDEN (__preinit_array_start = .);
|
| + KEEP (*(.preinit_array))
|
| + PROVIDE_HIDDEN (__preinit_array_end = .);
|
| + /* @LOCALMOD-BEGIN */
|
| + } : rodata
|
| + /* @LOCALMOD-END */
|
| + .init_array :
|
| + {
|
| + PROVIDE_HIDDEN (__init_array_start = .);
|
| + KEEP (*(SORT(.init_array.*)))
|
| + KEEP (*(.init_array))
|
| + PROVIDE_HIDDEN (__init_array_end = .);
|
| + }
|
| + .fini_array :
|
| + {
|
| + PROVIDE_HIDDEN (__fini_array_start = .);
|
| + KEEP (*(.fini_array))
|
| + KEEP (*(SORT(.fini_array.*)))
|
| + PROVIDE_HIDDEN (__fini_array_end = .);
|
| + }
|
| + .ctors :
|
| + {
|
| + /* gcc uses crtbegin.o to find the start of
|
| + the constructors, so we make sure it is
|
| + first. Because this is a wildcard, it
|
| + doesn't matter if the user does not
|
| + actually link against crtbegin.o; the
|
| + linker won't look for a file to match a
|
| + wildcard. The wildcard also means that it
|
| + doesn't matter which directory crtbegin.o
|
| + is in. */
|
| + KEEP (*crtbegin.o(.ctors))
|
| + KEEP (*crtbegin?.o(.ctors))
|
| + /* We don't want to include the .ctor section from
|
| + the crtend.o file until after the sorted ctors.
|
| + The .ctor section from the crtend file contains the
|
| + end of ctors marker and it must be last */
|
| + KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
|
| + KEEP (*(SORT(.ctors.*)))
|
| + KEEP (*(.ctors))
|
| + }
|
| + .dtors :
|
| + {
|
| + KEEP (*crtbegin.o(.dtors))
|
| + KEEP (*crtbegin?.o(.dtors))
|
| + KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
|
| + KEEP (*(SORT(.dtors.*)))
|
| + KEEP (*(.dtors))
|
| + }
|
| + .jcr : { KEEP (*(.jcr)) }
|
| + .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro* .gnu.linkonce.d.rel.ro.*) }
|
| + .dynamic : { *(.dynamic) }
|
| + . = DATA_SEGMENT_RELRO_END (0, .);
|
| + .got : { *(.got.plt) *(.got) }
|
| +
|
| + /* @LOCALMOD-BEGIN */
|
| + /* nacl wants 64k alignment */
|
| + .data ALIGN(0x10000) :
|
| + /* @LOCALMOD-END */
|
| + {
|
| + __data_start = . ;
|
| + *(.data .data.* .gnu.linkonce.d.*)
|
| + KEEP (*(.gnu.linkonce.d.*personality*))
|
| + SORT(CONSTRUCTORS)
|
| + /* @LOCALMOD-BEGIN */
|
| + } :data
|
| + /* @LOCALMOD-END */
|
| + .data1 : { *(.data1) }
|
| + _edata = .; PROVIDE (edata = .);
|
| + __bss_start = .;
|
| + __bss_start__ = .;
|
| + .bss :
|
| + {
|
| + *(.dynbss)
|
| + *(.bss .bss.* .gnu.linkonce.b.*)
|
| + *(COMMON)
|
| + /* Align here to ensure that the .bss section occupies space up to
|
| + _end. Align after .bss to ensure correct alignment even if the
|
| + .bss section disappears because there are no input sections.
|
| + deadscript: Why do we need it? When there is no .bss section, we don't
|
| + pad the .data section. */
|
| + . = ALIGN(. != 0 ? 32 / 8 : 1);
|
| + }
|
| + _bss_end__ = . ; __bss_end__ = . ;
|
| + . = ALIGN(32 / 8);
|
| + . = ALIGN(32 / 8);
|
| + __end__ = . ;
|
| + _end = .; PROVIDE (end = .);
|
| + . = DATA_SEGMENT_END (.);
|
| + /* Stabs debugging sections. */
|
| + .stab 0 : { *(.stab) }
|
| + .stabstr 0 : { *(.stabstr) }
|
| + .stab.excl 0 : { *(.stab.excl) }
|
| + .stab.exclstr 0 : { *(.stab.exclstr) }
|
| + .stab.index 0 : { *(.stab.index) }
|
| + .stab.indexstr 0 : { *(.stab.indexstr) }
|
| + .comment 0 : { *(.comment) }
|
| + /* DWARF debug sections.
|
| + Symbols in the DWARF debugging sections are relative to the beginning
|
| + of the section so we begin them at 0. */
|
| + /* DWARF 1 */
|
| + .debug 0 : { *(.debug) }
|
| + .line 0 : { *(.line) }
|
| + /* GNU DWARF 1 extensions */
|
| + .debug_srcinfo 0 : { *(.debug_srcinfo) }
|
| + .debug_sfnames 0 : { *(.debug_sfnames) }
|
| + /* DWARF 1.1 and DWARF 2 */
|
| + .debug_aranges 0 : { *(.debug_aranges) }
|
| + .debug_pubnames 0 : { *(.debug_pubnames) }
|
| + /* DWARF 2 */
|
| + .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
|
| + .debug_abbrev 0 : { *(.debug_abbrev) }
|
| + .debug_line 0 : { *(.debug_line) }
|
| + .debug_frame 0 : { *(.debug_frame) }
|
| + .debug_str 0 : { *(.debug_str) }
|
| + .debug_loc 0 : { *(.debug_loc) }
|
| + .debug_macinfo 0 : { *(.debug_macinfo) }
|
| + /* SGI/MIPS DWARF 2 extensions */
|
| + .debug_weaknames 0 : { *(.debug_weaknames) }
|
| + .debug_funcnames 0 : { *(.debug_funcnames) }
|
| + .debug_typenames 0 : { *(.debug_typenames) }
|
| + .debug_varnames 0 : { *(.debug_varnames) }
|
| + /* DWARF 3 */
|
| + .debug_pubtypes 0 : { *(.debug_pubtypes) }
|
| + .debug_ranges 0 : { *(.debug_ranges) }
|
| + .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) }
|
| + .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
|
| + /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) }
|
| +}
|
| +
|
| +
|
|
|