2020-09-03 12:44:37 +00:00
|
|
|
#ifndef COSMOPOLITAN_LIBC_LOG_BACKTRACE_H_
|
|
|
|
#define COSMOPOLITAN_LIBC_LOG_BACKTRACE_H_
|
|
|
|
#include "libc/nexgen32e/stackframe.h"
|
2021-10-15 02:36:49 +00:00
|
|
|
#include "libc/runtime/memtrack.internal.h"
|
2020-11-25 16:19:00 +00:00
|
|
|
#include "libc/runtime/symbols.internal.h"
|
2020-09-03 12:44:37 +00:00
|
|
|
#if !(__ASSEMBLER__ + __LINKER__ + 0)
|
|
|
|
COSMOPOLITAN_C_START_
|
|
|
|
|
2021-10-15 02:36:49 +00:00
|
|
|
forceinline pureconst bool IsValidStackFramePointer(struct StackFrame *x) {
|
|
|
|
return IsLegalPointer(x) && !((uintptr_t)x & 15) &&
|
|
|
|
(IsStaticStackFrame((uintptr_t)x >> 16) ||
|
|
|
|
IsSigAltStackFrame((uintptr_t)x >> 16) ||
|
|
|
|
IsOldStackFrame((uintptr_t)x >> 16));
|
|
|
|
}
|
|
|
|
|
2020-10-11 04:18:53 +00:00
|
|
|
void ShowBacktrace(int, const struct StackFrame *);
|
|
|
|
int PrintBacktraceUsingSymbols(int, const struct StackFrame *,
|
2020-09-03 12:44:37 +00:00
|
|
|
struct SymbolTable *);
|
|
|
|
|
|
|
|
COSMOPOLITAN_C_END_
|
|
|
|
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
|
|
|
|
#endif /* COSMOPOLITAN_LIBC_LOG_BACKTRACE_H_ */
|