diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2020-12-08 16:41:22 -0800 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2020-12-08 16:41:32 -0800 |
commit | 037311d1df303c91395cdfe07b6ab414de99e420 (patch) | |
tree | 2d60f4001e36f5e4b1445fa630e0098ce31b7a57 /gas/testsuite | |
parent | dd235d453e8ee2f641cbafa4b7078a1407a50ec1 (diff) | |
download | fsf-binutils-gdb-037311d1df303c91395cdfe07b6ab414de99e420.zip fsf-binutils-gdb-037311d1df303c91395cdfe07b6ab414de99e420.tar.gz fsf-binutils-gdb-037311d1df303c91395cdfe07b6ab414de99e420.tar.bz2 |
gas: Generate a new section for SHF_GNU_RETAIN
For
.globl foo2
.section .data.foo,"aR"
.align 4
.type foo2, @object
.size foo2, 4
foo2:
.long 2
.globl foo1
.section .data.foo
.align 4
.type foo1, @object
.size foo1, 4
foo1:
.long 1
generate a new section if the SHF_GNU_RETAIN bit doesn't match.
* config/obj-elf.c (SEC_ASSEMBLER_SHF_MASK): New.
(get_section_by_match): Also check if SEC_ASSEMBLER_SHF_MASK of
sh_flags matches. Rename info to sh_info.
(obj_elf_change_section): Don't check previous SHF_GNU_RETAIN.
Rename info to sh_info.
(obj_elf_section): Rename info to sh_info. Set sh_flags for
SHF_GNU_RETAIN.
* config/obj-elf.h (elf_section_match): Rename info to sh_info.
Add sh_flags.
* testsuite/gas/elf/elf.exp: Run section27.
* testsuite/gas/elf/section24b.d: Updated.
* testsuite/gas/elf/section27.d: New file.
* testsuite/gas/elf/section27.s: Likewise.
Diffstat (limited to 'gas/testsuite')
-rw-r--r-- | gas/testsuite/gas/elf/elf.exp | 1 | ||||
-rw-r--r-- | gas/testsuite/gas/elf/section24b.d | 10 | ||||
-rw-r--r-- | gas/testsuite/gas/elf/section27.d | 19 | ||||
-rw-r--r-- | gas/testsuite/gas/elf/section27.s | 34 |
4 files changed, 61 insertions, 3 deletions
diff --git a/gas/testsuite/gas/elf/elf.exp b/gas/testsuite/gas/elf/elf.exp index 25c40a2..80dec4e 100644 --- a/gas/testsuite/gas/elf/elf.exp +++ b/gas/testsuite/gas/elf/elf.exp @@ -268,6 +268,7 @@ if { [is_elf_format] } then { run_dump_test "section24b" run_dump_test "section25" run_dump_test "section26" + run_dump_test "section27" run_dump_test "sh-link-zero" run_dump_test "dwarf2-1" $dump_opts run_dump_test "dwarf2-2" $dump_opts diff --git a/gas/testsuite/gas/elf/section24b.d b/gas/testsuite/gas/elf/section24b.d index 451ec21..03dd291 100644 --- a/gas/testsuite/gas/elf/section24b.d +++ b/gas/testsuite/gas/elf/section24b.d @@ -3,8 +3,12 @@ #source: section24.s #readelf: -S --wide -#failif #... - \[..\] .(text|data|bss|rodata)[ ]+PROGBITS[ ]+[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 00 [^R] .* + \[..\] .text[ ]+PROGBITS[ ]+[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 00 +AX .* +#... + \[..\] .data[ ]+PROGBITS[ ]+[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 00 +WA .* +#... + \[..\] .bss[ ]+NOBITS[ ]+[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 00 +WA .* +#... + \[..\] .rodata[ ]+PROGBITS[ ]+[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 00 +A .* #pass - diff --git a/gas/testsuite/gas/elf/section27.d b/gas/testsuite/gas/elf/section27.d new file mode 100644 index 0000000..da0734f --- /dev/null +++ b/gas/testsuite/gas/elf/section27.d @@ -0,0 +1,19 @@ +#readelf: -h -S --wide +#name: SHF_GNU_RETAIN sections 27 +#notarget: ![supports_gnu_osabi] + +#... + +OS/ABI: +UNIX - (GNU|FreeBSD) +#... + \[..\] .text[ ]+PROGBITS[ ]+[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 00 AX.* +#... + \[..\] .data[ ]+PROGBITS[ ]+[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 00 WA.* +#... + \[..\] .bss[ ]+NOBITS[ ]+[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 00 WA.* +#... + \[..\] .bss[ ]+NOBITS[ ]+[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 00 WAR.* +#... + \[..\] .data[ ]+PROGBITS[ ]+[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 00 WAR.* +#... + \[..\] .text[ ]+PROGBITS[ ]+[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 00 AXR.* +#pass diff --git a/gas/testsuite/gas/elf/section27.s b/gas/testsuite/gas/elf/section27.s new file mode 100644 index 0000000..78e410f --- /dev/null +++ b/gas/testsuite/gas/elf/section27.s @@ -0,0 +1,34 @@ + .section .bss,"aw" + .global discard0 + .type discard0, %object +discard0: + .zero 2 + + .section .data,"aw" + .global discard1 + .type discard1, %object +discard1: + .word 1 + + .text + .global discard2 + .type discard2, %function +discard2: + .word 0 + + .section .bss,"awR",%nobits + .global retain0 + .type retain0, %object +retain0: + .zero 2 + + .section .data,"awR",%progbits + .type retain1, %object +retain1: + .word 1 + + .section .text,"axR",%progbits + .global retain2 + .type retain2, %function +retain2: + .word 0 |