Index: Makefile --- Makefile.orig 2004-07-19 07:19:55.000000000 +0200 +++ Makefile 2016-05-21 20:07:21.471525741 +0200 @@ -43,4 +43,11 @@ #stacktraverse.c: gen.py # ./gen.py > stacktraverse.c -.include +all: libexecinfo.a + +libexecinfo.a: stacktraverse.o execinfo.o + ar rc libexecinfo.a stacktraverse.o execinfo.o + +.c.o: + $(CC) $(CFLAGS) -c -o $@ $< + Index: execinfo.c --- execinfo.c.orig 2004-07-19 07:21:09.000000000 +0200 +++ execinfo.c 2016-05-21 20:08:51.551634945 +0200 @@ -28,7 +28,13 @@ #include #include +#if defined(__linux__) +#define __USE_GNU 1 +#endif #include +#if defined(__linux__) +#undef __USE_GNU +#endif #include #include #include @@ -69,7 +75,8 @@ char ** backtrace_symbols(void *const *buffer, int size) { - int i, clen, alen, offset; + size_t clen, alen; + int i, offset; char **rval; char *cp; Dl_info info; @@ -78,7 +85,6 @@ rval = malloc(clen); if (rval == NULL) return NULL; - (char **)cp = &(rval[size]); for (i = 0; i < size; i++) { if (dladdr(buffer[i], &info) != 0) { if (info.dli_sname == NULL) @@ -92,14 +98,14 @@ 2 + /* " <" */ strlen(info.dli_sname) + /* "function" */ 1 + /* "+" */ - D10(offset) + /* "offset */ + 10 + /* "offset */ 5 + /* "> at " */ strlen(info.dli_fname) + /* "filename" */ 1; /* "\0" */ rval = realloc_safe(rval, clen + alen); if (rval == NULL) return NULL; - snprintf(cp, alen, "%p <%s+%d> at %s", + snprintf((char *) rval + clen, alen, "%p <%s+%d> at %s", buffer[i], info.dli_sname, offset, info.dli_fname); } else { alen = 2 + /* "0x" */ @@ -108,12 +114,15 @@ rval = realloc_safe(rval, clen + alen); if (rval == NULL) return NULL; - snprintf(cp, alen, "%p", buffer[i]); + snprintf((char *) rval + clen, alen, "%p", buffer[i]); } - rval[i] = cp; - cp += alen; + rval[i] = (char *) clen; + clen += alen; } + for (i = 0; i < size; i++) + rval[i] += (long) rval; + return rval; } @@ -155,6 +164,6 @@ return; snprintf(buf, len, "%p\n", buffer[i]); } - write(fd, buf, len - 1); + write(fd, buf, strlen(buf)); } }