I want you guys to vett this change. I was getting wrong results on a target where sizeof (SP) != sizeof (void *). The local func read_reg was calling extract_unsigned_integer with the wrong size.