?? ctrl.c
字號:
/* -*-C-*- * * $Revision: 1.8.6.1 $ * $Author: rivimey $ * $Date: 1997/12/10 18:49:55 $ * * Copyright (c) 1995 Advanced RISC Machines Limited * All Rights Reserved. * * ctrl.c: Implementation of ADP_Control subreasons. */#include "angel.h"#include "adp.h"#include "debug.h"#include "debughwi.h"#include "debugos.h"#include "logging.h"#include "msgbuild.h"#include "sys.h"static int ctrl_nop(p_Buffer * buffer, void *stateptr){ /* Return an RDIError_NoError to indicate ctrl calls are available. */ int debugID, OSinfo1, OSinfo2; word status = RDIError_NoError; IGNORE(stateptr); LogInfo(LOG_CTRL, ( "ctrl_nop()\n")); unpack_message(BUFFERDATA(*buffer) + 4, "%w%w%w", &debugID, &OSinfo1, &OSinfo2); return msgsend(CI_HADP, "%w%w%w%w%w%w", (ADP_Control | TtoH), debugID, OSinfo1, OSinfo2, ADP_Ctrl_NOP, status);}static int ctrl_vectorcatch(p_Buffer * buffer, void *stateptr){ /* Specify which hardware exceptions should be reported to the debugger. */ int debugID, OSinfo1, OSinfo2, subreason; word status = RDIError_NoError; IGNORE(stateptr); unpack_message(BUFFERDATA(*buffer) + 4, "%w%w%w%w%w", &debugID, &OSinfo1, &OSinfo2, &subreason, &debug_VectorCatch); LogInfo(LOG_CTRL, ( "ctrl_vectorcatch(vectorcatch = 0x%x)\n", debug_VectorCatch)); status = angelOS_VectorCatch(OSinfo1, OSinfo2, debug_VectorCatch); return msgsend(CI_HADP, "%w%w%w%w%w%w", (ADP_Control | TtoH), debugID, OSinfo1, OSinfo2, ADP_Ctrl_VectorCatch, status);}static int ctrl_pointstatus_watch(p_Buffer * buffer, void *stateptr){ /* Return information about a watchpoint given a handle. */ int debugID, OSinfo1, OSinfo2, subreason; word handle; word status, hwresource, type; IGNORE(stateptr); unpack_message(BUFFERDATA(*buffer) + 4, "%w%w%w%w%w", &debugID, &OSinfo1, &OSinfo2, &subreason, &handle); LogInfo(LOG_CTRL, ( "ctrl_pointstatus_watch(handle = 0x%x)\n", handle)); status = angelOS_WatchPointStatus(OSinfo1, OSinfo2, handle, &hwresource, &type); return msgsend(CI_HADP, "%w%w%w%w%w%w%w%w", (ADP_Control | TtoH), debugID, OSinfo1, OSinfo2, ADP_Ctrl_PointStatus_Watch, status, hwresource, type);}static int ctrl_pointstatus_break(p_Buffer * buffer, void *stateptr){ /* Return information about a breakpoint given a handle. */ int debugID, OSinfo1, OSinfo2, subreason; word status, hwresource, type; word handle; IGNORE(stateptr); unpack_message(BUFFERDATA(*buffer) + 4, "%w%w%w%w%w", &debugID, &OSinfo1, &OSinfo2, &subreason, &handle); LogInfo(LOG_CTRL, ( "ctrl_pointstatus_break(handle = 0x%x)\n", handle)); status = angelOS_BreakPointStatus(OSinfo1, OSinfo2, handle, &hwresource, &type); return msgsend(CI_HADP, "%w%w%w%w%w%w%w%w", (ADP_Control | TtoH), debugID, OSinfo1, OSinfo2, ADP_Ctrl_PointStatus_Break, status, hwresource, type);}static int ctrl_semihosting_setstate(p_Buffer * buffer, void *stateptr){ /* Set whether or not semi-hosting is enabled. */ int debugID, OSinfo1, OSinfo2, subreason; word semihosting_state, status; IGNORE(stateptr); unpack_message(BUFFERDATA(*buffer) + 4, "%w%w%w%w%w", &debugID, &OSinfo1, &OSinfo2, &subreason, &semihosting_state); LogInfo(LOG_CTRL, ("ctrl_semihosting_setstate(state = %d)\n", semihosting_state)); status = angelOS_SemiHosting_SetState(OSinfo1, OSinfo2, semihosting_state); return msgsend(CI_HADP, "%w%w%w%w%w%w", (ADP_Control | TtoH), debugID, OSinfo1, OSinfo2, ADP_Ctrl_SemiHosting_SetState, status);}static int ctrl_semihosting_getstate(p_Buffer * buffer, void *stateptr){ /* Reads whether or not semi-hosting is enabled. */ int debugID, OSinfo1, OSinfo2, subreason; word semihosting_state, status; IGNORE(stateptr); unpack_message(BUFFERDATA(*buffer) + 4, "%w%w%w%w", &debugID, &OSinfo1, &OSinfo2, &subreason); status = angelOS_SemiHosting_GetState(OSinfo1, OSinfo2, &semihosting_state); LogInfo(LOG_CTRL, ( "ctrl_semihosting_getstate -> %d\n", semihosting_state)); return msgsend(CI_HADP, "%w%w%w%w%w%w%w", (ADP_Control | TtoH), debugID, OSinfo1, OSinfo2, ADP_Ctrl_SemiHosting_GetState, status, semihosting_state);}static int ctrl_semihosting_setvector(p_Buffer * buffer, void *stateptr){ /* Set the semi-hosting vector. */ int debugID, OSinfo1, OSinfo2, subreason; word semihosting_vector, status; IGNORE(stateptr); unpack_message(BUFFERDATA(*buffer) + 4, "%w%w%w%w%w", &debugID, &OSinfo1, &OSinfo2, &subreason, &semihosting_vector); LogInfo(LOG_CTRL, ( "ctrl_semihosting_setvector(vec = 0x%x)\n", semihosting_vector)); status = angelOS_SemiHosting_SetVector(OSinfo1, OSinfo2, semihosting_vector); return msgsend(CI_HADP, "%w%w%w%w%w%w", (ADP_Control | TtoH), debugID, OSinfo1, OSinfo2, ADP_Ctrl_SemiHosting_SetVector, status);}static int ctrl_semihosting_getvector(p_Buffer * buffer, void *stateptr){ /* Reads the value of the semi-hosting vector. */ int debugID, OSinfo1, OSinfo2, subreason; word semihosting_vector, status; IGNORE(stateptr); unpack_message(BUFFERDATA(*buffer) + 4, "%w%w%w%w", &debugID, &OSinfo1, &OSinfo2, &subreason); status = angelOS_SemiHosting_GetVector(OSinfo1, OSinfo2, &semihosting_vector); LogInfo(LOG_CTRL, ( "ctrl_semihosting_getvector -> %08x\n", semihosting_vector)); return msgsend(CI_HADP, "%w%w%w%w%w%w%w", (ADP_Control | TtoH), debugID, OSinfo1, OSinfo2, ADP_Ctrl_SemiHosting_GetVector, status, semihosting_vector);}static int ctrl_log(p_Buffer * buffer, void *stateptr){ /* Read logging level. */ int debugID, OSinfo1, OSinfo2; word status = RDIError_NoError; word logsetting; IGNORE(stateptr); unpack_message(BUFFERDATA(*buffer) + 4, "%w%w%w", &debugID, &OSinfo1, &OSinfo2); LogInfo(LOG_CTRL, ( "ctrl_log -> 0x%x\n", logsetting)); status = angelOS_Ctrl_Log(OSinfo1, OSinfo2, &logsetting); return msgsend(CI_HADP, "%w%w%w%w%w%w%w", (ADP_Control | TtoH), debugID, OSinfo1, OSinfo2, ADP_Ctrl_Log, status, logsetting);}static int ctrl_setlog(p_Buffer * buffer, void *stateptr){ /* Set logging level. */ int debugID, OSinfo1, OSinfo2, subreason; word logsetting; word status; IGNORE(stateptr); unpack_message(BUFFERDATA(*buffer) + 4, "%w%w%w", &debugID, &OSinfo1, &OSinfo2, &subreason, &logsetting); LogInfo(LOG_CTRL, ( "ctrl_setlog(logsetting = 0x%x)\n", logsetting)); /* Range check logsetting. */ if ((logsetting & 0x7) == logsetting) status = angelOS_Ctrl_SetLog(OSinfo1, OSinfo2, logsetting); else status = RDIError_Error; return msgsend(CI_HADP, "%w%w%w%w%w%w", (ADP_Control | TtoH), debugID, OSinfo1, OSinfo2, ADP_Ctrl_SetLog, status);}static int ctrl_semihosting_setarmswi(p_Buffer * buffer, void *stateptr){#ifdef ICEMAN2 /* Set the semi-hosting ARM SWI. */ int debugID, OSinfo1, OSinfo2, subreason; word semihosting_armswi, status; IGNORE(stateptr); unpack_message(BUFFERDATA(*buffer) + 4, "%w%w%w%w%w", &debugID, &OSinfo1, &OSinfo2, &subreason, &semihosting_armswi); LogInfo(LOG_CTRL, ( "ctrl_semihosting_setarmswi(swi 0x%x)\n", semihosting_armswi)); status = angelOS_SemiHosting_SetARMSWI(OSinfo1, OSinfo2, semihosting_armswi); return msgsend(CI_HADP, "%w%w%w%w%w%w", (ADP_Control | TtoH), debugID, OSinfo1, OSinfo2, ADP_Ctrl_SemiHosting_SetARMSWI, status);#else IGNORE(buffer); IGNORE(stateptr); LogInfo(LOG_CTRL, ( "ctrl_semihosting_setarmswi -> unsupported\n")); return -1;#endif}static int ctrl_semihosting_getarmswi(p_Buffer * buffer, void *stateptr){#ifdef ICEMAN2 /* Reads the value of the semi-hosting vector. */ int debugID, OSinfo1, OSinfo2, subreason; word semihosting_armswi, status;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -