All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH V2 1/4] pam_systemd: Include missing.h for secure_getenv
@ 2019-05-22 23:40 Khem Raj
  2019-05-22 23:40 ` [PATCH v3 2/4] musl-obstack: Add recipe Khem Raj
                   ` (3 more replies)
  0 siblings, 4 replies; 7+ messages in thread
From: Khem Raj @ 2019-05-22 23:40 UTC (permalink / raw)
  To: openembedded-core

'secure_getenv' api is not uniformly implemented across all C libraries
therefore its good to include missing.h so it can use the alternative
implementation where its not awvailable

Fixes
../git/src/login/pam_systemd.c:344:13: error: implicit declaration of function 'secure_getenv' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
        v = secure_getenv(key);

Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
v2: Rebased

 ...missing.h-check-for-missing-strndupa.patch | 71 +++----------------
 1 file changed, 10 insertions(+), 61 deletions(-)

diff --git a/meta/recipes-core/systemd/systemd/0005-src-basic-missing.h-check-for-missing-strndupa.patch b/meta/recipes-core/systemd/systemd/0005-src-basic-missing.h-check-for-missing-strndupa.patch
index a2e25a97df..df1043b27d 100644
--- a/meta/recipes-core/systemd/systemd/0005-src-basic-missing.h-check-for-missing-strndupa.patch
+++ b/meta/recipes-core/systemd/systemd/0005-src-basic-missing.h-check-for-missing-strndupa.patch
@@ -43,8 +43,6 @@ Signed-off-by: Andrej Valek <andrej.valek@siemens.com>
  src/udev/udev-rules.c                      |  1 +
  29 files changed, 40 insertions(+)
 
-diff --git a/meson.build b/meson.build
-index 79195c9..80d9564 100644
 --- a/meson.build
 +++ b/meson.build
 @@ -572,6 +572,7 @@ foreach ident : [
@@ -55,8 +53,6 @@ index 79195c9..80d9564 100644
  ]
  
          have = cc.has_function(ident[0], prefix : ident[1], args : '-D_GNU_SOURCE')
-diff --git a/src/backlight/backlight.c b/src/backlight/backlight.c
-index dfd6805..c2b2ace 100644
 --- a/src/backlight/backlight.c
 +++ b/src/backlight/backlight.c
 @@ -17,6 +17,7 @@
@@ -67,8 +63,6 @@ index dfd6805..c2b2ace 100644
  
  static int find_pci_or_platform_parent(sd_device *device, sd_device **ret) {
          const char *subsystem, *sysname, *value;
-diff --git a/src/basic/env-util.c b/src/basic/env-util.c
-index fd449dc..e2b0722 100644
 --- a/src/basic/env-util.c
 +++ b/src/basic/env-util.c
 @@ -16,6 +16,7 @@
@@ -79,8 +73,6 @@ index fd449dc..e2b0722 100644
  
  #define VALID_CHARS_ENV_NAME                    \
          DIGITS LETTERS                          \
-diff --git a/src/basic/missing_stdlib.h b/src/basic/missing_stdlib.h
-index 188a8d4..1e16ec2 100644
 --- a/src/basic/missing_stdlib.h
 +++ b/src/basic/missing_stdlib.h
 @@ -11,3 +11,15 @@
@@ -99,8 +91,6 @@ index 188a8d4..1e16ec2 100644
 +    (char *)memcpy(__new, __old, __len); \
 +  })
 +#endif
-diff --git a/src/basic/mkdir.c b/src/basic/mkdir.c
-index 6b82eab..51c6b78 100644
 --- a/src/basic/mkdir.c
 +++ b/src/basic/mkdir.c
 @@ -14,6 +14,7 @@
@@ -111,8 +101,6 @@ index 6b82eab..51c6b78 100644
  
  int mkdir_safe_internal(const char *path, mode_t mode, uid_t uid, gid_t gid, MkdirFlags flags, mkdir_func_t _mkdir) {
          struct stat st;
-diff --git a/src/basic/parse-util.c b/src/basic/parse-util.c
-index 87724af..d9c53bc 100644
 --- a/src/basic/parse-util.c
 +++ b/src/basic/parse-util.c
 @@ -19,6 +19,7 @@
@@ -123,8 +111,6 @@ index 87724af..d9c53bc 100644
  
  int parse_boolean(const char *v) {
          if (!v)
-diff --git a/src/basic/proc-cmdline.c b/src/basic/proc-cmdline.c
-index 1670001..b51feaa 100644
 --- a/src/basic/proc-cmdline.c
 +++ b/src/basic/proc-cmdline.c
 @@ -15,6 +15,7 @@
@@ -135,8 +121,6 @@ index 1670001..b51feaa 100644
  
  int proc_cmdline(char **ret) {
          const char *e;
-diff --git a/src/basic/procfs-util.c b/src/basic/procfs-util.c
-index 7aaf95b..42ce53d 100644
 --- a/src/basic/procfs-util.c
 +++ b/src/basic/procfs-util.c
 @@ -11,6 +11,7 @@
@@ -147,8 +131,6 @@ index 7aaf95b..42ce53d 100644
  
  int procfs_tasks_get_limit(uint64_t *ret) {
          _cleanup_free_ char *value = NULL;
-diff --git a/src/basic/time-util.c b/src/basic/time-util.c
-index daf952b..374b97f 100644
 --- a/src/basic/time-util.c
 +++ b/src/basic/time-util.c
 @@ -28,6 +28,7 @@
@@ -159,8 +141,6 @@ index daf952b..374b97f 100644
  
  static clockid_t map_clock_id(clockid_t c) {
  
-diff --git a/src/core/dbus-cgroup.c b/src/core/dbus-cgroup.c
-index 4615aea..bc1364f 100644
 --- a/src/core/dbus-cgroup.c
 +++ b/src/core/dbus-cgroup.c
 @@ -15,6 +15,7 @@
@@ -171,8 +151,6 @@ index 4615aea..bc1364f 100644
  
  static BUS_DEFINE_PROPERTY_GET_ENUM(property_get_cgroup_device_policy, cgroup_device_policy, CGroupDevicePolicy);
  
-diff --git a/src/core/dbus-util.c b/src/core/dbus-util.c
-index f4fbb72..0a1e3b5 100644
 --- a/src/core/dbus-util.c
 +++ b/src/core/dbus-util.c
 @@ -7,6 +7,7 @@
@@ -183,8 +161,6 @@ index f4fbb72..0a1e3b5 100644
  
  int bus_property_get_triggered_unit(
                  sd_bus *bus,
-diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c
-index a91cfeb..a459610 100644
 --- a/src/core/kmod-setup.c
 +++ b/src/core/kmod-setup.c
 @@ -11,6 +11,7 @@
@@ -195,8 +171,6 @@ index a91cfeb..a459610 100644
  
  #if HAVE_KMOD
  #include <libkmod.h>
-diff --git a/src/core/service.c b/src/core/service.c
-index 0289990..0e725b5 100644
 --- a/src/core/service.c
 +++ b/src/core/service.c
 @@ -42,6 +42,7 @@
@@ -207,8 +181,6 @@ index 0289990..0e725b5 100644
  
  static const UnitActiveState state_translation_table[_SERVICE_STATE_MAX] = {
          [SERVICE_DEAD] = UNIT_INACTIVE,
-diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c
-index 0048909..0e85eb7 100644
 --- a/src/journal/journalctl.c
 +++ b/src/journal/journalctl.c
 @@ -67,6 +67,7 @@
@@ -219,8 +191,6 @@ index 0048909..0e85eb7 100644
  
  #define DEFAULT_FSS_INTERVAL_USEC (15*USEC_PER_MINUTE)
  
-diff --git a/src/libsystemd/sd-bus/bus-message.c b/src/libsystemd/sd-bus/bus-message.c
-index 427d42f..b050568 100644
 --- a/src/libsystemd/sd-bus/bus-message.c
 +++ b/src/libsystemd/sd-bus/bus-message.c
 @@ -21,6 +21,7 @@
@@ -231,8 +201,6 @@ index 427d42f..b050568 100644
  
  static int message_append_basic(sd_bus_message *m, char type, const void *p, const void **stored);
  
-diff --git a/src/libsystemd/sd-bus/bus-objects.c b/src/libsystemd/sd-bus/bus-objects.c
-index d9fc256..e9c6932 100644
 --- a/src/libsystemd/sd-bus/bus-objects.c
 +++ b/src/libsystemd/sd-bus/bus-objects.c
 @@ -13,6 +13,7 @@
@@ -243,8 +211,6 @@ index d9fc256..e9c6932 100644
  
  static int node_vtable_get_userdata(
                  sd_bus *bus,
-diff --git a/src/libsystemd/sd-bus/test-bus-benchmark.c b/src/libsystemd/sd-bus/test-bus-benchmark.c
-index 8de0a85..4fd0a2e 100644
 --- a/src/libsystemd/sd-bus/test-bus-benchmark.c
 +++ b/src/libsystemd/sd-bus/test-bus-benchmark.c
 @@ -14,6 +14,7 @@
@@ -255,8 +221,6 @@ index 8de0a85..4fd0a2e 100644
  
  #define MAX_SIZE (2*1024*1024)
  
-diff --git a/src/locale/keymap-util.c b/src/locale/keymap-util.c
-index b8bd181..fe0cae0 100644
 --- a/src/locale/keymap-util.c
 +++ b/src/locale/keymap-util.c
 @@ -23,6 +23,7 @@
@@ -267,8 +231,6 @@ index b8bd181..fe0cae0 100644
  
  static bool startswith_comma(const char *s, const char *prefix) {
          s = startswith(s, prefix);
-diff --git a/src/nspawn/nspawn-settings.c b/src/nspawn/nspawn-settings.c
-index 476cb07..91e28de 100644
 --- a/src/nspawn/nspawn-settings.c
 +++ b/src/nspawn/nspawn-settings.c
 @@ -16,6 +16,7 @@
@@ -279,8 +241,6 @@ index 476cb07..91e28de 100644
  
  Settings *settings_new(void) {
          Settings *s;
-diff --git a/src/shared/dns-domain.c b/src/shared/dns-domain.c
-index 4b31cb3..989ebf3 100644
 --- a/src/shared/dns-domain.c
 +++ b/src/shared/dns-domain.c
 @@ -24,6 +24,7 @@
@@ -291,8 +251,6 @@ index 4b31cb3..989ebf3 100644
  
  int dns_label_unescape(const char **name, char *dest, size_t sz, DNSLabelFlags flags) {
          const char *n;
-diff --git a/src/shared/journal-importer.c b/src/shared/journal-importer.c
-index 8638cd3..d03774a 100644
 --- a/src/shared/journal-importer.c
 +++ b/src/shared/journal-importer.c
 @@ -13,6 +13,7 @@
@@ -303,8 +261,6 @@ index 8638cd3..d03774a 100644
  
  enum {
          IMPORTER_STATE_LINE = 0,    /* waiting to read, or reading line */
-diff --git a/src/shared/logs-show.c b/src/shared/logs-show.c
-index 5fb736f..19cb165 100644
 --- a/src/shared/logs-show.c
 +++ b/src/shared/logs-show.c
 @@ -38,6 +38,7 @@
@@ -315,8 +271,6 @@ index 5fb736f..19cb165 100644
  
  /* up to three lines (each up to 100 characters) or 300 characters, whichever is less */
  #define PRINT_LINE_THRESHOLD 3
-diff --git a/src/shared/pager.c b/src/shared/pager.c
-index 2abb0f6..a00c95f 100644
 --- a/src/shared/pager.c
 +++ b/src/shared/pager.c
 @@ -25,6 +25,7 @@
@@ -327,8 +281,6 @@ index 2abb0f6..a00c95f 100644
  
  static pid_t pager_pid = 0;
  
-diff --git a/src/shared/path-lookup.c b/src/shared/path-lookup.c
-index 442fde7..0eb1188 100644
 --- a/src/shared/path-lookup.c
 +++ b/src/shared/path-lookup.c
 @@ -20,6 +20,7 @@
@@ -339,8 +291,6 @@ index 442fde7..0eb1188 100644
  
  int xdg_user_runtime_dir(char **ret, const char *suffix) {
          const char *e;
-diff --git a/src/shared/uid-range.c b/src/shared/uid-range.c
-index 7cb7d8a..8b12b91 100644
 --- a/src/shared/uid-range.c
 +++ b/src/shared/uid-range.c
 @@ -9,6 +9,7 @@
@@ -351,8 +301,6 @@ index 7cb7d8a..8b12b91 100644
  
  static bool uid_range_intersect(UidRange *range, uid_t start, uid_t nr) {
          assert(range);
-diff --git a/src/socket-proxy/socket-proxyd.c b/src/socket-proxy/socket-proxyd.c
-index abbbc9f..6179b58 100644
 --- a/src/socket-proxy/socket-proxyd.c
 +++ b/src/socket-proxy/socket-proxyd.c
 @@ -28,6 +28,7 @@
@@ -363,8 +311,6 @@ index abbbc9f..6179b58 100644
  
  #define BUFFER_SIZE (256 * 1024)
  
-diff --git a/src/test/test-hexdecoct.c b/src/test/test-hexdecoct.c
-index 5221742..a05e778 100644
 --- a/src/test/test-hexdecoct.c
 +++ b/src/test/test-hexdecoct.c
 @@ -6,6 +6,7 @@
@@ -375,8 +321,6 @@ index 5221742..a05e778 100644
  
  static void test_hexchar(void) {
          assert_se(hexchar(0xa) == 'a');
-diff --git a/src/udev/udev-builtin-path_id.c b/src/udev/udev-builtin-path_id.c
-index 7ce1c56..cc19b8e 100644
 --- a/src/udev/udev-builtin-path_id.c
 +++ b/src/udev/udev-builtin-path_id.c
 @@ -23,6 +23,7 @@
@@ -387,8 +331,6 @@ index 7ce1c56..cc19b8e 100644
  
  _printf_(2,3)
  static void path_prepend(char **path, const char *fmt, ...) {
-diff --git a/src/udev/udev-rules.c b/src/udev/udev-rules.c
-index ee87d7c..9aced10 100644
 --- a/src/udev/udev-rules.c
 +++ b/src/udev/udev-rules.c
 @@ -40,6 +40,7 @@
@@ -399,6 +341,13 @@ index ee87d7c..9aced10 100644
  
  #define PREALLOC_TOKEN          2048
  #define RULES_DIRS (const char* const*) CONF_PATHS_STRV("udev/rules.d")
--- 
-2.11.0
-
+--- a/src/login/pam_systemd.c
++++ b/src/login/pam_systemd.c
+@@ -27,6 +27,7 @@
+ #include "hostname-util.h"
+ #include "login-util.h"
+ #include "macro.h"
++#include "missing.h"
+ #include "parse-util.h"
+ #include "path-util.h"
+ #include "process-util.h"
-- 
2.21.0



^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH v3 2/4] musl-obstack: Add recipe
  2019-05-22 23:40 [PATCH V2 1/4] pam_systemd: Include missing.h for secure_getenv Khem Raj
@ 2019-05-22 23:40 ` Khem Raj
  2019-05-22 23:40 ` [PATCH v2 3/4] elfutils: Fix eu-* utils builds for musl Khem Raj
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 7+ messages in thread
From: Khem Raj @ 2019-05-22 23:40 UTC (permalink / raw)
  To: openembedded-core

obstacks from GNUlib is used in some OE-Core packages e.g. elfutils
and other packages outside OE-Core, this recipe helps provide this
functionality standalone on musl systems, and helps in getting full
versions of dependent packages

Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
v3: Rebased

 meta/recipes-core/musl/musl-obstack.bb | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)
 create mode 100644 meta/recipes-core/musl/musl-obstack.bb

diff --git a/meta/recipes-core/musl/musl-obstack.bb b/meta/recipes-core/musl/musl-obstack.bb
new file mode 100644
index 0000000000..3003935fe5
--- /dev/null
+++ b/meta/recipes-core/musl/musl-obstack.bb
@@ -0,0 +1,22 @@
+# Copyright (C) 2019 Khem Raj <raj.khem@gmail.com>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+SUMMARY = "A standalone library to implement GNU libc's obstack"
+DESCRIPTION = "copy + paste of the obstack functions and macros found in GNU gcc libiberty library for use with musl libc"
+HOMEPAGE = "https://github.com/pullmoll/musl-obstack"
+LICENSE = "GPL-2.0+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=3d23e4eef8243efcaab6f0a438078932"
+SECTION = "libs"
+
+PV = "1.1"
+SRCREV = "d2ad66b0df44a4b784956f7f7f2717131ddc05f4"
+SRC_URI = "git://github.com/pullmoll/musl-obstack"
+
+UPSTREAM_CHECK_COMMITS = "1"
+
+inherit autotools pkgconfig
+
+S = "${WORKDIR}/git"
+
+COMPATIBLE_HOST = ".*-musl.*"
+
-- 
2.21.0



^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH v2 3/4] elfutils: Fix eu-* utils builds for musl
  2019-05-22 23:40 [PATCH V2 1/4] pam_systemd: Include missing.h for secure_getenv Khem Raj
  2019-05-22 23:40 ` [PATCH v3 2/4] musl-obstack: Add recipe Khem Raj
@ 2019-05-22 23:40 ` Khem Raj
  2019-05-30  2:20   ` ChenQi
  2019-05-22 23:40 ` [PATCH v2 4/4] maintainers: Account for musl-obstack and libssp-nonshared Khem Raj
  2019-05-27 16:45 ` [PATCH V2 1/4] pam_systemd: Include missing.h for secure_getenv Khem Raj
  3 siblings, 1 reply; 7+ messages in thread
From: Khem Raj @ 2019-05-22 23:40 UTC (permalink / raw)
  To: openembedded-core

Re-organize the musl patches in three different areas namely
libs, utils and tests, this will help maintain them in future
version bumps

Add obstack dependency on musl targets which is needed for eu-*

PN and PN-binutils is not empty anymore on musl

Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
---
v2: Make FNM_EXTMATCH 0

 .../elfutils/elfutils_0.176.bb                |  15 +-
 ...-err-variable-and-function-conflicts.patch |  91 --------
 ...ternatives-for-glibc-assumptions-hel.patch | 196 ------------------
 .../elfutils/files/musl-libs.patch            | 111 ++++++++++
 .../elfutils/files/musl-obstack-fts.patch     | 105 ++++++++++
 .../files/{musl.patch => musl-tests.patch}    |   0
 .../elfutils/files/musl-utils.patch           | 136 ++++++++++++
 7 files changed, 359 insertions(+), 295 deletions(-)
 delete mode 100644 meta/recipes-devtools/elfutils/files/0001-fix-err-variable-and-function-conflicts.patch
 delete mode 100644 meta/recipes-devtools/elfutils/files/0008-build-Provide-alternatives-for-glibc-assumptions-hel.patch
 create mode 100644 meta/recipes-devtools/elfutils/files/musl-libs.patch
 create mode 100644 meta/recipes-devtools/elfutils/files/musl-obstack-fts.patch
 rename meta/recipes-devtools/elfutils/files/{musl.patch => musl-tests.patch} (100%)
 create mode 100644 meta/recipes-devtools/elfutils/files/musl-utils.patch

diff --git a/meta/recipes-devtools/elfutils/elfutils_0.176.bb b/meta/recipes-devtools/elfutils/elfutils_0.176.bb
index 85ff5f38d2..397723166c 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"
 LICENSE = "GPLv2 & LGPLv3+ & GPLv3+"
 LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
 DEPENDS = "libtool bzip2 zlib virtual/libintl"
-DEPENDS_append_libc-musl = " argp-standalone fts "
+DEPENDS_append_libc-musl = " argp-standalone fts musl-obstack "
 # The Debian patches below are from:
 # http://ftp.de.debian.org/debian/pool/main/e/elfutils/elfutils_0.175-1.debian.tar.xz
 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 \
            file://0001-skip-the-test-when-gcc-not-deployed.patch \
            file://run-ptest \
            file://ptest.patch \
-           file://musl.patch \
            "
-SRC_URI_append_libc-musl = " file://0008-build-Provide-alternatives-for-glibc-assumptions-hel.patch \
-                             file://0001-fix-err-variable-and-function-conflicts.patch \
-"
-
+SRC_URI_append_libc-musl = " \
+           file://musl-obstack-fts.patch \
+           file://musl-libs.patch \
+           file://musl-utils.patch \
+           file://musl-tests.patch \
+           "
 SRC_URI[md5sum] = "077e4f49320cad82bf17a997068b1db9"
 SRC_URI[sha256sum] = "eb5747c371b0af0f71e86215a5ebb88728533c3a104a43d4231963f308cd1023"
 
@@ -75,8 +76,6 @@ do_install_ptest() {
 EXTRA_OEMAKE_class-native = ""
 EXTRA_OEMAKE_class-nativesdk = ""
 
-ALLOW_EMPTY_${PN}_libc-musl = "1"
-
 BBCLASSEXTEND = "native nativesdk"
 
 # 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 @@
-From 2c50fe7068bd6911958c6d851aef88179e73bb21 Mon Sep 17 00:00:00 2001
-From: Mingli Yu <Mingli.Yu@windriver.com>
-Date: Tue, 16 Apr 2019 15:30:38 +0800
-Subject: [PATCH] fix err variable and function conflicts
-
-There comes below build failure with musl when
-ptest enabled.
-| In file included from ../../elfutils-0.176/tests/dwfl-proc-attach.c:33:
-| ../../elfutils-0.176/lib/system.h:63:35: error: called object 'err' is not a function or function pointer
-|  #define error(status, errno, ...) err(status, __VA_ARGS__)
-|                                    ^~~
-| ../../elfutils-0.176/tests/dwfl-proc-attach.c:92:5: note: in expansion of macro 'error'
-|      error (-1, 0, "dwfl_linux_proc_attach pid %d: %s", pid,
-|      ^~~~~
-| ../../elfutils-0.176/tests/dwfl-proc-attach.c:79:7: note: declared here
-|    int err;
-|        ^~~
-
-It is because there is no error.h in musl and
-the patch 0008-build-Provide-alternatives-for-glibc-assumptions-hel.patch
-has updated to use err.h to replace error.h
-and also added macro definiton as below when
-use musl.
- #define error(status, errno, ...) err(status, __VA_ARGS__)
-
-And in err.h, there is below logic:
-_Noreturn void err(int, const char *, ...);
-
-But when ptest enabled, there comes below error
-as there is both variable and function defined
-to be err in tests/dwfl-proc-attach.c.
-So change the err variable's name to workaround
-the build failure with musl.
-
-Upstream-Status: Inappropriate [workaround in musl]
-
-Signed-off-by: Mingli Yu <Mingli.Yu@windriver.com>
----
- tests/dwfl-proc-attach.c | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
-Index: elfutils-0.176/tests/dwfl-proc-attach.c
-===================================================================
---- elfutils-0.176.orig/tests/dwfl-proc-attach.c
-+++ elfutils-0.176/tests/dwfl-proc-attach.c
-@@ -76,10 +76,10 @@ main (int argc __attribute__ ((unused)),
-       char **argv __attribute__ ((unused)))
- {
-   /* Create two extra threads to iterate through.  */
--  int err;
--  if ((err = pthread_create (&thread1, NULL, sleeper, NULL)) != 0)
-+  int err1;
-+  if ((err1 = pthread_create (&thread1, NULL, sleeper, NULL)) != 0)
-     error (-1, err, "Couldn't create thread1");
--  if ((err = pthread_create (&thread2, NULL, sleeper, NULL)) != 0)
-+  if ((err1 = pthread_create (&thread2, NULL, sleeper, NULL)) != 0)
-     error (-1, err, "Couldn't create thread2");
- 
-   Dwfl *dwfl = dwfl_begin (&proc_callbacks);
-Index: elfutils-0.176/tests/backtrace.c
-===================================================================
---- elfutils-0.176.orig/tests/backtrace.c
-+++ elfutils-0.176/tests/backtrace.c
-@@ -219,23 +219,23 @@ dump (Dwfl *dwfl)
- {
-   ptrdiff_t ptrdiff = dwfl_getmodules (dwfl, dump_modules, NULL, 0);
-   assert (ptrdiff == 0);
--  bool err = false;
-+  bool err1 = false;
-   switch (dwfl_getthreads (dwfl, thread_callback, NULL))
-     {
-     case 0:
-       break;
-     case DWARF_CB_ABORT:
--      err = true;
-+      err1 = true;
-       break;
-     case -1:
-       error (0, 0, "dwfl_getthreads: %s", dwfl_errmsg (-1));
--      err = true;
-+      err1 = true;
-       break;
-     default:
-       abort ();
-     }
-   callback_verify (0, 0, 0, NULL, dwfl);
--  if (err)
-+  if (err1)
-     exit (EXIT_FAILURE);
- }
- 
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 @@
-From 990d377a92f4bab04bf6820fc81b3dcb6cf5e31d Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-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 <raj.khem@gmail.com>
-
-Rebase to 0.175
-
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
-
----
- 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 <errno.h>
- #include <stdlib.h>
- #include <string.h>
--#include <sys/cdefs.h>
- 
- #include <system.h>
- 
-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 <errno.h>
--#include <error.h>
-+#include <err.h>
- #include <stddef.h>
- #include <stdint.h>
- #include <sys/param.h>
-@@ -51,6 +51,8 @@
- #else
- # error "Unknown byte order"
- #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 <inttypes.h>
- #include <fcntl.h>
- #include <unistd.h>
-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 <fcntl.h>
- #include <string.h>
- #include <unistd.h>
-+#include "system.h"
- #include "../libdw/libdwP.h"	/* DWARF_E_* values are here.  */
- #include "../libelf/libelfP.h"
- #include "system.h"
-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 <inttypes.h>
- #include <errno.h>
- #include <stdio.h>
-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 <features.h>
- 
--__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 <fcntl.h>
- #include <stdint.h>
- #include <sys/types.h>
- 
-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 <ar.h>
- #include <gelf.h>
-+#include <libelf.h>
- 
- #include <errno.h>
- #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 @@
+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]
+
+--- /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_ */
+--- 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>
+ 
+--- 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>
+ 
+--- 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):
+--- 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.  */
+--- 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.  */
+ 
+@@ -3937,6 +3939,7 @@ 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/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 @@
+Look for libfts and libobstack during configure, these
+libraries are external to libc when using musl, whereas
+on glibc these libraries are provided in libc itself.
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Upstream-Status: Inappropriate [workaround for musl]
+--- a/configure.ac
++++ b/configure.ac
+@@ -494,6 +494,60 @@ else
+ fi
+ AC_SUBST([argp_LDADD])
+ 
++dnl Check if we have fts available from our libc
++AC_LINK_IFELSE(
++	[AC_LANG_PROGRAM(
++		[#if !defined(__x86_64__)
++		#undef  _FILE_OFFSET_BITS
++		#define _FILE_OFFSET_BITS 32
++		#endif
++		#include <fts.h>],
++		[FTS* fts = 0; return fts_close(fts); return 0;]
++		)],
++	[libc_has_fts="true"],
++	[libc_has_fts="false"]
++)
++
++dnl If our libc doesn't provide fts, then test for libfts
++if test "$libc_has_fts" = "false" ; then
++	AC_MSG_WARN("libc does not have fts")
++	AC_CHECK_LIB([fts], [fts_close], [have_fts="true"], [have_fts="false"])
++
++	if test "$have_fts" = "false"; then
++		AC_MSG_ERROR("no libfts found")
++	else
++		fts_LDADD="-lfts"
++	fi
++else
++	fts_LDADD=""
++fi
++AC_SUBST([fts_LDADD])
++
++dnl Check if we have obstack available from our libc
++AC_LINK_IFELSE(
++	[AC_LANG_PROGRAM(
++		[#include <obstack.h>],
++		[_obstack_begin(0, 0, 0, NULL, NULL); return 0;]
++		)],
++	[libc_has_obstack="true"],
++	[libc_has_obstack="false"]
++)
++
++dnl If our libc doesn't provide obstack, then test for libobstack
++if test "$libc_has_obstack" = "false" ; then
++	AC_MSG_WARN("libc does not have obstack")
++	AC_CHECK_LIB([obstack], [_obstack_begin], [have_obstack="true"], [have_obstack="false"])
++
++	if test "$have_obstack" = "false"; then
++		AC_MSG_ERROR("no libobstack found")
++	else
++		obstack_LDADD="-lobstack"
++	fi
++else
++	obstack_LDADD=""
++fi
++AC_SUBST([obstack_LDADD])
++
+ dnl The directories with content.
+ 
+ dnl Documentation.
+--- a/libdw/Makefile.am
++++ b/libdw/Makefile.am
+@@ -108,7 +108,7 @@ am_libdw_pic_a_OBJECTS = $(libdw_a_SOURC
+ 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)
++libdw_so_LDLIBS = $(libdw_so_DEPS) -ldl -lz $(argp_LDADD) $(fts_LDADD) $(zip_LIBS)
+ 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
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -68,8 +68,8 @@ ar_no_Wstack_usage = yes
+ unstrip_no_Wstack_usage = yes
+ 
+ readelf_LDADD = $(libdw) $(libebl) $(libelf) $(libeu) $(argp_LDADD) -ldl
+-nm_LDADD = $(libdw) $(libebl) $(libelf) $(libeu) $(argp_LDADD) -ldl \
+-	   $(demanglelib)
++nm_LDADD = $(libdw) $(libebl) $(libelf) $(libeu) $(argp_LDADD) \
++	   $(obstack_LDADD) -ldl $(demanglelib)
+ size_LDADD = $(libelf) $(libeu) $(argp_LDADD)
+ strip_LDADD = $(libebl) $(libelf) $(libdw) $(libeu) $(argp_LDADD) -ldl
+ elflint_LDADD  = $(libebl) $(libelf) $(libeu) $(argp_LDADD) -ldl
+@@ -77,9 +77,9 @@ findtextrel_LDADD = $(libdw) $(libelf) $
+ addr2line_LDADD = $(libdw) $(libelf) $(libeu) $(argp_LDADD) $(demanglelib)
+ elfcmp_LDADD = $(libebl) $(libelf) $(libeu) $(argp_LDADD) -ldl
+ objdump_LDADD  = $(libasm) $(libebl) $(libelf) $(libeu) $(argp_LDADD) -ldl
+-ranlib_LDADD = libar.a $(libelf) $(libeu) $(argp_LDADD)
++ranlib_LDADD = libar.a $(libelf) $(libeu) $(argp_LDADD) $(obstack_LDADD)
+ strings_LDADD = $(libelf) $(libeu) $(argp_LDADD)
+-ar_LDADD = libar.a $(libelf) $(libeu) $(argp_LDADD)
++ar_LDADD = libar.a $(libelf) $(libeu) $(argp_LDADD) $(obstack_LDADD)
+ unstrip_LDADD = $(libebl) $(libelf) $(libdw) $(libeu) $(argp_LDADD) -ldl
+ stack_LDADD = $(libebl) $(libelf) $(libdw) $(libeu) $(argp_LDADD) -ldl $(demanglelib)
+ 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
similarity index 100%
rename from meta/recipes-devtools/elfutils/files/musl.patch
rename to 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 @@
+Provide missing defines which otherwise are available on glibc system headers
+
+Alter the error API to match posix version
+use qsort instead of qsort_r which is glibc specific API
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Upstream-Status: Inappropriate [workaround for musl]
+--- a/src/arlib.h
++++ b/src/arlib.h
+@@ -29,6 +29,12 @@
+ #include <stdint.h>
+ #include <sys/types.h>
+ 
++#if !defined(ALLPERMS)
++# define ALLPERMS (S_ISUID|S_ISGID|S_ISVTX|S_IRWXU|S_IRWXG|S_IRWXO) /* 07777 */
++#endif
++#if !defined(DEFFILEMODE)
++# define DEFFILEMODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)/* 0666*/
++#endif
+ 
+ /* State of -D/-U flags.  */
+ extern bool arlib_deterministic_output;
+--- a/src/elfcompress.c
++++ b/src/elfcompress.c
+@@ -37,6 +37,13 @@
+ #include "libeu.h"
+ #include "printversion.h"
+ 
++#if !defined(ALLPERMS)
++# define ALLPERMS (S_ISUID|S_ISGID|S_ISVTX|S_IRWXU|S_IRWXG|S_IRWXO) /* 07777 */
++#endif
++#if !defined(FNM_EXTMATCH)
++# define FNM_EXTMATCH (0)
++#endif
++
+ /* Name and version of program.  */
+ ARGP_PROGRAM_VERSION_HOOK_DEF = print_version;
+ 
+--- a/src/readelf.c
++++ b/src/readelf.c
+@@ -4792,10 +4792,11 @@ listptr_base (struct listptr *p)
+   return cudie_base (&cu);
+ }
+ 
++static const char *listptr_name;
++
+ static int
+-compare_listptr (const void *a, const void *b, void *arg)
++compare_listptr (const void *a, const void *b)
+ {
+-  const char *name = arg;
+   struct listptr *p1 = (void *) a;
+   struct listptr *p2 = (void *) b;
+ 
+@@ -4811,21 +4812,21 @@ compare_listptr (const void *a, const vo
+ 	  p1->warned = p2->warned = true;
+ 	  error (0, 0,
+ 		 gettext ("%s %#" PRIx64 " used with different address sizes"),
+-		 name, (uint64_t) p1->offset);
++		 listptr_name, (uint64_t) p1->offset);
+ 	}
+       if (p1->dwarf64 != p2->dwarf64)
+ 	{
+ 	  p1->warned = p2->warned = true;
+ 	  error (0, 0,
+ 		 gettext ("%s %#" PRIx64 " used with different offset sizes"),
+-		 name, (uint64_t) p1->offset);
++		 listptr_name, (uint64_t) p1->offset);
+ 	}
+       if (listptr_base (p1) != listptr_base (p2))
+ 	{
+ 	  p1->warned = p2->warned = true;
+ 	  error (0, 0,
+ 		 gettext ("%s %#" PRIx64 " used with different base addresses"),
+-		 name, (uint64_t) p1->offset);
++		 listptr_name, (uint64_t) p1->offset);
+ 	}
+       if (p1->attr != p2 ->attr)
+ 	{
+@@ -4833,7 +4834,7 @@ compare_listptr (const void *a, const vo
+ 	  error (0, 0,
+ 		 gettext ("%s %#" PRIx64
+ 			  " used with different attribute %s and %s"),
+-		 name, (uint64_t) p1->offset, dwarf_attr_name (p2->attr),
++		 listptr_name, (uint64_t) p1->offset, dwarf_attr_name (p2->attr),
+ 		 dwarf_attr_name (p2->attr));
+ 	}
+     }
+@@ -4905,8 +4906,11 @@ static void
+ sort_listptr (struct listptr_table *table, const char *name)
+ {
+   if (table->n > 0)
+-    qsort_r (table->table, table->n, sizeof table->table[0],
+-	     &compare_listptr, (void *) name);
++    {
++      listptr_name = name;
++      qsort (table->table, table->n, sizeof table->table[0],
++	    &compare_listptr);
++    }
+ }
+ 
+ static bool
+--- a/src/strip.c
++++ b/src/strip.c
+@@ -46,6 +46,13 @@
+ #include <system.h>
+ #include <printversion.h>
+ 
++#if !defined(ACCESSPERMS)
++# define ACCESSPERMS (S_IRWXU|S_IRWXG|S_IRWXO) /* 0777 */
++#endif
++#if !defined(FNM_EXTMATCH)
++# define FNM_EXTMATCH (0)
++#endif
++
+ typedef uint8_t GElf_Byte;
+ 
+ /* Name and version of program.  */
+--- a/src/unstrip.c
++++ b/src/unstrip.c
+@@ -56,6 +56,15 @@
+ # define _(str) gettext (str)
+ #endif
+ 
++#ifndef strndupa
++#define strndupa(s, n) \
++       ({const char *__in = (s); \
++         size_t __len = strnlen (__in, (n)) + 1; \
++         char *__out = (char *) alloca (__len); \
++         __out[__len-1] = '\0'; \
++         (char *) memcpy (__out, __in, __len-1);})
++#endif
++
+ /* Name and version of program.  */
+ ARGP_PROGRAM_VERSION_HOOK_DEF = print_version;
+ 
-- 
2.21.0



^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH v2 4/4] maintainers: Account for musl-obstack and libssp-nonshared
  2019-05-22 23:40 [PATCH V2 1/4] pam_systemd: Include missing.h for secure_getenv Khem Raj
  2019-05-22 23:40 ` [PATCH v3 2/4] musl-obstack: Add recipe Khem Raj
  2019-05-22 23:40 ` [PATCH v2 3/4] elfutils: Fix eu-* utils builds for musl Khem Raj
@ 2019-05-22 23:40 ` Khem Raj
  2019-05-27 16:45 ` [PATCH V2 1/4] pam_systemd: Include missing.h for secure_getenv Khem Raj
  3 siblings, 0 replies; 7+ messages in thread
From: Khem Raj @ 2019-05-22 23:40 UTC (permalink / raw)
  To: openembedded-core

Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
---
v2: Rebased

 meta/conf/distro/include/maintainers.inc | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/meta/conf/distro/include/maintainers.inc b/meta/conf/distro/include/maintainers.inc
index 67a51cdecc..2c10b104de 100644
--- a/meta/conf/distro/include/maintainers.inc
+++ b/meta/conf/distro/include/maintainers.inc
@@ -382,6 +382,7 @@ RECIPE_MAINTAINER_pn-libsm = "Armin Kuster <akuster808@gmail.com>"
 RECIPE_MAINTAINER_pn-libsndfile1 = "Tanu Kaskinen <tanuk@iki.fi>"
 RECIPE_MAINTAINER_pn-libsolv = "Anuj Mittal <anuj.mittal@intel.com>"
 RECIPE_MAINTAINER_pn-libsoup-2.4 = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER_pn-libssp-nonshared = "Khem Raj <raj.khem@gmail.com>"
 RECIPE_MAINTAINER_pn-libtasn1 = "Anuj Mittal <anuj.mittal@intel.com>"
 RECIPE_MAINTAINER_pn-libtest-needs-perl = "Tim Orling <timothy.t.orling@linux.intel.com>"
 RECIPE_MAINTAINER_pn-libtheora = "Alexander Kanavin <alex.kanavin@gmail.com>"
@@ -512,6 +513,7 @@ RECIPE_MAINTAINER_pn-mtd-utils = "Denys Dmytriyenko <denys@ti.com>"
 RECIPE_MAINTAINER_pn-mtdev = "Anuj Mittal <anuj.mittal@intel.com>"
 RECIPE_MAINTAINER_pn-mtools = "Anuj Mittal <anuj.mittal@intel.com>"
 RECIPE_MAINTAINER_pn-musl = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER_pn-musl-obstack = "Khem Raj <raj.khem@gmail.com>"
 RECIPE_MAINTAINER_pn-musl-utils = "Khem Raj <raj.khem@gmail.com>"
 RECIPE_MAINTAINER_pn-mx-1.0 = "Anuj Mittal <anuj.mittal@intel.com>"
 RECIPE_MAINTAINER_pn-nasm = "Richard Purdie <richard.purdie@linuxfoundation.org>"
-- 
2.21.0



^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH V2 1/4] pam_systemd: Include missing.h for secure_getenv
  2019-05-22 23:40 [PATCH V2 1/4] pam_systemd: Include missing.h for secure_getenv Khem Raj
                   ` (2 preceding siblings ...)
  2019-05-22 23:40 ` [PATCH v2 4/4] maintainers: Account for musl-obstack and libssp-nonshared Khem Raj
@ 2019-05-27 16:45 ` Khem Raj
  2019-05-29 21:08   ` Richard Purdie
  3 siblings, 1 reply; 7+ messages in thread
From: Khem Raj @ 2019-05-27 16:45 UTC (permalink / raw)
  To: Patches and discussions about the oe-core layer

ping^1 for the whole series ..

On Wed, May 22, 2019 at 4:40 PM Khem Raj <raj.khem@gmail.com> wrote:
>
> 'secure_getenv' api is not uniformly implemented across all C libraries
> therefore its good to include missing.h so it can use the alternative
> implementation where its not awvailable
>
> Fixes
> ../git/src/login/pam_systemd.c:344:13: error: implicit declaration of function 'secure_getenv' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
>         v = secure_getenv(key);
>
> Signed-off-by: Khem Raj <raj.khem@gmail.com>
> ---
> v2: Rebased
>
>  ...missing.h-check-for-missing-strndupa.patch | 71 +++----------------
>  1 file changed, 10 insertions(+), 61 deletions(-)
>
> diff --git a/meta/recipes-core/systemd/systemd/0005-src-basic-missing.h-check-for-missing-strndupa.patch b/meta/recipes-core/systemd/systemd/0005-src-basic-missing.h-check-for-missing-strndupa.patch
> index a2e25a97df..df1043b27d 100644
> --- a/meta/recipes-core/systemd/systemd/0005-src-basic-missing.h-check-for-missing-strndupa.patch
> +++ b/meta/recipes-core/systemd/systemd/0005-src-basic-missing.h-check-for-missing-strndupa.patch
> @@ -43,8 +43,6 @@ Signed-off-by: Andrej Valek <andrej.valek@siemens.com>
>   src/udev/udev-rules.c                      |  1 +
>   29 files changed, 40 insertions(+)
>
> -diff --git a/meson.build b/meson.build
> -index 79195c9..80d9564 100644
>  --- a/meson.build
>  +++ b/meson.build
>  @@ -572,6 +572,7 @@ foreach ident : [
> @@ -55,8 +53,6 @@ index 79195c9..80d9564 100644
>   ]
>
>           have = cc.has_function(ident[0], prefix : ident[1], args : '-D_GNU_SOURCE')
> -diff --git a/src/backlight/backlight.c b/src/backlight/backlight.c
> -index dfd6805..c2b2ace 100644
>  --- a/src/backlight/backlight.c
>  +++ b/src/backlight/backlight.c
>  @@ -17,6 +17,7 @@
> @@ -67,8 +63,6 @@ index dfd6805..c2b2ace 100644
>
>   static int find_pci_or_platform_parent(sd_device *device, sd_device **ret) {
>           const char *subsystem, *sysname, *value;
> -diff --git a/src/basic/env-util.c b/src/basic/env-util.c
> -index fd449dc..e2b0722 100644
>  --- a/src/basic/env-util.c
>  +++ b/src/basic/env-util.c
>  @@ -16,6 +16,7 @@
> @@ -79,8 +73,6 @@ index fd449dc..e2b0722 100644
>
>   #define VALID_CHARS_ENV_NAME                    \
>           DIGITS LETTERS                          \
> -diff --git a/src/basic/missing_stdlib.h b/src/basic/missing_stdlib.h
> -index 188a8d4..1e16ec2 100644
>  --- a/src/basic/missing_stdlib.h
>  +++ b/src/basic/missing_stdlib.h
>  @@ -11,3 +11,15 @@
> @@ -99,8 +91,6 @@ index 188a8d4..1e16ec2 100644
>  +    (char *)memcpy(__new, __old, __len); \
>  +  })
>  +#endif
> -diff --git a/src/basic/mkdir.c b/src/basic/mkdir.c
> -index 6b82eab..51c6b78 100644
>  --- a/src/basic/mkdir.c
>  +++ b/src/basic/mkdir.c
>  @@ -14,6 +14,7 @@
> @@ -111,8 +101,6 @@ index 6b82eab..51c6b78 100644
>
>   int mkdir_safe_internal(const char *path, mode_t mode, uid_t uid, gid_t gid, MkdirFlags flags, mkdir_func_t _mkdir) {
>           struct stat st;
> -diff --git a/src/basic/parse-util.c b/src/basic/parse-util.c
> -index 87724af..d9c53bc 100644
>  --- a/src/basic/parse-util.c
>  +++ b/src/basic/parse-util.c
>  @@ -19,6 +19,7 @@
> @@ -123,8 +111,6 @@ index 87724af..d9c53bc 100644
>
>   int parse_boolean(const char *v) {
>           if (!v)
> -diff --git a/src/basic/proc-cmdline.c b/src/basic/proc-cmdline.c
> -index 1670001..b51feaa 100644
>  --- a/src/basic/proc-cmdline.c
>  +++ b/src/basic/proc-cmdline.c
>  @@ -15,6 +15,7 @@
> @@ -135,8 +121,6 @@ index 1670001..b51feaa 100644
>
>   int proc_cmdline(char **ret) {
>           const char *e;
> -diff --git a/src/basic/procfs-util.c b/src/basic/procfs-util.c
> -index 7aaf95b..42ce53d 100644
>  --- a/src/basic/procfs-util.c
>  +++ b/src/basic/procfs-util.c
>  @@ -11,6 +11,7 @@
> @@ -147,8 +131,6 @@ index 7aaf95b..42ce53d 100644
>
>   int procfs_tasks_get_limit(uint64_t *ret) {
>           _cleanup_free_ char *value = NULL;
> -diff --git a/src/basic/time-util.c b/src/basic/time-util.c
> -index daf952b..374b97f 100644
>  --- a/src/basic/time-util.c
>  +++ b/src/basic/time-util.c
>  @@ -28,6 +28,7 @@
> @@ -159,8 +141,6 @@ index daf952b..374b97f 100644
>
>   static clockid_t map_clock_id(clockid_t c) {
>
> -diff --git a/src/core/dbus-cgroup.c b/src/core/dbus-cgroup.c
> -index 4615aea..bc1364f 100644
>  --- a/src/core/dbus-cgroup.c
>  +++ b/src/core/dbus-cgroup.c
>  @@ -15,6 +15,7 @@
> @@ -171,8 +151,6 @@ index 4615aea..bc1364f 100644
>
>   static BUS_DEFINE_PROPERTY_GET_ENUM(property_get_cgroup_device_policy, cgroup_device_policy, CGroupDevicePolicy);
>
> -diff --git a/src/core/dbus-util.c b/src/core/dbus-util.c
> -index f4fbb72..0a1e3b5 100644
>  --- a/src/core/dbus-util.c
>  +++ b/src/core/dbus-util.c
>  @@ -7,6 +7,7 @@
> @@ -183,8 +161,6 @@ index f4fbb72..0a1e3b5 100644
>
>   int bus_property_get_triggered_unit(
>                   sd_bus *bus,
> -diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c
> -index a91cfeb..a459610 100644
>  --- a/src/core/kmod-setup.c
>  +++ b/src/core/kmod-setup.c
>  @@ -11,6 +11,7 @@
> @@ -195,8 +171,6 @@ index a91cfeb..a459610 100644
>
>   #if HAVE_KMOD
>   #include <libkmod.h>
> -diff --git a/src/core/service.c b/src/core/service.c
> -index 0289990..0e725b5 100644
>  --- a/src/core/service.c
>  +++ b/src/core/service.c
>  @@ -42,6 +42,7 @@
> @@ -207,8 +181,6 @@ index 0289990..0e725b5 100644
>
>   static const UnitActiveState state_translation_table[_SERVICE_STATE_MAX] = {
>           [SERVICE_DEAD] = UNIT_INACTIVE,
> -diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c
> -index 0048909..0e85eb7 100644
>  --- a/src/journal/journalctl.c
>  +++ b/src/journal/journalctl.c
>  @@ -67,6 +67,7 @@
> @@ -219,8 +191,6 @@ index 0048909..0e85eb7 100644
>
>   #define DEFAULT_FSS_INTERVAL_USEC (15*USEC_PER_MINUTE)
>
> -diff --git a/src/libsystemd/sd-bus/bus-message.c b/src/libsystemd/sd-bus/bus-message.c
> -index 427d42f..b050568 100644
>  --- a/src/libsystemd/sd-bus/bus-message.c
>  +++ b/src/libsystemd/sd-bus/bus-message.c
>  @@ -21,6 +21,7 @@
> @@ -231,8 +201,6 @@ index 427d42f..b050568 100644
>
>   static int message_append_basic(sd_bus_message *m, char type, const void *p, const void **stored);
>
> -diff --git a/src/libsystemd/sd-bus/bus-objects.c b/src/libsystemd/sd-bus/bus-objects.c
> -index d9fc256..e9c6932 100644
>  --- a/src/libsystemd/sd-bus/bus-objects.c
>  +++ b/src/libsystemd/sd-bus/bus-objects.c
>  @@ -13,6 +13,7 @@
> @@ -243,8 +211,6 @@ index d9fc256..e9c6932 100644
>
>   static int node_vtable_get_userdata(
>                   sd_bus *bus,
> -diff --git a/src/libsystemd/sd-bus/test-bus-benchmark.c b/src/libsystemd/sd-bus/test-bus-benchmark.c
> -index 8de0a85..4fd0a2e 100644
>  --- a/src/libsystemd/sd-bus/test-bus-benchmark.c
>  +++ b/src/libsystemd/sd-bus/test-bus-benchmark.c
>  @@ -14,6 +14,7 @@
> @@ -255,8 +221,6 @@ index 8de0a85..4fd0a2e 100644
>
>   #define MAX_SIZE (2*1024*1024)
>
> -diff --git a/src/locale/keymap-util.c b/src/locale/keymap-util.c
> -index b8bd181..fe0cae0 100644
>  --- a/src/locale/keymap-util.c
>  +++ b/src/locale/keymap-util.c
>  @@ -23,6 +23,7 @@
> @@ -267,8 +231,6 @@ index b8bd181..fe0cae0 100644
>
>   static bool startswith_comma(const char *s, const char *prefix) {
>           s = startswith(s, prefix);
> -diff --git a/src/nspawn/nspawn-settings.c b/src/nspawn/nspawn-settings.c
> -index 476cb07..91e28de 100644
>  --- a/src/nspawn/nspawn-settings.c
>  +++ b/src/nspawn/nspawn-settings.c
>  @@ -16,6 +16,7 @@
> @@ -279,8 +241,6 @@ index 476cb07..91e28de 100644
>
>   Settings *settings_new(void) {
>           Settings *s;
> -diff --git a/src/shared/dns-domain.c b/src/shared/dns-domain.c
> -index 4b31cb3..989ebf3 100644
>  --- a/src/shared/dns-domain.c
>  +++ b/src/shared/dns-domain.c
>  @@ -24,6 +24,7 @@
> @@ -291,8 +251,6 @@ index 4b31cb3..989ebf3 100644
>
>   int dns_label_unescape(const char **name, char *dest, size_t sz, DNSLabelFlags flags) {
>           const char *n;
> -diff --git a/src/shared/journal-importer.c b/src/shared/journal-importer.c
> -index 8638cd3..d03774a 100644
>  --- a/src/shared/journal-importer.c
>  +++ b/src/shared/journal-importer.c
>  @@ -13,6 +13,7 @@
> @@ -303,8 +261,6 @@ index 8638cd3..d03774a 100644
>
>   enum {
>           IMPORTER_STATE_LINE = 0,    /* waiting to read, or reading line */
> -diff --git a/src/shared/logs-show.c b/src/shared/logs-show.c
> -index 5fb736f..19cb165 100644
>  --- a/src/shared/logs-show.c
>  +++ b/src/shared/logs-show.c
>  @@ -38,6 +38,7 @@
> @@ -315,8 +271,6 @@ index 5fb736f..19cb165 100644
>
>   /* up to three lines (each up to 100 characters) or 300 characters, whichever is less */
>   #define PRINT_LINE_THRESHOLD 3
> -diff --git a/src/shared/pager.c b/src/shared/pager.c
> -index 2abb0f6..a00c95f 100644
>  --- a/src/shared/pager.c
>  +++ b/src/shared/pager.c
>  @@ -25,6 +25,7 @@
> @@ -327,8 +281,6 @@ index 2abb0f6..a00c95f 100644
>
>   static pid_t pager_pid = 0;
>
> -diff --git a/src/shared/path-lookup.c b/src/shared/path-lookup.c
> -index 442fde7..0eb1188 100644
>  --- a/src/shared/path-lookup.c
>  +++ b/src/shared/path-lookup.c
>  @@ -20,6 +20,7 @@
> @@ -339,8 +291,6 @@ index 442fde7..0eb1188 100644
>
>   int xdg_user_runtime_dir(char **ret, const char *suffix) {
>           const char *e;
> -diff --git a/src/shared/uid-range.c b/src/shared/uid-range.c
> -index 7cb7d8a..8b12b91 100644
>  --- a/src/shared/uid-range.c
>  +++ b/src/shared/uid-range.c
>  @@ -9,6 +9,7 @@
> @@ -351,8 +301,6 @@ index 7cb7d8a..8b12b91 100644
>
>   static bool uid_range_intersect(UidRange *range, uid_t start, uid_t nr) {
>           assert(range);
> -diff --git a/src/socket-proxy/socket-proxyd.c b/src/socket-proxy/socket-proxyd.c
> -index abbbc9f..6179b58 100644
>  --- a/src/socket-proxy/socket-proxyd.c
>  +++ b/src/socket-proxy/socket-proxyd.c
>  @@ -28,6 +28,7 @@
> @@ -363,8 +311,6 @@ index abbbc9f..6179b58 100644
>
>   #define BUFFER_SIZE (256 * 1024)
>
> -diff --git a/src/test/test-hexdecoct.c b/src/test/test-hexdecoct.c
> -index 5221742..a05e778 100644
>  --- a/src/test/test-hexdecoct.c
>  +++ b/src/test/test-hexdecoct.c
>  @@ -6,6 +6,7 @@
> @@ -375,8 +321,6 @@ index 5221742..a05e778 100644
>
>   static void test_hexchar(void) {
>           assert_se(hexchar(0xa) == 'a');
> -diff --git a/src/udev/udev-builtin-path_id.c b/src/udev/udev-builtin-path_id.c
> -index 7ce1c56..cc19b8e 100644
>  --- a/src/udev/udev-builtin-path_id.c
>  +++ b/src/udev/udev-builtin-path_id.c
>  @@ -23,6 +23,7 @@
> @@ -387,8 +331,6 @@ index 7ce1c56..cc19b8e 100644
>
>   _printf_(2,3)
>   static void path_prepend(char **path, const char *fmt, ...) {
> -diff --git a/src/udev/udev-rules.c b/src/udev/udev-rules.c
> -index ee87d7c..9aced10 100644
>  --- a/src/udev/udev-rules.c
>  +++ b/src/udev/udev-rules.c
>  @@ -40,6 +40,7 @@
> @@ -399,6 +341,13 @@ index ee87d7c..9aced10 100644
>
>   #define PREALLOC_TOKEN          2048
>   #define RULES_DIRS (const char* const*) CONF_PATHS_STRV("udev/rules.d")
> ---
> -2.11.0
> -
> +--- a/src/login/pam_systemd.c
> ++++ b/src/login/pam_systemd.c
> +@@ -27,6 +27,7 @@
> + #include "hostname-util.h"
> + #include "login-util.h"
> + #include "macro.h"
> ++#include "missing.h"
> + #include "parse-util.h"
> + #include "path-util.h"
> + #include "process-util.h"
> --
> 2.21.0
>


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH V2 1/4] pam_systemd: Include missing.h for secure_getenv
  2019-05-27 16:45 ` [PATCH V2 1/4] pam_systemd: Include missing.h for secure_getenv Khem Raj
@ 2019-05-29 21:08   ` Richard Purdie
  0 siblings, 0 replies; 7+ messages in thread
From: Richard Purdie @ 2019-05-29 21:08 UTC (permalink / raw)
  To: Khem Raj, Patches and discussions about the oe-core layer

On Mon, 2019-05-27 at 09:45 -0700, Khem Raj wrote:
> ping^1 for the whole series ..

The maintainers entry disappeared in the second version of the patch
and the series is generally confused in my inbox.

I also have doubts about whether the elfutils changes give functional
binaries which are useful on musl systems.

Could you resend the series please?

Cheers,

Richard



^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v2 3/4] elfutils: Fix eu-* utils builds for musl
  2019-05-22 23:40 ` [PATCH v2 3/4] elfutils: Fix eu-* utils builds for musl Khem Raj
@ 2019-05-30  2:20   ` ChenQi
  0 siblings, 0 replies; 7+ messages in thread
From: ChenQi @ 2019-05-30  2:20 UTC (permalink / raw)
  To: Khem Raj, openembedded-core

There's some musl elfutils failure about do_compile_ptest_base on 
autobuilder.
https://autobuilder.yoctoproject.org/typhoon/#/builders/45/builds/645/steps/7/logs/step1b

I noticed that this patch is not yet in master-next. Can this patch 
solve the problem above?

Best Regards,
Chen Qi

On 05/23/2019 07:40 AM, Khem Raj wrote:
> Re-organize the musl patches in three different areas namely
> libs, utils and tests, this will help maintain them in future
> version bumps
>
> Add obstack dependency on musl targets which is needed for eu-*
>
> PN and PN-binutils is not empty anymore on musl
>
> Signed-off-by: Khem Raj <raj.khem@gmail.com>
> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
> ---
> v2: Make FNM_EXTMATCH 0
>
>   .../elfutils/elfutils_0.176.bb                |  15 +-
>   ...-err-variable-and-function-conflicts.patch |  91 --------
>   ...ternatives-for-glibc-assumptions-hel.patch | 196 ------------------
>   .../elfutils/files/musl-libs.patch            | 111 ++++++++++
>   .../elfutils/files/musl-obstack-fts.patch     | 105 ++++++++++
>   .../files/{musl.patch => musl-tests.patch}    |   0
>   .../elfutils/files/musl-utils.patch           | 136 ++++++++++++
>   7 files changed, 359 insertions(+), 295 deletions(-)
>   delete mode 100644 meta/recipes-devtools/elfutils/files/0001-fix-err-variable-and-function-conflicts.patch
>   delete mode 100644 meta/recipes-devtools/elfutils/files/0008-build-Provide-alternatives-for-glibc-assumptions-hel.patch
>   create mode 100644 meta/recipes-devtools/elfutils/files/musl-libs.patch
>   create mode 100644 meta/recipes-devtools/elfutils/files/musl-obstack-fts.patch
>   rename meta/recipes-devtools/elfutils/files/{musl.patch => musl-tests.patch} (100%)
>   create mode 100644 meta/recipes-devtools/elfutils/files/musl-utils.patch
>
> diff --git a/meta/recipes-devtools/elfutils/elfutils_0.176.bb b/meta/recipes-devtools/elfutils/elfutils_0.176.bb
> index 85ff5f38d2..397723166c 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"
>   LICENSE = "GPLv2 & LGPLv3+ & GPLv3+"
>   LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
>   DEPENDS = "libtool bzip2 zlib virtual/libintl"
> -DEPENDS_append_libc-musl = " argp-standalone fts "
> +DEPENDS_append_libc-musl = " argp-standalone fts musl-obstack "
>   # The Debian patches below are from:
>   # http://ftp.de.debian.org/debian/pool/main/e/elfutils/elfutils_0.175-1.debian.tar.xz
>   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 \
>              file://0001-skip-the-test-when-gcc-not-deployed.patch \
>              file://run-ptest \
>              file://ptest.patch \
> -           file://musl.patch \
>              "
> -SRC_URI_append_libc-musl = " file://0008-build-Provide-alternatives-for-glibc-assumptions-hel.patch \
> -                             file://0001-fix-err-variable-and-function-conflicts.patch \
> -"
> -
> +SRC_URI_append_libc-musl = " \
> +           file://musl-obstack-fts.patch \
> +           file://musl-libs.patch \
> +           file://musl-utils.patch \
> +           file://musl-tests.patch \
> +           "
>   SRC_URI[md5sum] = "077e4f49320cad82bf17a997068b1db9"
>   SRC_URI[sha256sum] = "eb5747c371b0af0f71e86215a5ebb88728533c3a104a43d4231963f308cd1023"
>   
> @@ -75,8 +76,6 @@ do_install_ptest() {
>   EXTRA_OEMAKE_class-native = ""
>   EXTRA_OEMAKE_class-nativesdk = ""
>   
> -ALLOW_EMPTY_${PN}_libc-musl = "1"
> -
>   BBCLASSEXTEND = "native nativesdk"
>   
>   # 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 @@
> -From 2c50fe7068bd6911958c6d851aef88179e73bb21 Mon Sep 17 00:00:00 2001
> -From: Mingli Yu <Mingli.Yu@windriver.com>
> -Date: Tue, 16 Apr 2019 15:30:38 +0800
> -Subject: [PATCH] fix err variable and function conflicts
> -
> -There comes below build failure with musl when
> -ptest enabled.
> -| In file included from ../../elfutils-0.176/tests/dwfl-proc-attach.c:33:
> -| ../../elfutils-0.176/lib/system.h:63:35: error: called object 'err' is not a function or function pointer
> -|  #define error(status, errno, ...) err(status, __VA_ARGS__)
> -|                                    ^~~
> -| ../../elfutils-0.176/tests/dwfl-proc-attach.c:92:5: note: in expansion of macro 'error'
> -|      error (-1, 0, "dwfl_linux_proc_attach pid %d: %s", pid,
> -|      ^~~~~
> -| ../../elfutils-0.176/tests/dwfl-proc-attach.c:79:7: note: declared here
> -|    int err;
> -|        ^~~
> -
> -It is because there is no error.h in musl and
> -the patch 0008-build-Provide-alternatives-for-glibc-assumptions-hel.patch
> -has updated to use err.h to replace error.h
> -and also added macro definiton as below when
> -use musl.
> - #define error(status, errno, ...) err(status, __VA_ARGS__)
> -
> -And in err.h, there is below logic:
> -_Noreturn void err(int, const char *, ...);
> -
> -But when ptest enabled, there comes below error
> -as there is both variable and function defined
> -to be err in tests/dwfl-proc-attach.c.
> -So change the err variable's name to workaround
> -the build failure with musl.
> -
> -Upstream-Status: Inappropriate [workaround in musl]
> -
> -Signed-off-by: Mingli Yu <Mingli.Yu@windriver.com>
> ----
> - tests/dwfl-proc-attach.c | 6 +++---
> - 1 file changed, 3 insertions(+), 3 deletions(-)
> -
> -Index: elfutils-0.176/tests/dwfl-proc-attach.c
> -===================================================================
> ---- elfutils-0.176.orig/tests/dwfl-proc-attach.c
> -+++ elfutils-0.176/tests/dwfl-proc-attach.c
> -@@ -76,10 +76,10 @@ main (int argc __attribute__ ((unused)),
> -       char **argv __attribute__ ((unused)))
> - {
> -   /* Create two extra threads to iterate through.  */
> --  int err;
> --  if ((err = pthread_create (&thread1, NULL, sleeper, NULL)) != 0)
> -+  int err1;
> -+  if ((err1 = pthread_create (&thread1, NULL, sleeper, NULL)) != 0)
> -     error (-1, err, "Couldn't create thread1");
> --  if ((err = pthread_create (&thread2, NULL, sleeper, NULL)) != 0)
> -+  if ((err1 = pthread_create (&thread2, NULL, sleeper, NULL)) != 0)
> -     error (-1, err, "Couldn't create thread2");
> -
> -   Dwfl *dwfl = dwfl_begin (&proc_callbacks);
> -Index: elfutils-0.176/tests/backtrace.c
> -===================================================================
> ---- elfutils-0.176.orig/tests/backtrace.c
> -+++ elfutils-0.176/tests/backtrace.c
> -@@ -219,23 +219,23 @@ dump (Dwfl *dwfl)
> - {
> -   ptrdiff_t ptrdiff = dwfl_getmodules (dwfl, dump_modules, NULL, 0);
> -   assert (ptrdiff == 0);
> --  bool err = false;
> -+  bool err1 = false;
> -   switch (dwfl_getthreads (dwfl, thread_callback, NULL))
> -     {
> -     case 0:
> -       break;
> -     case DWARF_CB_ABORT:
> --      err = true;
> -+      err1 = true;
> -       break;
> -     case -1:
> -       error (0, 0, "dwfl_getthreads: %s", dwfl_errmsg (-1));
> --      err = true;
> -+      err1 = true;
> -       break;
> -     default:
> -       abort ();
> -     }
> -   callback_verify (0, 0, 0, NULL, dwfl);
> --  if (err)
> -+  if (err1)
> -     exit (EXIT_FAILURE);
> - }
> -
> 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 @@
> -From 990d377a92f4bab04bf6820fc81b3dcb6cf5e31d Mon Sep 17 00:00:00 2001
> -From: Khem Raj <raj.khem@gmail.com>
> -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 <raj.khem@gmail.com>
> -
> -Rebase to 0.175
> -
> -Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
> -
> ----
> - 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 <errno.h>
> - #include <stdlib.h>
> - #include <string.h>
> --#include <sys/cdefs.h>
> -
> - #include <system.h>
> -
> -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 <errno.h>
> --#include <error.h>
> -+#include <err.h>
> - #include <stddef.h>
> - #include <stdint.h>
> - #include <sys/param.h>
> -@@ -51,6 +51,8 @@
> - #else
> - # error "Unknown byte order"
> - #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 <inttypes.h>
> - #include <fcntl.h>
> - #include <unistd.h>
> -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 <fcntl.h>
> - #include <string.h>
> - #include <unistd.h>
> -+#include "system.h"
> - #include "../libdw/libdwP.h"	/* DWARF_E_* values are here.  */
> - #include "../libelf/libelfP.h"
> - #include "system.h"
> -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 <inttypes.h>
> - #include <errno.h>
> - #include <stdio.h>
> -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 <features.h>
> -
> --__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 <fcntl.h>
> - #include <stdint.h>
> - #include <sys/types.h>
> -
> -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 <ar.h>
> - #include <gelf.h>
> -+#include <libelf.h>
> -
> - #include <errno.h>
> - #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 @@
> +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]
> +
> +--- /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_ */
> +--- 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>
> +
> +--- 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>
> +
> +--- 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):
> +--- 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.  */
> +--- 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.  */
> +
> +@@ -3937,6 +3939,7 @@ 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/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 @@
> +Look for libfts and libobstack during configure, these
> +libraries are external to libc when using musl, whereas
> +on glibc these libraries are provided in libc itself.
> +
> +Signed-off-by: Khem Raj <raj.khem@gmail.com>
> +Upstream-Status: Inappropriate [workaround for musl]
> +--- a/configure.ac
> ++++ b/configure.ac
> +@@ -494,6 +494,60 @@ else
> + fi
> + AC_SUBST([argp_LDADD])
> +
> ++dnl Check if we have fts available from our libc
> ++AC_LINK_IFELSE(
> ++	[AC_LANG_PROGRAM(
> ++		[#if !defined(__x86_64__)
> ++		#undef  _FILE_OFFSET_BITS
> ++		#define _FILE_OFFSET_BITS 32
> ++		#endif
> ++		#include <fts.h>],
> ++		[FTS* fts = 0; return fts_close(fts); return 0;]
> ++		)],
> ++	[libc_has_fts="true"],
> ++	[libc_has_fts="false"]
> ++)
> ++
> ++dnl If our libc doesn't provide fts, then test for libfts
> ++if test "$libc_has_fts" = "false" ; then
> ++	AC_MSG_WARN("libc does not have fts")
> ++	AC_CHECK_LIB([fts], [fts_close], [have_fts="true"], [have_fts="false"])
> ++
> ++	if test "$have_fts" = "false"; then
> ++		AC_MSG_ERROR("no libfts found")
> ++	else
> ++		fts_LDADD="-lfts"
> ++	fi
> ++else
> ++	fts_LDADD=""
> ++fi
> ++AC_SUBST([fts_LDADD])
> ++
> ++dnl Check if we have obstack available from our libc
> ++AC_LINK_IFELSE(
> ++	[AC_LANG_PROGRAM(
> ++		[#include <obstack.h>],
> ++		[_obstack_begin(0, 0, 0, NULL, NULL); return 0;]
> ++		)],
> ++	[libc_has_obstack="true"],
> ++	[libc_has_obstack="false"]
> ++)
> ++
> ++dnl If our libc doesn't provide obstack, then test for libobstack
> ++if test "$libc_has_obstack" = "false" ; then
> ++	AC_MSG_WARN("libc does not have obstack")
> ++	AC_CHECK_LIB([obstack], [_obstack_begin], [have_obstack="true"], [have_obstack="false"])
> ++
> ++	if test "$have_obstack" = "false"; then
> ++		AC_MSG_ERROR("no libobstack found")
> ++	else
> ++		obstack_LDADD="-lobstack"
> ++	fi
> ++else
> ++	obstack_LDADD=""
> ++fi
> ++AC_SUBST([obstack_LDADD])
> ++
> + dnl The directories with content.
> +
> + dnl Documentation.
> +--- a/libdw/Makefile.am
> ++++ b/libdw/Makefile.am
> +@@ -108,7 +108,7 @@ am_libdw_pic_a_OBJECTS = $(libdw_a_SOURC
> + 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)
> ++libdw_so_LDLIBS = $(libdw_so_DEPS) -ldl -lz $(argp_LDADD) $(fts_LDADD) $(zip_LIBS)
> + 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
> +--- a/src/Makefile.am
> ++++ b/src/Makefile.am
> +@@ -68,8 +68,8 @@ ar_no_Wstack_usage = yes
> + unstrip_no_Wstack_usage = yes
> +
> + readelf_LDADD = $(libdw) $(libebl) $(libelf) $(libeu) $(argp_LDADD) -ldl
> +-nm_LDADD = $(libdw) $(libebl) $(libelf) $(libeu) $(argp_LDADD) -ldl \
> +-	   $(demanglelib)
> ++nm_LDADD = $(libdw) $(libebl) $(libelf) $(libeu) $(argp_LDADD) \
> ++	   $(obstack_LDADD) -ldl $(demanglelib)
> + size_LDADD = $(libelf) $(libeu) $(argp_LDADD)
> + strip_LDADD = $(libebl) $(libelf) $(libdw) $(libeu) $(argp_LDADD) -ldl
> + elflint_LDADD  = $(libebl) $(libelf) $(libeu) $(argp_LDADD) -ldl
> +@@ -77,9 +77,9 @@ findtextrel_LDADD = $(libdw) $(libelf) $
> + addr2line_LDADD = $(libdw) $(libelf) $(libeu) $(argp_LDADD) $(demanglelib)
> + elfcmp_LDADD = $(libebl) $(libelf) $(libeu) $(argp_LDADD) -ldl
> + objdump_LDADD  = $(libasm) $(libebl) $(libelf) $(libeu) $(argp_LDADD) -ldl
> +-ranlib_LDADD = libar.a $(libelf) $(libeu) $(argp_LDADD)
> ++ranlib_LDADD = libar.a $(libelf) $(libeu) $(argp_LDADD) $(obstack_LDADD)
> + strings_LDADD = $(libelf) $(libeu) $(argp_LDADD)
> +-ar_LDADD = libar.a $(libelf) $(libeu) $(argp_LDADD)
> ++ar_LDADD = libar.a $(libelf) $(libeu) $(argp_LDADD) $(obstack_LDADD)
> + unstrip_LDADD = $(libebl) $(libelf) $(libdw) $(libeu) $(argp_LDADD) -ldl
> + stack_LDADD = $(libebl) $(libelf) $(libdw) $(libeu) $(argp_LDADD) -ldl $(demanglelib)
> + 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
> similarity index 100%
> rename from meta/recipes-devtools/elfutils/files/musl.patch
> rename to 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 @@
> +Provide missing defines which otherwise are available on glibc system headers
> +
> +Alter the error API to match posix version
> +use qsort instead of qsort_r which is glibc specific API
> +
> +Signed-off-by: Khem Raj <raj.khem@gmail.com>
> +Upstream-Status: Inappropriate [workaround for musl]
> +--- a/src/arlib.h
> ++++ b/src/arlib.h
> +@@ -29,6 +29,12 @@
> + #include <stdint.h>
> + #include <sys/types.h>
> +
> ++#if !defined(ALLPERMS)
> ++# define ALLPERMS (S_ISUID|S_ISGID|S_ISVTX|S_IRWXU|S_IRWXG|S_IRWXO) /* 07777 */
> ++#endif
> ++#if !defined(DEFFILEMODE)
> ++# define DEFFILEMODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)/* 0666*/
> ++#endif
> +
> + /* State of -D/-U flags.  */
> + extern bool arlib_deterministic_output;
> +--- a/src/elfcompress.c
> ++++ b/src/elfcompress.c
> +@@ -37,6 +37,13 @@
> + #include "libeu.h"
> + #include "printversion.h"
> +
> ++#if !defined(ALLPERMS)
> ++# define ALLPERMS (S_ISUID|S_ISGID|S_ISVTX|S_IRWXU|S_IRWXG|S_IRWXO) /* 07777 */
> ++#endif
> ++#if !defined(FNM_EXTMATCH)
> ++# define FNM_EXTMATCH (0)
> ++#endif
> ++
> + /* Name and version of program.  */
> + ARGP_PROGRAM_VERSION_HOOK_DEF = print_version;
> +
> +--- a/src/readelf.c
> ++++ b/src/readelf.c
> +@@ -4792,10 +4792,11 @@ listptr_base (struct listptr *p)
> +   return cudie_base (&cu);
> + }
> +
> ++static const char *listptr_name;
> ++
> + static int
> +-compare_listptr (const void *a, const void *b, void *arg)
> ++compare_listptr (const void *a, const void *b)
> + {
> +-  const char *name = arg;
> +   struct listptr *p1 = (void *) a;
> +   struct listptr *p2 = (void *) b;
> +
> +@@ -4811,21 +4812,21 @@ compare_listptr (const void *a, const vo
> + 	  p1->warned = p2->warned = true;
> + 	  error (0, 0,
> + 		 gettext ("%s %#" PRIx64 " used with different address sizes"),
> +-		 name, (uint64_t) p1->offset);
> ++		 listptr_name, (uint64_t) p1->offset);
> + 	}
> +       if (p1->dwarf64 != p2->dwarf64)
> + 	{
> + 	  p1->warned = p2->warned = true;
> + 	  error (0, 0,
> + 		 gettext ("%s %#" PRIx64 " used with different offset sizes"),
> +-		 name, (uint64_t) p1->offset);
> ++		 listptr_name, (uint64_t) p1->offset);
> + 	}
> +       if (listptr_base (p1) != listptr_base (p2))
> + 	{
> + 	  p1->warned = p2->warned = true;
> + 	  error (0, 0,
> + 		 gettext ("%s %#" PRIx64 " used with different base addresses"),
> +-		 name, (uint64_t) p1->offset);
> ++		 listptr_name, (uint64_t) p1->offset);
> + 	}
> +       if (p1->attr != p2 ->attr)
> + 	{
> +@@ -4833,7 +4834,7 @@ compare_listptr (const void *a, const vo
> + 	  error (0, 0,
> + 		 gettext ("%s %#" PRIx64
> + 			  " used with different attribute %s and %s"),
> +-		 name, (uint64_t) p1->offset, dwarf_attr_name (p2->attr),
> ++		 listptr_name, (uint64_t) p1->offset, dwarf_attr_name (p2->attr),
> + 		 dwarf_attr_name (p2->attr));
> + 	}
> +     }
> +@@ -4905,8 +4906,11 @@ static void
> + sort_listptr (struct listptr_table *table, const char *name)
> + {
> +   if (table->n > 0)
> +-    qsort_r (table->table, table->n, sizeof table->table[0],
> +-	     &compare_listptr, (void *) name);
> ++    {
> ++      listptr_name = name;
> ++      qsort (table->table, table->n, sizeof table->table[0],
> ++	    &compare_listptr);
> ++    }
> + }
> +
> + static bool
> +--- a/src/strip.c
> ++++ b/src/strip.c
> +@@ -46,6 +46,13 @@
> + #include <system.h>
> + #include <printversion.h>
> +
> ++#if !defined(ACCESSPERMS)
> ++# define ACCESSPERMS (S_IRWXU|S_IRWXG|S_IRWXO) /* 0777 */
> ++#endif
> ++#if !defined(FNM_EXTMATCH)
> ++# define FNM_EXTMATCH (0)
> ++#endif
> ++
> + typedef uint8_t GElf_Byte;
> +
> + /* Name and version of program.  */
> +--- a/src/unstrip.c
> ++++ b/src/unstrip.c
> +@@ -56,6 +56,15 @@
> + # define _(str) gettext (str)
> + #endif
> +
> ++#ifndef strndupa
> ++#define strndupa(s, n) \
> ++       ({const char *__in = (s); \
> ++         size_t __len = strnlen (__in, (n)) + 1; \
> ++         char *__out = (char *) alloca (__len); \
> ++         __out[__len-1] = '\0'; \
> ++         (char *) memcpy (__out, __in, __len-1);})
> ++#endif
> ++
> + /* Name and version of program.  */
> + ARGP_PROGRAM_VERSION_HOOK_DEF = print_version;
> +




^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2019-05-30  2:09 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-05-22 23:40 [PATCH V2 1/4] pam_systemd: Include missing.h for secure_getenv Khem Raj
2019-05-22 23:40 ` [PATCH v3 2/4] musl-obstack: Add recipe Khem Raj
2019-05-22 23:40 ` [PATCH v2 3/4] elfutils: Fix eu-* utils builds for musl Khem Raj
2019-05-30  2:20   ` ChenQi
2019-05-22 23:40 ` [PATCH v2 4/4] maintainers: Account for musl-obstack and libssp-nonshared Khem Raj
2019-05-27 16:45 ` [PATCH V2 1/4] pam_systemd: Include missing.h for secure_getenv Khem Raj
2019-05-29 21:08   ` Richard Purdie

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.