Preserving the argument spills for GDB
Jean Christophe Beyler
jean.christophe.beyler@gmail.com
Thu Nov 12 17:08:00 GMT 2009
Of course:
mov r6 = InputReg1
mov InputReg1 = InputReg2
mov InputReg2 = tmp
should read:
mov r6 = InputReg1
mov InputReg1 = InputReg2
mov InputReg2 = r6
Sorry about that.
Jc
On Thu, Nov 12, 2009 at 12:07 PM, Jean Christophe Beyler
<jean.christophe.beyler@gmail.com> wrote:
> Dear all,
>
> As I continue to work on this I have found something that is surprising.
>
> I wrote this code :
>
> int foo (int argc, int argv)
> {
> bar (argv, argc);
> return 0;
> }
>
> On my architecture, this is transformed into the following assembly code:
>
> mov r6 = InputReg1
> mov InputReg1 = InputReg2
> mov InputReg2 = tmp
>
> However, I am of course looking at the debug information, and I was
> surprised to see that :
>
> <2><12f>: Abbrev Number: 6 (DW_TAG_formal_parameter)
> <130> DW_AT_name : argc
> <135> DW_AT_decl_file : 1
> <136> DW_AT_decl_line : 4
> <137> DW_AT_type : <af>
> <13b> DW_AT_location : 0x38 (location list)
> <2><13f>: Abbrev Number: 6 (DW_TAG_formal_parameter)
> <140> DW_AT_name : argv
> <145> DW_AT_decl_file : 1
> <146> DW_AT_decl_line : 4
> <147> DW_AT_type : <af>
> <14b> DW_AT_location : 0x6e (location list)
>
> This is ok, no problems here. But if I look at the locations given for
> these variables:
> 00000038 00000000 0000000c (DW_OP_InputReg1)
> 00000038 0000000c 0000001c (DW_OP_r6)
> 00000038 <End of list>
> 0000006e 00000000 00000010 (DW_OP_InputReg2)
> 0000006e <End of list>
>
> Is there any reason why the compiler does not generate the debug
> information showing that the InputReg1 is now in InputReg2 and
> vice-versa? It would seem to me that the debugger would need this
> information but I may be mistaken.
>
> As always, thanks for your input,
> Jc
>
More information about the Gcc
mailing list