From 990d377a92f4bab04bf6820fc81b3dcb6cf5e31d Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Mon, 2 Jul 2018 09:52:23 +0800 Subject: [PATCH] build: Provide alternatives for glibc assumptions helps compiling it on musl Upstream-Status: Pending Signed-off-by: Khem Raj Rebase to 0.175 Signed-off-by: Hongxu Jia --- Makefile.am | 2 +- lib/fixedsizehash.h | 1 - lib/system.h | 12 +++++++++++- libdw/Makefile.am | 3 ++- libdwfl/dwfl_build_id_find_elf.c | 1 + libdwfl/dwfl_error.c | 4 +++- libdwfl/dwfl_module_getdwarf.c | 1 + libdwfl/libdwfl_crc32_file.c | 9 +++++++++ libdwfl/linux-kernel-modules.c | 1 + libelf/elf.h | 8 ++++++-- libelf/libelf.h | 1 + libelf/libelfP.h | 1 + 12 files changed, 37 insertions(+), 7 deletions(-) diff --git a/Makefile.am b/Makefile.am index 2ff444e..41f77df 100644 --- a/Makefile.am +++ b/Makefile.am @@ -28,7 +28,7 @@ pkginclude_HEADERS = version.h # Add doc back when we have some real content. SUBDIRS = config m4 lib libelf libebl libdwelf libdwfl libdw libcpu libasm \ - backends src po tests + backends po tests EXTRA_DIST = elfutils.spec GPG-KEY NOTES CONTRIBUTING \ COPYING COPYING-GPLV2 COPYING-LGPLV3 diff --git a/lib/fixedsizehash.h b/lib/fixedsizehash.h index dac2a5f..43016fc 100644 --- a/lib/fixedsizehash.h +++ b/lib/fixedsizehash.h @@ -30,7 +30,6 @@ #include #include #include -#include #include diff --git a/lib/system.h b/lib/system.h index 292082b..308a762 100644 --- a/lib/system.h +++ b/lib/system.h @@ -30,7 +30,7 @@ #define LIB_SYSTEM_H 1 #include -#include +#include #include #include #include @@ -51,6 +51,16 @@ #else # error "Unknown byte order" #endif +#ifndef TEMP_FAILURE_RETRY +#define TEMP_FAILURE_RETRY(expression) \ + (__extension__ \ + ({ long int __result; \ + do __result = (long int) (expression); \ + while (__result == -1L && errno == EINTR); \ + __result; })) +#endif + +#define error(status, errno, ...) err(status, __VA_ARGS__) #ifndef MAX #define MAX(m, n) ((m) < (n) ? (n) : (m)) diff --git a/libdw/Makefile.am b/libdw/Makefile.am index 7a3d532..7ac1241 100644 --- a/libdw/Makefile.am +++ b/libdw/Makefile.am @@ -108,7 +108,8 @@ am_libdw_pic_a_OBJECTS = $(libdw_a_SOURCES:.c=.os) libdw_so_LIBS = libdw_pic.a ../libdwelf/libdwelf_pic.a \ ../libdwfl/libdwfl_pic.a ../libebl/libebl.a libdw_so_DEPS = ../lib/libeu.a ../libelf/libelf.so -libdw_so_LDLIBS = $(libdw_so_DEPS) -ldl -lz $(argp_LDADD) $(zip_LIBS) +fts_LDADD = -lfts +libdw_so_LDLIBS = $(libdw_so_DEPS) -ldl -lz $(argp_LDADD) $(zip_LIBS) $(fts_LDADD) libdw_so_SOURCES = libdw.so$(EXEEXT): $(srcdir)/libdw.map $(libdw_so_LIBS) $(libdw_so_DEPS) # The rpath is necessary for libebl because its $ORIGIN use will diff --git a/libdwfl/dwfl_build_id_find_elf.c b/libdwfl/dwfl_build_id_find_elf.c index cc6c3f6..b06ab59 100644 --- a/libdwfl/dwfl_build_id_find_elf.c +++ b/libdwfl/dwfl_build_id_find_elf.c @@ -31,6 +31,7 @@ #endif #include "libdwflP.h" +#include "system.h" #include #include #include diff --git a/libdwfl/dwfl_error.c b/libdwfl/dwfl_error.c index 7bcf61c..c345797 100644 --- a/libdwfl/dwfl_error.c +++ b/libdwfl/dwfl_error.c @@ -140,6 +140,7 @@ __libdwfl_seterrno (Dwfl_Error error) const char * dwfl_errmsg (int error) { + static __thread char s[64] = ""; if (error == 0 || error == -1) { int last_error = global_error; @@ -154,7 +155,8 @@ dwfl_errmsg (int error) switch (error &~ 0xffff) { case OTHER_ERROR (ERRNO): - return strerror_r (error & 0xffff, "bad", 0); + strerror_r (error & 0xffff, s, sizeof(s)); + return s; case OTHER_ERROR (LIBELF): return elf_errmsg (error & 0xffff); case OTHER_ERROR (LIBDW): diff --git a/libdwfl/dwfl_module_getdwarf.c b/libdwfl/dwfl_module_getdwarf.c index 56e6105..f4a0649 100644 --- a/libdwfl/dwfl_module_getdwarf.c +++ b/libdwfl/dwfl_module_getdwarf.c @@ -35,6 +35,7 @@ #include #include #include +#include "system.h" #include "../libdw/libdwP.h" /* DWARF_E_* values are here. */ #include "../libelf/libelfP.h" #include "system.h" diff --git a/libdwfl/libdwfl_crc32_file.c b/libdwfl/libdwfl_crc32_file.c index f849128..6f0aca1 100644 --- a/libdwfl/libdwfl_crc32_file.c +++ b/libdwfl/libdwfl_crc32_file.c @@ -29,6 +29,15 @@ # include #endif +#ifndef TEMP_FAILURE_RETRY +#define TEMP_FAILURE_RETRY(expression) \ + (__extension__ \ + ({ long int __result; \ + do __result = (long int) (expression); \ + while (__result == -1L && errno == EINTR); \ + __result; })) +#endif + #define crc32_file attribute_hidden __libdwfl_crc32_file #define crc32 __libdwfl_crc32 #include diff --git a/libdwfl/linux-kernel-modules.c b/libdwfl/linux-kernel-modules.c index 360e4ee..b5aa397 100644 --- a/libdwfl/linux-kernel-modules.c +++ b/libdwfl/linux-kernel-modules.c @@ -41,6 +41,7 @@ #include "libelfP.h" #include "libdwflP.h" +#include "system.h" #include #include #include diff --git a/libelf/elf.h b/libelf/elf.h index 5dc632b..14da1b7 100644 --- a/libelf/elf.h +++ b/libelf/elf.h @@ -21,7 +21,9 @@ #include -__BEGIN_DECLS +#ifdef __cplusplus +extern "C" { +#endif /* Standard ELF types. */ @@ -3937,6 +3939,8 @@ enum #define R_METAG_TLS_LE_HI16 60 #define R_METAG_TLS_LE_LO16 61 -__END_DECLS +#ifdef __cplusplus +} +#endif #endif /* elf.h */ diff --git a/libelf/libelf.h b/libelf/libelf.h index 1ff11c9..c21e018 100644 --- a/libelf/libelf.h +++ b/libelf/libelf.h @@ -29,6 +29,7 @@ #ifndef _LIBELF_H #define _LIBELF_H 1 +#include #include #include diff --git a/libelf/libelfP.h b/libelf/libelfP.h index 9f3e8e9..10a347a 100644 --- a/libelf/libelfP.h +++ b/libelf/libelfP.h @@ -32,6 +32,7 @@ #include #include +#include #include #include