Message ID | 20210908180825.690731-1-illia.bitkov@mind.be |
---|---|
State | Accepted |
Headers | show |
Series | [v3,1/1] package/mono: fix external libatomic_ops linkage | expand |
On 08/09/2021 20:08, Illia Bitkov wrote: > Added patch fixes linkage of libgc with external libtomic-ops. > Mono uses bundeled bdwgc which doesn't link external libatomic-ops. > Patch is a fix cherry-picked from bdwgc upstream. > > Problem found on ARMv5 processors, on newer ARM processors > it uses header based functions and doesn't need built library. > > Error: > /home/buildroot/autobuild/instance-3/output-1/host/opt/ext-toolchain/bin/../lib/gcc/arm-buildroot-linux-uclibcgnueabi/9.3.0/../../../../arm-buildroot-linux-uclibcgnueabi/bin/ld: ../../external/bdwgc/.libs/libgc.a(gc.o): in function `GC_steal_mark_stack': > gc.c:(.text+0x2020): undefined reference to `AO_store_full_emulation' > > Fixes: > http://autobuild.buildroot.net/results/ebc54e5dea63aca21a4072d294fdede41de559c7 > http://autobuild.buildroot.net/results/6d10a4bd43fbc9c1d3fa26d5eef394c8023cb85f > Signed-off-by: Illia Bitkov <illia.bitkov@mind.be> Leave an empty line before the Signed-off-by. Applied to master with that fixed, thanks. Regards, Arnout > --- > ...-system-libatomic_ops-shared-library.patch | 52 +++++++++++++++++++ > 1 file changed, 52 insertions(+) > create mode 100644 package/mono/0001-Fix-linkage-with-a-system-libatomic_ops-shared-library.patch > > diff --git a/package/mono/0001-Fix-linkage-with-a-system-libatomic_ops-shared-library.patch b/package/mono/0001-Fix-linkage-with-a-system-libatomic_ops-shared-library.patch > new file mode 100644 > index 0000000000..66d4d8e100 > --- /dev/null > +++ b/package/mono/0001-Fix-linkage-with-a-system-libatomic_ops-shared-library.patch > @@ -0,0 +1,52 @@ > +From 02a44ee1df8176c72e75fd706d1a8f063d3196d5 Mon Sep 17 00:00:00 2001 > +From: Fabrice Fontaine <fontaine.fabrice@gmail.com> > +Date: Mon, 5 Nov 2018 22:50:40 +0100 > +Subject: Fix linkage with a system libatomic_ops shared library > + > +Issue #247 (bdwgc). > + > +When bdwgc is linked with the external libatomic_ops, bdw-gc.pc must > +contain the needed dynamic libraries (such as -latomic_ops) otherwise > +build of applications could fail on the link stage on some hosts: > +* libgc.so: undefined reference to 'AO_fetch_compare_and_swap_emulation' > +* libgc.so: undefined reference to 'AO_store_full_emulation' > + > +So, this commit sets ATOMIC_OPS_LIBS to "-latomic_ops" when a system > +atomic_ops library is used and uses ATOMIC_OPS_LIBS in bdw-gc.pc.in. > + > +* bdw-gc.pc.in (Libs): Add @ATOMIC_OPS_LIBS@. > +* configure.ac [$with_libatomic_ops!=no && $with_libatomic_ops!=none > +&& $THREADS!=none] (ATOMIC_OPS_LIBS): Set to -latomic_ops; do AC_SUBST. > + > +Fix is cherry-picked from bdwgc upstream > + > +Link to original commit https://github.com/ivmai/bdwgc/commit/02a44ee1df8176c72e75fd706d1a8f063d3196d5?branch=02a44ee1df8176c72e75fd706d1a8f063d3196d5&diff=unified > + > +Signed-off-by: Illia Bitkov <illia.bitkov@mind.be> > + > +diff --git a/external/bdwgc/bdw-gc.pc.in b/external/bdwgc/bdw-gc.pc.in > +index ef4c2341..a32e7598 100644 > +--- a/external/bdwgc/bdw-gc.pc.in > ++++ b/external/bdwgc/bdw-gc.pc.in > +@@ -6,5 +6,5 @@ includedir=@includedir@ > + Name: Boehm-Demers-Weiser Conservative Garbage Collector > + Description: A garbage collector for C and C++ > + Version: @PACKAGE_VERSION@ > +-Libs: -L${libdir} -lgc > ++Libs: -L${libdir} @ATOMIC_OPS_LIBS@ -lgc > + Cflags: -I${includedir} > +diff --git a/external/bdwgc/configure.ac b/external/bdwgc/configure.ac > +index 21abe8fa..9ffe81de 100644 > +--- a/external/bdwgc/configure.ac > ++++ b/external/bdwgc/configure.ac > +@@ -1081,7 +1081,9 @@ AS_IF([test x"$with_libatomic_ops" = xno \ > + AC_MSG_CHECKING([which libatomic_ops to use]) > + AS_IF([test x"$with_libatomic_ops" != xno], > + [ AS_IF([test x"$with_libatomic_ops" != xnone -a x"$THREADS" != xnone], > +- [ AC_MSG_RESULT([external]) ], > ++ [ AC_MSG_RESULT([external]) > ++ ATOMIC_OPS_LIBS="-latomic_ops" > ++ AC_SUBST([ATOMIC_OPS_LIBS]) ], > + [ AC_MSG_RESULT([none]) > + AS_IF([test x"$THREADS" != xnone], > + [ AC_DEFINE([GC_BUILTIN_ATOMIC], [1], >
>>>>> "Illia" == Illia Bitkov <illia.bitkov@mind.be> writes: > Added patch fixes linkage of libgc with external libtomic-ops. > Mono uses bundeled bdwgc which doesn't link external libatomic-ops. > Patch is a fix cherry-picked from bdwgc upstream. > Problem found on ARMv5 processors, on newer ARM processors > it uses header based functions and doesn't need built library. > Error: > /home/buildroot/autobuild/instance-3/output-1/host/opt/ext-toolchain/bin/../lib/gcc/arm-buildroot-linux-uclibcgnueabi/9.3.0/../../../../arm-buildroot-linux-uclibcgnueabi/bin/ld: > ../../external/bdwgc/.libs/libgc.a(gc.o): in function > `GC_steal_mark_stack': > gc.c:(.text+0x2020): undefined reference to `AO_store_full_emulation' > Fixes: > http://autobuild.buildroot.net/results/ebc54e5dea63aca21a4072d294fdede41de559c7 > http://autobuild.buildroot.net/results/6d10a4bd43fbc9c1d3fa26d5eef394c8023cb85f > Signed-off-by: Illia Bitkov <illia.bitkov@mind.be> Committed to 2021.02.x, 2021.05.x and 2021.08.x, thanks.
diff --git a/package/mono/0001-Fix-linkage-with-a-system-libatomic_ops-shared-library.patch b/package/mono/0001-Fix-linkage-with-a-system-libatomic_ops-shared-library.patch new file mode 100644 index 0000000000..66d4d8e100 --- /dev/null +++ b/package/mono/0001-Fix-linkage-with-a-system-libatomic_ops-shared-library.patch @@ -0,0 +1,52 @@ +From 02a44ee1df8176c72e75fd706d1a8f063d3196d5 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine <fontaine.fabrice@gmail.com> +Date: Mon, 5 Nov 2018 22:50:40 +0100 +Subject: Fix linkage with a system libatomic_ops shared library + +Issue #247 (bdwgc). + +When bdwgc is linked with the external libatomic_ops, bdw-gc.pc must +contain the needed dynamic libraries (such as -latomic_ops) otherwise +build of applications could fail on the link stage on some hosts: +* libgc.so: undefined reference to 'AO_fetch_compare_and_swap_emulation' +* libgc.so: undefined reference to 'AO_store_full_emulation' + +So, this commit sets ATOMIC_OPS_LIBS to "-latomic_ops" when a system +atomic_ops library is used and uses ATOMIC_OPS_LIBS in bdw-gc.pc.in. + +* bdw-gc.pc.in (Libs): Add @ATOMIC_OPS_LIBS@. +* configure.ac [$with_libatomic_ops!=no && $with_libatomic_ops!=none +&& $THREADS!=none] (ATOMIC_OPS_LIBS): Set to -latomic_ops; do AC_SUBST. + +Fix is cherry-picked from bdwgc upstream + +Link to original commit https://github.com/ivmai/bdwgc/commit/02a44ee1df8176c72e75fd706d1a8f063d3196d5?branch=02a44ee1df8176c72e75fd706d1a8f063d3196d5&diff=unified + +Signed-off-by: Illia Bitkov <illia.bitkov@mind.be> + +diff --git a/external/bdwgc/bdw-gc.pc.in b/external/bdwgc/bdw-gc.pc.in +index ef4c2341..a32e7598 100644 +--- a/external/bdwgc/bdw-gc.pc.in ++++ b/external/bdwgc/bdw-gc.pc.in +@@ -6,5 +6,5 @@ includedir=@includedir@ + Name: Boehm-Demers-Weiser Conservative Garbage Collector + Description: A garbage collector for C and C++ + Version: @PACKAGE_VERSION@ +-Libs: -L${libdir} -lgc ++Libs: -L${libdir} @ATOMIC_OPS_LIBS@ -lgc + Cflags: -I${includedir} +diff --git a/external/bdwgc/configure.ac b/external/bdwgc/configure.ac +index 21abe8fa..9ffe81de 100644 +--- a/external/bdwgc/configure.ac ++++ b/external/bdwgc/configure.ac +@@ -1081,7 +1081,9 @@ AS_IF([test x"$with_libatomic_ops" = xno \ + AC_MSG_CHECKING([which libatomic_ops to use]) + AS_IF([test x"$with_libatomic_ops" != xno], + [ AS_IF([test x"$with_libatomic_ops" != xnone -a x"$THREADS" != xnone], +- [ AC_MSG_RESULT([external]) ], ++ [ AC_MSG_RESULT([external]) ++ ATOMIC_OPS_LIBS="-latomic_ops" ++ AC_SUBST([ATOMIC_OPS_LIBS]) ], + [ AC_MSG_RESULT([none]) + AS_IF([test x"$THREADS" != xnone], + [ AC_DEFINE([GC_BUILTIN_ATOMIC], [1],
Added patch fixes linkage of libgc with external libtomic-ops. Mono uses bundeled bdwgc which doesn't link external libatomic-ops. Patch is a fix cherry-picked from bdwgc upstream. Problem found on ARMv5 processors, on newer ARM processors it uses header based functions and doesn't need built library. Error: /home/buildroot/autobuild/instance-3/output-1/host/opt/ext-toolchain/bin/../lib/gcc/arm-buildroot-linux-uclibcgnueabi/9.3.0/../../../../arm-buildroot-linux-uclibcgnueabi/bin/ld: ../../external/bdwgc/.libs/libgc.a(gc.o): in function `GC_steal_mark_stack': gc.c:(.text+0x2020): undefined reference to `AO_store_full_emulation' Fixes: http://autobuild.buildroot.net/results/ebc54e5dea63aca21a4072d294fdede41de559c7 http://autobuild.buildroot.net/results/6d10a4bd43fbc9c1d3fa26d5eef394c8023cb85f Signed-off-by: Illia Bitkov <illia.bitkov@mind.be> --- ...-system-libatomic_ops-shared-library.patch | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 package/mono/0001-Fix-linkage-with-a-system-libatomic_ops-shared-library.patch