diff options
author | Jan Beulich <jbeulich@novell.com> | 2015-12-08 10:11:58 +0100 |
---|---|---|
committer | Jan Beulich <jbeulich@suse.com> | 2015-12-08 10:11:58 +0100 |
commit | fbdf9406b0589e9b8bbfbbed606f3fff2d060b3c (patch) | |
tree | e3755dd2ed9ecd024559e87127a1d9590a021dfe /gas | |
parent | 3685b09fb85dc279762e19df310dc2f30e64b044 (diff) | |
download | fsf-binutils-gdb-fbdf9406b0589e9b8bbfbbed606f3fff2d060b3c.zip fsf-binutils-gdb-fbdf9406b0589e9b8bbfbbed606f3fff2d060b3c.tar.gz fsf-binutils-gdb-fbdf9406b0589e9b8bbfbbed606f3fff2d060b3c.tar.bz2 |
ELF: don't re-order SHF_FILE symbols
.file directives may be used to identify the scope of local symbols,
the purpose of which gets subverted when re-ordering them. Only allow
the first of them to be moved to the first position.
Diffstat (limited to 'gas')
-rw-r--r-- | gas/ChangeLog | 5 | ||||
-rw-r--r-- | gas/config/obj-elf.c | 9 | ||||
-rw-r--r-- | gas/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | gas/testsuite/gas/elf/elf.exp | 1 | ||||
-rw-r--r-- | gas/testsuite/gas/elf/file-2.d | 14 | ||||
-rw-r--r-- | gas/testsuite/gas/elf/file-2.s | 7 | ||||
-rw-r--r-- | gas/testsuite/gas/elf/file.d | 18 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/ilp32/elf/file.d | 18 |
8 files changed, 58 insertions, 21 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index 6fb81a1..53a618d 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,8 @@ +2015-12-08 Jan Beulich <jbeulich@suse.com> + + * config/obj-elf.c (elf_file_symbol): Tighten condition for + moving BSF_FILE symbols. + 2015-12-08 DJ Delorie <dj@redhat.com> * config/rl78-parse.y: Make all branches relaxable via diff --git a/gas/config/obj-elf.c b/gas/config/obj-elf.c index 031fafb..f930dc6 100644 --- a/gas/config/obj-elf.c +++ b/gas/config/obj-elf.c @@ -282,14 +282,17 @@ elf_file_symbol (const char *s, int appfile) symbol_get_bfdsym (sym)->flags |= BSF_FILE; - if (symbol_rootP != sym) + if (symbol_rootP != sym + && (symbol_rootP->bsym == NULL + || !(symbol_rootP->bsym->flags & BSF_FILE))) { symbol_remove (sym, &symbol_rootP, &symbol_lastP); symbol_insert (sym, symbol_rootP, &symbol_rootP, &symbol_lastP); + } + #ifdef DEBUG - verify_symbol_chain (symbol_rootP, symbol_lastP); + verify_symbol_chain (symbol_rootP, symbol_lastP); #endif - } } #ifdef NEED_ECOFF_DEBUG diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index c514be7..bc524e9 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2015-12-08 Jan Beulich <jbeulich@suse.com> + + * gas/elf/file-2.s, gas/elf/file-2.d: New. + * gas/elf/elf.exp: Run new test. + * gas/elf/file.d: Adjust expectations. + * gas/i386/ilp32/elf/file.d: Likewise. + 2015-12-04 Nick Clifton <nickc@redhat.com> PR gas/19276 diff --git a/gas/testsuite/gas/elf/elf.exp b/gas/testsuite/gas/elf/elf.exp index fc81da1..99292d7 100644 --- a/gas/testsuite/gas/elf/elf.exp +++ b/gas/testsuite/gas/elf/elf.exp @@ -111,6 +111,7 @@ if { [is_elf_format] } then { run_dump_test "file" } } + run_dump_test "file-2" setup_xfail "nds32*-*-*" run_dump_test "group0a" run_dump_test "group0b" diff --git a/gas/testsuite/gas/elf/file-2.d b/gas/testsuite/gas/elf/file-2.d new file mode 100644 index 0000000..5da114c --- /dev/null +++ b/gas/testsuite/gas/elf/file-2.d @@ -0,0 +1,14 @@ +#objdump: -t +#name: .file file names ordering + +.*: .* + +SYMBOL TABLE: +0+ l[ ]*df \*ABS\*[ ]+0+ file-2\.s +#... +0+ l[ ]*\.text[ ]+0+ local1 +0+ l[ ]*df \*ABS\*[ ]+0+ aux-1\.s +0+ l[ ]*\.text[ ]+0+ local2 +0+ l[ ]*df \*ABS\*[ ]+0+ aux-2\.s +0+ l[ ]*\.text[ ]+0+ local3 +#pass diff --git a/gas/testsuite/gas/elf/file-2.s b/gas/testsuite/gas/elf/file-2.s new file mode 100644 index 0000000..4080034 --- /dev/null +++ b/gas/testsuite/gas/elf/file-2.s @@ -0,0 +1,7 @@ + .file "file-2.s" + .text +local1: + .file "aux-1.s" +local2: + .file "aux-2.s" +local3: diff --git a/gas/testsuite/gas/elf/file.d b/gas/testsuite/gas/elf/file.d index 1e98186..9b7bb4f 100644 --- a/gas/testsuite/gas/elf/file.d +++ b/gas/testsuite/gas/elf/file.d @@ -4,15 +4,15 @@ .*: .* SYMBOL TABLE: +0+ l[ ]*df \*ABS\*[ ]+0+ ~tilde #... -0+ l[ ]*df \*ABS\*[ ]+0+ file\.s -0+ l[ ]*df \*ABS\*[ ]+0+ slash/data -0+ l[ ]*df \*ABS\*[ ]+0+ \{braces\} -0+ l[ ]*df \*ABS\*[ ]+0+ \[brackets\] -0+ l[ ]*df \*ABS\*[ ]+0+ /dir/file\.s -0+ l[ ]*df \*ABS\*[ ]+0+ :colon -0+ l[ ]*df \*ABS\*[ ]+0+ UPPER -0+ l[ ]*df \*ABS\*[ ]+0+ lower 0+ l[ ]*df \*ABS\*[ ]+0+ hash\# -0+ l[ ]*df \*ABS\*[ ]+0+ ~tilde +0+ l[ ]*df \*ABS\*[ ]+0+ lower +0+ l[ ]*df \*ABS\*[ ]+0+ UPPER +0+ l[ ]*df \*ABS\*[ ]+0+ :colon +0+ l[ ]*df \*ABS\*[ ]+0+ /dir/file\.s +0+ l[ ]*df \*ABS\*[ ]+0+ \[brackets\] +0+ l[ ]*df \*ABS\*[ ]+0+ \{braces\} +0+ l[ ]*df \*ABS\*[ ]+0+ slash/data +0+ l[ ]*df \*ABS\*[ ]+0+ file\.s #pass diff --git a/gas/testsuite/gas/i386/ilp32/elf/file.d b/gas/testsuite/gas/i386/ilp32/elf/file.d index 9394c0c..57c45d7 100644 --- a/gas/testsuite/gas/i386/ilp32/elf/file.d +++ b/gas/testsuite/gas/i386/ilp32/elf/file.d @@ -5,15 +5,15 @@ .*: .* SYMBOL TABLE: +0+ l[ ]*df \*ABS\*[ ]+0+ ~tilde #... -0+ l[ ]*df \*ABS\*[ ]+0+ file\.s -0+ l[ ]*df \*ABS\*[ ]+0+ slash/data -0+ l[ ]*df \*ABS\*[ ]+0+ \{braces\} -0+ l[ ]*df \*ABS\*[ ]+0+ \[brackets\] -0+ l[ ]*df \*ABS\*[ ]+0+ /dir/file\.s -0+ l[ ]*df \*ABS\*[ ]+0+ :colon -0+ l[ ]*df \*ABS\*[ ]+0+ UPPER -0+ l[ ]*df \*ABS\*[ ]+0+ lower 0+ l[ ]*df \*ABS\*[ ]+0+ hash\# -0+ l[ ]*df \*ABS\*[ ]+0+ ~tilde +0+ l[ ]*df \*ABS\*[ ]+0+ lower +0+ l[ ]*df \*ABS\*[ ]+0+ UPPER +0+ l[ ]*df \*ABS\*[ ]+0+ :colon +0+ l[ ]*df \*ABS\*[ ]+0+ /dir/file\.s +0+ l[ ]*df \*ABS\*[ ]+0+ \[brackets\] +0+ l[ ]*df \*ABS\*[ ]+0+ \{braces\} +0+ l[ ]*df \*ABS\*[ ]+0+ slash/data +0+ l[ ]*df \*ABS\*[ ]+0+ file\.s #pass |