Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
tree: d1d27f1048
Fetching contributors…

Cannot retrieve contributors at this time

74 lines (64 sloc) 2.321 kB
/*******************************************************************
* File: omGetBackTrace.c
* Purpose: routines for getting Backtraces of stack
* Author: obachman (Olaf Bachmann)
* Created: 11/99
*******************************************************************/
#ifndef OM_NDEBUG
#if __GNUC__ > 1
static void* om_this_main_frame_addr = 0;
void omInitGetBackTrace()
{
if (__builtin_frame_address(0) != 0 &&
__builtin_frame_address(1) > __builtin_frame_address(0))
om_this_main_frame_addr = __builtin_frame_address(1);
}
#define OM_GET_BACK_TRACE(j) \
case j: \
{ \
f_addr = __builtin_frame_address(j); \
if (f_addr > this_frame && f_addr < om_this_main_frame_addr) \
{ \
r_addr = __builtin_return_address(j); \
if (r_addr) \
{ \
bt[i] = r_addr; \
i++; \
if (i >= max) break; \
} \
else break; \
} \
else break; \
}
int omGetBackTrace(void** bt, int start, int max)
{
int i = 0;
void* this_frame = __builtin_frame_address(0);
void* f_addr;
void* r_addr;
start++;
switch(start)
{
OM_GET_BACK_TRACE(1)
OM_GET_BACK_TRACE(2)
OM_GET_BACK_TRACE(3)
OM_GET_BACK_TRACE(4)
OM_GET_BACK_TRACE(5)
OM_GET_BACK_TRACE(6)
OM_GET_BACK_TRACE(7)
OM_GET_BACK_TRACE(8)
OM_GET_BACK_TRACE(9)
OM_GET_BACK_TRACE(10)
OM_GET_BACK_TRACE(11)
OM_GET_BACK_TRACE(12)
OM_GET_BACK_TRACE(13)
OM_GET_BACK_TRACE(14)
OM_GET_BACK_TRACE(15)
OM_GET_BACK_TRACE(16)
OM_GET_BACK_TRACE(17)
}
if (i < max) bt[i] = 0;
return i;
}
#endif /* __GNUC__ > 1 */
#endif /* ! OM_NDEBUG */
Jump to Line
Something went wrong with that request. Please try again.