Hi,
I have built a tool chain for m32c target using the latest sources.
I am using a third party debugger to debug the application built
using this tool chain. However, I am not able to view the complete
call stack. It seems that the ".debug_frame" section is not
generating the correct unwind information.
Please consider the ".debug_frame" section generated for the
following code:
////////////////////////////////
int foo();
int foo2();
int main()
{
int j = 23;
j += foo();
return 0;
}
int foo()
{
int k = 45;
int l = 56;
int m = 6;
m += foo2();
return (m+l+k) ;
}
int foo2()
{
int n = 9;
int o = 26;
return (n+o) ;
}
////////////////////////////////
Command used to compile the code:
m32c-elf-gcc -mcpu=r8c main.c -g -nostartfiles
Command used to display debug information:
m32c-elf-readelf -w a.out
///////////////////////////////////////////////////////////////////
The section .debug_frame contains:
00000000 00000010 ffffffff CIE
Version: 1
Augmentation: ""
Code alignment factor: 1
Data alignment factor: -1
Return address column: 13
DW_CFA_def_cfa: r12 ofs 3
DW_CFA_offset: r13 at cfa-3
DW_CFA_nop
DW_CFA_nop
00000014 00000014 00000000 FDE cie=00000000 pc=0000c000..0000c013
DW_CFA_advance_loc: 3 to 0000c003
DW_CFA_def_cfa_offset: 5
DW_CFA_def_cfa_reg: r11
DW_CFA_offset: r11 at cfa-5
DW_CFA_nop
0000002c 00000014 00000000 FDE cie=00000000 pc=0000c013..0000c035
DW_CFA_advance_loc: 3 to 0000c016
DW_CFA_def_cfa_offset: 5
DW_CFA_def_cfa_reg: r11
DW_CFA_offset: r11 at cfa-5
DW_CFA_nop
00000044 00000014 00000000 FDE cie=00000000 pc=0000c035..0000c04a
DW_CFA_advance_loc: 3 to 0000c038
DW_CFA_def_cfa_offset: 5
DW_CFA_def_cfa_reg: r11
DW_CFA_offset: r11 at cfa-5
DW_CFA_nop
///////////////////////////////////////////////////////////////////
The Frame Description Entries (FDE) generated for all the functions
are identical. The number of local variables are different in all
the functions. Therefore the frame size allocated for every function
will be different.
But this is not reflected in the debug information.
The stack adjustment (accounting for the local variables) is emitted
correctly in the function prologue using "enter" instruction.
But it seems that the debug frame information for this stack
adjustment is not emitted.
Is my understanding correct?
If yes, how can I generate the information that will account for the
local variables?
Regards,
Ina Pandit
KPIT Cummins InfoSystems Ltd.
Pune, India
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Free download of GNU based tool-chains for Renesas' SH, H8, R8C, M16C
and M32C Series. The following site also offers free technical support
to its users. Visit http://www.kpitgnutools.com for details.
Latest versions of KPIT GNU tools were released on February 6, 2007.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~