Hi all,
I am working with GCC 4.1.1 for a private target. For the sample
program given below, frame description entry generated is not proper.
######## PROGRAM #########
#include <stdio.h>
void fun();
int main()
{
fun();
return 0;
}
void fun()
{
int a;
int b, c;
return;
}
####### Read ELF output ###############
00000010 0000001c 00000000 FDE cie=00000000 pc=00000000..00000016
DW_CFA_advance_loc: 2 to 00000002
DW_CFA_def_cfa_offset: 4
DW_CFA_advance_loc: 4 to 00000006
DW_CFA_def_cfa_offset: 8
DW_CFA_offset: r24 at cfa-8
DW_CFA_offset: r14 at cfa-4
DW_CFA_advance_loc: 2 to 00000008
DW_CFA_def_cfa_reg: r14
DW_CFA_nop
DW_CFA_nop
DW_CFA_nop
00000030 00000014 00000000 FDE cie=00000000 pc=00000016..00000022
DW_CFA_advance_loc: 2 to 00000018
DW_CFA_def_cfa_offset: 4
DW_CFA_offset: r14 at cfa-4
DW_CFA_advance_loc: 2 to 0000001a
DW_CFA_def_cfa_reg: r14
####### objdump #################3
FP - Frame Pointer, SP - Stack Pointer, RP - Return Address Reg No.
00000000 <_main>:
0: 7e7b STR FP,-(SP)
2: 7af9 0000 STR RP,-(SP)
6: cef0 MOV SP,FP
8: 618c 0000 JMP _fun
c: e002 MOV 0x0,D0
e: 7af8 0000 LOAD (SP)+,RP
12: 7e76 LOAD (SP)+,FP
14: 880b RET
00000016 <_fun>:
16: 7e7b STR FP,-(SP)
18: cef0 MOV SP,FP
1a: ef30 SUB 0x0c,SP
1c: cfe0 MOV FP,SP
1e: 7e76 LOAD (SP)+,FP
20: 880b RET
####### Dwarf Dump Output #############
fde:
< 0><0:0x16><main><fde offset 0x10 length: 0x1c><eh offset none>
00000000: cfa=00(SP/t7)
00000002: cfa=04(SP/t7)
00000006: cfa=08(SP/t7) FP/t6=-4(cfa) RP/t8=-8(cfa)
00000008: cfa=08(FP/t6) FP/t6=-4(cfa) RP/t8=-8(cfa)
< 0><0:0xc><main><fde offset 0x30 length: 0x14><eh offset none>
00000000: cfa=00(SP/t7)
00000002: cfa=04(SP/t7) FP/t6=-4(cfa)
00000004: cfa=04(FP/t6) FP/t6=-4(cfa)
When looking at the dwarf dump, the starting frame address for
function "fun" is given as
< 0><0:0xc><main><fde offset 0x30 length: 0x14><eh offset none>
ideally it should have been
< 0><0x16:0x20><fun><fde offset 0x30 length: 0x14><eh offset none>
Any suggestions where to look at for these kinds of behavior?
Regards,
Rohit