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.bey...@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
>

Reply via email to