47 lines
1.8 KiB
C
47 lines
1.8 KiB
C
#if !defined(DN_BASE_OS_H)
|
|
#define DN_BASE_OS_H
|
|
|
|
// NOTE: OS primitives that the OS layer can provide for the base layer but is optional.
|
|
|
|
struct DN_StackTraceFrame
|
|
{
|
|
DN_U64 address;
|
|
DN_U64 line_number;
|
|
DN_Str8 file_name;
|
|
DN_Str8 function_name;
|
|
};
|
|
|
|
struct DN_StackTraceRawFrame
|
|
{
|
|
void *process;
|
|
DN_U64 base_addr;
|
|
};
|
|
|
|
struct DN_StackTraceWalkResult
|
|
{
|
|
void *process; // [Internal] Windows handle to the process
|
|
DN_U64 *base_addr; // The addresses of the functions in the stack trace
|
|
DN_U16 size; // The number of `base_addr`'s stored from the walk
|
|
};
|
|
|
|
struct DN_StackTraceWalkResultIterator
|
|
{
|
|
DN_StackTraceRawFrame raw_frame;
|
|
DN_U16 index;
|
|
};
|
|
|
|
DN_API DN_Str8 DN_StackTrace_WalkStr8FromHeap (DN_U16 limit, DN_U16 skip);
|
|
DN_API DN_StackTraceWalkResult DN_StackTrace_Walk (struct DN_Arena *arena, DN_U16 limit);
|
|
DN_API bool DN_StackTrace_WalkResultIterate(DN_StackTraceWalkResultIterator *it, DN_StackTraceWalkResult const *walk);
|
|
DN_API DN_Str8 DN_StackTrace_WalkResultToStr8 (struct DN_Arena *arena, DN_StackTraceWalkResult const *walk, DN_U16 skip);
|
|
DN_API DN_Str8 DN_StackTrace_WalkStr8 (struct DN_Arena *arena, DN_U16 limit, DN_U16 skip);
|
|
DN_API DN_Str8 DN_StackTrace_WalkStr8FromHeap (DN_U16 limit, DN_U16 skip);
|
|
DN_API DN_Slice<DN_StackTraceFrame> DN_StackTrace_GetFrames (struct DN_Arena *arena, DN_U16 limit);
|
|
DN_API DN_StackTraceFrame DN_StackTrace_RawFrameToFrame (struct DN_Arena *arena, DN_StackTraceRawFrame raw_frame);
|
|
DN_API void DN_StackTrace_Print (DN_U16 limit);
|
|
DN_API void DN_StackTrace_ReloadSymbols ();
|
|
|
|
|
|
#endif
|
|
|