Ejemplo n.º 1
0
ssize_t
LocalDebuggerInterface::ReadMemory(target_addr_t address, void* buffer, size_t size)
{
	DebugContextGetter contextGetter(fDebugContextPool);

	return debug_read_memory(contextGetter.Context(),
		(const void*)(addr_t)address, buffer, size);
}
Ejemplo n.º 2
0
status_t
LocalDebuggerInterface::UninstallWatchpoint(target_addr_t address)
{
	DebugContextGetter contextGetter(fDebugContextPool);

	debug_nub_clear_watchpoint message;
	message.address = (void*)(addr_t)address;

	return write_port(fNubPort, B_DEBUG_MESSAGE_CLEAR_WATCHPOINT,
		&message, sizeof(message));
}
Ejemplo n.º 3
0
status_t
LocalDebuggerInterface::InstallBreakpoint(target_addr_t address)
{
	DebugContextGetter contextGetter(fDebugContextPool);

	debug_nub_set_breakpoint message;
	message.reply_port = contextGetter.Context()->reply_port;
	message.address = (void*)(addr_t)address;

	debug_nub_set_breakpoint_reply reply;

	status_t error = send_debug_message(contextGetter.Context(),
		B_DEBUG_MESSAGE_SET_BREAKPOINT, &message, sizeof(message), &reply,
		sizeof(reply));
	return error == B_OK ? reply.error : error;
}
Ejemplo n.º 4
0
status_t
LocalDebuggerInterface::WriteCoreFile(const char* path)
{
	DebugContextGetter contextGetter(fDebugContextPool);

	debug_nub_write_core_file_reply reply;

	debug_nub_write_core_file message;
	message.reply_port = contextGetter.Context()->reply_port;
	strlcpy(message.path, path, sizeof(message.path));

	status_t error = send_debug_message(contextGetter.Context(),
		B_DEBUG_WRITE_CORE_FILE, &message, sizeof(message), &reply,
		sizeof(reply));
	if (error == B_OK)
		error = reply.error;

	return error;
}
Ejemplo n.º 5
0
status_t
LocalDebuggerInterface::InstallWatchpoint(target_addr_t address, uint32 type,
	int32 length)
{
	DebugContextGetter contextGetter(fDebugContextPool);

	debug_nub_set_watchpoint message;
	message.reply_port = contextGetter.Context()->reply_port;
	message.address = (void*)(addr_t)address;
	message.type = type;
	message.length = length;

	debug_nub_set_watchpoint_reply reply;

	status_t error = send_debug_message(contextGetter.Context(),
		B_DEBUG_MESSAGE_SET_WATCHPOINT, &message, sizeof(message), &reply,
		sizeof(reply));
	return error == B_OK ? reply.error : error;
}
Ejemplo n.º 6
0
status_t
DebuggerInterface::GetCpuState(thread_id thread, CpuState*& _state)
{
	DebugContextGetter contextGetter(fDebugContextPool);

	debug_nub_get_cpu_state message;
	message.reply_port = contextGetter.Context()->reply_port;
	message.thread = thread;

	debug_nub_get_cpu_state_reply reply;

	status_t error = send_debug_message(contextGetter.Context(),
		B_DEBUG_MESSAGE_GET_CPU_STATE, &message, sizeof(message), &reply,
		sizeof(reply));
	if (error != B_OK)
		return error;
	if (reply.error != B_OK)
		return reply.error;

	return fArchitecture->CreateCpuState(&reply.cpu_state,
		sizeof(debug_cpu_state), _state);
}
Ejemplo n.º 7
0
status_t
LocalDebuggerInterface::_GetDebugCpuState(thread_id thread, debug_cpu_state& _state)
{
	DebugContextGetter contextGetter(fDebugContextPool);

	debug_nub_get_cpu_state message;
	message.reply_port = contextGetter.Context()->reply_port;
	message.thread = thread;

	debug_nub_get_cpu_state_reply reply;

	status_t error = send_debug_message(contextGetter.Context(),
		B_DEBUG_MESSAGE_GET_CPU_STATE, &message, sizeof(message), &reply,
		sizeof(reply));
	if (error != B_OK)
		return error;
	if (reply.error != B_OK)
		return reply.error;

	memcpy(&_state, &reply.cpu_state, sizeof(debug_cpu_state));

	return B_OK;
}
Ejemplo n.º 8
0
status_t
LocalDebuggerInterface::SetCpuState(thread_id thread, const CpuState* state)
{
	debug_cpu_state debugState;
	status_t error = _GetDebugCpuState(thread, debugState);
	if (error != B_OK)
		return error;

	DebugContextGetter contextGetter(fDebugContextPool);

	error = state->UpdateDebugState(&debugState, sizeof(debugState));
	if (error != B_OK)
		return error;

	debug_nub_set_cpu_state message;
	message.thread = thread;

	memcpy(&message.cpu_state, &debugState, sizeof(debugState));

	return send_debug_message(contextGetter.Context(),
		B_DEBUG_MESSAGE_SET_CPU_STATE, &message, sizeof(message), NULL,
		0);
}