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