[Reproducible-builds] Bug#808207: diffoscope: Filter objdump --disassemble output before diffing it

Mike Hommey mh at glandium.org
Tue Jan 19 01:27:45 UTC 2016


On Mon, Jan 18, 2016 at 07:06:14PM +0100, Jérémy Bobbio wrote:
> Hi Mike!
> 
> Mike Hommey:
> > When comparing large ELF binaries, some minor differences can end up hurting
> > the visibility of more important differences.
> > 
> > Specifically, objdump --disassemble displays symbols+offsets for addresses
> > it derives from IP-relative addressing, like the following:
> > 
> >    9d2be2:     48 8d 05 42 65 24 02    lea    0x2246542(%rip),%rax        # 2c1912b <_fini@@xul45a1+0x1d803>
> 
> I would be grateful if you could try again using the master branch.
> Dhole made diffoscope compare ELF sections individually and I wonder how
> much it helped with this problem.

I don't think it changed anything.

> If it doesn't, would you be so kind to provide example binaries?

I can't find the differing binary anymore :( But that can be reproduced
with a small testcase:

$ cat <<EOF > test.c
extern const int qux;

int bar() {
#ifdef FOO
  return qux * 2;
#else
  return qux;
#endif
}
EOF
$ cat <<EOF > test2.c
const int qux = 2;
EOF
$ gcc -shared -o /tmp/test.so /tmp/test{,2}.c -fPIC
$ gcc -shared -o /tmp/test2.so /tmp/test{,2}.c -fPIC -DFOO
$ strip test{,2}.so
$ diffoscope --text - /tmp/test*.so
(...)
│ @@ -29,56 +29,57 @@
│   5a2:	48 89 e5             	mov    %rsp,%rbp
│   5a5:	48 c1 fe 03          	sar    $0x3,%rsi
│   5a9:	48 89 f0             	mov    %rsi,%rax
│   5ac:	48 c1 e8 3f          	shr    $0x3f,%rax
│   5b0:	48 01 c6             	add    %rax,%rsi
│   5b3:	48 d1 fe             	sar    %rsi
│   5b6:	74 18                	je     5d0 <_init@@Base+0xc8>
│ - 5b8:	48 8b 05 01 03 20 00 	mov    0x200301(%rip),%rax        # 2008c0 <qux@@Base+0x200254>
│ + 5b8:	48 8b 05 01 03 20 00 	mov    0x200301(%rip),%rax        # 2008c0 <qux@@Base+0x200250>
│   5bf:	48 85 c0             	test   %rax,%rax
│   5c2:	74 0c                	je     5d0 <_init@@Base+0xc8>
│   5c4:	5d                   	pop    %rbp
│   5c5:	ff e0                	jmpq   *%rax
│   5c7:	66 0f 1f 84 00 00 00 	nopw   0x0(%rax,%rax,1)
│   5ce:	00 00 
│   5d0:	5d                   	pop    %rbp
│   5d1:	c3                   	retq   
│   5d2:	0f 1f 40 00          	nopl   0x0(%rax)
│   5d6:	66 2e 0f 1f 84 00 00 	nopw   %cs:0x0(%rax,%rax,1)
│   5dd:	00 00 00 
│   5e0:	80 3d 09 03 20 00 00 	cmpb   $0x0,0x200309(%rip)        # 2008f0 <_edata@@Base>
│   5e7:	75 27                	jne    610 <_init@@Base+0x108>
│ - 5e9:	48 83 3d d7 02 20 00 	cmpq   $0x0,0x2002d7(%rip)        # 2008c8 <qux@@Base+0x20025c>
│ + 5e9:	48 83 3d d7 02 20 00 	cmpq   $0x0,0x2002d7(%rip)        # 2008c8 <qux@@Base+0x200258>
│   5f0:	00 
│   5f1:	55                   	push   %rbp
│   5f2:	48 89 e5             	mov    %rsp,%rbp
│   5f5:	74 0c                	je     603 <_init@@Base+0xfb>
│ - 5f7:	48 8b 3d ea 02 20 00 	mov    0x2002ea(%rip),%rdi        # 2008e8 <qux@@Base+0x20027c>
│ + 5f7:	48 8b 3d ea 02 20 00 	mov    0x2002ea(%rip),%rdi        # 2008e8 <qux@@Base+0x200278>
│   5fe:	e8 45 ff ff ff       	callq  548 <_init@@Base+0x40>
│   603:	e8 48 ff ff ff       	callq  550 <_init@@Base+0x48>
│   608:	5d                   	pop    %rbp
│   609:	c6 05 e0 02 20 00 01 	movb   $0x1,0x2002e0(%rip)        # 2008f0 <_edata@@Base>
│   610:	f3 c3                	repz retq 
│   612:	0f 1f 40 00          	nopl   0x0(%rax)
│   616:	66 2e 0f 1f 84 00 00 	nopw   %cs:0x0(%rax,%rax,1)
│   61d:	00 00 00 
│ - 620:	48 8d 3d e1 00 20 00 	lea    0x2000e1(%rip),%rdi        # 200708 <qux@@Base+0x20009c>
│ + 620:	48 8d 3d e1 00 20 00 	lea    0x2000e1(%rip),%rdi        # 200708 <qux@@Base+0x200098>
│   627:	48 83 3f 00          	cmpq   $0x0,(%rdi)
│   62b:	75 0b                	jne    638 <_init@@Base+0x130>
│   62d:	e9 5e ff ff ff       	jmpq   590 <_init@@Base+0x88>
│   632:	66 0f 1f 44 00 00    	nopw   0x0(%rax,%rax,1)
│ - 638:	48 8b 05 79 02 20 00 	mov    0x200279(%rip),%rax        # 2008b8 <qux@@Base+0x20024c>
│ + 638:	48 8b 05 79 02 20 00 	mov    0x200279(%rip),%rax        # 2008b8 <qux@@Base+0x200248>
│   63f:	48 85 c0             	test   %rax,%rax
│   642:	74 e9                	je     62d <_init@@Base+0x125>
│   644:	55                   	push   %rbp
│   645:	48 89 e5             	mov    %rsp,%rbp
│   648:	ff d0                	callq  *%rax
│   64a:	5d                   	pop    %rbp
│   64b:	e9 40 ff ff ff       	jmpq   590 <_init@@Base+0x88>
│  
│  0000000000000650 <bar@@Base>:
│   650:	55                   	push   %rbp
│   651:	48 89 e5             	mov    %rsp,%rbp
│ - 654:	48 8b 05 4d 02 20 00 	mov    0x20024d(%rip),%rax        # 2008a8 <qux@@Base+0x20023c>
│ + 654:	48 8b 05 4d 02 20 00 	mov    0x20024d(%rip),%rax        # 2008a8 <qux@@Base+0x200238>
│   65b:	8b 00                	mov    (%rax),%eax
│ - 65d:	5d                   	pop    %rbp
│ - 65e:	c3                   	retq   
│ + 65d:	01 c0                	add    %eax,%eax
│ + 65f:	5d                   	pop    %rbp
│ + 660:	c3                   	retq   
╵

Mike



More information about the Reproducible-builds mailing list