* [Buildroot] [PATCH 1/2] package/lvm2: bump version to 2.02.180
@ 2018-07-25 12:37 Marcin Niestroj
2018-07-25 12:37 ` [Buildroot] [PATCH 2/2] package/lvm2: Fix runtime crash when using uclibc Marcin Niestroj
2018-07-25 14:46 ` [Buildroot] [PATCH 1/2] package/lvm2: bump version to 2.02.180 Baruch Siach
0 siblings, 2 replies; 10+ messages in thread
From: Marcin Niestroj @ 2018-07-25 12:37 UTC (permalink / raw)
To: buildroot
lvm2 starting from version 2.02.178 depends on libaio library.
Signed-off-by: Marcin Niestroj <m.niestroj@grinn-global.com>
---
package/lvm2/Config.in | 3 +++
package/lvm2/lvm2.hash | 4 ++--
package/lvm2/lvm2.mk | 6 +++---
3 files changed, 8 insertions(+), 5 deletions(-)
diff --git a/package/lvm2/Config.in b/package/lvm2/Config.in
index 0dd6d53b4a..5f706982cd 100644
--- a/package/lvm2/Config.in
+++ b/package/lvm2/Config.in
@@ -1,8 +1,10 @@
config BR2_PACKAGE_LVM2
bool "lvm2 & device mapper"
+ depends on BR2_PACKAGE_LIBAIO_ARCH_SUPPORTS
depends on BR2_TOOLCHAIN_HAS_THREADS
depends on BR2_USE_MMU # needs fork()
depends on !BR2_STATIC_LIBS # It fails to build statically
+ select BR2_PACKAGE_LIBAIO
help
This is LVM2, the rewrite of The Linux Logical Volume Manager.
LVM supports enterprise level volume management of disk and
@@ -50,4 +52,5 @@ endif
comment "lvm2 needs a toolchain w/ threads, dynamic library"
depends on BR2_USE_MMU
+ depends on BR2_PACKAGE_LIBAIO_ARCH_SUPPORTS
depends on BR2_STATIC_LIBS || !BR2_TOOLCHAIN_HAS_THREADS
diff --git a/package/lvm2/lvm2.hash b/package/lvm2/lvm2.hash
index b0dfcfcef3..697a413995 100644
--- a/package/lvm2/lvm2.hash
+++ b/package/lvm2/lvm2.hash
@@ -1,5 +1,5 @@
-# From ftp://sources.redhat.com/pub/lvm2/releases/sha512.sum
-sha512 c2ea8beafe006abf9282f51ec98600fd0ebff816d53c10ecbb19bbf336ada4825135cf9c92ccd364afb18f8b1d7e163eff5bdec8dfdd70dfb9ba45db2f6bdd5e LVM2.2.02.173.tgz
+# From ftp://sources.redhat.com/pub/lvm2/sha512.sum
+sha512 6e0a10ab48be4f0c751447c6ab88b8f9fa1dcd1d703de77966e8507b173df70b1987fa0be252c31dfce9e0ee70e5f439db58c8f534e24144a70f254c091554ee LVM2.2.02.180.tgz
# Locally computed sha256 checksums
sha256 e76fbcd2fb97cf202da330301327754d2db5c58b5b4bebd3a8a749393e7603d1 COPYING
sha256 5df07007198989c622f5d41de8d703e7bef3d0e79d62e24332ee739a452af62a COPYING.LIB
diff --git a/package/lvm2/lvm2.mk b/package/lvm2/lvm2.mk
index 20e0dd0d5c..fd823da846 100644
--- a/package/lvm2/lvm2.mk
+++ b/package/lvm2/lvm2.mk
@@ -4,9 +4,9 @@
#
################################################################################
-LVM2_VERSION = 2.02.173
+LVM2_VERSION = 2.02.180
LVM2_SOURCE = LVM2.$(LVM2_VERSION).tgz
-LVM2_SITE = ftp://sources.redhat.com/pub/lvm2/releases
+LVM2_SITE = ftp://sources.redhat.com/pub/lvm2
LVM2_INSTALL_STAGING = YES
LVM2_LICENSE = GPL-2.0, LGPL-2.1
LVM2_LICENSE_FILES = COPYING COPYING.LIB
@@ -21,7 +21,7 @@ LVM2_CONF_OPTS += \
--enable-dmeventd \
--disable-nls
-LVM2_DEPENDENCIES += host-pkgconf
+LVM2_DEPENDENCIES += host-pkgconf libaio
# LVM2 uses autoconf, but not automake, and the build system does not
# take into account the toolchain passed at configure time.
--
2.18.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [Buildroot] [PATCH 2/2] package/lvm2: Fix runtime crash when using uclibc
2018-07-25 12:37 [Buildroot] [PATCH 1/2] package/lvm2: bump version to 2.02.180 Marcin Niestroj
@ 2018-07-25 12:37 ` Marcin Niestroj
2018-07-25 16:09 ` Thomas Petazzoni
2018-07-25 14:46 ` [Buildroot] [PATCH 1/2] package/lvm2: bump version to 2.02.180 Baruch Siach
1 sibling, 1 reply; 10+ messages in thread
From: Marcin Niestroj @ 2018-07-25 12:37 UTC (permalink / raw)
To: buildroot
When using uclibc libdevmapper.so was calling dm_task_get_info_base()
function recursively, leading to segmentation fault. This was
happening because uclibc linker loader just takes first existing
'dm_task_get_info' (which is 'dm_task_get_info_base') symbol in elf
binary, instead of default version.
Add upstreamable lvm2 patch [1], which introduces
--enable-symvers[=STYLE] switch. Use that switch to disable symbol
versions, as we do not plan to support binaries compiled against
old libdevmapper library.
[1] https://www.redhat.com/archives/dm-devel/2018-July/msg00187.html
Signed-off-by: Marcin Niestroj <m.niestroj@grinn-global.com>
---
...gure-Introduce-enable-symvers-option.patch | 288 ++++++++++++++++++
package/lvm2/lvm2.mk | 3 +-
2 files changed, 290 insertions(+), 1 deletion(-)
create mode 100644 package/lvm2/0001-configure-Introduce-enable-symvers-option.patch
diff --git a/package/lvm2/0001-configure-Introduce-enable-symvers-option.patch b/package/lvm2/0001-configure-Introduce-enable-symvers-option.patch
new file mode 100644
index 0000000000..757305a86d
--- /dev/null
+++ b/package/lvm2/0001-configure-Introduce-enable-symvers-option.patch
@@ -0,0 +1,288 @@
+From f4fb05978de506c6941c80493c4f3b77f0509913 Mon Sep 17 00:00:00 2001
+From: Marcin Niestroj <m.niestroj@grinn-global.com>
+Date: Fri, 20 Jul 2018 14:26:44 +0200
+Subject: [PATCH] configure: Introduce --enable-symvers option
+
+Only few libc (e.g. glibc) libraries support full symbol version
+resolution in runtime. There are lot of standard libraries that do not
+support that, such as dietlibc, musl and uclibc. Hence there is no
+reason to generate symbol versions when compiling against them.
+
+Additionally libdevmapper.so was broken when compiled against
+uclibc. Runtime linker loader caused calling dm_task_get_info_base()
+function recursively, leading to segmentation fault.
+
+Introduce --enable-symvers[=STYLE] option, which allows to choose
+between gnu and disabled symbol versioning. By default gnu symbol
+versioning is used to provide backward compatibility.
+__GNUC__ check is replaced now with GNU_SYMVER, which is generated by
+configure script. Additionally ld version script is included only in
+case of gnu option, which slightly reduces output size.
+
+Providing --disable-symvers to configure script when building against
+uclibc library fixes segmentation fault error described above, due to
+lack of several versions of the same symbol in libdevmapper.so
+library.
+---
+ WHATS_NEW | 1 +
+ configure | 32 ++++++++++++++++++++++++++++++--
+ configure.ac | 28 +++++++++++++++++++++++++---
+ include/configure.h.in | 3 +++
+ lib/misc/lib.h | 10 +++++-----
+ libdm/datastruct/bitset.c | 5 +----
+ libdm/ioctl/libdm-iface.c | 2 +-
+ libdm/libdm-deptree.c | 2 +-
+ libdm/libdm-stats.c | 2 +-
+ 9 files changed, 68 insertions(+), 17 deletions(-)
+
+diff --git a/WHATS_NEW b/WHATS_NEW
+index bdd2fa635..2279c4275 100644
+--- a/WHATS_NEW
++++ b/WHATS_NEW
+@@ -1,5 +1,6 @@
+ Version 2.02.181 -
+ =================================
++ Introduce --enable-symvers[=STYLE] switch.
+
+ Version 2.02.180 - 19th July 2018
+ =================================
+diff --git a/configure b/configure
+index 7d945dfa8..94cd6b1ea 100755
+--- a/configure
++++ b/configure
+@@ -975,6 +975,7 @@ enable_fsadm
+ enable_blkdeactivate
+ enable_dmeventd
+ enable_selinux
++enable_symvers
+ enable_nls
+ with_localedir
+ with_confdir
+@@ -1725,6 +1726,9 @@ Optional Features:
+ --disable-blkdeactivate disable blkdeactivate
+ --enable-dmeventd enable the device-mapper event daemon
+ --disable-selinux disable selinux support
++ --enable-symvers[=STYLE]
++ enables symbol versioning of the shared library
++ [default=gnu]
+ --enable-nls enable Native Language Support
+
+ Optional Packages:
+@@ -3156,7 +3160,6 @@ if test -z "$CFLAGS"; then :
+ fi
+ case "$host_os" in
+ linux*)
+- CLDFLAGS="$CLDFLAGS -Wl,--version-script,.export.sym"
+ # equivalent to -rdynamic
+ ELDFLAGS="-Wl,--export-dynamic"
+ # FIXME Generate list and use --dynamic-list=.dlopen.sym
+@@ -3178,7 +3181,6 @@ case "$host_os" in
+ ;;
+ darwin*)
+ CFLAGS="$CFLAGS -no-cpp-precomp -fno-common"
+- CLDFLAGS="$CLDFLAGS"
+ ELDFLAGS=
+ CLDWHOLEARCHIVE="-all_load"
+ CLDNOWHOLEARCHIVE=
+@@ -14401,6 +14403,32 @@ done
+ LIBS=$lvm_saved_libs
+ fi
+
++################################################################################
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable symbol versioning" >&5
++$as_echo_n "checking whether to enable symbol versioning... " >&6; }
++# Check whether --enable-symvers was given.
++if test "${enable_symvers+set}" = set; then :
++ enableval=$enable_symvers;
++ case "$enableval" in
++ gnu|no) ;;
++ *) as_fn_error $? "Unknown argument to enable/disable symvers" "$LINENO" 5 ;;
++ esac
++else
++ enable_symvers=gnu
++fi
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_symvers" >&5
++$as_echo "$enable_symvers" >&6; }
++
++if test x$GCC = xyes && test x$enable_symvers = xgnu ; then
++
++$as_echo "#define GNU_SYMVER 1" >>confdefs.h
++
++ case "$host_os" in
++ linux*) CLDFLAGS="$CLDFLAGS -Wl,--version-script,.export.sym" ;;
++ esac
++fi
++
+ ################################################################################
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable internationalisation" >&5
+ $as_echo_n "checking whether to enable internationalisation... " >&6; }
+diff --git a/configure.ac b/configure.ac
+index e427708cd..2e8712f92 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -30,13 +30,11 @@ AC_CANONICAL_TARGET([])
+ AS_IF([test -z "$CFLAGS"], [COPTIMISE_FLAG="-O2"])
+ case "$host_os" in
+ linux*)
+- CLDFLAGS="$CLDFLAGS -Wl,--version-script,.export.sym"
+ # equivalent to -rdynamic
+ ELDFLAGS="-Wl,--export-dynamic"
+ # FIXME Generate list and use --dynamic-list=.dlopen.sym
+ CLDWHOLEARCHIVE="-Wl,-whole-archive"
+ CLDNOWHOLEARCHIVE="-Wl,-no-whole-archive"
+- LDDEPS="$LDDEPS .export.sym"
+ LIB_SUFFIX=so
+ DEVMAPPER=yes
+ BUILD_LVMETAD=no
+@@ -52,7 +50,6 @@ case "$host_os" in
+ ;;
+ darwin*)
+ CFLAGS="$CFLAGS -no-cpp-precomp -fno-common"
+- CLDFLAGS="$CLDFLAGS"
+ ELDFLAGS=
+ CLDWHOLEARCHIVE="-all_load"
+ CLDNOWHOLEARCHIVE=
+@@ -1656,6 +1653,31 @@ package as well (which may be called readline-devel or something similar).])
+ LIBS=$lvm_saved_libs
+ fi
+
++################################################################################
++dnl -- Symbol versioning
++AC_MSG_CHECKING(whether to enable symbol versioning)
++AC_ARG_ENABLE(symvers,
++ AC_HELP_STRING([--enable-symvers[[[=STYLE]]]],
++ [enables symbol versioning of the shared library [default=gnu]]),
++ [
++ case "$enableval" in
++ gnu|no) ;;
++ *) AC_MSG_ERROR(Unknown argument to enable/disable symvers) ;;
++ esac],
++ enable_symvers=gnu)
++AC_MSG_RESULT($enable_symvers)
++
++if test x$GCC = xyes && test x$enable_symvers = xgnu ; then
++ AC_DEFINE(GNU_SYMVER, 1,
++ [Define to use GNU versioning in the shared library.])
++ case "$host_os" in
++ linux*)
++ CLDFLAGS="$CLDFLAGS -Wl,--version-script,.export.sym"
++ LDDEPS="$LDDEPS .export.sym"
++ ;;
++ esac
++fi
++
+ ################################################################################
+ dnl -- Internationalisation stuff
+ AC_MSG_CHECKING(whether to enable internationalisation)
+diff --git a/include/configure.h.in b/include/configure.h.in
+index 15fd150ed..7a07a10ef 100644
+--- a/include/configure.h.in
++++ b/include/configure.h.in
+@@ -147,6 +147,9 @@
+ /* Path to fsadm binary. */
+ #undef FSADM_PATH
+
++/* Define to use GNU versioning in the shared library. */
++#undef GNU_SYMVER
++
+ /* Define to 1 if you have the `alarm' function. */
+ #undef HAVE_ALARM
+
+diff --git a/lib/misc/lib.h b/lib/misc/lib.h
+index d7fa5c721..7cf98f932 100644
+--- a/lib/misc/lib.h
++++ b/lib/misc/lib.h
+@@ -41,16 +41,16 @@
+ * macro DM_EXPORT_SYMBOL to export the function and bind it to the
+ * specified version string.
+ *
+- * Since versioning is only available when compiling with GCC the entire
+- * compatibility version should be enclosed in '#if defined(__GNUC__)',
+- * for example:
++ * Since versioning is only available when compiling with GCC
++ * and GLIBC the entire compatibility version should be enclosed
++ * in '#if defined(GNU_SYMVER)', for example:
+ *
+ * int dm_foo(int bar)
+ * {
+ * return bar;
+ * }
+ *
+- * #if defined(__GNUC__)
++ * #if defined(GNU_SYMVER)
+ * // Backward compatible dm_foo() version 1.02.104
+ * int dm_foo_v1_02_104(void);
+ * int dm_foo_v1_02_104(void)
+@@ -67,7 +67,7 @@
+ * versions of library symbols prior to the introduction of symbol
+ * versioning: it must never be used for new symbols.
+ */
+-#if defined(__GNUC__)
++#if defined(GNU_SYMVER)
+ #define DM_EXPORT_SYMBOL(func, ver) \
+ __asm__(".symver " #func "_v" #ver ", " #func "@DM_" #ver )
+ #define DM_EXPORT_SYMBOL_BASE(func) \
+diff --git a/libdm/datastruct/bitset.c b/libdm/datastruct/bitset.c
+index b0826e1eb..2ec3f8f84 100644
+--- a/libdm/datastruct/bitset.c
++++ b/libdm/datastruct/bitset.c
+@@ -242,7 +242,7 @@ bad:
+ return NULL;
+ }
+
+-#if defined(__GNUC__)
++#if defined(GNU_SYMVER)
+ /*
+ * Maintain backward compatibility with older versions that did not
+ * accept a 'min_num_bits' argument to dm_bitset_parse_list().
+@@ -253,7 +253,4 @@ dm_bitset_t dm_bitset_parse_list_v1_02_129(const char *str, struct dm_pool *mem)
+ return dm_bitset_parse_list(str, mem, 0);
+ }
+ DM_EXPORT_SYMBOL(dm_bitset_parse_list, 1_02_129);
+-
+-#else /* if defined(__GNUC__) */
+-
+ #endif
+diff --git a/libdm/ioctl/libdm-iface.c b/libdm/ioctl/libdm-iface.c
+index 769b69c1b..28e2eadee 100644
+--- a/libdm/ioctl/libdm-iface.c
++++ b/libdm/ioctl/libdm-iface.c
+@@ -2145,7 +2145,7 @@ void dm_lib_exit(void)
+ _version_checked = 0;
+ }
+
+-#if defined(__GNUC__)
++#if defined(GNU_SYMVER)
+ /*
+ * Maintain binary backward compatibility.
+ * Version script mechanism works with 'gcc' compatible compilers only.
+diff --git a/libdm/libdm-deptree.c b/libdm/libdm-deptree.c
+index ab0545659..00651c0b2 100644
+--- a/libdm/libdm-deptree.c
++++ b/libdm/libdm-deptree.c
+@@ -3797,7 +3797,7 @@ void dm_tree_node_set_callback(struct dm_tree_node *dnode,
+ dnode->callback_data = data;
+ }
+
+-#if defined(__GNUC__)
++#if defined(GNU_SYMVER)
+ /*
+ * Backward compatible implementations.
+ *
+diff --git a/libdm/libdm-stats.c b/libdm/libdm-stats.c
+index 94ad380e0..76efbbe35 100644
+--- a/libdm/libdm-stats.c
++++ b/libdm/libdm-stats.c
+@@ -5065,7 +5065,7 @@ int dm_stats_start_filemapd(int fd, uint64_t group_id, const char *path,
+ * current dm_stats_create_region() version.
+ */
+
+-#if defined(__GNUC__)
++#if defined(GNU_SYMVER)
+ int dm_stats_create_region_v1_02_106(struct dm_stats *dms, uint64_t *region_id,
+ uint64_t start, uint64_t len, int64_t step,
+ int precise, const char *program_id,
+--
+2.18.0
+
diff --git a/package/lvm2/lvm2.mk b/package/lvm2/lvm2.mk
index fd823da846..2352f17af0 100644
--- a/package/lvm2/lvm2.mk
+++ b/package/lvm2/lvm2.mk
@@ -19,7 +19,8 @@ LVM2_CONF_OPTS += \
--enable-pkgconfig \
--enable-cmdlib \
--enable-dmeventd \
- --disable-nls
+ --disable-nls \
+ --disable-symvers
LVM2_DEPENDENCIES += host-pkgconf libaio
--
2.18.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [Buildroot] [PATCH 1/2] package/lvm2: bump version to 2.02.180
2018-07-25 12:37 [Buildroot] [PATCH 1/2] package/lvm2: bump version to 2.02.180 Marcin Niestroj
2018-07-25 12:37 ` [Buildroot] [PATCH 2/2] package/lvm2: Fix runtime crash when using uclibc Marcin Niestroj
@ 2018-07-25 14:46 ` Baruch Siach
2018-07-25 16:16 ` Marcin Niestroj
1 sibling, 1 reply; 10+ messages in thread
From: Baruch Siach @ 2018-07-25 14:46 UTC (permalink / raw)
To: buildroot
Hi Marcin,
On Wed, Jul 25, 2018 at 02:37:02PM +0200, Marcin Niestroj wrote:
> lvm2 starting from version 2.02.178 depends on libaio library.
>
> Signed-off-by: Marcin Niestroj <m.niestroj@grinn-global.com>
> ---
> package/lvm2/Config.in | 3 +++
> package/lvm2/lvm2.hash | 4 ++--
> package/lvm2/lvm2.mk | 6 +++---
> 3 files changed, 8 insertions(+), 5 deletions(-)
>
> diff --git a/package/lvm2/Config.in b/package/lvm2/Config.in
> index 0dd6d53b4a..5f706982cd 100644
> --- a/package/lvm2/Config.in
> +++ b/package/lvm2/Config.in
> @@ -1,8 +1,10 @@
> config BR2_PACKAGE_LVM2
> bool "lvm2 & device mapper"
> + depends on BR2_PACKAGE_LIBAIO_ARCH_SUPPORTS
This new dependency needs to be added to all lvm2 reverse dependencies, i.e.,
packages that select BR2_PACKAGE_LVM2, as well as their reverse dependencies.
> depends on BR2_TOOLCHAIN_HAS_THREADS
> depends on BR2_USE_MMU # needs fork()
> depends on !BR2_STATIC_LIBS # It fails to build statically
> + select BR2_PACKAGE_LIBAIO
> help
> This is LVM2, the rewrite of The Linux Logical Volume Manager.
> LVM supports enterprise level volume management of disk and
> @@ -50,4 +52,5 @@ endif
>
> comment "lvm2 needs a toolchain w/ threads, dynamic library"
> depends on BR2_USE_MMU
> + depends on BR2_PACKAGE_LIBAIO_ARCH_SUPPORTS
> depends on BR2_STATIC_LIBS || !BR2_TOOLCHAIN_HAS_THREADS
baruch
--
http://baruch.siach.name/blog/ ~. .~ Tk Open Systems
=}------------------------------------------------ooO--U--Ooo------------{=
- baruch at tkos.co.il - tel: +972.2.679.5364, http://www.tkos.co.il -
^ permalink raw reply [flat|nested] 10+ messages in thread
* [Buildroot] [PATCH 2/2] package/lvm2: Fix runtime crash when using uclibc
2018-07-25 12:37 ` [Buildroot] [PATCH 2/2] package/lvm2: Fix runtime crash when using uclibc Marcin Niestroj
@ 2018-07-25 16:09 ` Thomas Petazzoni
2018-07-25 16:18 ` Marcin Niestroj
0 siblings, 1 reply; 10+ messages in thread
From: Thomas Petazzoni @ 2018-07-25 16:09 UTC (permalink / raw)
To: buildroot
Hello Marcin,
On Wed, 25 Jul 2018 14:37:03 +0200, Marcin Niestroj wrote:
> When using uclibc libdevmapper.so was calling dm_task_get_info_base()
> function recursively, leading to segmentation fault. This was
> happening because uclibc linker loader just takes first existing
> 'dm_task_get_info' (which is 'dm_task_get_info_base') symbol in elf
> binary, instead of default version.
>
> Add upstreamable lvm2 patch [1], which introduces
> --enable-symvers[=STYLE] switch. Use that switch to disable symbol
> versions, as we do not plan to support binaries compiled against
> old libdevmapper library.
>
> [1] https://www.redhat.com/archives/dm-devel/2018-July/msg00187.html
>
> Signed-off-by: Marcin Niestroj <m.niestroj@grinn-global.com>
Is this needed only with the lvm2 bump to 2.02.180 ? Or is it needed
even with the current version of lvm2 we have packaged in Buildroot ?
> ---
> ...gure-Introduce-enable-symvers-option.patch | 288 ++++++++++++++++++
> package/lvm2/lvm2.mk | 3 +-
> 2 files changed, 290 insertions(+), 1 deletion(-)
> create mode 100644 package/lvm2/0001-configure-Introduce-enable-symvers-option.patch
>
> diff --git a/package/lvm2/0001-configure-Introduce-enable-symvers-option.patch b/package/lvm2/0001-configure-Introduce-enable-symvers-option.patch
> new file mode 100644
> index 0000000000..757305a86d
> --- /dev/null
> +++ b/package/lvm2/0001-configure-Introduce-enable-symvers-option.patch
> @@ -0,0 +1,288 @@
> +From f4fb05978de506c6941c80493c4f3b77f0509913 Mon Sep 17 00:00:00 2001
> +From: Marcin Niestroj <m.niestroj@grinn-global.com>
> +Date: Fri, 20 Jul 2018 14:26:44 +0200
> +Subject: [PATCH] configure: Introduce --enable-symvers option
> +
> +Only few libc (e.g. glibc) libraries support full symbol version
> +resolution in runtime. There are lot of standard libraries that do not
> +support that, such as dietlibc, musl and uclibc. Hence there is no
> +reason to generate symbol versions when compiling against them.
> +
> +Additionally libdevmapper.so was broken when compiled against
> +uclibc. Runtime linker loader caused calling dm_task_get_info_base()
> +function recursively, leading to segmentation fault.
> +
> +Introduce --enable-symvers[=STYLE] option, which allows to choose
> +between gnu and disabled symbol versioning. By default gnu symbol
> +versioning is used to provide backward compatibility.
> +__GNUC__ check is replaced now with GNU_SYMVER, which is generated by
> +configure script. Additionally ld version script is included only in
> +case of gnu option, which slightly reduces output size.
> +
> +Providing --disable-symvers to configure script when building against
> +uclibc library fixes segmentation fault error described above, due to
> +lack of several versions of the same symbol in libdevmapper.so
> +library.
Could you add your SoB to the patch itself ?
Thanks!
Thomas
--
Thomas Petazzoni, CTO, Bootlin (formerly Free Electrons)
Embedded Linux and Kernel engineering
https://bootlin.com
^ permalink raw reply [flat|nested] 10+ messages in thread
* [Buildroot] [PATCH 1/2] package/lvm2: bump version to 2.02.180
2018-07-25 14:46 ` [Buildroot] [PATCH 1/2] package/lvm2: bump version to 2.02.180 Baruch Siach
@ 2018-07-25 16:16 ` Marcin Niestroj
0 siblings, 0 replies; 10+ messages in thread
From: Marcin Niestroj @ 2018-07-25 16:16 UTC (permalink / raw)
To: buildroot
Hi Baruch,
On 25.07.2018 16:46, Baruch Siach wrote:
> Hi Marcin,
>
> On Wed, Jul 25, 2018 at 02:37:02PM +0200, Marcin Niestroj wrote:
>> lvm2 starting from version 2.02.178 depends on libaio library.
>>
>> Signed-off-by: Marcin Niestroj <m.niestroj@grinn-global.com>
>> ---
>> package/lvm2/Config.in | 3 +++
>> package/lvm2/lvm2.hash | 4 ++--
>> package/lvm2/lvm2.mk | 6 +++---
>> 3 files changed, 8 insertions(+), 5 deletions(-)
>>
>> diff --git a/package/lvm2/Config.in b/package/lvm2/Config.in
>> index 0dd6d53b4a..5f706982cd 100644
>> --- a/package/lvm2/Config.in
>> +++ b/package/lvm2/Config.in
>> @@ -1,8 +1,10 @@
>> config BR2_PACKAGE_LVM2
>> bool "lvm2 & device mapper"
>> + depends on BR2_PACKAGE_LIBAIO_ARCH_SUPPORTS
>
> This new dependency needs to be added to all lvm2 reverse dependencies, i.e.,
> packages that select BR2_PACKAGE_LVM2, as well as their reverse dependencies.
Thanks for that! I will fix it in v2.
--
Marcin Niestroj
^ permalink raw reply [flat|nested] 10+ messages in thread
* [Buildroot] [PATCH 2/2] package/lvm2: Fix runtime crash when using uclibc
2018-07-25 16:09 ` Thomas Petazzoni
@ 2018-07-25 16:18 ` Marcin Niestroj
2018-07-25 16:25 ` Thomas Petazzoni
0 siblings, 1 reply; 10+ messages in thread
From: Marcin Niestroj @ 2018-07-25 16:18 UTC (permalink / raw)
To: buildroot
Hi Thomas,
On 25.07.2018 18:09, Thomas Petazzoni wrote:
> Hello Marcin,
>
> On Wed, 25 Jul 2018 14:37:03 +0200, Marcin Niestroj wrote:
>> When using uclibc libdevmapper.so was calling dm_task_get_info_base()
>> function recursively, leading to segmentation fault. This was
>> happening because uclibc linker loader just takes first existing
>> 'dm_task_get_info' (which is 'dm_task_get_info_base') symbol in elf
>> binary, instead of default version.
>>
>> Add upstreamable lvm2 patch [1], which introduces
>> --enable-symvers[=STYLE] switch. Use that switch to disable symbol
>> versions, as we do not plan to support binaries compiled against
>> old libdevmapper library.
>>
>> [1] https://www.redhat.com/archives/dm-devel/2018-July/msg00187.html
>>
>> Signed-off-by: Marcin Niestroj <m.niestroj@grinn-global.com>
>
> Is this needed only with the lvm2 bump to 2.02.180 ? Or is it needed
> even with the current version of lvm2 we have packaged in Buildroot ?
This is also needed for older version (currently packaged in Buildroot).
>
>> ---
>> ...gure-Introduce-enable-symvers-option.patch | 288 ++++++++++++++++++
>> package/lvm2/lvm2.mk | 3 +-
>> 2 files changed, 290 insertions(+), 1 deletion(-)
>> create mode 100644 package/lvm2/0001-configure-Introduce-enable-symvers-option.patch
>>
>> diff --git a/package/lvm2/0001-configure-Introduce-enable-symvers-option.patch b/package/lvm2/0001-configure-Introduce-enable-symvers-option.patch
>> new file mode 100644
>> index 0000000000..757305a86d
>> --- /dev/null
>> +++ b/package/lvm2/0001-configure-Introduce-enable-symvers-option.patch
>> @@ -0,0 +1,288 @@
>> +From f4fb05978de506c6941c80493c4f3b77f0509913 Mon Sep 17 00:00:00 2001
>> +From: Marcin Niestroj <m.niestroj@grinn-global.com>
>> +Date: Fri, 20 Jul 2018 14:26:44 +0200
>> +Subject: [PATCH] configure: Introduce --enable-symvers option
>> +
>> +Only few libc (e.g. glibc) libraries support full symbol version
>> +resolution in runtime. There are lot of standard libraries that do not
>> +support that, such as dietlibc, musl and uclibc. Hence there is no
>> +reason to generate symbol versions when compiling against them.
>> +
>> +Additionally libdevmapper.so was broken when compiled against
>> +uclibc. Runtime linker loader caused calling dm_task_get_info_base()
>> +function recursively, leading to segmentation fault.
>> +
>> +Introduce --enable-symvers[=STYLE] option, which allows to choose
>> +between gnu and disabled symbol versioning. By default gnu symbol
>> +versioning is used to provide backward compatibility.
>> +__GNUC__ check is replaced now with GNU_SYMVER, which is generated by
>> +configure script. Additionally ld version script is included only in
>> +case of gnu option, which slightly reduces output size.
>> +
>> +Providing --disable-symvers to configure script when building against
>> +uclibc library fixes segmentation fault error described above, due to
>> +lack of several versions of the same symbol in libdevmapper.so
>> +library.
>
> Could you add your SoB to the patch itself ?
>
> Thanks!
>
> Thomas
>
Ok, I will add SoB to the patch as well.
--
Marcin Niestroj
^ permalink raw reply [flat|nested] 10+ messages in thread
* [Buildroot] [PATCH 2/2] package/lvm2: Fix runtime crash when using uclibc
2018-07-25 16:18 ` Marcin Niestroj
@ 2018-07-25 16:25 ` Thomas Petazzoni
2018-07-25 16:37 ` Marcin Niestroj
0 siblings, 1 reply; 10+ messages in thread
From: Thomas Petazzoni @ 2018-07-25 16:25 UTC (permalink / raw)
To: buildroot
Hello,
On Wed, 25 Jul 2018 18:18:46 +0200, Marcin Niestroj wrote:
> > Is this needed only with the lvm2 bump to 2.02.180 ? Or is it needed
> > even with the current version of lvm2 we have packaged in Buildroot ?
>
> This is also needed for older version (currently packaged in Buildroot).
Then it should be PATCH 1/2 in your series, to make it clear that it is
needed today with the current version of lvm2 we have.
Is this fixing the following bug perhaps:
https://bugs.busybox.net/show_bug.cgi?id=10781 ? I would assume yes.
Best regards,
Thomas
--
Thomas Petazzoni, CTO, Bootlin (formerly Free Electrons)
Embedded Linux and Kernel engineering
https://bootlin.com
^ permalink raw reply [flat|nested] 10+ messages in thread
* [Buildroot] [PATCH 2/2] package/lvm2: Fix runtime crash when using uclibc
2018-07-25 16:25 ` Thomas Petazzoni
@ 2018-07-25 16:37 ` Marcin Niestroj
2018-07-26 11:13 ` Marcin Niestroj
0 siblings, 1 reply; 10+ messages in thread
From: Marcin Niestroj @ 2018-07-25 16:37 UTC (permalink / raw)
To: buildroot
Hi,
On 25.07.2018 18:25, Thomas Petazzoni wrote:
> Hello,
>
> On Wed, 25 Jul 2018 18:18:46 +0200, Marcin Niestroj wrote:
>
>>> Is this needed only with the lvm2 bump to 2.02.180 ? Or is it needed
>>> even with the current version of lvm2 we have packaged in Buildroot ?
>>
>> This is also needed for older version (currently packaged in Buildroot).
>
> Then it should be PATCH 1/2 in your series, to make it clear that it is
> needed today with the current version of lvm2 we have.
Ok, I will check if this patch applies cleanly for older version
as well, then make it PATCH 1/2.
>
> Is this fixing the following bug perhaps:
> https://bugs.busybox.net/show_bug.cgi?id=10781 ? I would assume yes.
I didn't see it earlier. But yes, it is fixing this bug.
>
> Best regards,
>
> Thomas
>
Regards,
Marcin
^ permalink raw reply [flat|nested] 10+ messages in thread
* [Buildroot] [PATCH 2/2] package/lvm2: Fix runtime crash when using uclibc
2018-07-25 16:37 ` Marcin Niestroj
@ 2018-07-26 11:13 ` Marcin Niestroj
2018-07-26 12:23 ` Thomas Petazzoni
0 siblings, 1 reply; 10+ messages in thread
From: Marcin Niestroj @ 2018-07-26 11:13 UTC (permalink / raw)
To: buildroot
Hi Thomas,
On 25.07.2018 18:37, Marcin Niestroj wrote:
> Hi,
>
> On 25.07.2018 18:25, Thomas Petazzoni wrote:
>> Hello,
>>
>> On Wed, 25 Jul 2018 18:18:46 +0200, Marcin Niestroj wrote:
>>
>>>> Is this needed only with the lvm2 bump to 2.02.180 ? Or is it needed
>>>> even with the current version of lvm2 we have packaged in Buildroot ?
>>>
>>> This is also needed for older version (currently packaged in Buildroot).
>>
>> Then it should be PATCH 1/2 in your series, to make it clear that it is
>> needed today with the current version of lvm2 we have.
>
> Ok, I will check if this patch applies cleanly for older version
> as well, then make it PATCH 1/2.
>
Patch does not apply cleanly on 2.02.173 (current Buildroot). However it
is easy to adjust patch for that version. Do you still want to make it
PATCH 1/2 and then adjust it in PATCH 2/2 "package/lvm2: bump to
version 2.02.180" ?
Regards,
Marcin
^ permalink raw reply [flat|nested] 10+ messages in thread
* [Buildroot] [PATCH 2/2] package/lvm2: Fix runtime crash when using uclibc
2018-07-26 11:13 ` Marcin Niestroj
@ 2018-07-26 12:23 ` Thomas Petazzoni
0 siblings, 0 replies; 10+ messages in thread
From: Thomas Petazzoni @ 2018-07-26 12:23 UTC (permalink / raw)
To: buildroot
Hello,
On Thu, 26 Jul 2018 13:13:36 +0200, Marcin Niestroj wrote:
> Patch does not apply cleanly on 2.02.173 (current Buildroot). However it
> is easy to adjust patch for that version. Do you still want to make it
> PATCH 1/2 and then adjust it in PATCH 2/2 "package/lvm2: bump to
> version 2.02.180" ?
Yes, because we want to be able to backport the fix to our LTS branch.
So the fix should be PATCH 1/2 and the bump should be PATCH 2/2, even
if doing the bump requires adjusting the patch.
Thanks!
Thomas
--
Thomas Petazzoni, CTO, Bootlin (formerly Free Electrons)
Embedded Linux and Kernel engineering
https://bootlin.com
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2018-07-26 12:23 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-07-25 12:37 [Buildroot] [PATCH 1/2] package/lvm2: bump version to 2.02.180 Marcin Niestroj
2018-07-25 12:37 ` [Buildroot] [PATCH 2/2] package/lvm2: Fix runtime crash when using uclibc Marcin Niestroj
2018-07-25 16:09 ` Thomas Petazzoni
2018-07-25 16:18 ` Marcin Niestroj
2018-07-25 16:25 ` Thomas Petazzoni
2018-07-25 16:37 ` Marcin Niestroj
2018-07-26 11:13 ` Marcin Niestroj
2018-07-26 12:23 ` Thomas Petazzoni
2018-07-25 14:46 ` [Buildroot] [PATCH 1/2] package/lvm2: bump version to 2.02.180 Baruch Siach
2018-07-25 16:16 ` Marcin Niestroj
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.