aboutsummaryrefslogtreecommitdiff
path: root/gdb/a29k-tdep.c
diff options
context:
space:
mode:
authorJim Kingdon <jkingdon@engr.sgi.com>1993-07-09 18:33:23 +0000
committerJim Kingdon <jkingdon@engr.sgi.com>1993-07-09 18:33:23 +0000
commit4d50f90ab81c6861aaafb77672573726636a9330 (patch)
tree8f5ee91b7c91ead23e32207635dbed85317bddbc /gdb/a29k-tdep.c
parent332fc09ff02293c88cc1e74f0ff20e222e299162 (diff)
downloadfsf-binutils-gdb-4d50f90ab81c6861aaafb77672573726636a9330.zip
fsf-binutils-gdb-4d50f90ab81c6861aaafb77672573726636a9330.tar.gz
fsf-binutils-gdb-4d50f90ab81c6861aaafb77672573726636a9330.tar.bz2
* a29k-tdep.c, findvar.c (get_saved_register): Fix byteswapping sins.
Diffstat (limited to 'gdb/a29k-tdep.c')
-rw-r--r--gdb/a29k-tdep.c37
1 files changed, 27 insertions, 10 deletions
diff --git a/gdb/a29k-tdep.c b/gdb/a29k-tdep.c
index fd90a2b..e07148f 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)