diff options
Diffstat (limited to 'meta/recipes-devtools/elfutils/files')
-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 |
6 files changed, 352 insertions, 287 deletions
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 | |||