diff options
author | Jim Kingdon <jkingdon@engr.sgi.com> | 1993-07-09 18:33:23 +0000 |
---|---|---|
committer | Jim Kingdon <jkingdon@engr.sgi.com> | 1993-07-09 18:33:23 +0000 |
commit | 4d50f90ab81c6861aaafb77672573726636a9330 (patch) | |
tree | 8f5ee91b7c91ead23e32207635dbed85317bddbc /gdb/a29k-tdep.c | |
parent | 332fc09ff02293c88cc1e74f0ff20e222e299162 (diff) | |
download | ppe42-binutils-4d50f90ab81c6861aaafb77672573726636a9330.tar.gz ppe42-binutils-4d50f90ab81c6861aaafb77672573726636a9330.zip |
* a29k-tdep.c, findvar.c (get_saved_register): Fix byteswapping sins.
Diffstat (limited to 'gdb/a29k-tdep.c')
-rw-r--r-- | gdb/a29k-tdep.c | 37 |
1 files changed, 27 insertions, 10 deletions
diff --git a/gdb/a29k-tdep.c b/gdb/a29k-tdep.c index fd90a2b54a..e07148f9d9 100644 --- a/gdb/a29k-tdep.c +++ b/gdb/a29k-tdep.c @@ -504,7 +504,8 @@ frame_locals_address (fi) if actual_mem_addr is non-NULL, store there the address that it was fetched from (or if from a register the offset within registers). Set *LVAL to lval_memory or lval_register, depending - on where it came from. */ + on where it came from. The contents written into MYADDR are in + target format. */ void read_register_stack (memaddr, myaddr, actual_mem_addr, lval) CORE_ADDR memaddr; @@ -518,12 +519,16 @@ read_register_stack (memaddr, myaddr, actual_mem_addr, lval) /* If we don't do this 'info register' stops in the middle. */ if (memaddr >= rstack_high_address) { - int val = -1; /* a bogus value */ + /* a bogus value */ + char val[] = {~0, ~0, ~0, ~0}; /* It's in a local register, but off the end of the stack. */ int regnum = (memaddr - rsp) / 4 + LR0_REGNUM; if (myaddr != NULL) - *(int*)myaddr = val; /* Provide bogusness */ - supply_register(regnum, (char *)&val); /* More bogusness */ + { + /* Provide bogusness */ + memcpy (myaddr, val, 4); + } + supply_register(regnum, val); /* More bogusness */ if (lval != NULL) *lval = lval_register; if (actual_mem_addr != NULL) @@ -550,7 +555,7 @@ read_register_stack (memaddr, myaddr, actual_mem_addr, lval) { /* It's in the memory portion of the register stack. */ if (myaddr != NULL) - read_memory (memaddr, myaddr, 4); + read_memory (memaddr, myaddr, 4); if (lval != NULL) *lval = lval_memory; if (actual_mem_addr != NULL) @@ -641,7 +646,11 @@ get_saved_register (raw_buffer, optimized, addrp, frame, regnum, lvalp) if (regnum == RSP_REGNUM) { if (raw_buffer != NULL) - *(CORE_ADDR *)raw_buffer = fi->frame; + { + *(CORE_ADDR *)raw_buffer = fi->frame; + /* Put it back in target byte order. */ + SWAP_TARGET_AND_HOST (raw_buffer, sizeof (CORE_ADDR)); + } if (lvalp != NULL) *lvalp = not_lval; return; @@ -649,7 +658,11 @@ get_saved_register (raw_buffer, optimized, addrp, frame, regnum, lvalp) else if (regnum == PC_REGNUM) { if (raw_buffer != NULL) - *(CORE_ADDR *)raw_buffer = fi->pc; + { + *(CORE_ADDR *)raw_buffer = fi->pc; + /* Put it back in target byte order. */ + SWAP_TARGET_AND_HOST (raw_buffer, sizeof (CORE_ADDR)); + } /* Not sure we have to do this. */ if (lvalp != NULL) @@ -662,9 +675,13 @@ get_saved_register (raw_buffer, optimized, addrp, frame, regnum, lvalp) if (raw_buffer != NULL) { if (fi->next != NULL) - *(CORE_ADDR *)raw_buffer = fi->next->saved_msp; + { + *(CORE_ADDR *)raw_buffer = fi->next->saved_msp; + /* Put it back in target byte order. */ + SWAP_TARGET_AND_HOST (raw_buffer, sizeof (CORE_ADDR)); + } else - *(CORE_ADDR *)raw_buffer = read_register (MSP_REGNUM); + read_register_gen (MSP_REGNUM, raw_buffer); } /* The value may have been computed, not fetched. */ if (lvalp != NULL) @@ -676,7 +693,7 @@ get_saved_register (raw_buffer, optimized, addrp, frame, regnum, lvalp) /* These registers are not saved over procedure calls, so just print out the current values. */ if (raw_buffer != NULL) - *(CORE_ADDR *)raw_buffer = read_register (regnum); + read_register_gen (regnum, raw_buffer); if (lvalp != NULL) *lvalp = lval_register; if (addrp != NULL) |