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] Check sh_type/sh_flags/sh_addralign/sh_entsize when copying sh_link/sh_info


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

commit d4ac1f878ecef58f1e4b4ff0cbfb4b475656eaf4
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Fri Aug 7 10:28:42 2015 -0700

    Check sh_type/sh_flags/sh_addralign/sh_entsize when copying sh_link/sh_info
    
    When copying the sh_link and sh_info fields in stripped section headers,
    we also check if the sh_type, sh_flags, /sh_addralign and sh_entsize
    fields of the output section match the output.  Since --only-keep-debug
    turns all non-debug sections into SHT_NOBITS sections, the output
    SHT_NOBITS type matches any input type.
    
    bfd/
    
    	PR binutils/18785
    	* elf.c (_bfd_elf_copy_private_bfd_data): When copying the
    	sh_link and sh_info fields in stripped section headers, we also
    	check if the sh_type, sh_flags, /sh_addralign and sh_entsize
    	fields of the output section match the output.  Since
    	--only-keep-debug turns all non-debug sections into SHT_NOBITS
    	sections, the output SHT_NOBITS type matches any input type.
    
    binutils/testsuite/
    
    	PR binutils/18785
    	* binutils-all/objcopy.exp: Run strip-12.
    	* binutils-all/strip-12.d: New file.
    	* binutils-all/strip-12.s: Likewise.

Diff:
---
 bfd/ChangeLog                               | 10 ++++++++++
 bfd/elf.c                                   |  9 ++++++++-
 binutils/testsuite/ChangeLog                |  7 +++++++
 binutils/testsuite/binutils-all/objcopy.exp |  1 +
 binutils/testsuite/binutils-all/strip-12.d  |  7 +++++++
 binutils/testsuite/binutils-all/strip-12.s  |  6 ++++++
 6 files changed, 39 insertions(+), 1 deletion(-)

diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 36fae0e..c319f80 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,5 +1,15 @@
 2015-08-07  H.J. Lu  <hongjiu.lu@intel.com>
 
+	PR binutils/18785
+	* elf.c (_bfd_elf_copy_private_bfd_data): When copying the
+	sh_link and sh_info fields in stripped section headers, we also
+	check if the sh_type, sh_flags, /sh_addralign and sh_entsize
+	fields of the output section match the output.  Since
+	--only-keep-debug turns all non-debug sections into SHT_NOBITS
+	sections, the output SHT_NOBITS type matches any input type.
+
+2015-08-07  H.J. Lu  <hongjiu.lu@intel.com>
+
 	PR ld/18720
 	* elflink.c (_bfd_elf_merge_symbol): Add a parameter to indicate
 	if the new symbol matches the existing one.  The new hidden
diff --git a/bfd/elf.c b/bfd/elf.c
index 67e4240..9e401c8 100644
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -1233,7 +1233,14 @@ _bfd_elf_copy_private_bfd_data (bfd *ibfd, bfd *obfd)
 	    {
 	      Elf_Internal_Shdr * iheader = iheaders[j];
 	      
-	      if (iheader->sh_type != SHT_NOBITS
+	      /* Since --only-keep-debug turns all non-debug sections
+		 into SHT_NOBITS sections, the output SHT_NOBITS type
+		 matches any input type.  */
+	      if ((oheader->sh_type == SHT_NOBITS
+		   || oheader->sh_type == oheader->sh_type)
+		  && iheader->sh_flags == oheader->sh_flags
+		  && iheader->sh_addralign == oheader->sh_addralign
+		  && iheader->sh_entsize == oheader->sh_entsize
 		  && iheader->sh_size == oheader->sh_size
 		  && iheader->sh_addr == oheader->sh_addr
 		  && (iheader->sh_info != oheader->sh_info
diff --git a/binutils/testsuite/ChangeLog b/binutils/testsuite/ChangeLog
index 8f8f3c2..4f60f93 100644
--- a/binutils/testsuite/ChangeLog
+++ b/binutils/testsuite/ChangeLog
@@ -1,3 +1,10 @@
+2015-08-07  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR binutils/18785
+	* binutils-all/objcopy.exp: Run strip-12.
+	* binutils-all/strip-12.d: New file.
+	* binutils-all/strip-12.s: Likewise.
+
 2015-08-07  Andrew Burgess  <andrew.burgess@embecosm.com>
 
 	* binutils-all/objcopy.exp: Run new symbol tests.
diff --git a/binutils/testsuite/binutils-all/objcopy.exp b/binutils/testsuite/binutils-all/objcopy.exp
index 75514e4..cb8e33b 100644
--- a/binutils/testsuite/binutils-all/objcopy.exp
+++ b/binutils/testsuite/binutils-all/objcopy.exp
@@ -1033,6 +1033,7 @@ if [is_elf_format] {
     run_dump_test "strip-7"
     run_dump_test "strip-8"
     run_dump_test "strip-9"
+    run_dump_test "strip-12"
     # Non-EABI ARM targets will set OSABI to ARM
     # The V850 sets the OSABI to UNIX - System V
     if { ![istarget "*-*-hpux*"]
diff --git a/binutils/testsuite/binutils-all/strip-12.d b/binutils/testsuite/binutils-all/strip-12.d
new file mode 100644
index 0000000..a33faab
--- /dev/null
+++ b/binutils/testsuite/binutils-all/strip-12.d
@@ -0,0 +1,7 @@
+#PROG: strip
+#strip:
+#readelf: -S --wide
+
+#...
+  \[[ 0-9]+\] \.bss[ \t]+NOBITS[ \t0-9a-f]+WA[ \t]+0[ \t]+0[ \t]+1
+#pass
diff --git a/binutils/testsuite/binutils-all/strip-12.s b/binutils/testsuite/binutils-all/strip-12.s
new file mode 100644
index 0000000..46b729f
--- /dev/null
+++ b/binutils/testsuite/binutils-all/strip-12.s
@@ -0,0 +1,6 @@
+	.bss
+	.space 8
+	.section	.debug_str,"MS",%progbits,1
+	.string	""
+	.section        .text.foo,"axG",%progbits,foo,comdat
+	.byte 0


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