1/*
2 * Copyright 2005-2009, Ingo Weinhold, ingo_weinhold@gmx.de.
3 * Copyright 2013, Rene Gollent, rene@gollent.com
4 * Distributed under the terms of the MIT License.
5 */
6#ifndef _DEBUG_SUPPORT_H
7#define _DEBUG_SUPPORT_H
8
9#include <debugger.h>
10#include <OS.h>
11
12#ifdef __cplusplus
13extern "C" {
14#endif
15
16typedef struct debug_context {
17	team_id	team;
18	port_id	nub_port;
19	port_id	reply_port;
20} debug_context;
21
22
23status_t init_debug_context(debug_context *context, team_id team,
24	port_id nubPort);
25void destroy_debug_context(debug_context *context);
26
27status_t send_debug_message(debug_context *context, int32 messageCode,
28			const void *message, int32 messageSize, void *reply,
29			int32 replySize);
30
31ssize_t debug_read_memory_partial(debug_context *context, const void *address,
32			void *buffer, size_t size);
33ssize_t debug_read_memory(debug_context *context, const void *address,
34			void *buffer, size_t size);
35ssize_t debug_read_string(debug_context *context, const void *_address,
36			char *buffer, size_t size);
37ssize_t debug_write_memory_partial(debug_context *context, const void *address,
38			void *buffer, size_t size);
39ssize_t debug_write_memory(debug_context *context, const void *address,
40			void *buffer, size_t size);
41
42status_t debug_get_cpu_state(debug_context *context, thread_id thread,
43			debug_debugger_message *messageCode, debug_cpu_state *cpuState);
44
45
46// stack trace support
47
48typedef struct debug_stack_frame_info {
49	void	*frame;
50	void	*parent_frame;
51	void	*return_address;
52} debug_stack_frame_info;
53
54status_t debug_get_instruction_pointer(debug_context *context, thread_id thread,
55			void **ip, void **stackFrameAddress);
56status_t debug_get_stack_frame(debug_context *context,
57			void *stackFrameAddress, debug_stack_frame_info *stackFrameInfo);
58
59
60// symbol lookup support
61
62typedef struct debug_symbol_lookup_context debug_symbol_lookup_context;
63typedef struct debug_symbol_iterator debug_symbol_iterator;
64
65status_t debug_create_symbol_lookup_context(team_id team, image_id image,
66			debug_symbol_lookup_context **lookupContext);
67				// imageID can be -1 if all images in the target team are
68				// desired, otherwise a valid image id is expected.
69
70void debug_delete_symbol_lookup_context(
71			debug_symbol_lookup_context *lookupContext);
72
73status_t debug_get_symbol(debug_symbol_lookup_context* lookupContext,
74			image_id image, const char* name, int32 symbolType,
75			void** _symbolLocation, size_t* _symbolSize, int32* _symbolType);
76status_t debug_lookup_symbol_address(debug_symbol_lookup_context *lookupContext,
77			const void *address, void **baseAddress, char *symbolName,
78			int32 symbolNameSize, char *imageName, int32 imageNameSize,
79			bool *exactMatch);
80
81status_t debug_create_image_symbol_iterator(
82			debug_symbol_lookup_context* lookupContext, image_id imageID,
83			debug_symbol_iterator** _iterator);
84
85status_t debug_create_file_symbol_iterator(const char* path,
86			debug_symbol_iterator** _iterator);
87void debug_delete_symbol_iterator(debug_symbol_iterator* iterator);
88
89status_t debug_next_image_symbol(debug_symbol_iterator* iterator,
90			char* nameBuffer, size_t nameBufferLength, int32* _symbolType,
91			void** _symbolLocation, size_t* _symbolSize);
92status_t debug_get_symbol_iterator_image_info(debug_symbol_iterator* iterator,
93			image_info* info);
94
95#ifdef __cplusplus
96}	// extern "C"
97#endif
98
99
100#endif	// _DEBUG_SUPPORT_H
101