http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55586



--- Comment #2 from Michael Meissner <meissner at gcc dot gnu.org> 2013-02-07 
23:49:34 UTC ---

As far as I can tell, it is a bug in earlier versions of GDB, and not in the

compiler.



Due to the ABI's, it will only show up in 32-bit powerpc with an older GDB. 

The 64-bit powerpc has a completely different ABI, and for stdarg functions, it

does not pass the values in floating point registers, and it doesn't use CR6 to

indicate that the floating point values were passed.  So there isn't a jump,

etc.



I tested GCC 4.8, 4.7 and found that they essentially generated the same code

for the debugging information.  On my SLES 10 system, I even used the system

compiler which is 4.1.2 based, and it generated the same debug code.  If I used

a GDB that was 7.3 or newer (SLES 11 SP2, IBM Advance Toolchain 5.0, etc.) and

put a breakpoint on the my_function, the debugger puts the breakpoint on the

STWU instruction, and it hits the breakpoint.



If I use the system debugger on SLES 10 which is version 7.1, the debugger

skips the function start, and puts the breakpoint on the first STFD instruction

as you mention, and it won't hit the breakpoint unless you pass floating point

values in the floating point registers.



Here is the assembler output from one of the compilers for -O -m32.  Note,

there is a .loc before the first instruction at line 9 (the beginning of the

function).



my_function:

.LFB12:

        .file 1 "bug-55586.c"

        .loc 1 9 0

.LVL0:

        stwu 1,-128(1)

.LCFI0:

        mflr 0

.LCFI1:

        stw 31,124(1)

.LCFI2:

        stw 0,132(1)

.LCFI3:

        stw 4,28(1)

        stw 5,32(1)

        stw 6,36(1)

        stw 7,40(1)

        stw 8,44(1)

        stw 9,48(1)

        stw 10,52(1)

        bne 1,.L2

        .loc 1 9 0

        stfd 1,56(1)

        stfd 2,64(1)

        stfd 3,72(1)

        stfd 4,80(1)

        stfd 5,88(1)

        stfd 6,96(1)

        stfd 7,104(1)

        stfd 8,112(1)

.L2:

Reply via email to