https://sourceware.org/bugzilla/show_bug.cgi?id=21002 --- a/lib/system.h +++ b/lib/system.h @@ -30,7 +30,18 @@ #define LIB_SYSTEM_H 1 #include -#include +#ifdef HAVE_ERROR_H +#include "error.h" +#else +#include "err.h" +#include +#define error(status, errno, ...) \ + do { \ + fflush(stdout); \ + warn(__VA_ARGS__); \ + if (status) exit(status); \ + } while(0) +#endif #include #include #include --- a/libdw/libdw_alloc.c +++ b/libdw/libdw_alloc.c @@ -147,5 +147,5 @@ __attribute ((noreturn)) attribute_hidde __libdw_oom (void) { while (1) - error (EXIT_FAILURE, ENOMEM, "libdw"); + error (EXIT_FAILURE, errno, gettext ("cannot allocate memory")); } --- a/libdwfl/dwfl_error.c +++ b/libdwfl/dwfl_error.c @@ -154,7 +154,11 @@ dwfl_errmsg (int error) switch (error &~ 0xffff) { case OTHER_ERROR (ERRNO): +#if defined(__GLIBC__) && !defined(__UCLIBC__) return strerror_r (error & 0xffff, "bad", 0); +#else + return strerror (error & 0xffff); +#endif case OTHER_ERROR (LIBELF): return elf_errmsg (error & 0xffff); case OTHER_ERROR (LIBDW):