From bdcc549ca9135ba8f8a37dfe99ed5b835d080759 Mon Sep 17 00:00:00 2001 From: Lukas Czerner Date: Fri, 31 Jan 2020 09:59:11 +0100 Subject: [PATCH] Fix build errors on gcc 10 gcc version 10 changed the default from -fcommon to -fno-common and as a result e2fsprogs unit tests fail because tst_libext2fs.c end up with a build error. Fix the problem by creating an extern declaration of said variables in debugfs.h and just setting them in tst_libext2fs.c without additional declaration. Signed-off-by: Lukas Czerner --- ...oid-multiple-definition-of-global-va.patch | 65 +++++++++++++++++++ e2fsprogs.spec | 9 ++- 2 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 0001-tst_libext2fs-Avoid-multiple-definition-of-global-va.patch diff --git a/0001-tst_libext2fs-Avoid-multiple-definition-of-global-va.patch b/0001-tst_libext2fs-Avoid-multiple-definition-of-global-va.patch new file mode 100644 index 0000000..6b27fab --- /dev/null +++ b/0001-tst_libext2fs-Avoid-multiple-definition-of-global-va.patch @@ -0,0 +1,65 @@ +From 92c24f230ac7c02b5111849d94db14a24626bee4 Mon Sep 17 00:00:00 2001 +From: Lukas Czerner +Date: Thu, 30 Jan 2020 13:24:19 +0100 +Subject: [PATCH] tst_libext2fs: Avoid multiple definition of global variables + +gcc version 10 changed the default from -fcommon to -fno-common and as a +result e2fsprogs unit tests fail because tst_libext2fs.c end up with a +build error. + +This is because it defines two global variables debug_prog_name and +extra_cmds that are already defined in debugfs/debugfs.c. With -fcommon +linker was able to resolve those into the same object, however with +-fno-common it's no longer able to do it and we end up with +multiple definition errors. + +Fix the problem by creating an extern declaration of said variables in +debugfs.h and just setting them in tst_libext2fs.c without additional +declaration. + +Signed-off-by: Lukas Czerner +--- + debugfs/debugfs.h | 2 ++ + lib/ext2fs/tst_libext2fs.c | 5 +++-- + 2 files changed, 5 insertions(+), 2 deletions(-) + +diff --git a/debugfs/debugfs.h b/debugfs/debugfs.h +index 477d9bbb..956517bc 100644 +--- a/debugfs/debugfs.h ++++ b/debugfs/debugfs.h +@@ -123,6 +123,8 @@ extern void do_set_block_group_descriptor(int argc, char **, int sci_idx, void * + extern void do_dump_unused(int argc, char **argv, int sci_idx, void *infop); + + /* debugfs.c */ ++extern ss_request_table *extra_cmds; ++extern const char *debug_prog_name; + extern void internal_dump_inode(FILE *, const char *, ext2_ino_t, + struct ext2_inode *, int); + +diff --git a/lib/ext2fs/tst_libext2fs.c b/lib/ext2fs/tst_libext2fs.c +index 3e7497cd..43f0d153 100644 +--- a/lib/ext2fs/tst_libext2fs.c ++++ b/lib/ext2fs/tst_libext2fs.c +@@ -28,9 +28,7 @@ + * Hook in new commands into debugfs + * Override debugfs's prompt + */ +-const char *debug_prog_name = "tst_libext2fs"; + extern ss_request_table libext2fs_cmds; +-ss_request_table *extra_cmds = &libext2fs_cmds; + + static int print_blocks_proc(ext2_filsys fs EXT2FS_ATTR((unused)), + blk64_t *blocknr, e2_blkcnt_t blockcnt, +@@ -51,6 +49,9 @@ void do_block_iterate(int argc, char **argv, int sci_idx EXT2FS_ATTR((unused)), + int err = 0; + int flags = 0; + ++ debug_prog_name = "tst_libext2fs"; ++ extra_cmds = &libext2fs_cmds; ++ + if (common_args_process(argc, argv, 2, 3, argv[0], usage, 0)) + return; + +-- +2.21.1 + diff --git a/e2fsprogs.spec b/e2fsprogs.spec index 9e4f2c9..6b6cbd1 100644 --- a/e2fsprogs.spec +++ b/e2fsprogs.spec @@ -1,7 +1,7 @@ Summary: Utilities for managing ext2, ext3, and ext4 file systems Name: e2fsprogs Version: 1.45.5 -Release: 2%{?dist} +Release: 3%{?dist} # License tags based on COPYING file distinctions for various components License: GPLv2 @@ -27,6 +27,8 @@ BuildRequires: gettext BuildRequires: multilib-rpm-config BuildRequires: systemd +Patch0: 0001-tst_libext2fs-Avoid-multiple-definition-of-global-va.patch + %description The e2fsprogs package contains a number of utilities for creating, checking, modifying, and correcting any inconsistencies in second, @@ -154,6 +156,8 @@ managed device with some free space available in respective volume group. %prep %setup -q +%patch0 -p1 + %global _udevdir %{_prefix}/lib/udev/rules.d %build @@ -320,6 +324,9 @@ make fullcheck %{_udevdir}/96-e2scrub.rules %changelog +* Thu Jan 30 2020 Lukas Czerner - 1.45.5-3 +- Fix build errors with gcc 10 + * Tue Jan 28 2020 Fedora Release Engineering - 1.45.5-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild