コード例 #1
0
ファイル: execinfo.c プロジェクト: smallvil/Cache-Terminator
int
backtrace(void **buffer, int size)
{
	int i;

	for (i = 1; getframeaddr(i + 1) != NULL && i != size + 1; i++) {
		buffer[i - 1] = getreturnaddr(i);
		if (buffer[i - 1] == NULL)
			break;
	}
	return (i - 1);
}
コード例 #2
0
ファイル: execinfo.c プロジェクト: sippy/rtpproxy
uintptr_t
getstackcookie(void)
{
    int i;
    uintptr_t r;
    void *p;

    r = 0;
    for (i = 1; i < STACKTRAVERSE_MAX_LEVELS + 1 && getframeaddr(i) != NULL; i++) {
        p = getreturnaddr(i);
        r ^= (uintptr_t)p;
        if (p == topframe || p == NULL)
            break;
    }
    return (r);
}
コード例 #3
0
ファイル: execinfo.c プロジェクト: sippy/rtpproxy
int
backtrace(void **buffer, int size)
{
    int i;

    if (size > STACKTRAVERSE_MAX_LEVELS)
        size = STACKTRAVERSE_MAX_LEVELS;
    for (i = 1; i < size + 1 && getframeaddr(i) != NULL; i++) {
        buffer[i - 1] = getreturnaddr(i);
        if (buffer[i - 1] == NULL)
            break;
	if (buffer[i - 1] == topframe)
	    return i;
    }

    return i - 1;
}
コード例 #4
0
ファイル: execinfo_testfunc.c プロジェクト: sippy/rtpproxy
int
testfunc(const void *caller, int rnum)
{
  void *array[STACKTRAVERSE_MAX_LEVELS + 1];
  size_t size;
  char **strings;

  memset(array, '\0', sizeof(array));
  size = backtrace(array, STACKTRAVERSE_MAX_LEVELS + 1);
  assert(size > 0);
  assert(array[0] > caller);
  if (size == STACKTRAVERSE_MAX_LEVELS)
    assert(getreturnaddr(size) != NULL);
  strings = backtrace_symbols(array, size + 1);
  assert(strings != NULL);
  backtrace_symbols_fd(array, size + 1, fileno(stdout));
  return ((rnum << 8) | size);
}