diff options
| -rw-r--r-- | meta/recipes-devtools/elfutils/elfutils_0.176.bb | 15 | ||||
| -rw-r--r-- | meta/recipes-devtools/elfutils/files/0001-fix-err-variable-and-function-conflicts.patch | 91 | ||||
| -rw-r--r-- | meta/recipes-devtools/elfutils/files/0008-build-Provide-alternatives-for-glibc-assumptions-hel.patch | 196 | ||||
| -rw-r--r-- | meta/recipes-devtools/elfutils/files/musl-libs.patch | 111 | ||||
| -rw-r--r-- | meta/recipes-devtools/elfutils/files/musl-obstack-fts.patch | 105 | ||||
| -rw-r--r-- | meta/recipes-devtools/elfutils/files/musl-tests.patch (renamed from meta/recipes-devtools/elfutils/files/musl.patch) | 0 | ||||
| -rw-r--r-- | meta/recipes-devtools/elfutils/files/musl-utils.patch | 136 |
7 files changed, 359 insertions, 295 deletions
diff --git a/meta/recipes-devtools/elfutils/elfutils_0.176.bb b/meta/recipes-devtools/elfutils/elfutils_0.176.bb index 5b8049f531..75acf59d26 100644 --- a/meta/recipes-devtools/elfutils/elfutils_0.176.bb +++ b/meta/recipes-devtools/elfutils/elfutils_0.176.bb | |||
| @@ -4,7 +4,7 @@ SECTION = "base" | |||
| 4 | LICENSE = "GPLv2 & LGPLv3+ & GPLv3+" | 4 | LICENSE = "GPLv2 & LGPLv3+ & GPLv3+" |
| 5 | LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504" | 5 | LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504" |
| 6 | DEPENDS = "libtool bzip2 zlib virtual/libintl" | 6 | DEPENDS = "libtool bzip2 zlib virtual/libintl" |
| 7 | DEPENDS_append_libc-musl = " argp-standalone fts " | 7 | DEPENDS_append_libc-musl = " argp-standalone fts musl-obstack " |
| 8 | # The Debian patches below are from: | 8 | # The Debian patches below are from: |
| 9 | # http://ftp.de.debian.org/debian/pool/main/e/elfutils/elfutils_0.175-1.debian.tar.xz | 9 | # http://ftp.de.debian.org/debian/pool/main/e/elfutils/elfutils_0.175-1.debian.tar.xz |
| 10 | SRC_URI = "https://sourceware.org/elfutils/ftp/${PV}/${BP}.tar.bz2 \ | 10 | SRC_URI = "https://sourceware.org/elfutils/ftp/${PV}/${BP}.tar.bz2 \ |
| @@ -31,12 +31,13 @@ SRC_URI = "https://sourceware.org/elfutils/ftp/${PV}/${BP}.tar.bz2 \ | |||
| 31 | file://0001-skip-the-test-when-gcc-not-deployed.patch \ | 31 | file://0001-skip-the-test-when-gcc-not-deployed.patch \ |
| 32 | file://run-ptest \ | 32 | file://run-ptest \ |
| 33 | file://ptest.patch \ | 33 | file://ptest.patch \ |
| 34 | file://musl.patch \ | ||
| 35 | " | 34 | " |
| 36 | SRC_URI_append_libc-musl = " file://0008-build-Provide-alternatives-for-glibc-assumptions-hel.patch \ | 35 | SRC_URI_append_libc-musl = " \ |
| 37 | file://0001-fix-err-variable-and-function-conflicts.patch \ | 36 | file://musl-obstack-fts.patch \ |
| 38 | " | 37 | file://musl-libs.patch \ |
| 39 | 38 | file://musl-utils.patch \ | |
| 39 | file://musl-tests.patch \ | ||
| 40 | " | ||
| 40 | SRC_URI[md5sum] = "077e4f49320cad82bf17a997068b1db9" | 41 | SRC_URI[md5sum] = "077e4f49320cad82bf17a997068b1db9" |
| 41 | SRC_URI[sha256sum] = "eb5747c371b0af0f71e86215a5ebb88728533c3a104a43d4231963f308cd1023" | 42 | SRC_URI[sha256sum] = "eb5747c371b0af0f71e86215a5ebb88728533c3a104a43d4231963f308cd1023" |
| 42 | 43 | ||
| @@ -85,8 +86,6 @@ do_install_ptest() { | |||
| 85 | EXTRA_OEMAKE_class-native = "" | 86 | EXTRA_OEMAKE_class-native = "" |
| 86 | EXTRA_OEMAKE_class-nativesdk = "" | 87 | EXTRA_OEMAKE_class-nativesdk = "" |
| 87 | 88 | ||
| 88 | ALLOW_EMPTY_${PN}_libc-musl = "1" | ||
| 89 | |||
| 90 | BBCLASSEXTEND = "native nativesdk" | 89 | BBCLASSEXTEND = "native nativesdk" |
| 91 | 90 | ||
| 92 | # Package utilities separately | 91 | # Package utilities separately |
diff --git a/meta/recipes-devtools/elfutils/files/0001-fix-err-variable-and-function-conflicts.patch b/meta/recipes-devtools/elfutils/files/0001-fix-err-variable-and-function-conflicts.patch deleted file mode 100644 index 433db133b2..0000000000 --- a/meta/recipes-devtools/elfutils/files/0001-fix-err-variable-and-function-conflicts.patch +++ /dev/null | |||
| @@ -1,91 +0,0 @@ | |||
| 1 | From 2c50fe7068bd6911958c6d851aef88179e73bb21 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Mingli Yu <Mingli.Yu@windriver.com> | ||
| 3 | Date: Tue, 16 Apr 2019 15:30:38 +0800 | ||
| 4 | Subject: [PATCH] fix err variable and function conflicts | ||
| 5 | |||
| 6 | There comes below build failure with musl when | ||
| 7 | ptest enabled. | ||
| 8 | | In file included from ../../elfutils-0.176/tests/dwfl-proc-attach.c:33: | ||
| 9 | | ../../elfutils-0.176/lib/system.h:63:35: error: called object 'err' is not a function or function pointer | ||
| 10 | | #define error(status, errno, ...) err(status, __VA_ARGS__) | ||
| 11 | | ^~~ | ||
| 12 | | ../../elfutils-0.176/tests/dwfl-proc-attach.c:92:5: note: in expansion of macro 'error' | ||
| 13 | | error (-1, 0, "dwfl_linux_proc_attach pid %d: %s", pid, | ||
| 14 | | ^~~~~ | ||
| 15 | | ../../elfutils-0.176/tests/dwfl-proc-attach.c:79:7: note: declared here | ||
| 16 | | int err; | ||
| 17 | | ^~~ | ||
| 18 | |||
| 19 | It is because there is no error.h in musl and | ||
| 20 | the patch 0008-build-Provide-alternatives-for-glibc-assumptions-hel.patch | ||
| 21 | has updated to use err.h to replace error.h | ||
| 22 | and also added macro definiton as below when | ||
| 23 | use musl. | ||
| 24 | #define error(status, errno, ...) err(status, __VA_ARGS__) | ||
| 25 | |||
| 26 | And in err.h, there is below logic: | ||
| 27 | _Noreturn void err(int, const char *, ...); | ||
| 28 | |||
| 29 | But when ptest enabled, there comes below error | ||
| 30 | as there is both variable and function defined | ||
| 31 | to be err in tests/dwfl-proc-attach.c. | ||
| 32 | So change the err variable's name to workaround | ||
| 33 | the build failure with musl. | ||
| 34 | |||
| 35 | Upstream-Status: Inappropriate [workaround in musl] | ||
| 36 | |||
| 37 | Signed-off-by: Mingli Yu <Mingli.Yu@windriver.com> | ||
| 38 | --- | ||
| 39 | tests/dwfl-proc-attach.c | 6 +++--- | ||
| 40 | 1 file changed, 3 insertions(+), 3 deletions(-) | ||
| 41 | |||
| 42 | Index: elfutils-0.176/tests/dwfl-proc-attach.c | ||
| 43 | =================================================================== | ||
| 44 | --- elfutils-0.176.orig/tests/dwfl-proc-attach.c | ||
| 45 | +++ elfutils-0.176/tests/dwfl-proc-attach.c | ||
| 46 | @@ -76,10 +76,10 @@ main (int argc __attribute__ ((unused)), | ||
| 47 | char **argv __attribute__ ((unused))) | ||
| 48 | { | ||
| 49 | /* Create two extra threads to iterate through. */ | ||
| 50 | - int err; | ||
| 51 | - if ((err = pthread_create (&thread1, NULL, sleeper, NULL)) != 0) | ||
| 52 | + int err1; | ||
| 53 | + if ((err1 = pthread_create (&thread1, NULL, sleeper, NULL)) != 0) | ||
| 54 | error (-1, err, "Couldn't create thread1"); | ||
| 55 | - if ((err = pthread_create (&thread2, NULL, sleeper, NULL)) != 0) | ||
| 56 | + if ((err1 = pthread_create (&thread2, NULL, sleeper, NULL)) != 0) | ||
| 57 | error (-1, err, "Couldn't create thread2"); | ||
| 58 | |||
| 59 | Dwfl *dwfl = dwfl_begin (&proc_callbacks); | ||
| 60 | Index: elfutils-0.176/tests/backtrace.c | ||
| 61 | =================================================================== | ||
| 62 | --- elfutils-0.176.orig/tests/backtrace.c | ||
| 63 | +++ elfutils-0.176/tests/backtrace.c | ||
| 64 | @@ -219,23 +219,23 @@ dump (Dwfl *dwfl) | ||
| 65 | { | ||
| 66 | ptrdiff_t ptrdiff = dwfl_getmodules (dwfl, dump_modules, NULL, 0); | ||
| 67 | assert (ptrdiff == 0); | ||
| 68 | - bool err = false; | ||
| 69 | + bool err1 = false; | ||
| 70 | switch (dwfl_getthreads (dwfl, thread_callback, NULL)) | ||
| 71 | { | ||
| 72 | case 0: | ||
| 73 | break; | ||
| 74 | case DWARF_CB_ABORT: | ||
| 75 | - err = true; | ||
| 76 | + err1 = true; | ||
| 77 | break; | ||
| 78 | case -1: | ||
| 79 | error (0, 0, "dwfl_getthreads: %s", dwfl_errmsg (-1)); | ||
| 80 | - err = true; | ||
| 81 | + err1 = true; | ||
| 82 | break; | ||
| 83 | default: | ||
| 84 | abort (); | ||
| 85 | } | ||
| 86 | callback_verify (0, 0, 0, NULL, dwfl); | ||
| 87 | - if (err) | ||
| 88 | + if (err1) | ||
| 89 | exit (EXIT_FAILURE); | ||
| 90 | } | ||
| 91 | |||
diff --git a/meta/recipes-devtools/elfutils/files/0008-build-Provide-alternatives-for-glibc-assumptions-hel.patch b/meta/recipes-devtools/elfutils/files/0008-build-Provide-alternatives-for-glibc-assumptions-hel.patch deleted file mode 100644 index 10cdac646c..0000000000 --- a/meta/recipes-devtools/elfutils/files/0008-build-Provide-alternatives-for-glibc-assumptions-hel.patch +++ /dev/null | |||
| @@ -1,196 +0,0 @@ | |||
| 1 | From 990d377a92f4bab04bf6820fc81b3dcb6cf5e31d Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Khem Raj <raj.khem@gmail.com> | ||
| 3 | Date: Mon, 2 Jul 2018 09:52:23 +0800 | ||
| 4 | Subject: [PATCH] build: Provide alternatives for glibc assumptions helps | ||
| 5 | compiling it on musl | ||
| 6 | |||
| 7 | Upstream-Status: Pending | ||
| 8 | Signed-off-by: Khem Raj <raj.khem@gmail.com> | ||
| 9 | |||
| 10 | Rebase to 0.175 | ||
| 11 | |||
| 12 | Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com> | ||
| 13 | |||
| 14 | --- | ||
| 15 | Makefile.am | 2 +- | ||
| 16 | lib/fixedsizehash.h | 1 - | ||
| 17 | lib/system.h | 12 +++++++++++- | ||
| 18 | libdw/Makefile.am | 3 ++- | ||
| 19 | libdwfl/dwfl_build_id_find_elf.c | 1 + | ||
| 20 | libdwfl/dwfl_error.c | 4 +++- | ||
| 21 | libdwfl/dwfl_module_getdwarf.c | 1 + | ||
| 22 | libdwfl/libdwfl_crc32_file.c | 9 +++++++++ | ||
| 23 | libdwfl/linux-kernel-modules.c | 1 + | ||
| 24 | libelf/elf.h | 8 ++++++-- | ||
| 25 | libelf/libelf.h | 1 + | ||
| 26 | libelf/libelfP.h | 1 + | ||
| 27 | 12 files changed, 37 insertions(+), 7 deletions(-) | ||
| 28 | |||
| 29 | diff --git a/Makefile.am b/Makefile.am | ||
| 30 | index 2ff444e..41f77df 100644 | ||
| 31 | --- a/Makefile.am | ||
| 32 | +++ b/Makefile.am | ||
| 33 | @@ -28,7 +28,7 @@ pkginclude_HEADERS = version.h | ||
| 34 | |||
| 35 | # Add doc back when we have some real content. | ||
| 36 | SUBDIRS = config m4 lib libelf libebl libdwelf libdwfl libdw libcpu libasm \ | ||
| 37 | - backends src po tests | ||
| 38 | + backends po tests | ||
| 39 | |||
| 40 | EXTRA_DIST = elfutils.spec GPG-KEY NOTES CONTRIBUTING \ | ||
| 41 | COPYING COPYING-GPLV2 COPYING-LGPLV3 | ||
| 42 | diff --git a/lib/fixedsizehash.h b/lib/fixedsizehash.h | ||
| 43 | index dac2a5f..43016fc 100644 | ||
| 44 | --- a/lib/fixedsizehash.h | ||
| 45 | +++ b/lib/fixedsizehash.h | ||
| 46 | @@ -30,7 +30,6 @@ | ||
| 47 | #include <errno.h> | ||
| 48 | #include <stdlib.h> | ||
| 49 | #include <string.h> | ||
| 50 | -#include <sys/cdefs.h> | ||
| 51 | |||
| 52 | #include <system.h> | ||
| 53 | |||
| 54 | diff --git a/lib/system.h b/lib/system.h | ||
| 55 | index 292082b..308a762 100644 | ||
| 56 | --- a/lib/system.h | ||
| 57 | +++ b/lib/system.h | ||
| 58 | @@ -30,7 +30,7 @@ | ||
| 59 | #define LIB_SYSTEM_H 1 | ||
| 60 | |||
| 61 | #include <errno.h> | ||
| 62 | -#include <error.h> | ||
| 63 | +#include <err.h> | ||
| 64 | #include <stddef.h> | ||
| 65 | #include <stdint.h> | ||
| 66 | #include <sys/param.h> | ||
| 67 | @@ -51,6 +51,8 @@ | ||
| 68 | #else | ||
| 69 | # error "Unknown byte order" | ||
| 70 | #endif | ||
| 71 | + | ||
| 72 | +#define error(status, errno, ...) err(status, __VA_ARGS__) | ||
| 73 | |||
| 74 | #ifndef MAX | ||
| 75 | #define MAX(m, n) ((m) < (n) ? (n) : (m)) | ||
| 76 | diff --git a/libdw/Makefile.am b/libdw/Makefile.am | ||
| 77 | index 7a3d532..7ac1241 100644 | ||
| 78 | --- a/libdw/Makefile.am | ||
| 79 | +++ b/libdw/Makefile.am | ||
| 80 | @@ -108,7 +108,8 @@ am_libdw_pic_a_OBJECTS = $(libdw_a_SOURCES:.c=.os) | ||
| 81 | libdw_so_LIBS = libdw_pic.a ../libdwelf/libdwelf_pic.a \ | ||
| 82 | ../libdwfl/libdwfl_pic.a ../libebl/libebl.a | ||
| 83 | libdw_so_DEPS = ../lib/libeu.a ../libelf/libelf.so | ||
| 84 | -libdw_so_LDLIBS = $(libdw_so_DEPS) -ldl -lz $(argp_LDADD) $(zip_LIBS) | ||
| 85 | +fts_LDADD = -lfts | ||
| 86 | +libdw_so_LDLIBS = $(libdw_so_DEPS) -ldl -lz $(argp_LDADD) $(zip_LIBS) $(fts_LDADD) | ||
| 87 | libdw_so_SOURCES = | ||
| 88 | libdw.so$(EXEEXT): $(srcdir)/libdw.map $(libdw_so_LIBS) $(libdw_so_DEPS) | ||
| 89 | # The rpath is necessary for libebl because its $ORIGIN use will | ||
| 90 | diff --git a/libdwfl/dwfl_build_id_find_elf.c b/libdwfl/dwfl_build_id_find_elf.c | ||
| 91 | index cc6c3f6..b06ab59 100644 | ||
| 92 | --- a/libdwfl/dwfl_build_id_find_elf.c | ||
| 93 | +++ b/libdwfl/dwfl_build_id_find_elf.c | ||
| 94 | @@ -31,6 +31,7 @@ | ||
| 95 | #endif | ||
| 96 | |||
| 97 | #include "libdwflP.h" | ||
| 98 | +#include "system.h" | ||
| 99 | #include <inttypes.h> | ||
| 100 | #include <fcntl.h> | ||
| 101 | #include <unistd.h> | ||
| 102 | diff --git a/libdwfl/dwfl_error.c b/libdwfl/dwfl_error.c | ||
| 103 | index 7bcf61c..c345797 100644 | ||
| 104 | --- a/libdwfl/dwfl_error.c | ||
| 105 | +++ b/libdwfl/dwfl_error.c | ||
| 106 | @@ -140,6 +140,7 @@ __libdwfl_seterrno (Dwfl_Error error) | ||
| 107 | const char * | ||
| 108 | dwfl_errmsg (int error) | ||
| 109 | { | ||
| 110 | + static __thread char s[64] = ""; | ||
| 111 | if (error == 0 || error == -1) | ||
| 112 | { | ||
| 113 | int last_error = global_error; | ||
| 114 | @@ -154,7 +155,8 @@ dwfl_errmsg (int error) | ||
| 115 | switch (error &~ 0xffff) | ||
| 116 | { | ||
| 117 | case OTHER_ERROR (ERRNO): | ||
| 118 | - return strerror_r (error & 0xffff, "bad", 0); | ||
| 119 | + strerror_r (error & 0xffff, s, sizeof(s)); | ||
| 120 | + return s; | ||
| 121 | case OTHER_ERROR (LIBELF): | ||
| 122 | return elf_errmsg (error & 0xffff); | ||
| 123 | case OTHER_ERROR (LIBDW): | ||
| 124 | diff --git a/libdwfl/dwfl_module_getdwarf.c b/libdwfl/dwfl_module_getdwarf.c | ||
| 125 | index 56e6105..f4a0649 100644 | ||
| 126 | --- a/libdwfl/dwfl_module_getdwarf.c | ||
| 127 | +++ b/libdwfl/dwfl_module_getdwarf.c | ||
| 128 | @@ -35,6 +35,7 @@ | ||
| 129 | #include <fcntl.h> | ||
| 130 | #include <string.h> | ||
| 131 | #include <unistd.h> | ||
| 132 | +#include "system.h" | ||
| 133 | #include "../libdw/libdwP.h" /* DWARF_E_* values are here. */ | ||
| 134 | #include "../libelf/libelfP.h" | ||
| 135 | #include "system.h" | ||
| 136 | diff --git a/libdwfl/linux-kernel-modules.c b/libdwfl/linux-kernel-modules.c | ||
| 137 | index 360e4ee..b5aa397 100644 | ||
| 138 | --- a/libdwfl/linux-kernel-modules.c | ||
| 139 | +++ b/libdwfl/linux-kernel-modules.c | ||
| 140 | @@ -41,6 +41,7 @@ | ||
| 141 | |||
| 142 | #include "libelfP.h" | ||
| 143 | #include "libdwflP.h" | ||
| 144 | +#include "system.h" | ||
| 145 | #include <inttypes.h> | ||
| 146 | #include <errno.h> | ||
| 147 | #include <stdio.h> | ||
| 148 | diff --git a/libelf/elf.h b/libelf/elf.h | ||
| 149 | index 5dc632b..14da1b7 100644 | ||
| 150 | --- a/libelf/elf.h | ||
| 151 | +++ b/libelf/elf.h | ||
| 152 | @@ -21,7 +21,9 @@ | ||
| 153 | |||
| 154 | #include <features.h> | ||
| 155 | |||
| 156 | -__BEGIN_DECLS | ||
| 157 | +#ifdef __cplusplus | ||
| 158 | +extern "C" { | ||
| 159 | +#endif | ||
| 160 | |||
| 161 | /* Standard ELF types. */ | ||
| 162 | |||
| 163 | @@ -3937,6 +3939,8 @@ enum | ||
| 164 | #define R_METAG_TLS_LE_HI16 60 | ||
| 165 | #define R_METAG_TLS_LE_LO16 61 | ||
| 166 | |||
| 167 | -__END_DECLS | ||
| 168 | +#ifdef __cplusplus | ||
| 169 | +} | ||
| 170 | +#endif | ||
| 171 | |||
| 172 | #endif /* elf.h */ | ||
| 173 | diff --git a/libelf/libelf.h b/libelf/libelf.h | ||
| 174 | index 1ff11c9..c21e018 100644 | ||
| 175 | --- a/libelf/libelf.h | ||
| 176 | +++ b/libelf/libelf.h | ||
| 177 | @@ -29,6 +29,7 @@ | ||
| 178 | #ifndef _LIBELF_H | ||
| 179 | #define _LIBELF_H 1 | ||
| 180 | |||
| 181 | +#include <fcntl.h> | ||
| 182 | #include <stdint.h> | ||
| 183 | #include <sys/types.h> | ||
| 184 | |||
| 185 | diff --git a/libelf/libelfP.h b/libelf/libelfP.h | ||
| 186 | index 9f3e8e9..10a347a 100644 | ||
| 187 | --- a/libelf/libelfP.h | ||
| 188 | +++ b/libelf/libelfP.h | ||
| 189 | @@ -32,6 +32,7 @@ | ||
| 190 | |||
| 191 | #include <ar.h> | ||
| 192 | #include <gelf.h> | ||
| 193 | +#include <libelf.h> | ||
| 194 | |||
| 195 | #include <errno.h> | ||
| 196 | #include <stdbool.h> | ||
diff --git a/meta/recipes-devtools/elfutils/files/musl-libs.patch b/meta/recipes-devtools/elfutils/files/musl-libs.patch new file mode 100644 index 0000000000..51ca630ef8 --- /dev/null +++ b/meta/recipes-devtools/elfutils/files/musl-libs.patch | |||
| @@ -0,0 +1,111 @@ | |||
| 1 | Collection of fixes needed to compile libelf and other libraries | ||
| 2 | provided by elfutils for musl targets | ||
| 3 | |||
| 4 | error is glibc specific API, so this patch will mostly not accepted | ||
| 5 | upstream given that elfutils has been closely tied to glibc | ||
| 6 | |||
| 7 | Signed-off-by: Khem Raj <raj.khem@gmail.com> | ||
| 8 | Upstream-Status: Inappropriate [workaround for musl] | ||
| 9 | |||
| 10 | --- /dev/null | ||
| 11 | +++ b/lib/error.h | ||
| 12 | @@ -0,0 +1,27 @@ | ||
| 13 | +#ifndef _ERROR_H_ | ||
| 14 | +#define _ERROR_H_ | ||
| 15 | + | ||
| 16 | +#include <stdarg.h> | ||
| 17 | +#include <stdio.h> | ||
| 18 | +#include <stdlib.h> | ||
| 19 | +#include <string.h> | ||
| 20 | +#include <errno.h> | ||
| 21 | + | ||
| 22 | +static unsigned int error_message_count = 0; | ||
| 23 | + | ||
| 24 | +static inline void error(int status, int errnum, const char* format, ...) | ||
| 25 | +{ | ||
| 26 | + va_list ap; | ||
| 27 | + fprintf(stderr, "%s: ", program_invocation_name); | ||
| 28 | + va_start(ap, format); | ||
| 29 | + vfprintf(stderr, format, ap); | ||
| 30 | + va_end(ap); | ||
| 31 | + if (errnum) | ||
| 32 | + fprintf(stderr, ": %s", strerror(errnum)); | ||
| 33 | + fprintf(stderr, "\n"); | ||
| 34 | + error_message_count++; | ||
| 35 | + if (status) | ||
| 36 | + exit(status); | ||
| 37 | +} | ||
| 38 | + | ||
| 39 | +#endif /* _ERROR_H_ */ | ||
| 40 | --- a/lib/fixedsizehash.h | ||
| 41 | +++ b/lib/fixedsizehash.h | ||
| 42 | @@ -30,7 +30,6 @@ | ||
| 43 | #include <errno.h> | ||
| 44 | #include <stdlib.h> | ||
| 45 | #include <string.h> | ||
| 46 | -#include <sys/cdefs.h> | ||
| 47 | |||
| 48 | #include <system.h> | ||
| 49 | |||
| 50 | --- a/lib/libeu.h | ||
| 51 | +++ b/lib/libeu.h | ||
| 52 | @@ -29,6 +29,7 @@ | ||
| 53 | #ifndef LIBEU_H | ||
| 54 | #define LIBEU_H | ||
| 55 | |||
| 56 | +#include "system.h" | ||
| 57 | #include <stddef.h> | ||
| 58 | #include <stdint.h> | ||
| 59 | |||
| 60 | --- a/libdwfl/dwfl_error.c | ||
| 61 | +++ b/libdwfl/dwfl_error.c | ||
| 62 | @@ -154,7 +154,16 @@ dwfl_errmsg (int error) | ||
| 63 | switch (error &~ 0xffff) | ||
| 64 | { | ||
| 65 | case OTHER_ERROR (ERRNO): | ||
| 66 | +#if defined(__GLIBC__) | ||
| 67 | return strerror_r (error & 0xffff, "bad", 0); | ||
| 68 | +#else | ||
| 69 | + { | ||
| 70 | + static __thread char buf[128] = ""; | ||
| 71 | + if (strerror_r (error & 0xffff, buf, sizeof(buf)) == 0) | ||
| 72 | + return buf; | ||
| 73 | + } | ||
| 74 | + return "strerror_r() failed"; | ||
| 75 | +#endif | ||
| 76 | case OTHER_ERROR (LIBELF): | ||
| 77 | return elf_errmsg (error & 0xffff); | ||
| 78 | case OTHER_ERROR (LIBDW): | ||
| 79 | --- a/libdwfl/linux-kernel-modules.c | ||
| 80 | +++ b/libdwfl/linux-kernel-modules.c | ||
| 81 | @@ -50,6 +50,7 @@ | ||
| 82 | #include <sys/utsname.h> | ||
| 83 | #include <fcntl.h> | ||
| 84 | #include <unistd.h> | ||
| 85 | +#include "system.h" | ||
| 86 | |||
| 87 | /* If fts.h is included before config.h, its indirect inclusions may not | ||
| 88 | give us the right LFS aliases of these functions, so map them manually. */ | ||
| 89 | --- a/libelf/elf.h | ||
| 90 | +++ b/libelf/elf.h | ||
| 91 | @@ -21,7 +21,9 @@ | ||
| 92 | |||
| 93 | #include <features.h> | ||
| 94 | |||
| 95 | -__BEGIN_DECLS | ||
| 96 | +#ifdef __cplusplus | ||
| 97 | +extern "C" { | ||
| 98 | +#endif | ||
| 99 | |||
| 100 | /* Standard ELF types. */ | ||
| 101 | |||
| 102 | @@ -3937,6 +3939,7 @@ enum | ||
| 103 | #define R_METAG_TLS_LE_HI16 60 | ||
| 104 | #define R_METAG_TLS_LE_LO16 61 | ||
| 105 | |||
| 106 | -__END_DECLS | ||
| 107 | - | ||
| 108 | +#ifdef __cplusplus | ||
| 109 | +} | ||
| 110 | +#endif | ||
| 111 | #endif /* elf.h */ | ||
diff --git a/meta/recipes-devtools/elfutils/files/musl-obstack-fts.patch b/meta/recipes-devtools/elfutils/files/musl-obstack-fts.patch new file mode 100644 index 0000000000..0fb7eb9236 --- /dev/null +++ b/meta/recipes-devtools/elfutils/files/musl-obstack-fts.patch | |||
| @@ -0,0 +1,105 @@ | |||
| 1 | Look for libfts and libobstack during configure, these | ||
| 2 | libraries are external to libc when using musl, whereas | ||
| 3 | on glibc these libraries are provided in libc itself. | ||
| 4 | |||
| 5 | Signed-off-by: Khem Raj <raj.khem@gmail.com> | ||
| 6 | Upstream-Status: Inappropriate [workaround for musl] | ||
| 7 | --- a/configure.ac | ||
| 8 | +++ b/configure.ac | ||
| 9 | @@ -494,6 +494,60 @@ else | ||
| 10 | fi | ||
| 11 | AC_SUBST([argp_LDADD]) | ||
| 12 | |||
| 13 | +dnl Check if we have fts available from our libc | ||
| 14 | +AC_LINK_IFELSE( | ||
| 15 | + [AC_LANG_PROGRAM( | ||
| 16 | + [#if !defined(__x86_64__) | ||
| 17 | + #undef _FILE_OFFSET_BITS | ||
| 18 | + #define _FILE_OFFSET_BITS 32 | ||
| 19 | + #endif | ||
| 20 | + #include <fts.h>], | ||
| 21 | + [FTS* fts = 0; return fts_close(fts); return 0;] | ||
| 22 | + )], | ||
| 23 | + [libc_has_fts="true"], | ||
| 24 | + [libc_has_fts="false"] | ||
| 25 | +) | ||
| 26 | + | ||
| 27 | +dnl If our libc doesn't provide fts, then test for libfts | ||
| 28 | +if test "$libc_has_fts" = "false" ; then | ||
| 29 | + AC_MSG_WARN("libc does not have fts") | ||
| 30 | + AC_CHECK_LIB([fts], [fts_close], [have_fts="true"], [have_fts="false"]) | ||
| 31 | + | ||
| 32 | + if test "$have_fts" = "false"; then | ||
| 33 | + AC_MSG_ERROR("no libfts found") | ||
| 34 | + else | ||
| 35 | + fts_LDADD="-lfts" | ||
| 36 | + fi | ||
| 37 | +else | ||
| 38 | + fts_LDADD="" | ||
| 39 | +fi | ||
| 40 | +AC_SUBST([fts_LDADD]) | ||
| 41 | + | ||
| 42 | +dnl Check if we have obstack available from our libc | ||
| 43 | +AC_LINK_IFELSE( | ||
| 44 | + [AC_LANG_PROGRAM( | ||
| 45 | + [#include <obstack.h>], | ||
| 46 | + [_obstack_begin(0, 0, 0, NULL, NULL); return 0;] | ||
| 47 | + )], | ||
| 48 | + [libc_has_obstack="true"], | ||
| 49 | + [libc_has_obstack="false"] | ||
| 50 | +) | ||
| 51 | + | ||
| 52 | +dnl If our libc doesn't provide obstack, then test for libobstack | ||
| 53 | +if test "$libc_has_obstack" = "false" ; then | ||
| 54 | + AC_MSG_WARN("libc does not have obstack") | ||
| 55 | + AC_CHECK_LIB([obstack], [_obstack_begin], [have_obstack="true"], [have_obstack="false"]) | ||
| 56 | + | ||
| 57 | + if test "$have_obstack" = "false"; then | ||
| 58 | + AC_MSG_ERROR("no libobstack found") | ||
| 59 | + else | ||
| 60 | + obstack_LDADD="-lobstack" | ||
| 61 | + fi | ||
| 62 | +else | ||
| 63 | + obstack_LDADD="" | ||
| 64 | +fi | ||
| 65 | +AC_SUBST([obstack_LDADD]) | ||
| 66 | + | ||
| 67 | dnl The directories with content. | ||
| 68 | |||
| 69 | dnl Documentation. | ||
| 70 | --- a/libdw/Makefile.am | ||
| 71 | +++ b/libdw/Makefile.am | ||
| 72 | @@ -108,7 +108,7 @@ am_libdw_pic_a_OBJECTS = $(libdw_a_SOURC | ||
| 73 | libdw_so_LIBS = libdw_pic.a ../libdwelf/libdwelf_pic.a \ | ||
| 74 | ../libdwfl/libdwfl_pic.a ../libebl/libebl.a | ||
| 75 | libdw_so_DEPS = ../lib/libeu.a ../libelf/libelf.so | ||
| 76 | -libdw_so_LDLIBS = $(libdw_so_DEPS) -ldl -lz $(argp_LDADD) $(zip_LIBS) | ||
| 77 | +libdw_so_LDLIBS = $(libdw_so_DEPS) -ldl -lz $(argp_LDADD) $(fts_LDADD) $(zip_LIBS) | ||
| 78 | libdw_so_SOURCES = | ||
| 79 | libdw.so$(EXEEXT): $(srcdir)/libdw.map $(libdw_so_LIBS) $(libdw_so_DEPS) | ||
| 80 | # The rpath is necessary for libebl because its $ORIGIN use will | ||
| 81 | --- a/src/Makefile.am | ||
| 82 | +++ b/src/Makefile.am | ||
| 83 | @@ -68,8 +68,8 @@ ar_no_Wstack_usage = yes | ||
| 84 | unstrip_no_Wstack_usage = yes | ||
| 85 | |||
| 86 | readelf_LDADD = $(libdw) $(libebl) $(libelf) $(libeu) $(argp_LDADD) -ldl | ||
| 87 | -nm_LDADD = $(libdw) $(libebl) $(libelf) $(libeu) $(argp_LDADD) -ldl \ | ||
| 88 | - $(demanglelib) | ||
| 89 | +nm_LDADD = $(libdw) $(libebl) $(libelf) $(libeu) $(argp_LDADD) \ | ||
| 90 | + $(obstack_LDADD) -ldl $(demanglelib) | ||
| 91 | size_LDADD = $(libelf) $(libeu) $(argp_LDADD) | ||
| 92 | strip_LDADD = $(libebl) $(libelf) $(libdw) $(libeu) $(argp_LDADD) -ldl | ||
| 93 | elflint_LDADD = $(libebl) $(libelf) $(libeu) $(argp_LDADD) -ldl | ||
| 94 | @@ -77,9 +77,9 @@ findtextrel_LDADD = $(libdw) $(libelf) $ | ||
| 95 | addr2line_LDADD = $(libdw) $(libelf) $(libeu) $(argp_LDADD) $(demanglelib) | ||
| 96 | elfcmp_LDADD = $(libebl) $(libelf) $(libeu) $(argp_LDADD) -ldl | ||
| 97 | objdump_LDADD = $(libasm) $(libebl) $(libelf) $(libeu) $(argp_LDADD) -ldl | ||
| 98 | -ranlib_LDADD = libar.a $(libelf) $(libeu) $(argp_LDADD) | ||
| 99 | +ranlib_LDADD = libar.a $(libelf) $(libeu) $(argp_LDADD) $(obstack_LDADD) | ||
| 100 | strings_LDADD = $(libelf) $(libeu) $(argp_LDADD) | ||
| 101 | -ar_LDADD = libar.a $(libelf) $(libeu) $(argp_LDADD) | ||
| 102 | +ar_LDADD = libar.a $(libelf) $(libeu) $(argp_LDADD) $(obstack_LDADD) | ||
| 103 | unstrip_LDADD = $(libebl) $(libelf) $(libdw) $(libeu) $(argp_LDADD) -ldl | ||
| 104 | stack_LDADD = $(libebl) $(libelf) $(libdw) $(libeu) $(argp_LDADD) -ldl $(demanglelib) | ||
| 105 | elfcompress_LDADD = $(libebl) $(libelf) $(libdw) $(libeu) $(argp_LDADD) | ||
diff --git a/meta/recipes-devtools/elfutils/files/musl.patch b/meta/recipes-devtools/elfutils/files/musl-tests.patch index be35791b1a..be35791b1a 100644 --- a/meta/recipes-devtools/elfutils/files/musl.patch +++ b/meta/recipes-devtools/elfutils/files/musl-tests.patch | |||
diff --git a/meta/recipes-devtools/elfutils/files/musl-utils.patch b/meta/recipes-devtools/elfutils/files/musl-utils.patch new file mode 100644 index 0000000000..8e636bf660 --- /dev/null +++ b/meta/recipes-devtools/elfutils/files/musl-utils.patch | |||
| @@ -0,0 +1,136 @@ | |||
| 1 | Provide missing defines which otherwise are available on glibc system headers | ||
| 2 | |||
| 3 | Alter the error API to match posix version | ||
| 4 | use qsort instead of qsort_r which is glibc specific API | ||
| 5 | |||
| 6 | Signed-off-by: Khem Raj <raj.khem@gmail.com> | ||
| 7 | Upstream-Status: Inappropriate [workaround for musl] | ||
| 8 | --- a/src/arlib.h | ||
| 9 | +++ b/src/arlib.h | ||
| 10 | @@ -29,6 +29,12 @@ | ||
| 11 | #include <stdint.h> | ||
| 12 | #include <sys/types.h> | ||
| 13 | |||
| 14 | +#if !defined(ALLPERMS) | ||
| 15 | +# define ALLPERMS (S_ISUID|S_ISGID|S_ISVTX|S_IRWXU|S_IRWXG|S_IRWXO) /* 07777 */ | ||
| 16 | +#endif | ||
| 17 | +#if !defined(DEFFILEMODE) | ||
| 18 | +# define DEFFILEMODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)/* 0666*/ | ||
| 19 | +#endif | ||
| 20 | |||
| 21 | /* State of -D/-U flags. */ | ||
| 22 | extern bool arlib_deterministic_output; | ||
| 23 | --- a/src/elfcompress.c | ||
| 24 | +++ b/src/elfcompress.c | ||
| 25 | @@ -37,6 +37,13 @@ | ||
| 26 | #include "libeu.h" | ||
| 27 | #include "printversion.h" | ||
| 28 | |||
| 29 | +#if !defined(ALLPERMS) | ||
| 30 | +# define ALLPERMS (S_ISUID|S_ISGID|S_ISVTX|S_IRWXU|S_IRWXG|S_IRWXO) /* 07777 */ | ||
| 31 | +#endif | ||
| 32 | +#if !defined(FNM_EXTMATCH) | ||
| 33 | +# define FNM_EXTMATCH (0) | ||
| 34 | +#endif | ||
| 35 | + | ||
| 36 | /* Name and version of program. */ | ||
| 37 | ARGP_PROGRAM_VERSION_HOOK_DEF = print_version; | ||
| 38 | |||
| 39 | --- a/src/readelf.c | ||
| 40 | +++ b/src/readelf.c | ||
| 41 | @@ -4792,10 +4792,11 @@ listptr_base (struct listptr *p) | ||
| 42 | return cudie_base (&cu); | ||
| 43 | } | ||
| 44 | |||
| 45 | +static const char *listptr_name; | ||
| 46 | + | ||
| 47 | static int | ||
| 48 | -compare_listptr (const void *a, const void *b, void *arg) | ||
| 49 | +compare_listptr (const void *a, const void *b) | ||
| 50 | { | ||
| 51 | - const char *name = arg; | ||
| 52 | struct listptr *p1 = (void *) a; | ||
| 53 | struct listptr *p2 = (void *) b; | ||
| 54 | |||
| 55 | @@ -4811,21 +4812,21 @@ compare_listptr (const void *a, const vo | ||
| 56 | p1->warned = p2->warned = true; | ||
| 57 | error (0, 0, | ||
| 58 | gettext ("%s %#" PRIx64 " used with different address sizes"), | ||
| 59 | - name, (uint64_t) p1->offset); | ||
| 60 | + listptr_name, (uint64_t) p1->offset); | ||
| 61 | } | ||
| 62 | if (p1->dwarf64 != p2->dwarf64) | ||
| 63 | { | ||
| 64 | p1->warned = p2->warned = true; | ||
| 65 | error (0, 0, | ||
| 66 | gettext ("%s %#" PRIx64 " used with different offset sizes"), | ||
| 67 | - name, (uint64_t) p1->offset); | ||
| 68 | + listptr_name, (uint64_t) p1->offset); | ||
| 69 | } | ||
| 70 | if (listptr_base (p1) != listptr_base (p2)) | ||
| 71 | { | ||
| 72 | p1->warned = p2->warned = true; | ||
| 73 | error (0, 0, | ||
| 74 | gettext ("%s %#" PRIx64 " used with different base addresses"), | ||
| 75 | - name, (uint64_t) p1->offset); | ||
| 76 | + listptr_name, (uint64_t) p1->offset); | ||
| 77 | } | ||
| 78 | if (p1->attr != p2 ->attr) | ||
| 79 | { | ||
| 80 | @@ -4833,7 +4834,7 @@ compare_listptr (const void *a, const vo | ||
| 81 | error (0, 0, | ||
| 82 | gettext ("%s %#" PRIx64 | ||
| 83 | " used with different attribute %s and %s"), | ||
| 84 | - name, (uint64_t) p1->offset, dwarf_attr_name (p2->attr), | ||
| 85 | + listptr_name, (uint64_t) p1->offset, dwarf_attr_name (p2->attr), | ||
| 86 | dwarf_attr_name (p2->attr)); | ||
| 87 | } | ||
| 88 | } | ||
| 89 | @@ -4905,8 +4906,11 @@ static void | ||
| 90 | sort_listptr (struct listptr_table *table, const char *name) | ||
| 91 | { | ||
| 92 | if (table->n > 0) | ||
| 93 | - qsort_r (table->table, table->n, sizeof table->table[0], | ||
| 94 | - &compare_listptr, (void *) name); | ||
| 95 | + { | ||
| 96 | + listptr_name = name; | ||
| 97 | + qsort (table->table, table->n, sizeof table->table[0], | ||
| 98 | + &compare_listptr); | ||
| 99 | + } | ||
| 100 | } | ||
| 101 | |||
| 102 | static bool | ||
| 103 | --- a/src/strip.c | ||
| 104 | +++ b/src/strip.c | ||
| 105 | @@ -46,6 +46,13 @@ | ||
| 106 | #include <system.h> | ||
| 107 | #include <printversion.h> | ||
| 108 | |||
| 109 | +#if !defined(ACCESSPERMS) | ||
| 110 | +# define ACCESSPERMS (S_IRWXU|S_IRWXG|S_IRWXO) /* 0777 */ | ||
| 111 | +#endif | ||
| 112 | +#if !defined(FNM_EXTMATCH) | ||
| 113 | +# define FNM_EXTMATCH (0) | ||
| 114 | +#endif | ||
| 115 | + | ||
| 116 | typedef uint8_t GElf_Byte; | ||
| 117 | |||
| 118 | /* Name and version of program. */ | ||
| 119 | --- a/src/unstrip.c | ||
| 120 | +++ b/src/unstrip.c | ||
| 121 | @@ -56,6 +56,15 @@ | ||
| 122 | # define _(str) gettext (str) | ||
| 123 | #endif | ||
| 124 | |||
| 125 | +#ifndef strndupa | ||
| 126 | +#define strndupa(s, n) \ | ||
| 127 | + ({const char *__in = (s); \ | ||
| 128 | + size_t __len = strnlen (__in, (n)) + 1; \ | ||
| 129 | + char *__out = (char *) alloca (__len); \ | ||
| 130 | + __out[__len-1] = '\0'; \ | ||
| 131 | + (char *) memcpy (__out, __in, __len-1);}) | ||
| 132 | +#endif | ||
| 133 | + | ||
| 134 | /* Name and version of program. */ | ||
| 135 | ARGP_PROGRAM_VERSION_HOOK_DEF = print_version; | ||
| 136 | |||
