diff --git a/gas/ChangeLog b/gas/ChangeLog index 6fb81a1aca..53a618d503 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,8 @@ +2015-12-08 Jan Beulich + + * config/obj-elf.c (elf_file_symbol): Tighten condition for + moving BSF_FILE symbols. + 2015-12-08 DJ Delorie * config/rl78-parse.y: Make all branches relaxable via diff --git a/gas/config/obj-elf.c b/gas/config/obj-elf.c index 031fafb91b..f930dc607b 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); -#endif } + +#ifdef DEBUG + verify_symbol_chain (symbol_rootP, symbol_lastP); +#endif } #ifdef NEED_ECOFF_DEBUG diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index c514be7bb5..bc524e94a2 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2015-12-08 Jan Beulich + + * 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 PR gas/19276 diff --git a/gas/testsuite/gas/elf/elf.exp b/gas/testsuite/gas/elf/elf.exp index fc81da1e4f..99292d72eb 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 0000000000..5da114cd22 --- /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 0000000000..40800341d1 --- /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 1e98186354..9b7bb4f118 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+ 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+ hash\# +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 9394c0c175..57c45d7259 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+ 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+ hash\# +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