diff options
author | Kung Hsu <kung@cygnus> | 1995-03-01 00:01:49 +0000 |
---|---|---|
committer | Kung Hsu <kung@cygnus> | 1995-03-01 00:01:49 +0000 |
commit | 161520dc02c71146c4bcb352c7bd06ac59398e4f (patch) | |
tree | 72ff59b2dc4540f033488726e84275697be9e282 /gdb/remote-vx29k.c | |
parent | 33d8f4697c9db53ca8db2ef3d9d3e93f555b5592 (diff) | |
download | gdb-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.c | 29 |
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 (®isters[REGISTER_BYTE (EXO_REGNUM)], 1 * AM29K_GREG_SIZE); + memset (®isters[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 (®isters[REGISTER_BYTE (161)], 21 * AM29K_FPREG_SIZE); + memset (®isters[REGISTER_BYTE (161)], '\0', 21 * AM29K_FPREG_SIZE); } else { - bzero (®isters[REGISTER_BYTE (FPE_REGNUM)], 1 * AM29K_FPREG_SIZE); - bzero (®isters[REGISTER_BYTE (FPS_REGNUM)], 1 * AM29K_FPREG_SIZE); + memset (®isters[REGISTER_BYTE (FPE_REGNUM)], '\0', AM29K_FPREG_SIZE); + memset (®isters[REGISTER_BYTE (FPS_REGNUM)], '\0', AM29K_FPREG_SIZE); /* PAD For now, don't care about registers (?) AI0 to q */ - bzero (®isters[REGISTER_BYTE (161)], 21 * AM29K_FPREG_SIZE); + memset (®isters[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); +} + |