diff options
Diffstat (limited to 'test/LinkerScript/sections.test')
-rw-r--r-- | test/LinkerScript/sections.test | 624 |
1 files changed, 0 insertions, 624 deletions
diff --git a/test/LinkerScript/sections.test b/test/LinkerScript/sections.test deleted file mode 100644 index 67f8288badaa..000000000000 --- a/test/LinkerScript/sections.test +++ /dev/null @@ -1,624 +0,0 @@ -/* - This test exercises parsing typical commands found in GNU ld linker scripts. - RUN: linker-script-test %s | FileCheck %s -*/ - -SEARCH_DIR("/usr/x86_64-linux-gnu/lib64"); SEARCH_DIR("=/usr/local/lib/x86_64-linux-gnu"); -SECTIONS -{ - PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x400000)); . = SEGMENT_START("text-segment", 0x400000) + SIZEOF_HEADERS; - .interp : { *(.interp) } - .note.gnu.build-id : { *(.note.gnu.build-id) } - .hash : { *(.hash) } - .rela.dyn : - { - *(.rela.init) - *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) - *(.rela.fini) - *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) - } - .rela.plt : - { - *(.rela.plt) - PROVIDE_HIDDEN (__rela_iplt_start = .); - *(.rela.iplt) - PROVIDE_HIDDEN (__rela_iplt_end = .); - } - .init : - { - FILL (0x90909090) - KEEP (*(SORT_NONE(.init))) - } =0x909090909090909090909090 - PROVIDE (__etext = .); - .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) } - .exception_ranges : ONLY_IF_RO { *(.exception_ranges - .exception_ranges*) } - . = 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)) } - .ctors : - { - KEEP (*crtbegin.o(.ctors)) - KEEP (*crtbegin?.o(.ctors)) - 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)) - } - . = DATA_SEGMENT_RELRO_END (SIZEOF (.got.plt) >= 24 ? 24 : 0, .); - .got.plt : { *(.got.plt) *(.igot.plt) } - .lrodata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : - { - *(.lrodata .lrodata.* .gnu.linkonce.lr.*) - } - .ldata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : - { - *(.ldata .ldata.* .gnu.linkonce.l.*) - . = ALIGN(. != 0 ? 64 / 8 : 1); - } - . = ALIGN(64 / 8); - _end = .; PROVIDE (end = .); - . = DATA_SEGMENT_END (.); - /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } -} - -/* -CHECK: kw_search_dir: SEARCH_DIR -CHECK: l_paren: ( -CHECK: identifier: /usr/x86_64-linux-gnu/lib64 -CHECK: r_paren: ) -CHECK: semicolon: ; -CHECK: kw_search_dir: SEARCH_DIR -CHECK: l_paren: ( -CHECK: identifier: =/usr/local/lib/x86_64-linux-gnu -CHECK: r_paren: ) -CHECK: semicolon: ; -CHECK: kw_sections: SECTIONS -CHECK: l_brace: { -CHECK: kw_provide: PROVIDE -CHECK: l_paren: ( -CHECK: identifier: __executable_start -CHECK: equal: = -CHECK: identifier: SEGMENT_START -CHECK: l_paren: ( -CHECK: identifier: text-segment -CHECK: comma: , -CHECK: number: 0x400000 -CHECK: r_paren: ) -CHECK: r_paren: ) -CHECK: semicolon: ; -CHECK: identifier: . -CHECK: equal: = -CHECK: identifier: SEGMENT_START -CHECK: l_paren: ( -CHECK: identifier: text-segment -CHECK: comma: , -CHECK: number: 0x400000 -CHECK: r_paren: ) -CHECK: plus: + -CHECK: identifier: SIZEOF_HEADERS -CHECK: semicolon: ; -CHECK: identifier: .interp -CHECK: colon: : -CHECK: l_brace: { -CHECK: star: * -CHECK: l_paren: ( -CHECK: identifier: .interp -CHECK: r_paren: ) -CHECK: r_brace: } -CHECK: identifier: .note.gnu.build-id -CHECK: colon: : -CHECK: l_brace: { -CHECK: star: * -CHECK: l_paren: ( -CHECK: identifier: .note.gnu.build-id -CHECK: r_paren: ) -CHECK: r_brace: } -CHECK: identifier: .hash -CHECK: colon: : -CHECK: l_brace: { -CHECK: star: * -CHECK: l_paren: ( -CHECK: identifier: .hash -CHECK: r_paren: ) -CHECK: r_brace: } -CHECK: identifier: .rela.dyn -CHECK: colon: : -CHECK: l_brace: { -CHECK: star: * -CHECK: l_paren: ( -CHECK: identifier: .rela.init -CHECK: r_paren: ) -CHECK: star: * -CHECK: l_paren: ( -CHECK: identifier: .rela.text -CHECK: identifier: .rela.text.* -CHECK: identifier: .rela.gnu.linkonce.t.* -CHECK: r_paren: ) -CHECK: star: * -CHECK: l_paren: ( -CHECK: identifier: .rela.fini -CHECK: r_paren: ) -CHECK: star: * -CHECK: l_paren: ( -CHECK: identifier: .rela.rodata -CHECK: identifier: .rela.rodata.* -CHECK: identifier: .rela.gnu.linkonce.r.* -CHECK: r_paren: ) -CHECK: r_brace: } -CHECK: identifier: .rela.plt -CHECK: colon: : -CHECK: l_brace: { -CHECK: star: * -CHECK: l_paren: ( -CHECK: identifier: .rela.plt -CHECK: r_paren: ) -CHECK: kw_provide_hidden: PROVIDE_HIDDEN -CHECK: l_paren: ( -CHECK: identifier: __rela_iplt_start -CHECK: equal: = -CHECK: identifier: . -CHECK: r_paren: ) -CHECK: semicolon: ; -CHECK: star: * -CHECK: l_paren: ( -CHECK: identifier: .rela.iplt -CHECK: r_paren: ) -CHECK: kw_provide_hidden: PROVIDE_HIDDEN -CHECK: l_paren: ( -CHECK: identifier: __rela_iplt_end -CHECK: equal: = -CHECK: identifier: . -CHECK: r_paren: ) -CHECK: semicolon: ; -CHECK: r_brace: } -CHECK: identifier: .init -CHECK: colon: : -CHECK: l_brace: { -CHECK: kw_fill: FILL -CHECK: l_paren: ( -CHECK: number: 0x90909090 -CHECK: r_paren: ) -CHECK: kw_keep: KEEP -CHECK: l_paren: ( -CHECK: star: * -CHECK: l_paren: ( -CHECK: kw_sort_none: SORT_NONE -CHECK: l_paren: ( -CHECK: identifier: .init -CHECK: r_paren: ) -CHECK: r_paren: ) -CHECK: r_paren: ) -CHECK: r_brace: } -CHECK: kw_provide: PROVIDE -CHECK: l_paren: ( -CHECK: identifier: __etext -CHECK: equal: = -CHECK: identifier: . -CHECK: r_paren: ) -CHECK: semicolon: ; -CHECK: identifier: .eh_frame -CHECK: colon: : -CHECK: kw_only_if_ro: ONLY_IF_RO -CHECK: l_brace: { -CHECK: kw_keep: KEEP -CHECK: l_paren: ( -CHECK: star: * -CHECK: l_paren: ( -CHECK: identifier: .eh_frame -CHECK: r_paren: ) -CHECK: r_paren: ) -CHECK: r_brace: } -CHECK: identifier: .exception_ranges -CHECK: colon: : -CHECK: kw_only_if_ro: ONLY_IF_RO -CHECK: l_brace: { -CHECK: star: * -CHECK: l_paren: ( -CHECK: identifier: .exception_ranges -CHECK: identifier: .exception_ranges* -CHECK: r_paren: ) -CHECK: r_brace: } -CHECK: identifier: . -CHECK: equal: = -CHECK: kw_align: ALIGN -CHECK: l_paren: ( -CHECK: identifier: CONSTANT -CHECK: l_paren: ( -CHECK: identifier: MAXPAGESIZE -CHECK: r_paren: ) -CHECK: r_paren: ) -CHECK: minus: - -CHECK: l_paren: ( -CHECK: l_paren: ( -CHECK: identifier: CONSTANT -CHECK: l_paren: ( -CHECK: identifier: MAXPAGESIZE -CHECK: r_paren: ) -CHECK: minus: - -CHECK: identifier: . -CHECK: r_paren: ) -CHECK: amp: & -CHECK: l_paren: ( -CHECK: identifier: CONSTANT -CHECK: l_paren: ( -CHECK: identifier: MAXPAGESIZE -CHECK: r_paren: ) -CHECK: minus: - -CHECK: number: 1 -CHECK: r_paren: ) -CHECK: r_paren: ) -CHECK: semicolon: ; -CHECK: identifier: . -CHECK: equal: = -CHECK: identifier: DATA_SEGMENT_ALIGN -CHECK: l_paren: ( -CHECK: identifier: CONSTANT -CHECK: l_paren: ( -CHECK: identifier: MAXPAGESIZE -CHECK: r_paren: ) -CHECK: comma: , -CHECK: identifier: CONSTANT -CHECK: l_paren: ( -CHECK: identifier: COMMONPAGESIZE -CHECK: r_paren: ) -CHECK: r_paren: ) -CHECK: semicolon: ; -CHECK: identifier: .eh_frame -CHECK: colon: : -CHECK: kw_only_if_rw: ONLY_IF_RW -CHECK: l_brace: { -CHECK: kw_keep: KEEP -CHECK: l_paren: ( -CHECK: star: * -CHECK: l_paren: ( -CHECK: identifier: .eh_frame -CHECK: r_paren: ) -CHECK: r_paren: ) -CHECK: r_brace: } -CHECK: identifier: .ctors -CHECK: colon: : -CHECK: l_brace: { -CHECK: kw_keep: KEEP -CHECK: l_paren: ( -CHECK: identifier: *crtbegin.o -CHECK: l_paren: ( -CHECK: identifier: .ctors -CHECK: r_paren: ) -CHECK: r_paren: ) -CHECK: kw_keep: KEEP -CHECK: l_paren: ( -CHECK: identifier: *crtbegin?.o -CHECK: l_paren: ( -CHECK: identifier: .ctors -CHECK: r_paren: ) -CHECK: r_paren: ) -CHECK: kw_keep: KEEP -CHECK: l_paren: ( -CHECK: star: * -CHECK: l_paren: ( -CHECK: kw_exclude_file: EXCLUDE_FILE -CHECK: l_paren: ( -CHECK: identifier: *crtend.o -CHECK: identifier: *crtend?.o -CHECK: r_paren: ) -CHECK: identifier: .ctors -CHECK: r_paren: ) -CHECK: r_paren: ) -CHECK: kw_keep: KEEP -CHECK: l_paren: ( -CHECK: star: * -CHECK: l_paren: ( -CHECK: kw_sort_by_name: SORT -CHECK: l_paren: ( -CHECK: identifier: .ctors.* -CHECK: r_paren: ) -CHECK: r_paren: ) -CHECK: r_paren: ) -CHECK: kw_keep: KEEP -CHECK: l_paren: ( -CHECK: star: * -CHECK: l_paren: ( -CHECK: identifier: .ctors -CHECK: r_paren: ) -CHECK: r_paren: ) -CHECK: r_brace: } -CHECK: identifier: .dtors -CHECK: colon: : -CHECK: l_brace: { -CHECK: kw_keep: KEEP -CHECK: l_paren: ( -CHECK: identifier: *crtbegin.o -CHECK: l_paren: ( -CHECK: identifier: .dtors -CHECK: r_paren: ) -CHECK: r_paren: ) -CHECK: kw_keep: KEEP -CHECK: l_paren: ( -CHECK: identifier: *crtbegin?.o -CHECK: l_paren: ( -CHECK: identifier: .dtors -CHECK: r_paren: ) -CHECK: r_paren: ) -CHECK: kw_keep: KEEP -CHECK: l_paren: ( -CHECK: star: * -CHECK: l_paren: ( -CHECK: kw_exclude_file: EXCLUDE_FILE -CHECK: l_paren: ( -CHECK: identifier: *crtend.o -CHECK: identifier: *crtend?.o -CHECK: r_paren: ) -CHECK: identifier: .dtors -CHECK: r_paren: ) -CHECK: r_paren: ) -CHECK: kw_keep: KEEP -CHECK: l_paren: ( -CHECK: star: * -CHECK: l_paren: ( -CHECK: kw_sort_by_name: SORT -CHECK: l_paren: ( -CHECK: identifier: .dtors.* -CHECK: r_paren: ) -CHECK: r_paren: ) -CHECK: r_paren: ) -CHECK: kw_keep: KEEP -CHECK: l_paren: ( -CHECK: star: * -CHECK: l_paren: ( -CHECK: identifier: .dtors -CHECK: r_paren: ) -CHECK: r_paren: ) -CHECK: r_brace: } -CHECK: identifier: . -CHECK: equal: = -CHECK: identifier: DATA_SEGMENT_RELRO_END -CHECK: l_paren: ( -CHECK: identifier: SIZEOF -CHECK: l_paren: ( -CHECK: identifier: .got.plt -CHECK: r_paren: ) -CHECK: greaterequal: >= -CHECK: number: 24 -CHECK: question: ? -CHECK: number: 24 -CHECK: colon: : -CHECK: number: 0 -CHECK: comma: , -CHECK: identifier: . -CHECK: r_paren: ) -CHECK: semicolon: ; -CHECK: identifier: .got.plt -CHECK: colon: : -CHECK: l_brace: { -CHECK: star: * -CHECK: l_paren: ( -CHECK: identifier: .got.plt -CHECK: r_paren: ) -CHECK: star: * -CHECK: l_paren: ( -CHECK: identifier: .igot.plt -CHECK: r_paren: ) -CHECK: r_brace: } -CHECK: identifier: .lrodata -CHECK: kw_align: ALIGN -CHECK: l_paren: ( -CHECK: identifier: CONSTANT -CHECK: l_paren: ( -CHECK: identifier: MAXPAGESIZE -CHECK: r_paren: ) -CHECK: r_paren: ) -CHECK: plus: + -CHECK: l_paren: ( -CHECK: identifier: . -CHECK: amp: & -CHECK: l_paren: ( -CHECK: identifier: CONSTANT -CHECK: l_paren: ( -CHECK: identifier: MAXPAGESIZE -CHECK: r_paren: ) -CHECK: minus: - -CHECK: number: 1 -CHECK: r_paren: ) -CHECK: r_paren: ) -CHECK: colon: : -CHECK: l_brace: { -CHECK: star: * -CHECK: l_paren: ( -CHECK: identifier: .lrodata -CHECK: identifier: .lrodata.* -CHECK: identifier: .gnu.linkonce.lr.* -CHECK: r_paren: ) -CHECK: r_brace: } -CHECK: identifier: .ldata -CHECK: kw_align: ALIGN -CHECK: l_paren: ( -CHECK: identifier: CONSTANT -CHECK: l_paren: ( -CHECK: identifier: MAXPAGESIZE -CHECK: r_paren: ) -CHECK: r_paren: ) -CHECK: plus: + -CHECK: l_paren: ( -CHECK: identifier: . -CHECK: amp: & -CHECK: l_paren: ( -CHECK: identifier: CONSTANT -CHECK: l_paren: ( -CHECK: identifier: MAXPAGESIZE -CHECK: r_paren: ) -CHECK: minus: - -CHECK: number: 1 -CHECK: r_paren: ) -CHECK: r_paren: ) -CHECK: colon: : -CHECK: l_brace: { -CHECK: star: * -CHECK: l_paren: ( -CHECK: identifier: .ldata -CHECK: identifier: .ldata.* -CHECK: identifier: .gnu.linkonce.l.* -CHECK: r_paren: ) -CHECK: identifier: . -CHECK: equal: = -CHECK: kw_align: ALIGN -CHECK: l_paren: ( -CHECK: identifier: . -CHECK: exclaimequal: != -CHECK: number: 0 -CHECK: question: ? -CHECK: number: 64 -CHECK: slash: / -CHECK: number: 8 -CHECK: colon: : -CHECK: number: 1 -CHECK: r_paren: ) -CHECK: semicolon: ; -CHECK: r_brace: } -CHECK: identifier: . -CHECK: equal: = -CHECK: kw_align: ALIGN -CHECK: l_paren: ( -CHECK: number: 64 -CHECK: slash: / -CHECK: number: 8 -CHECK: r_paren: ) -CHECK: semicolon: ; -CHECK: identifier: _end -CHECK: equal: = -CHECK: identifier: . -CHECK: semicolon: ; -CHECK: kw_provide: PROVIDE -CHECK: l_paren: ( -CHECK: identifier: end -CHECK: equal: = -CHECK: identifier: . -CHECK: r_paren: ) -CHECK: semicolon: ; -CHECK: identifier: . -CHECK: equal: = -CHECK: identifier: DATA_SEGMENT_END -CHECK: l_paren: ( -CHECK: identifier: . -CHECK: r_paren: ) -CHECK: semicolon: ; -CHECK: kw_discard: /DISCARD/ -CHECK: colon: : -CHECK: l_brace: { -CHECK: star: * -CHECK: l_paren: ( -CHECK: identifier: .note.GNU-stack -CHECK: r_paren: ) -CHECK: star: * -CHECK: l_paren: ( -CHECK: identifier: .gnu_debuglink -CHECK: r_paren: ) -CHECK: star: * -CHECK: l_paren: ( -CHECK: identifier: .gnu.lto_* -CHECK: r_paren: ) -CHECK: r_brace: } -CHECK: r_brace: } -CHECK: eof: -CHECK: SEARCH_DIR("/usr/x86_64-linux-gnu/lib64") -CHECK: SEARCH_DIR("=/usr/local/lib/x86_64-linux-gnu") -CHECK: SECTIONS -CHECK: { -CHECK: PROVIDE(__executable_start = SEGMENT_START(text-segment, 4194304)) -CHECK: . = (SEGMENT_START(text-segment, 4194304) + SIZEOF_HEADERS) -CHECK: .interp : -CHECK: { -CHECK: *(.interp) -CHECK: } -CHECK: .note.gnu.build-id : -CHECK: { -CHECK: *(.note.gnu.build-id) -CHECK: } -CHECK: .hash : -CHECK: { -CHECK: *(.hash) -CHECK: } -CHECK: .rela.dyn : -CHECK: { -CHECK: *(.rela.init) -CHECK: *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) -CHECK: *(.rela.fini) -CHECK: *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) -CHECK: } -CHECK: .rela.plt : -CHECK: { -CHECK: *(.rela.plt) -CHECK: PROVIDE_HIDDEN(__rela_iplt_start = .) -CHECK: *(.rela.iplt) -CHECK: PROVIDE_HIDDEN(__rela_iplt_end = .) -CHECK: } -CHECK: .init : -CHECK: { -CHECK: FILL(0x90909090) -CHECK: KEEP(*(SORT_NONE(.init))) -CHECK: } =0x909090909090909090909090 -CHECK: PROVIDE(__etext = .) -CHECK: .eh_frame : -CHECK: ONLY_IF_RO { -CHECK: KEEP(*(.eh_frame)) -CHECK: } -CHECK: .exception_ranges : -CHECK: ONLY_IF_RO { -CHECK: *(.exception_ranges .exception_ranges*) -CHECK: } -CHECK: . = (ALIGN(CONSTANT(MAXPAGESIZE)) - ((CONSTANT(MAXPAGESIZE) - .) & (CONSTANT(MAXPAGESIZE) - 1))) -CHECK: . = DATA_SEGMENT_ALIGN(CONSTANT(MAXPAGESIZE), CONSTANT(COMMONPAGESIZE)) -CHECK: .eh_frame : -CHECK: ONLY_IF_RW { -CHECK: KEEP(*(.eh_frame)) -CHECK: } -CHECK: .ctors : -CHECK: { -CHECK: KEEP(*crtbegin.o(.ctors)) -CHECK: KEEP(*crtbegin?.o(.ctors)) -CHECK: KEEP(*(EXCLUDE_FILE(*crtend.o *crtend?.o ) .ctors)) -CHECK: KEEP(*(SORT_BY_NAME(.ctors.*))) -CHECK: KEEP(*(.ctors)) -CHECK: } -CHECK: .dtors : -CHECK: { -CHECK: KEEP(*crtbegin.o(.dtors)) -CHECK: KEEP(*crtbegin?.o(.dtors)) -CHECK: KEEP(*(EXCLUDE_FILE(*crtend.o *crtend?.o ) .dtors)) -CHECK: KEEP(*(SORT_BY_NAME(.dtors.*))) -CHECK: KEEP(*(.dtors)) -CHECK: } -CHECK: . = DATA_SEGMENT_RELRO_END((SIZEOF(.got.plt) >= 24) ? 24 : 0, .) -CHECK: .got.plt : -CHECK: { -CHECK: *(.got.plt) -CHECK: *(.igot.plt) -CHECK: } -CHECK: .lrodata (ALIGN(CONSTANT(MAXPAGESIZE)) + (. & (CONSTANT(MAXPAGESIZE) - 1))) : -CHECK: { -CHECK: *(.lrodata .lrodata.* .gnu.linkonce.lr.*) -CHECK: } -CHECK: .ldata (ALIGN(CONSTANT(MAXPAGESIZE)) + (. & (CONSTANT(MAXPAGESIZE) - 1))) : -CHECK: { -CHECK: *(.ldata .ldata.* .gnu.linkonce.l.*) -CHECK: . = ALIGN((. != 0) ? (64 / 8) : 1) -CHECK: } -CHECK: . = ALIGN((64 / 8)) -CHECK: _end = . -CHECK: PROVIDE(end = .) -CHECK: . = DATA_SEGMENT_END(.) -CHECK: : -CHECK: { -CHECK: *(.note.GNU-stack) -CHECK: *(.gnu_debuglink) -CHECK: *(.gnu.lto_*) -CHECK: } -CHECK: } -*/ |