Bug 18785

Summary: strip is broken
Product: binutils Reporter: H.J. Lu <hjl.tools>
Component: binutilsAssignee: Not yet assigned to anyone <unassigned>
Status: RESOLVED FIXED    
Severity: normal CC: nickc
Priority: P2    
Version: 2.26   
Target Milestone: ---   
Host: Target:
Build: Last reconfirmed:
Attachments: A testcase

Description H.J. Lu 2015-08-07 15:12:44 UTC
On Linux/x86-64,

commit 6e33951edcbed1fd803beabcde2af3b252b92164
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Fri Aug 7 05:04:21 2015 -0700

    Properly merge hidden versioned symbol

gave

# /export/gnu/import/git/sources/gcc/contrib/compare-debug stage2-gcc/compare-elim.o stage3-gcc/compare-elim.o
stage2-gcc/compare-elim.o.stripped stage3-gcc/compare-elim.o.stripped differ: byte 5729, line 9
objdump: stage2-gcc/compare-elim.o.stripped: File format not recognized
objdump: stage3-gcc/compare-elim.o.stripped: File format not recognized
stage2-gcc/compare-elim.o.stripped stage3-gcc/compare-elim.o.stripped differ: byte 5729, line 9
objdump: stage2-gcc/compare-elim.o.stripped: File format not recognized
objdump: stage3-gcc/compare-elim.o.stripped: File format not recognized
objdump: stage2-gcc/compare-elim.o.stripped: File format not recognized
objdump: stage3-gcc/compare-elim.o.stripped: File format not recognized
Comment 1 H.J. Lu 2015-08-07 16:13:42 UTC
Created attachment 8494 [details]
A testcase

[hjl@gnu-6 pr18785]$ make
/bin/strip compare-elim.o -o good.o
./strip compare-elim.o -o bad.o
cmp good.o bad.o
good.o bad.o differ: byte 5729, line 9
Makefile:5: recipe for target 'all' failed
make: *** [all] Error 1
[hjl@gnu-6 pr18785]$
Comment 2 Sourceware Commits 2015-08-07 17:37:43 UTC
The master branch has been updated by H.J. Lu <hjl@sourceware.org>:

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.
Comment 3 H.J. Lu 2015-08-07 17:45:19 UTC
Fixed.