[Bug middle-end/61577] [4.9.0 Regression] can't compile on hp-ux v3 ia64
cameron.heide at betasystems dot com
gcc-bugzilla@gcc.gnu.org
Fri Jul 26 19:13:00 GMT 2019
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61577
--- Comment #107 from C. Heide <cameron.heide at betasystems dot com> ---
Thanks for the tips; I don't do a lot of assembly-level debugging in GDB.
It looks like it fails almost immediately upon entering the remove function:
> Breakpoint 1, variable_hasher::remove (var=0x0) at /build_area_local/ntmake/gcc-8.3.0.ia64/gcc/var-tracking.c:507
> 507 variable_htab_free (var);
> (gdb) disass $pc-32,$pc+32
> Dump of assembler code from 0x6d777a1 to 0x6d777e1:
> 0x0000000006d777a1 <variable_hasher::remove(variable*)+1>: mov r35=r12
> 0x0000000006d777a2 <variable_hasher::remove(variable*)+2>: adds r12=-16,r12
> 0x0000000006d777b0 <variable_hasher::remove(variable*)+16>: [MII] nop.m 0x0
> 0x0000000006d777b1 <variable_hasher::remove(variable*)+17>: mov r33=b0
> 0x0000000006d777b2 <variable_hasher::remove(variable*)+18>: mov r36=r1;;
> 0x0000000006d777c0 <variable_hasher::remove(variable*)+32>: [MMB] st4 [r35]=r32
> => 0x0000000006d777c1 <variable_hasher::remove(variable*)+33>: ld4 r37=[r35]
> 0x0000000006d777c2 <variable_hasher::remove(variable*)+34>: br.call.sptk.many b0=0x7a70e90
> 0x0000000006d777d0 <variable_hasher::remove(variable*)+48>: [MII] mov r1=r36
> 0x0000000006d777d1 <variable_hasher::remove(variable*)+49>: nop.i 0x0;;
> 0x0000000006d777d2 <variable_hasher::remove(variable*)+50>: mov.i ar.pfs=r34
> 0x0000000006d777e0 <variable_hasher::remove(variable*)+64>: [MII] nop.m 0x0
> End of assembler dump.
> (gdb) stepi
> 0x0000000006d777c2 507 variable_htab_free (var);
> (gdb) stepi
> warning: error while checking for dld breakpoint: Cannot access memory at address 0x7a70e90
> 0x0000000007a70e90 in ?? ()
> (gdb) stepi
>
> Program received signal SIGSEGV, Segmentation fault.
> 0x0000000007a70e90 in ?? ()
where that address in the br.call.sptk.many opcode doesn't correspond to
anything valid.
If I disassemble the var-tracking.o file used in the build, this block looks
like:
> 00000000 <_ZN15variable_hasher6removeEP8variable>:
> 0: 00 10 19 0a 80 05 [MII] alloc r34=ar.pfs,6,5,0
> 6: 30 02 30 00 42 80 mov r35=r12
> c: 01 67 fc 8c adds r12=-16,r12
> 10: 01 00 00 00 01 00 [MII] nop.m 0x0
> 16: 10 02 00 62 00 80 mov r33=b0
> 1c: 04 08 00 84 mov r36=r1;;
> 20: 18 00 80 46 90 11 [MMB] st4 [r35]=r32
> 26: 50 02 8c 20 20 00 ld4 r37=[r35]
> 2c: 08 00 00 50 br.call.sptk.many b0=20 <_ZN15variable_hasher6removeEP8variable+0x20>
which feels valid? (I know near-zilch about ia64 assembly.) And for comparison
this is the raw bytecode for this bundle as seen in the debugger:
> (gdb) x/16xb 0x0000000006d777c0
> 0x6d777c0 <variable_hasher::remove(variable*)+32>: 0x18 0x00 0x80 0x46 0x90 0x11 0x50 0x02
> 0x6d777c8 <variable_hasher::remove(variable*)+40>: 0x8c 0x20 0x20 0x00 0xd8 0x96 0xcf 0x50
Is it back to being some kind of linker problem with relocations or such?
More information about the Gcc-bugs
mailing list