> Both are supposed to happen. I can't really debug this without a
> test case. This works on ia64, which is a non-dwarf-unwind target,
> so that in-and-of itself isn't the problem.
This is from the gdb.base testsuite:
int factorial (int value)
{
if (value > 1) { /* set breakpoint 7 here */
value *= factorial (value - 1);
}
return (value); /* set breakpoint 19 here */
}
./cc1 -quiet -gdwarf-2 -fomit-frame-pointer dj.c -o dj.s
v850-elf-gcc -c dj.s
v850-elf-readelf -wio dj.o
v850-elf-objdump -d dj.o
<1><60>: Abbrev Number: 2 (DW_TAG_subprogram)
. . .
DW_AT_frame_base : 1 byte block: 53 (DW_OP_reg3)
<2><81>: Abbrev Number: 3 (DW_TAG_formal_parameter)
. . .
DW_AT_location : 2 byte block: 91 0 (DW_OP_fbreg: 0)
Which indicates the parameter is at 0[sp]. However...
00000000 <_factorial>:
0: 03 1e ec ff addi -20, sp, sp
4: 63 ff 11 00 st.w lp, 16[sp]
8: 63 37 15 00 st.w r6, 20[sp]
c: 23 57 15 00 ld.w 20[sp],r10
10: 61 52 cmp 1, r10
...the parameter is *really* in 20[sp].