1e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#!/bin/sh
2e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#
3e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall# Test to see if backtrace requires a library in /usr/lib
4e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall# Returns true if the backtrace command works and requires a library in /usr/lib
5e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall# This is a nasty workaround for Debian bug #708307, which is really a glibc bug
6e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#
7e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall
8e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallcat > /tmp/backtrace$$.c << EOF
9e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall
10e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#include <execinfo.h>
11e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall
12e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallint main(int argc, char **argv)
13e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall{
14e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall       void *stack_syms[32];
15e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall       int frames;
16e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall
17e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall       frames = backtrace(stack_syms, 32);
18e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall       backtrace_symbols_fd(stack_syms, frames, 0);
19e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall}
20e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP AbgrallEOF
21e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall
22e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallif ! cc -o /tmp/backtrace$$ /tmp/backtrace$$.c; then
23e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall   exit 1
24e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallfi
25e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall
26e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallif ! ldd /tmp/backtrace$$ > /tmp/backtrace$$.ldd 2>&1 ; then
27e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall   exit 1
28e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallfi
29e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall
30e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallgrep -q /usr/lib /tmp/backtrace$$.ldd
31e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallret=$?
32e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall
33e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall/bin/rm -f /tmp/backtrace$$*
34e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallexit $ret
35