Bug#250174: gcc-3.3: Miscompilation of Objective-C code on amd64.
Package: gcc-3.3
Version: 3.3.3-7
gcc-3.3 is miscompiing gnustep-base 1.9.1 on amd64. gcc-3.4
properly compiles it though.
We get a segmentation fault running:
../../Tools/obj/autogsdoc -Project General
-DocumentationDirectory General -MakeDependencies
General/dependencies Debugging.gsdoc OpenStepCompliance.gsdoc
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 16384 (LWP 29136)]
0x0000002a95c9c506 in objc_msg_lookup_super () from
/usr/lib/libobjc.so.1
(gdb) bt
#0 0x0000002a95c9c506 in objc_msg_lookup_super () from
/usr/lib/libobjc.so.1
#1 0x0000002a95810963 in -[NSRecursiveLock init] (self=0x573de0,
_cmd=0x2a95a79d00) at NSLock.m:582
#2 0x0000002a958231c9 in +[NSObject new] (self=0x2a95a73240,
_cmd=0x2a95a79c70) at NSObject.m:1083
#3 0x0000002a95822e76 in +[NSObject initialize]
(self=0x2a95a79b20,
_cmd=0x2a95a97ad0) at NSObject.m:930
#4 0x0000002a95c9c973 in __objc_install_premature_dtable ()
from /usr/lib/libobjc.so.1
#5 0x0000002a95c9c983 in __objc_install_premature_dtable ()
from /usr/lib/libobjc.so.1
#6 0x0000002a95c9c7ed in __objc_init_dispatch_tables ()
from /usr/lib/libobjc.so.1
#7 0x0000002a95c9dad7 in objc_msg_lookup () from
/usr/lib/libobjc.so.1
#8 0x00000000004019a9 in main (argc=9, argv=0x7fbffff758,
env=0x7fbffff7a8)
at autogsdoc.m:556
(gdb) frame 1
#1 0x0000002a95810963 in -[NSRecursiveLock init] (self=0x573de0,
_cmd=0x2a95a79d00) at NSLock.m:582
582 self = [super init];
(gdb) p *self
$1 = {isa = 0x2a95a73240, _mutex = 0x0}
(gdb) frame 0
#0 0x0000002a95c9c506 in objc_msg_lookup_super () from
/usr/lib/libobjc.so.1
(gdb) info reg
rax 0x3e005d002f005c 17451847991099484
rbx 0x573de0 5717472
rcx 0x573b10 5716752
rdx 0x600000000 25769803776
rsi 0x2a95a737b0 182899390384
rdi 0x7fbffff320 548682068768
rbp 0x2a95a737b0 0x2a95a737b0
rsp 0x7fbffff2f0 0x7fbffff2f0
r8 0x111 273
r9 0x5a6a00 5925376
r10 0x2a955699e0 182894107104
r11 0x2a95c9c4e0 182901654752
r12 0x3e005d002f005c 17451847991099484
r13 0x9 9
r14 0x2a968c6508 182914409736
r15 0x4018f8 4200696
rip 0x2a95c9c506 0x2a95c9c506
<objc_msg_lookup_super+38>
eflags 0x10202 66050
cs 0x33 51
ss 0x2b 43
ds 0x0 0
es 0x0 0
fs 0x0 0
gs 0x0 0
(gdb) disassemble
Dump of assembler code for function objc_msg_lookup_super:
0x0000002a95c9c4e0 <objc_msg_lookup_super+0>: sub $0x18,%rsp
0x0000002a95c9c4e4 <objc_msg_lookup_super+4>: mov %rbp,0x8(%rsp)
0x0000002a95c9c4e9 <objc_msg_lookup_super+9>: mov %rbx,(%rsp)
0x0000002a95c9c4ed <objc_msg_lookup_super+13>: mov %r12,0x10(%rsp)
0x0000002a95c9c4f2 <objc_msg_lookup_super+18>: cmpq $0x0,(%rdi)
0x0000002a95c9c4f6 <objc_msg_lookup_super+22>: mov %rsi,%rbp
0x0000002a95c9c4f9 <objc_msg_lookup_super+25>: je 0x2a95c9c600 <objc_msg_lookup_super+288>
0x0000002a95c9c4ff <objc_msg_lookup_super+31>: mov 0x8(%rdi),%r12
0x0000002a95c9c503 <objc_msg_lookup_super+35>: mov (%rsi),%rdx
0x0000002a95c9c506 <objc_msg_lookup_super+38>: mov 0x40(%r12),%rcx
0x0000002a95c9c50b <objc_msg_lookup_super+43>: mov %rdx,%rsi
0x0000002a95c9c50e <objc_msg_lookup_super+46>: mov %edx,%eax
0x0000002a95c9c510 <objc_msg_lookup_super+48>: shr $0x20,%rsi
0x0000002a95c9c514 <objc_msg_lookup_super+52>: shl $0x5,%eax
0x0000002a95c9c517 <objc_msg_lookup_super+55>: add %esi,%eax
The value in r12 (and rax) is wrong, but I have no idea why.
Kurt
Reply to: