/* * Copyright 2005-2009, Ingo Weinhold, ingo_weinhold@gmx.de. * Copyright 2013, Rene Gollent, rene@gollent.com * Distributed under the terms of the MIT License. */ #ifndef _DEBUG_SUPPORT_H #define _DEBUG_SUPPORT_H #include #include #ifdef __cplusplus extern "C" { #endif typedef struct debug_context { team_id team; port_id nub_port; port_id reply_port; } debug_context; status_t init_debug_context(debug_context *context, team_id team, port_id nubPort); void destroy_debug_context(debug_context *context); status_t send_debug_message(debug_context *context, int32 messageCode, const void *message, int32 messageSize, void *reply, int32 replySize); ssize_t debug_read_memory_partial(debug_context *context, const void *address, void *buffer, size_t size); ssize_t debug_read_memory(debug_context *context, const void *address, void *buffer, size_t size); ssize_t debug_read_string(debug_context *context, const void *_address, char *buffer, size_t size); ssize_t debug_write_memory_partial(debug_context *context, const void *address, void *buffer, size_t size); ssize_t debug_write_memory(debug_context *context, const void *address, void *buffer, size_t size); status_t debug_get_cpu_state(debug_context *context, thread_id thread, debug_debugger_message *messageCode, debug_cpu_state *cpuState); // stack trace support typedef struct debug_stack_frame_info { void *frame; void *parent_frame; void *return_address; } debug_stack_frame_info; status_t debug_get_instruction_pointer(debug_context *context, thread_id thread, void **ip, void **stackFrameAddress); status_t debug_get_stack_frame(debug_context *context, void *stackFrameAddress, debug_stack_frame_info *stackFrameInfo); // symbol lookup support typedef struct debug_symbol_lookup_context debug_symbol_lookup_context; typedef struct debug_symbol_iterator debug_symbol_iterator; status_t debug_create_symbol_lookup_context(team_id team, image_id image, debug_symbol_lookup_context **lookupContext); // imageID can be -1 if all images in the target team are // desired, otherwise a valid image id is expected. void debug_delete_symbol_lookup_context( debug_symbol_lookup_context *lookupContext); status_t debug_get_symbol(debug_symbol_lookup_context* lookupContext, image_id image, const char* name, int32 symbolType, void** _symbolLocation, size_t* _symbolSize, int32* _symbolType); status_t debug_lookup_symbol_address(debug_symbol_lookup_context *lookupContext, const void *address, void **baseAddress, char *symbolName, int32 symbolNameSize, char *imageName, int32 imageNameSize, bool *exactMatch); status_t debug_create_image_symbol_iterator( debug_symbol_lookup_context* lookupContext, image_id imageID, debug_symbol_iterator** _iterator); status_t debug_create_file_symbol_iterator(const char* path, debug_symbol_iterator** _iterator); void debug_delete_symbol_iterator(debug_symbol_iterator* iterator); status_t debug_next_image_symbol(debug_symbol_iterator* iterator, char* nameBuffer, size_t nameBufferLength, int32* _symbolType, void** _symbolLocation, size_t* _symbolSize); status_t debug_get_symbol_iterator_image_info(debug_symbol_iterator* iterator, image_info* info); #ifdef __cplusplus } // extern "C" #endif #endif // _DEBUG_SUPPORT_H