123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- From 2e1f8ca0b67c1d1991c14d509938c347e09bae94 Mon Sep 17 00:00:00 2001
- From: Hongxu Jia <hongxu.jia@windriver.com>
- Date: Fri, 23 Aug 2019 10:18:47 +0800
- Subject: [PATCH] musl-libs
- Collection of fixes needed to compile libelf and other libraries
- provided by elfutils for musl targets
- error is glibc specific API, so this patch will mostly not accepted
- upstream given that elfutils has been closely tied to glibc
- Signed-off-by: Khem Raj <raj.khem@gmail.com>
- Upstream-Status: Inappropriate [workaround for musl]
- Rebase to 0.177
- Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
- ---
- lib/error.h | 27 +++++++++++++++++++++++++++
- lib/fixedsizehash.h | 1 -
- lib/libeu.h | 1 +
- libdwfl/dwfl_error.c | 9 +++++++++
- libdwfl/linux-kernel-modules.c | 1 +
- libelf/elf.h | 9 ++++++---
- 6 files changed, 44 insertions(+), 4 deletions(-)
- create mode 100644 lib/error.h
- diff --git a/lib/error.h b/lib/error.h
- new file mode 100644
- index 0000000..ef06827
- --- /dev/null
- +++ b/lib/error.h
- @@ -0,0 +1,27 @@
- +#ifndef _ERROR_H_
- +#define _ERROR_H_
- +
- +#include <stdarg.h>
- +#include <stdio.h>
- +#include <stdlib.h>
- +#include <string.h>
- +#include <errno.h>
- +
- +static unsigned int error_message_count = 0;
- +
- +static inline void error(int status, int errnum, const char* format, ...)
- +{
- + va_list ap;
- + fprintf(stderr, "%s: ", program_invocation_name);
- + va_start(ap, format);
- + vfprintf(stderr, format, ap);
- + va_end(ap);
- + if (errnum)
- + fprintf(stderr, ": %s", strerror(errnum));
- + fprintf(stderr, "\n");
- + error_message_count++;
- + if (status)
- + exit(status);
- +}
- +
- +#endif /* _ERROR_H_ */
- 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 <errno.h>
- #include <stdlib.h>
- #include <string.h>
- -#include <sys/cdefs.h>
-
- #include <system.h>
-
- diff --git a/lib/libeu.h b/lib/libeu.h
- index ecb4d01..edc85e3 100644
- --- a/lib/libeu.h
- +++ b/lib/libeu.h
- @@ -29,6 +29,7 @@
- #ifndef LIBEU_H
- #define LIBEU_H
-
- +#include "system.h"
- #include <stddef.h>
- #include <stdint.h>
-
- diff --git a/libdwfl/dwfl_error.c b/libdwfl/dwfl_error.c
- index 7bcf61c..11dcc8b 100644
- --- a/libdwfl/dwfl_error.c
- +++ b/libdwfl/dwfl_error.c
- @@ -154,7 +154,16 @@ dwfl_errmsg (int error)
- switch (error &~ 0xffff)
- {
- case OTHER_ERROR (ERRNO):
- +#if defined(__GLIBC__)
- return strerror_r (error & 0xffff, "bad", 0);
- +#else
- + {
- + static __thread char buf[128] = "";
- + if (strerror_r (error & 0xffff, buf, sizeof(buf)) == 0)
- + return buf;
- + }
- + return "strerror_r() failed";
- +#endif
- case OTHER_ERROR (LIBELF):
- return elf_errmsg (error & 0xffff);
- case OTHER_ERROR (LIBDW):
- diff --git a/libdwfl/linux-kernel-modules.c b/libdwfl/linux-kernel-modules.c
- index 0434f1e..5afaee8 100644
- --- a/libdwfl/linux-kernel-modules.c
- +++ b/libdwfl/linux-kernel-modules.c
- @@ -50,6 +50,7 @@
- #include <sys/utsname.h>
- #include <fcntl.h>
- #include <unistd.h>
- +#include "system.h"
-
- /* If fts.h is included before config.h, its indirect inclusions may not
- give us the right LFS aliases of these functions, so map them manually. */
- diff --git a/libelf/elf.h b/libelf/elf.h
- index 197b557..8e5b94c 100644
- --- a/libelf/elf.h
- +++ b/libelf/elf.h
- @@ -21,7 +21,9 @@
-
- #include <features.h>
-
- -__BEGIN_DECLS
- +#ifdef __cplusplus
- +extern "C" {
- +#endif
-
- /* Standard ELF types. */
-
- @@ -4103,6 +4105,7 @@ enum
- #define R_ARC_TLS_LE_S9 0x4a
- #define R_ARC_TLS_LE_32 0x4b
-
- -__END_DECLS
- -
- +#ifdef __cplusplus
- +}
- +#endif
- #endif /* elf.h */
|