You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
-Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include <stdio.h>
#include "defs.h"
#include "symtab.h"
#include "symfile.h" /* for struct complaint */
-#include <string.h>
+#include "gdb_string.h"
#include <errno.h>
#include <signal.h>
#include <fcntl.h>
/* 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
/* 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. */
}
}
+/* 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
+vx29k_frame_chain_valid (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);
+}
+