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 >