aboutsummaryrefslogtreecommitdiff
path: root/gdb/remote-vx29k.c
diff options
context:
space:
mode:
authorKung Hsu <kung@cygnus>1995-03-01 00:01:49 +0000
committerKung Hsu <kung@cygnus>1995-03-01 00:01:49 +0000
commit161520dc02c71146c4bcb352c7bd06ac59398e4f (patch)
tree72ff59b2dc4540f033488726e84275697be9e282 /gdb/remote-vx29k.c
parent33d8f4697c9db53ca8db2ef3d9d3e93f555b5592 (diff)
downloadgdb-161520dc02c71146c4bcb352c7bd06ac59398e4f.zip
gdb-161520dc02c71146c4bcb352c7bd06ac59398e4f.tar.gz
gdb-161520dc02c71146c4bcb352c7bd06ac59398e4f.tar.bz2
* a29k-tdep.c (get_longjmp_target): add this function, from WRS.
* remote-vx.c: move read_register and write_register out to target specific files. * remote-vx29k.c (get_fp_contnets): add this function, from WRS.
Diffstat (limited to 'gdb/remote-vx29k.c')
-rw-r--r--gdb/remote-vx29k.c29
1 files changed, 24 insertions, 5 deletions
diff --git a/gdb/remote-vx29k.c b/gdb/remote-vx29k.c
index 519d930..5621bce 100644
--- a/gdb/remote-vx29k.c
+++ b/gdb/remote-vx29k.c
@@ -97,7 +97,7 @@ vx_read_register (regno)
/* PAD For now, don't care about exop register */
- bzero (&registers[REGISTER_BYTE (EXO_REGNUM)], 1 * AM29K_GREG_SIZE);
+ memset (&registers[REGISTER_BYTE (EXO_REGNUM)], '\0', AM29K_GREG_SIZE);
/* If the target has floating point registers, fetch them.
Otherwise, zero the floating point register values in
@@ -113,16 +113,16 @@ vx_read_register (regno)
/* PAD For now, don't care about registers (?) AI0 to q */
- bzero (&registers[REGISTER_BYTE (161)], 21 * AM29K_FPREG_SIZE);
+ memset (&registers[REGISTER_BYTE (161)], '\0', 21 * AM29K_FPREG_SIZE);
}
else
{
- bzero (&registers[REGISTER_BYTE (FPE_REGNUM)], 1 * AM29K_FPREG_SIZE);
- bzero (&registers[REGISTER_BYTE (FPS_REGNUM)], 1 * AM29K_FPREG_SIZE);
+ memset (&registers[REGISTER_BYTE (FPE_REGNUM)], '\0', AM29K_FPREG_SIZE);
+ memset (&registers[REGISTER_BYTE (FPS_REGNUM)], '\0', AM29K_FPREG_SIZE);
/* PAD For now, don't care about registers (?) AI0 to q */
- bzero (&registers[REGISTER_BYTE (161)], 21 * AM29K_FPREG_SIZE);
+ memset (&registers[REGISTER_BYTE (161)], '\0', 21 * AM29K_FPREG_SIZE);
}
/* Mark the register cache valid. */
@@ -167,3 +167,22 @@ vx_write_register (regno)
}
}
+/* VxWorks zeroes fp when the task is initialized; we use this
+ to terminate the frame chain. Chain means here the nominal address of
+ a frame, that is, the return address (lr0) address in the stack. To
+ obtain the frame pointer (lr1) contents, we must add 4 bytes.
+ Note : may be we should modify init_frame_info() to get the frame pointer
+ and store it into the frame_info struct rather than reading its
+ contents when FRAME_CHAIN_VALID is invoked. */
+
+int
+get_fp_contents (chain, thisframe)
+ CORE_ADDR chain;
+ struct frame_info *thisframe; /* not used here */
+{
+ int fp_contents;
+
+ read_memory ((CORE_ADDR)(chain + 4), (char *) &fp_contents, 4);
+ return (fp_contents != 0);
+}
+