This is the mail archive of the binutils-cvs@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] ELF: don't re-order SHF_FILE symbols


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=fbdf9406b0589e9b8bbfbbed606f3fff2d060b3c

commit fbdf9406b0589e9b8bbfbbed606f3fff2d060b3c
Author: Jan Beulich <jbeulich@novell.com>
Date:   Tue Dec 8 10:11:58 2015 +0100

    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.

Diff:
---
 gas/ChangeLog                           |  5 +++++
 gas/config/obj-elf.c                    |  9 ++++++---
 gas/testsuite/ChangeLog                 |  7 +++++++
 gas/testsuite/gas/elf/elf.exp           |  1 +
 gas/testsuite/gas/elf/file-2.d          | 14 ++++++++++++++
 gas/testsuite/gas/elf/file-2.s          |  7 +++++++
 gas/testsuite/gas/elf/file.d            | 18 +++++++++---------
 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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]