diff mbox series

[oe,meta-filesystems,2/2] xfsprogs: Upgrade to 4.12.0

Message ID 20170902220559.9784-2-raj.khem@gmail.com
State Superseded
Headers show
Series [oe,meta-oe,1/2] open-vm-tools: Add -Wno-address-of-packed-member for with clang | expand

Commit Message

Khem Raj Sept. 2, 2017, 10:05 p.m. UTC
Fix cross builds with hardening flags

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

---
 ...Rename-progname-as-it-is-provided-by-libc.patch | 204 +++++++++++++++++++++
 .../files/remove_flags_from_build_flags.patch      |  13 ++
 .../xfsprogs/files/xfsprogs-4.12.0-fix_musl.patch  | 117 ++++++++++++
 .../{xfsprogs_4.11.0.bb => xfsprogs_4.12.0.bb}     |   7 +-
 4 files changed, 339 insertions(+), 2 deletions(-)
 create mode 100644 meta-filesystems/recipes-utils/xfsprogs/files/0001-Rename-progname-as-it-is-provided-by-libc.patch
 create mode 100644 meta-filesystems/recipes-utils/xfsprogs/files/remove_flags_from_build_flags.patch
 create mode 100644 meta-filesystems/recipes-utils/xfsprogs/files/xfsprogs-4.12.0-fix_musl.patch
 rename meta-filesystems/recipes-utils/xfsprogs/{xfsprogs_4.11.0.bb => xfsprogs_4.12.0.bb} (85%)

-- 
2.14.1

-- 
_______________________________________________
Openembedded-devel mailing list
Openembedded-devel@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-devel

Comments

Martin Jansa Sept. 6, 2017, 8:09 a.m. UTC | #1
Fails to build (probably due to gold):
http://errors.yoctoproject.org/Errors/Details/155158/

On Sun, Sep 3, 2017 at 12:05 AM, Khem Raj <raj.khem@gmail.com> wrote:

> Fix cross builds with hardening flags

>

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

> ---

>  ...Rename-progname-as-it-is-provided-by-libc.patch | 204

> +++++++++++++++++++++

>  .../files/remove_flags_from_build_flags.patch      |  13 ++

>  .../xfsprogs/files/xfsprogs-4.12.0-fix_musl.patch  | 117 ++++++++++++

>  .../{xfsprogs_4.11.0.bb => xfsprogs_4.12.0.bb}     |   7 +-

>  4 files changed, 339 insertions(+), 2 deletions(-)

>  create mode 100644 meta-filesystems/recipes-utils/xfsprogs/files/0001-

> Rename-progname-as-it-is-provided-by-libc.patch

>  create mode 100644 meta-filesystems/recipes-utils/xfsprogs/files/remove_

> flags_from_build_flags.patch

>  create mode 100644 meta-filesystems/recipes-

> utils/xfsprogs/files/xfsprogs-4.12.0-fix_musl.patch

>  rename meta-filesystems/recipes-utils/xfsprogs/{xfsprogs_4.11.0.bb =>

> xfsprogs_4.12.0.bb} (85%)

>

> diff --git a/meta-filesystems/recipes-utils/xfsprogs/files/0001-

> Rename-progname-as-it-is-provided-by-libc.patch

> b/meta-filesystems/recipes-utils/xfsprogs/files/0001-

> Rename-progname-as-it-is-provided-by-libc.patch

> new file mode 100644

> index 000000000..aa13b67be

> --- /dev/null

> +++ b/meta-filesystems/recipes-utils/xfsprogs/files/0001-

> Rename-progname-as-it-is-provided-by-libc.patch

> @@ -0,0 +1,204 @@

> +From 95aaaa800e0dc387875b4e2adad480b72c1632ff Mon Sep 17 00:00:00 2001

> +From: Khem Raj <raj.khem@gmail.com>

> +Date: Sat, 2 Sep 2017 14:46:49 -0700

> +Subject: [PATCH] Rename progname as it is provided by libc

> +

> +Rename local variable progname to avoid a clash with libc

> +global symbols

> +

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

> +---

> + io/init.c                 | 10 +++++-----

> + mdrestore/xfs_mdrestore.c | 10 +++++-----

> + quota/init.c              | 10 +++++-----

> + spaceman/init.c           |  8 ++++----

> + 4 files changed, 19 insertions(+), 19 deletions(-)

> +

> +diff --git a/io/init.c b/io/init.c

> +index 20d5f80..e82e101 100644

> +--- a/io/init.c

> ++++ b/io/init.c

> +@@ -23,7 +23,7 @@

> + #include "init.h"

> + #include "io.h"

> +

> +-char  *progname;

> ++char  *io_progname;

> + int   exitcode;

> + int   expert;

> + int   idlethread;

> +@@ -35,7 +35,7 @@ usage(void)

> + {

> +       fprintf(stderr,

> + _("Usage: %s [-adfinrRstVx] [-m mode] [-p prog] [[-c|-C] cmd]...

> file\n"),

> +-              progname);

> ++              io_progname);

> +       exit(1);

> + }

> +

> +@@ -142,7 +142,7 @@ init(

> +       xfs_fsop_geom_t geometry = { 0 };

> +       struct fs_path  fsp;

> +

> +-      progname = basename(argv[0]);

> ++      io_progname = basename(argv[0]);

> +       setlocale(LC_ALL, "");

> +       bindtextdomain(PACKAGE, LOCALEDIR);

> +       textdomain(PACKAGE);

> +@@ -186,7 +186,7 @@ init(

> +                       flags |= IO_NONBLOCK;

> +                       break;

> +               case 'p':

> +-                      progname = optarg;

> ++                      io_progname = optarg;

> +                       break;

> +               case 'r':

> +                       flags |= IO_READONLY;

> +@@ -207,7 +207,7 @@ init(

> +                       expert = 1;

> +                       break;

> +               case 'V':

> +-                      printf(_("%s version %s\n"), progname, VERSION);

> ++                      printf(_("%s version %s\n"), io_progname, VERSION);

> +                       exit(0);

> +               default:

> +                       usage();

> +diff --git a/mdrestore/xfs_mdrestore.c b/mdrestore/xfs_mdrestore.c

> +index 9d1b4e8..b840a54 100644

> +--- a/mdrestore/xfs_mdrestore.c

> ++++ b/mdrestore/xfs_mdrestore.c

> +@@ -19,7 +19,7 @@

> + #include "libxfs.h"

> + #include "xfs_metadump.h"

> +

> +-char          *progname;

> ++char          *mdrestore_progname;

> + int           show_progress = 0;

> + int           show_info = 0;

> + int           progress_since_warning = 0;

> +@@ -30,7 +30,7 @@ fatal(const char *msg, ...)

> +       va_list         args;

> +

> +       va_start(args, msg);

> +-      fprintf(stderr, "%s: ", progname);

> ++      fprintf(stderr, "%s: ", mdrestore_progname);

> +       vfprintf(stderr, msg, args);

> +       exit(1);

> + }

> +@@ -194,7 +194,7 @@ perform_restore(

> + static void

> + usage(void)

> + {

> +-      fprintf(stderr, "Usage: %s [-V] [-g] source target\n", progname);

> ++      fprintf(stderr, "Usage: %s [-V] [-g] source target\n",

> mdrestore_progname);

> +       exit(1);

> + }

> +

> +@@ -212,7 +212,7 @@ main(

> +       struct stat     statbuf;

> +       int             is_target_file;

> +

> +-      progname = basename(argv[0]);

> ++      mdrestore_progname = basename(argv[0]);

> +

> +       while ((c = getopt(argc, argv, "giV")) != EOF) {

> +               switch (c) {

> +@@ -223,7 +223,7 @@ main(

> +                               show_info = 1;

> +                               break;

> +                       case 'V':

> +-                              printf("%s version %s\n", progname,

> VERSION);

> ++                              printf("%s version %s\n",

> mdrestore_progname, VERSION);

> +                               exit(0);

> +                       default:

> +                               usage();

> +diff --git a/quota/init.c b/quota/init.c

> +index d45dc4c..46403de 100644

> +--- a/quota/init.c

> ++++ b/quota/init.c

> +@@ -21,7 +21,7 @@

> + #include "input.h"

> + #include "init.h"

> +

> +-char  *progname;

> ++char  *quota_progname;

> + int   exitcode;

> + int   expert;

> + bool  foreign_allowed = false;

> +@@ -47,7 +47,7 @@ usage(void)

> + {

> +       fprintf(stderr,

> +               _("Usage: %s [-V] [-x] [-f] [-p prog] [-c cmd]... [-d

> project]... [path]\n"),

> +-              progname);

> ++              quota_progname);

> +       exit(1);

> + }

> +

> +@@ -147,7 +147,7 @@ init(

> + {

> +       int             c;

> +

> +-      progname = basename(argv[0]);

> ++      quota_progname = basename(argv[0]);

> +       setlocale(LC_ALL, "");

> +       bindtextdomain(PACKAGE, LOCALEDIR);

> +       textdomain(PACKAGE);

> +@@ -173,13 +173,13 @@ init(

> +                       projid_file = optarg;

> +                       break;

> +               case 'p':

> +-                      progname = optarg;

> ++                      quota_progname = optarg;

> +                       break;

> +               case 'x':

> +                       expert++;

> +                       break;

> +               case 'V':

> +-                      printf(_("%s version %s\n"), progname, VERSION);

> ++                      printf(_("%s version %s\n"), quota_progname,

> VERSION);

> +                       exit(0);

> +               default:

> +                       usage();

> +diff --git a/spaceman/init.c b/spaceman/init.c

> +index b3eface..bedf112 100644

> +--- a/spaceman/init.c

> ++++ b/spaceman/init.c

> +@@ -23,7 +23,7 @@

> + #include "path.h"

> + #include "space.h"

> +

> +-char  *progname;

> ++char  *spaceman_progname;

> + int   exitcode;

> +

> + void

> +@@ -31,7 +31,7 @@ usage(void)

> + {

> +       fprintf(stderr,

> +               _("Usage: %s [-c cmd] file\n"),

> +-              progname);

> ++              spaceman_progname);

> +       exit(1);

> + }

> +

> +@@ -74,7 +74,7 @@ init(

> +       xfs_fsop_geom_t geometry = { 0 };

> +       struct fs_path  fsp;

> +

> +-      progname = basename(argv[0]);

> ++      spaceman_progname = basename(argv[0]);

> +       setlocale(LC_ALL, "");

> +       bindtextdomain(PACKAGE, LOCALEDIR);

> +       textdomain(PACKAGE);

> +@@ -86,7 +86,7 @@ init(

> +                       add_user_command(optarg);

> +                       break;

> +               case 'V':

> +-                      printf(_("%s version %s\n"), progname, VERSION);

> ++                      printf(_("%s version %s\n"), spaceman_progname,

> VERSION);

> +                       exit(0);

> +               default:

> +                       usage();

> +--

> +2.14.1

> +

> diff --git a/meta-filesystems/recipes-utils/xfsprogs/files/remove_flags_from_build_flags.patch

> b/meta-filesystems/recipes-utils/xfsprogs/files/remove_

> flags_from_build_flags.patch

> new file mode 100644

> index 000000000..bba9a25c2

> --- /dev/null

> +++ b/meta-filesystems/recipes-utils/xfsprogs/files/remove_

> flags_from_build_flags.patch

> @@ -0,0 +1,13 @@

> +Index: xfsprogs-4.12.0/include/builddefs.in

> +===================================================================

> +--- xfsprogs-4.12.0.orig/include/builddefs.in

> ++++ xfsprogs-4.12.0/include/builddefs.in

> +@@ -164,7 +164,7 @@ ifeq ($(ENABLE_GETTEXT),yes)

> + GCFLAGS += -DENABLE_GETTEXT

> + endif

> +

> +-BUILD_CFLAGS += $(GCFLAGS) $(PCFLAGS)

> ++BUILD_CFLAGS += $(GCFLAGS)

> + # First, Global, Platform, Local CFLAGS

> + CFLAGS += $(FCFLAGS) $(OPTIMIZER) $(GCFLAGS) $(PCFLAGS) $(LCFLAGS)

> +

> diff --git a/meta-filesystems/recipes-utils/xfsprogs/files/xfsprogs-4.12.0-fix_musl.patch

> b/meta-filesystems/recipes-utils/xfsprogs/files/xfsprogs-

> 4.12.0-fix_musl.patch

> new file mode 100644

> index 000000000..efc57e4f6

> --- /dev/null

> +++ b/meta-filesystems/recipes-utils/xfsprogs/files/xfsprogs-

> 4.12.0-fix_musl.patch

> @@ -0,0 +1,117 @@

> +From 21253610f9ef87db8e2a75b863b7fcfbd0cdb421 Mon Sep 17 00:00:00 2001

> +From: "Darrick J. Wong" <darrick.wong@oracle.com>

> +Date: Tue, 25 Jul 2017 13:45:01 -0500

> +Subject: [PATCH] In patch 4944defad4 ("xfs_db: redirect printfs when

> + metadumping to stdout"), we solved the problem of xfs_db printfs ending

> up in

> + the metadump stream by reassigning stdout for the duration of a stdout

> + metadump.  Unfortunately, musl doesn't allow stdout to be reassigned (in

> + their view "extern FILE *stdout" means "extern FILE * const stdout"), so

> we

> + abandon the old approach in favor of playing games with dup() to switch

> the

> + raw file descriptors.

> +

> +While we're at it, fix a regression where an unconverted outf test

> +allows progress info to end up in the metadump stream.

> +

> +Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>

> +---

> + db/metadump.c | 47 ++++++++++++++++++++++++++++++++++++-----------

> + 1 file changed, 36 insertions(+), 11 deletions(-)

> +

> +diff --git a/db/metadump.c b/db/metadump.c

> +index 96641e0..4e2f648 100644

> +--- a/db/metadump.c

> ++++ b/db/metadump.c

> +@@ -78,6 +78,7 @@ static int           obfuscate = 1;

> + static int            zero_stale_data = 1;

> + static int            show_warnings = 0;

> + static int            progress_since_warning = 0;

> ++static bool           stdout_metadump;

> +

> + void

> + metadump_init(void)

> +@@ -137,7 +138,7 @@ print_progress(const char *fmt, ...)

> +       va_end(ap);

> +       buf[sizeof(buf)-1] = '\0';

> +

> +-      f = (outf == stdout) ? stderr : stdout;

> ++      f = stdout_metadump ? stderr : stdout;

> +       fprintf(f, "\r%-59s", buf);

> +       fflush(f);

> +       progress_since_warning = 1;

> +@@ -2750,7 +2751,8 @@ metadump_f(

> +       xfs_agnumber_t  agno;

> +       int             c;

> +       int             start_iocur_sp;

> +-      bool            stdout_metadump = false;

> ++      int             outfd = -1;

> ++      int             ret;

> +       char            *p;

> +

> +       exitcode = 1;

> +@@ -2870,16 +2872,35 @@ metadump_f(

> +                * metadump operation so that dbprintf and other messages

> +                * are sent to the console instead of polluting the

> +                * metadump stream.

> ++               *

> ++               * We get to do this the hard way because musl doesn't

> ++               * allow reassignment of stdout.

> +                */

> +-              outf = stdout;

> +-              stdout = stderr;

> ++              fflush(stdout);

> ++              outfd = dup(STDOUT_FILENO);

> ++              if (outfd < 0) {

> ++                      perror("opening dump stream");

> ++                      goto out;

> ++              }

> ++              ret = dup2(STDERR_FILENO, STDOUT_FILENO);

> ++              if (ret < 0) {

> ++                      perror("redirecting stdout");

> ++                      close(outfd);

> ++                      goto out;

> ++              }

> ++              outf = fdopen(outfd, "a");

> ++              if (outf == NULL) {

> ++                      fprintf(stderr, "cannot create dump stream\n");

> ++                      dup2(outfd, 1);

> ++                      close(outfd);

> ++                      goto out;

> ++              }

> +               stdout_metadump = true;

> +       } else {

> +               outf = fopen(argv[optind], "wb");

> +               if (outf == NULL) {

> +                       print_warning("cannot create dump file");

> +-                      free(metablock);

> +-                      return 0;

> ++                      goto out;

> +               }

> +       }

> +

> +@@ -2907,15 +2928,19 @@ metadump_f(

> +       if (progress_since_warning)

> +               fputc('\n', stdout_metadump ? stderr : stdout);

> +

> +-      if (stdout_metadump)

> +-              stdout = outf;

> +-      else

> +-              fclose(outf);

> ++      if (stdout_metadump) {

> ++              fflush(outf);

> ++              fflush(stdout);

> ++              ret = dup2(outfd, STDOUT_FILENO);

> ++              if (ret < 0)

> ++                      perror("un-redirecting stdout");

> ++      }

> ++      fclose(outf);

> +

> +       /* cleanup iocur stack */

> +       while (iocur_sp > start_iocur_sp)

> +               pop_cur();

> +-

> ++out:

> +       free(metablock);

> +

> +       return 0;

> +--

> +2.13.3

> diff --git a/meta-filesystems/recipes-utils/xfsprogs/xfsprogs_4.11.0.bb

> b/meta-filesystems/recipes-utils/xfsprogs/xfsprogs_4.12.0.bb

> similarity index 85%

> rename from meta-filesystems/recipes-utils/xfsprogs/xfsprogs_4.11.0.bb

> rename to meta-filesystems/recipes-utils/xfsprogs/xfsprogs_4.12.0.bb

> index 046dea425..444f712b5 100644

> --- a/meta-filesystems/recipes-utils/xfsprogs/xfsprogs_4.11.0.bb

> +++ b/meta-filesystems/recipes-utils/xfsprogs/xfsprogs_4.12.0.bb

> @@ -8,9 +8,12 @@ DEPENDS = "util-linux util-linux-native"

>  SRC_URI = "https://www.kernel.org/pub/linux/utils/fs/xfs/xfsprogs/${

> BP}.tar.xz \

>             file://link_needed_libs.patch \

>             file://0001-define-__-prefixed-version-of-intXY_t-types.patch

> \

> +           file://remove_flags_from_build_flags.patch \

> +           file://0001-Rename-progname-as-it-is-provided-by-libc.patch \

> +           file://xfsprogs-4.12.0-fix_musl.patch \

>             "

> -SRC_URI[md5sum] = "f1f9b8c752347eefdb56483dafa0cefb"

> -SRC_URI[sha256sum] = "c3a6d87b564d7738243c507df82276

> bed982265e345363a95f2c764e8a5f5bb2"

> +SRC_URI[md5sum] = "e348b0e1d7bd1cd82d64b91ff37e727e"

> +SRC_URI[sha256sum] = "b330ad8d737f4152ae511580102e2f

> c49212bb51dfb4b614084344abae46d0df"

>

>  inherit autotools-brokensep

>

> --

> 2.14.1

>

> --

> _______________________________________________

> Openembedded-devel mailing list

> Openembedded-devel@lists.openembedded.org

> http://lists.openembedded.org/mailman/listinfo/openembedded-devel

>

-- 
_______________________________________________
Openembedded-devel mailing list
Openembedded-devel@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-devel
Khem Raj Sept. 6, 2017, 1:42 p.m. UTC | #2
On Wed, Sep 6, 2017 at 1:09 AM, Martin Jansa <martin.jansa@gmail.com> wrote:
> Fails to build (probably due to gold):

> http://errors.yoctoproject.org/Errors/Details/155158/

>


yes although it seems we are missing -luuid on cmdline

> On Sun, Sep 3, 2017 at 12:05 AM, Khem Raj <raj.khem@gmail.com> wrote:

>>

>> Fix cross builds with hardening flags

>>

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

>> ---

>>  ...Rename-progname-as-it-is-provided-by-libc.patch | 204

>> +++++++++++++++++++++

>>  .../files/remove_flags_from_build_flags.patch      |  13 ++

>>  .../xfsprogs/files/xfsprogs-4.12.0-fix_musl.patch  | 117 ++++++++++++

>>  .../{xfsprogs_4.11.0.bb => xfsprogs_4.12.0.bb}     |   7 +-

>>  4 files changed, 339 insertions(+), 2 deletions(-)

>>  create mode 100644

>> meta-filesystems/recipes-utils/xfsprogs/files/0001-Rename-progname-as-it-is-provided-by-libc.patch

>>  create mode 100644

>> meta-filesystems/recipes-utils/xfsprogs/files/remove_flags_from_build_flags.patch

>>  create mode 100644

>> meta-filesystems/recipes-utils/xfsprogs/files/xfsprogs-4.12.0-fix_musl.patch

>>  rename meta-filesystems/recipes-utils/xfsprogs/{xfsprogs_4.11.0.bb =>

>> xfsprogs_4.12.0.bb} (85%)

>>

>> diff --git

>> a/meta-filesystems/recipes-utils/xfsprogs/files/0001-Rename-progname-as-it-is-provided-by-libc.patch

>> b/meta-filesystems/recipes-utils/xfsprogs/files/0001-Rename-progname-as-it-is-provided-by-libc.patch

>> new file mode 100644

>> index 000000000..aa13b67be

>> --- /dev/null

>> +++

>> b/meta-filesystems/recipes-utils/xfsprogs/files/0001-Rename-progname-as-it-is-provided-by-libc.patch

>> @@ -0,0 +1,204 @@

>> +From 95aaaa800e0dc387875b4e2adad480b72c1632ff Mon Sep 17 00:00:00 2001

>> +From: Khem Raj <raj.khem@gmail.com>

>> +Date: Sat, 2 Sep 2017 14:46:49 -0700

>> +Subject: [PATCH] Rename progname as it is provided by libc

>> +

>> +Rename local variable progname to avoid a clash with libc

>> +global symbols

>> +

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

>> +---

>> + io/init.c                 | 10 +++++-----

>> + mdrestore/xfs_mdrestore.c | 10 +++++-----

>> + quota/init.c              | 10 +++++-----

>> + spaceman/init.c           |  8 ++++----

>> + 4 files changed, 19 insertions(+), 19 deletions(-)

>> +

>> +diff --git a/io/init.c b/io/init.c

>> +index 20d5f80..e82e101 100644

>> +--- a/io/init.c

>> ++++ b/io/init.c

>> +@@ -23,7 +23,7 @@

>> + #include "init.h"

>> + #include "io.h"

>> +

>> +-char  *progname;

>> ++char  *io_progname;

>> + int   exitcode;

>> + int   expert;

>> + int   idlethread;

>> +@@ -35,7 +35,7 @@ usage(void)

>> + {

>> +       fprintf(stderr,

>> + _("Usage: %s [-adfinrRstVx] [-m mode] [-p prog] [[-c|-C] cmd]...

>> file\n"),

>> +-              progname);

>> ++              io_progname);

>> +       exit(1);

>> + }

>> +

>> +@@ -142,7 +142,7 @@ init(

>> +       xfs_fsop_geom_t geometry = { 0 };

>> +       struct fs_path  fsp;

>> +

>> +-      progname = basename(argv[0]);

>> ++      io_progname = basename(argv[0]);

>> +       setlocale(LC_ALL, "");

>> +       bindtextdomain(PACKAGE, LOCALEDIR);

>> +       textdomain(PACKAGE);

>> +@@ -186,7 +186,7 @@ init(

>> +                       flags |= IO_NONBLOCK;

>> +                       break;

>> +               case 'p':

>> +-                      progname = optarg;

>> ++                      io_progname = optarg;

>> +                       break;

>> +               case 'r':

>> +                       flags |= IO_READONLY;

>> +@@ -207,7 +207,7 @@ init(

>> +                       expert = 1;

>> +                       break;

>> +               case 'V':

>> +-                      printf(_("%s version %s\n"), progname, VERSION);

>> ++                      printf(_("%s version %s\n"), io_progname,

>> VERSION);

>> +                       exit(0);

>> +               default:

>> +                       usage();

>> +diff --git a/mdrestore/xfs_mdrestore.c b/mdrestore/xfs_mdrestore.c

>> +index 9d1b4e8..b840a54 100644

>> +--- a/mdrestore/xfs_mdrestore.c

>> ++++ b/mdrestore/xfs_mdrestore.c

>> +@@ -19,7 +19,7 @@

>> + #include "libxfs.h"

>> + #include "xfs_metadump.h"

>> +

>> +-char          *progname;

>> ++char          *mdrestore_progname;

>> + int           show_progress = 0;

>> + int           show_info = 0;

>> + int           progress_since_warning = 0;

>> +@@ -30,7 +30,7 @@ fatal(const char *msg, ...)

>> +       va_list         args;

>> +

>> +       va_start(args, msg);

>> +-      fprintf(stderr, "%s: ", progname);

>> ++      fprintf(stderr, "%s: ", mdrestore_progname);

>> +       vfprintf(stderr, msg, args);

>> +       exit(1);

>> + }

>> +@@ -194,7 +194,7 @@ perform_restore(

>> + static void

>> + usage(void)

>> + {

>> +-      fprintf(stderr, "Usage: %s [-V] [-g] source target\n", progname);

>> ++      fprintf(stderr, "Usage: %s [-V] [-g] source target\n",

>> mdrestore_progname);

>> +       exit(1);

>> + }

>> +

>> +@@ -212,7 +212,7 @@ main(

>> +       struct stat     statbuf;

>> +       int             is_target_file;

>> +

>> +-      progname = basename(argv[0]);

>> ++      mdrestore_progname = basename(argv[0]);

>> +

>> +       while ((c = getopt(argc, argv, "giV")) != EOF) {

>> +               switch (c) {

>> +@@ -223,7 +223,7 @@ main(

>> +                               show_info = 1;

>> +                               break;

>> +                       case 'V':

>> +-                              printf("%s version %s\n", progname,

>> VERSION);

>> ++                              printf("%s version %s\n",

>> mdrestore_progname, VERSION);

>> +                               exit(0);

>> +                       default:

>> +                               usage();

>> +diff --git a/quota/init.c b/quota/init.c

>> +index d45dc4c..46403de 100644

>> +--- a/quota/init.c

>> ++++ b/quota/init.c

>> +@@ -21,7 +21,7 @@

>> + #include "input.h"

>> + #include "init.h"

>> +

>> +-char  *progname;

>> ++char  *quota_progname;

>> + int   exitcode;

>> + int   expert;

>> + bool  foreign_allowed = false;

>> +@@ -47,7 +47,7 @@ usage(void)

>> + {

>> +       fprintf(stderr,

>> +               _("Usage: %s [-V] [-x] [-f] [-p prog] [-c cmd]... [-d

>> project]... [path]\n"),

>> +-              progname);

>> ++              quota_progname);

>> +       exit(1);

>> + }

>> +

>> +@@ -147,7 +147,7 @@ init(

>> + {

>> +       int             c;

>> +

>> +-      progname = basename(argv[0]);

>> ++      quota_progname = basename(argv[0]);

>> +       setlocale(LC_ALL, "");

>> +       bindtextdomain(PACKAGE, LOCALEDIR);

>> +       textdomain(PACKAGE);

>> +@@ -173,13 +173,13 @@ init(

>> +                       projid_file = optarg;

>> +                       break;

>> +               case 'p':

>> +-                      progname = optarg;

>> ++                      quota_progname = optarg;

>> +                       break;

>> +               case 'x':

>> +                       expert++;

>> +                       break;

>> +               case 'V':

>> +-                      printf(_("%s version %s\n"), progname, VERSION);

>> ++                      printf(_("%s version %s\n"), quota_progname,

>> VERSION);

>> +                       exit(0);

>> +               default:

>> +                       usage();

>> +diff --git a/spaceman/init.c b/spaceman/init.c

>> +index b3eface..bedf112 100644

>> +--- a/spaceman/init.c

>> ++++ b/spaceman/init.c

>> +@@ -23,7 +23,7 @@

>> + #include "path.h"

>> + #include "space.h"

>> +

>> +-char  *progname;

>> ++char  *spaceman_progname;

>> + int   exitcode;

>> +

>> + void

>> +@@ -31,7 +31,7 @@ usage(void)

>> + {

>> +       fprintf(stderr,

>> +               _("Usage: %s [-c cmd] file\n"),

>> +-              progname);

>> ++              spaceman_progname);

>> +       exit(1);

>> + }

>> +

>> +@@ -74,7 +74,7 @@ init(

>> +       xfs_fsop_geom_t geometry = { 0 };

>> +       struct fs_path  fsp;

>> +

>> +-      progname = basename(argv[0]);

>> ++      spaceman_progname = basename(argv[0]);

>> +       setlocale(LC_ALL, "");

>> +       bindtextdomain(PACKAGE, LOCALEDIR);

>> +       textdomain(PACKAGE);

>> +@@ -86,7 +86,7 @@ init(

>> +                       add_user_command(optarg);

>> +                       break;

>> +               case 'V':

>> +-                      printf(_("%s version %s\n"), progname, VERSION);

>> ++                      printf(_("%s version %s\n"), spaceman_progname,

>> VERSION);

>> +                       exit(0);

>> +               default:

>> +                       usage();

>> +--

>> +2.14.1

>> +

>> diff --git

>> a/meta-filesystems/recipes-utils/xfsprogs/files/remove_flags_from_build_flags.patch

>> b/meta-filesystems/recipes-utils/xfsprogs/files/remove_flags_from_build_flags.patch

>> new file mode 100644

>> index 000000000..bba9a25c2

>> --- /dev/null

>> +++

>> b/meta-filesystems/recipes-utils/xfsprogs/files/remove_flags_from_build_flags.patch

>> @@ -0,0 +1,13 @@

>> +Index: xfsprogs-4.12.0/include/builddefs.in

>> +===================================================================

>> +--- xfsprogs-4.12.0.orig/include/builddefs.in

>> ++++ xfsprogs-4.12.0/include/builddefs.in

>> +@@ -164,7 +164,7 @@ ifeq ($(ENABLE_GETTEXT),yes)

>> + GCFLAGS += -DENABLE_GETTEXT

>> + endif

>> +

>> +-BUILD_CFLAGS += $(GCFLAGS) $(PCFLAGS)

>> ++BUILD_CFLAGS += $(GCFLAGS)

>> + # First, Global, Platform, Local CFLAGS

>> + CFLAGS += $(FCFLAGS) $(OPTIMIZER) $(GCFLAGS) $(PCFLAGS) $(LCFLAGS)

>> +

>> diff --git

>> a/meta-filesystems/recipes-utils/xfsprogs/files/xfsprogs-4.12.0-fix_musl.patch

>> b/meta-filesystems/recipes-utils/xfsprogs/files/xfsprogs-4.12.0-fix_musl.patch

>> new file mode 100644

>> index 000000000..efc57e4f6

>> --- /dev/null

>> +++

>> b/meta-filesystems/recipes-utils/xfsprogs/files/xfsprogs-4.12.0-fix_musl.patch

>> @@ -0,0 +1,117 @@

>> +From 21253610f9ef87db8e2a75b863b7fcfbd0cdb421 Mon Sep 17 00:00:00 2001

>> +From: "Darrick J. Wong" <darrick.wong@oracle.com>

>> +Date: Tue, 25 Jul 2017 13:45:01 -0500

>> +Subject: [PATCH] In patch 4944defad4 ("xfs_db: redirect printfs when

>> + metadumping to stdout"), we solved the problem of xfs_db printfs ending

>> up in

>> + the metadump stream by reassigning stdout for the duration of a stdout

>> + metadump.  Unfortunately, musl doesn't allow stdout to be reassigned (in

>> + their view "extern FILE *stdout" means "extern FILE * const stdout"), so

>> we

>> + abandon the old approach in favor of playing games with dup() to switch

>> the

>> + raw file descriptors.

>> +

>> +While we're at it, fix a regression where an unconverted outf test

>> +allows progress info to end up in the metadump stream.

>> +

>> +Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>

>> +---

>> + db/metadump.c | 47 ++++++++++++++++++++++++++++++++++++-----------

>> + 1 file changed, 36 insertions(+), 11 deletions(-)

>> +

>> +diff --git a/db/metadump.c b/db/metadump.c

>> +index 96641e0..4e2f648 100644

>> +--- a/db/metadump.c

>> ++++ b/db/metadump.c

>> +@@ -78,6 +78,7 @@ static int           obfuscate = 1;

>> + static int            zero_stale_data = 1;

>> + static int            show_warnings = 0;

>> + static int            progress_since_warning = 0;

>> ++static bool           stdout_metadump;

>> +

>> + void

>> + metadump_init(void)

>> +@@ -137,7 +138,7 @@ print_progress(const char *fmt, ...)

>> +       va_end(ap);

>> +       buf[sizeof(buf)-1] = '\0';

>> +

>> +-      f = (outf == stdout) ? stderr : stdout;

>> ++      f = stdout_metadump ? stderr : stdout;

>> +       fprintf(f, "\r%-59s", buf);

>> +       fflush(f);

>> +       progress_since_warning = 1;

>> +@@ -2750,7 +2751,8 @@ metadump_f(

>> +       xfs_agnumber_t  agno;

>> +       int             c;

>> +       int             start_iocur_sp;

>> +-      bool            stdout_metadump = false;

>> ++      int             outfd = -1;

>> ++      int             ret;

>> +       char            *p;

>> +

>> +       exitcode = 1;

>> +@@ -2870,16 +2872,35 @@ metadump_f(

>> +                * metadump operation so that dbprintf and other messages

>> +                * are sent to the console instead of polluting the

>> +                * metadump stream.

>> ++               *

>> ++               * We get to do this the hard way because musl doesn't

>> ++               * allow reassignment of stdout.

>> +                */

>> +-              outf = stdout;

>> +-              stdout = stderr;

>> ++              fflush(stdout);

>> ++              outfd = dup(STDOUT_FILENO);

>> ++              if (outfd < 0) {

>> ++                      perror("opening dump stream");

>> ++                      goto out;

>> ++              }

>> ++              ret = dup2(STDERR_FILENO, STDOUT_FILENO);

>> ++              if (ret < 0) {

>> ++                      perror("redirecting stdout");

>> ++                      close(outfd);

>> ++                      goto out;

>> ++              }

>> ++              outf = fdopen(outfd, "a");

>> ++              if (outf == NULL) {

>> ++                      fprintf(stderr, "cannot create dump stream\n");

>> ++                      dup2(outfd, 1);

>> ++                      close(outfd);

>> ++                      goto out;

>> ++              }

>> +               stdout_metadump = true;

>> +       } else {

>> +               outf = fopen(argv[optind], "wb");

>> +               if (outf == NULL) {

>> +                       print_warning("cannot create dump file");

>> +-                      free(metablock);

>> +-                      return 0;

>> ++                      goto out;

>> +               }

>> +       }

>> +

>> +@@ -2907,15 +2928,19 @@ metadump_f(

>> +       if (progress_since_warning)

>> +               fputc('\n', stdout_metadump ? stderr : stdout);

>> +

>> +-      if (stdout_metadump)

>> +-              stdout = outf;

>> +-      else

>> +-              fclose(outf);

>> ++      if (stdout_metadump) {

>> ++              fflush(outf);

>> ++              fflush(stdout);

>> ++              ret = dup2(outfd, STDOUT_FILENO);

>> ++              if (ret < 0)

>> ++                      perror("un-redirecting stdout");

>> ++      }

>> ++      fclose(outf);

>> +

>> +       /* cleanup iocur stack */

>> +       while (iocur_sp > start_iocur_sp)

>> +               pop_cur();

>> +-

>> ++out:

>> +       free(metablock);

>> +

>> +       return 0;

>> +--

>> +2.13.3

>> diff --git a/meta-filesystems/recipes-utils/xfsprogs/xfsprogs_4.11.0.bb

>> b/meta-filesystems/recipes-utils/xfsprogs/xfsprogs_4.12.0.bb

>> similarity index 85%

>> rename from meta-filesystems/recipes-utils/xfsprogs/xfsprogs_4.11.0.bb

>> rename to meta-filesystems/recipes-utils/xfsprogs/xfsprogs_4.12.0.bb

>> index 046dea425..444f712b5 100644

>> --- a/meta-filesystems/recipes-utils/xfsprogs/xfsprogs_4.11.0.bb

>> +++ b/meta-filesystems/recipes-utils/xfsprogs/xfsprogs_4.12.0.bb

>> @@ -8,9 +8,12 @@ DEPENDS = "util-linux util-linux-native"

>>  SRC_URI =

>> "https://www.kernel.org/pub/linux/utils/fs/xfs/xfsprogs/${BP}.tar.xz \

>>             file://link_needed_libs.patch \

>>             file://0001-define-__-prefixed-version-of-intXY_t-types.patch

>> \

>> +           file://remove_flags_from_build_flags.patch \

>> +           file://0001-Rename-progname-as-it-is-provided-by-libc.patch \

>> +           file://xfsprogs-4.12.0-fix_musl.patch \

>>             "

>> -SRC_URI[md5sum] = "f1f9b8c752347eefdb56483dafa0cefb"

>> -SRC_URI[sha256sum] =

>> "c3a6d87b564d7738243c507df82276bed982265e345363a95f2c764e8a5f5bb2"

>> +SRC_URI[md5sum] = "e348b0e1d7bd1cd82d64b91ff37e727e"

>> +SRC_URI[sha256sum] =

>> "b330ad8d737f4152ae511580102e2fc49212bb51dfb4b614084344abae46d0df"

>>

>>  inherit autotools-brokensep

>>

>> --

>> 2.14.1

>>

>> --

>> _______________________________________________

>> Openembedded-devel mailing list

>> Openembedded-devel@lists.openembedded.org

>> http://lists.openembedded.org/mailman/listinfo/openembedded-devel

>

>

-- 
_______________________________________________
Openembedded-devel mailing list
Openembedded-devel@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-devel
diff mbox series

Patch

diff --git a/meta-filesystems/recipes-utils/xfsprogs/files/0001-Rename-progname-as-it-is-provided-by-libc.patch b/meta-filesystems/recipes-utils/xfsprogs/files/0001-Rename-progname-as-it-is-provided-by-libc.patch
new file mode 100644
index 000000000..aa13b67be
--- /dev/null
+++ b/meta-filesystems/recipes-utils/xfsprogs/files/0001-Rename-progname-as-it-is-provided-by-libc.patch
@@ -0,0 +1,204 @@ 
+From 95aaaa800e0dc387875b4e2adad480b72c1632ff Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 2 Sep 2017 14:46:49 -0700
+Subject: [PATCH] Rename progname as it is provided by libc
+
+Rename local variable progname to avoid a clash with libc
+global symbols
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ io/init.c                 | 10 +++++-----
+ mdrestore/xfs_mdrestore.c | 10 +++++-----
+ quota/init.c              | 10 +++++-----
+ spaceman/init.c           |  8 ++++----
+ 4 files changed, 19 insertions(+), 19 deletions(-)
+
+diff --git a/io/init.c b/io/init.c
+index 20d5f80..e82e101 100644
+--- a/io/init.c
++++ b/io/init.c
+@@ -23,7 +23,7 @@
+ #include "init.h"
+ #include "io.h"
+ 
+-char	*progname;
++char	*io_progname;
+ int	exitcode;
+ int	expert;
+ int	idlethread;
+@@ -35,7 +35,7 @@ usage(void)
+ {
+ 	fprintf(stderr,
+ _("Usage: %s [-adfinrRstVx] [-m mode] [-p prog] [[-c|-C] cmd]... file\n"),
+-		progname);
++		io_progname);
+ 	exit(1);
+ }
+ 
+@@ -142,7 +142,7 @@ init(
+ 	xfs_fsop_geom_t	geometry = { 0 };
+ 	struct fs_path	fsp;
+ 
+-	progname = basename(argv[0]);
++	io_progname = basename(argv[0]);
+ 	setlocale(LC_ALL, "");
+ 	bindtextdomain(PACKAGE, LOCALEDIR);
+ 	textdomain(PACKAGE);
+@@ -186,7 +186,7 @@ init(
+ 			flags |= IO_NONBLOCK;
+ 			break;
+ 		case 'p':
+-			progname = optarg;
++			io_progname = optarg;
+ 			break;
+ 		case 'r':
+ 			flags |= IO_READONLY;
+@@ -207,7 +207,7 @@ init(
+ 			expert = 1;
+ 			break;
+ 		case 'V':
+-			printf(_("%s version %s\n"), progname, VERSION);
++			printf(_("%s version %s\n"), io_progname, VERSION);
+ 			exit(0);
+ 		default:
+ 			usage();
+diff --git a/mdrestore/xfs_mdrestore.c b/mdrestore/xfs_mdrestore.c
+index 9d1b4e8..b840a54 100644
+--- a/mdrestore/xfs_mdrestore.c
++++ b/mdrestore/xfs_mdrestore.c
+@@ -19,7 +19,7 @@
+ #include "libxfs.h"
+ #include "xfs_metadump.h"
+ 
+-char 		*progname;
++char 		*mdrestore_progname;
+ int		show_progress = 0;
+ int		show_info = 0;
+ int		progress_since_warning = 0;
+@@ -30,7 +30,7 @@ fatal(const char *msg, ...)
+ 	va_list		args;
+ 
+ 	va_start(args, msg);
+-	fprintf(stderr, "%s: ", progname);
++	fprintf(stderr, "%s: ", mdrestore_progname);
+ 	vfprintf(stderr, msg, args);
+ 	exit(1);
+ }
+@@ -194,7 +194,7 @@ perform_restore(
+ static void
+ usage(void)
+ {
+-	fprintf(stderr, "Usage: %s [-V] [-g] source target\n", progname);
++	fprintf(stderr, "Usage: %s [-V] [-g] source target\n", mdrestore_progname);
+ 	exit(1);
+ }
+ 
+@@ -212,7 +212,7 @@ main(
+ 	struct stat	statbuf;
+ 	int		is_target_file;
+ 
+-	progname = basename(argv[0]);
++	mdrestore_progname = basename(argv[0]);
+ 
+ 	while ((c = getopt(argc, argv, "giV")) != EOF) {
+ 		switch (c) {
+@@ -223,7 +223,7 @@ main(
+ 				show_info = 1;
+ 				break;
+ 			case 'V':
+-				printf("%s version %s\n", progname, VERSION);
++				printf("%s version %s\n", mdrestore_progname, VERSION);
+ 				exit(0);
+ 			default:
+ 				usage();
+diff --git a/quota/init.c b/quota/init.c
+index d45dc4c..46403de 100644
+--- a/quota/init.c
++++ b/quota/init.c
+@@ -21,7 +21,7 @@
+ #include "input.h"
+ #include "init.h"
+ 
+-char	*progname;
++char	*quota_progname;
+ int	exitcode;
+ int	expert;
+ bool	foreign_allowed = false;
+@@ -47,7 +47,7 @@ usage(void)
+ {
+ 	fprintf(stderr,
+ 		_("Usage: %s [-V] [-x] [-f] [-p prog] [-c cmd]... [-d project]... [path]\n"),
+-		progname);
++		quota_progname);
+ 	exit(1);
+ }
+ 
+@@ -147,7 +147,7 @@ init(
+ {
+ 	int		c;
+ 
+-	progname = basename(argv[0]);
++	quota_progname = basename(argv[0]);
+ 	setlocale(LC_ALL, "");
+ 	bindtextdomain(PACKAGE, LOCALEDIR);
+ 	textdomain(PACKAGE);
+@@ -173,13 +173,13 @@ init(
+ 			projid_file = optarg;
+ 			break;
+ 		case 'p':
+-			progname = optarg;
++			quota_progname = optarg;
+ 			break;
+ 		case 'x':
+ 			expert++;
+ 			break;
+ 		case 'V':
+-			printf(_("%s version %s\n"), progname, VERSION);
++			printf(_("%s version %s\n"), quota_progname, VERSION);
+ 			exit(0);
+ 		default:
+ 			usage();
+diff --git a/spaceman/init.c b/spaceman/init.c
+index b3eface..bedf112 100644
+--- a/spaceman/init.c
++++ b/spaceman/init.c
+@@ -23,7 +23,7 @@
+ #include "path.h"
+ #include "space.h"
+ 
+-char	*progname;
++char	*spaceman_progname;
+ int	exitcode;
+ 
+ void
+@@ -31,7 +31,7 @@ usage(void)
+ {
+ 	fprintf(stderr,
+ 		_("Usage: %s [-c cmd] file\n"),
+-		progname);
++		spaceman_progname);
+ 	exit(1);
+ }
+ 
+@@ -74,7 +74,7 @@ init(
+ 	xfs_fsop_geom_t	geometry = { 0 };
+ 	struct fs_path	fsp;
+ 
+-	progname = basename(argv[0]);
++	spaceman_progname = basename(argv[0]);
+ 	setlocale(LC_ALL, "");
+ 	bindtextdomain(PACKAGE, LOCALEDIR);
+ 	textdomain(PACKAGE);
+@@ -86,7 +86,7 @@ init(
+ 			add_user_command(optarg);
+ 			break;
+ 		case 'V':
+-			printf(_("%s version %s\n"), progname, VERSION);
++			printf(_("%s version %s\n"), spaceman_progname, VERSION);
+ 			exit(0);
+ 		default:
+ 			usage();
+-- 
+2.14.1
+
diff --git a/meta-filesystems/recipes-utils/xfsprogs/files/remove_flags_from_build_flags.patch b/meta-filesystems/recipes-utils/xfsprogs/files/remove_flags_from_build_flags.patch
new file mode 100644
index 000000000..bba9a25c2
--- /dev/null
+++ b/meta-filesystems/recipes-utils/xfsprogs/files/remove_flags_from_build_flags.patch
@@ -0,0 +1,13 @@ 
+Index: xfsprogs-4.12.0/include/builddefs.in
+===================================================================
+--- xfsprogs-4.12.0.orig/include/builddefs.in
++++ xfsprogs-4.12.0/include/builddefs.in
+@@ -164,7 +164,7 @@ ifeq ($(ENABLE_GETTEXT),yes)
+ GCFLAGS += -DENABLE_GETTEXT
+ endif
+ 
+-BUILD_CFLAGS += $(GCFLAGS) $(PCFLAGS)
++BUILD_CFLAGS += $(GCFLAGS)
+ # First, Global, Platform, Local CFLAGS
+ CFLAGS += $(FCFLAGS) $(OPTIMIZER) $(GCFLAGS) $(PCFLAGS) $(LCFLAGS)
+ 
diff --git a/meta-filesystems/recipes-utils/xfsprogs/files/xfsprogs-4.12.0-fix_musl.patch b/meta-filesystems/recipes-utils/xfsprogs/files/xfsprogs-4.12.0-fix_musl.patch
new file mode 100644
index 000000000..efc57e4f6
--- /dev/null
+++ b/meta-filesystems/recipes-utils/xfsprogs/files/xfsprogs-4.12.0-fix_musl.patch
@@ -0,0 +1,117 @@ 
+From 21253610f9ef87db8e2a75b863b7fcfbd0cdb421 Mon Sep 17 00:00:00 2001
+From: "Darrick J. Wong" <darrick.wong@oracle.com>
+Date: Tue, 25 Jul 2017 13:45:01 -0500
+Subject: [PATCH] In patch 4944defad4 ("xfs_db: redirect printfs when
+ metadumping to stdout"), we solved the problem of xfs_db printfs ending up in
+ the metadump stream by reassigning stdout for the duration of a stdout
+ metadump.  Unfortunately, musl doesn't allow stdout to be reassigned (in
+ their view "extern FILE *stdout" means "extern FILE * const stdout"), so we
+ abandon the old approach in favor of playing games with dup() to switch the
+ raw file descriptors.
+
+While we're at it, fix a regression where an unconverted outf test
+allows progress info to end up in the metadump stream.
+
+Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
+---
+ db/metadump.c | 47 ++++++++++++++++++++++++++++++++++++-----------
+ 1 file changed, 36 insertions(+), 11 deletions(-)
+
+diff --git a/db/metadump.c b/db/metadump.c
+index 96641e0..4e2f648 100644
+--- a/db/metadump.c
++++ b/db/metadump.c
+@@ -78,6 +78,7 @@ static int		obfuscate = 1;
+ static int		zero_stale_data = 1;
+ static int		show_warnings = 0;
+ static int		progress_since_warning = 0;
++static bool		stdout_metadump;
+ 
+ void
+ metadump_init(void)
+@@ -137,7 +138,7 @@ print_progress(const char *fmt, ...)
+ 	va_end(ap);
+ 	buf[sizeof(buf)-1] = '\0';
+ 
+-	f = (outf == stdout) ? stderr : stdout;
++	f = stdout_metadump ? stderr : stdout;
+ 	fprintf(f, "\r%-59s", buf);
+ 	fflush(f);
+ 	progress_since_warning = 1;
+@@ -2750,7 +2751,8 @@ metadump_f(
+ 	xfs_agnumber_t	agno;
+ 	int		c;
+ 	int		start_iocur_sp;
+-	bool		stdout_metadump = false;
++	int		outfd = -1;
++	int		ret;
+ 	char		*p;
+ 
+ 	exitcode = 1;
+@@ -2870,16 +2872,35 @@ metadump_f(
+ 		 * metadump operation so that dbprintf and other messages
+ 		 * are sent to the console instead of polluting the
+ 		 * metadump stream.
++		 *
++		 * We get to do this the hard way because musl doesn't
++		 * allow reassignment of stdout.
+ 		 */
+-		outf = stdout;
+-		stdout = stderr;
++		fflush(stdout);
++		outfd = dup(STDOUT_FILENO);
++		if (outfd < 0) {
++			perror("opening dump stream");
++			goto out;
++		}
++		ret = dup2(STDERR_FILENO, STDOUT_FILENO);
++		if (ret < 0) {
++			perror("redirecting stdout");
++			close(outfd);
++			goto out;
++		}
++		outf = fdopen(outfd, "a");
++		if (outf == NULL) {
++			fprintf(stderr, "cannot create dump stream\n");
++			dup2(outfd, 1);
++			close(outfd);
++			goto out;
++		}
+ 		stdout_metadump = true;
+ 	} else {
+ 		outf = fopen(argv[optind], "wb");
+ 		if (outf == NULL) {
+ 			print_warning("cannot create dump file");
+-			free(metablock);
+-			return 0;
++			goto out;
+ 		}
+ 	}
+ 
+@@ -2907,15 +2928,19 @@ metadump_f(
+ 	if (progress_since_warning)
+ 		fputc('\n', stdout_metadump ? stderr : stdout);
+ 
+-	if (stdout_metadump)
+-		stdout = outf;
+-	else
+-		fclose(outf);
++	if (stdout_metadump) {
++		fflush(outf);
++		fflush(stdout);
++		ret = dup2(outfd, STDOUT_FILENO);
++		if (ret < 0)
++			perror("un-redirecting stdout");
++	}
++	fclose(outf);
+ 
+ 	/* cleanup iocur stack */
+ 	while (iocur_sp > start_iocur_sp)
+ 		pop_cur();
+-
++out:
+ 	free(metablock);
+ 
+ 	return 0;
+-- 
+2.13.3
diff --git a/meta-filesystems/recipes-utils/xfsprogs/xfsprogs_4.11.0.bb b/meta-filesystems/recipes-utils/xfsprogs/xfsprogs_4.12.0.bb
similarity index 85%
rename from meta-filesystems/recipes-utils/xfsprogs/xfsprogs_4.11.0.bb
rename to meta-filesystems/recipes-utils/xfsprogs/xfsprogs_4.12.0.bb
index 046dea425..444f712b5 100644
--- a/meta-filesystems/recipes-utils/xfsprogs/xfsprogs_4.11.0.bb
+++ b/meta-filesystems/recipes-utils/xfsprogs/xfsprogs_4.12.0.bb
@@ -8,9 +8,12 @@  DEPENDS = "util-linux util-linux-native"
 SRC_URI = "https://www.kernel.org/pub/linux/utils/fs/xfs/xfsprogs/${BP}.tar.xz \
            file://link_needed_libs.patch \
            file://0001-define-__-prefixed-version-of-intXY_t-types.patch \
+           file://remove_flags_from_build_flags.patch \
+           file://0001-Rename-progname-as-it-is-provided-by-libc.patch \
+           file://xfsprogs-4.12.0-fix_musl.patch \
            "
-SRC_URI[md5sum] = "f1f9b8c752347eefdb56483dafa0cefb"
-SRC_URI[sha256sum] = "c3a6d87b564d7738243c507df82276bed982265e345363a95f2c764e8a5f5bb2"
+SRC_URI[md5sum] = "e348b0e1d7bd1cd82d64b91ff37e727e"
+SRC_URI[sha256sum] = "b330ad8d737f4152ae511580102e2fc49212bb51dfb4b614084344abae46d0df"
 
 inherit autotools-brokensep