[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#1018799: gcc-12: Workround for fixing -latomic issue on riscv64 after glibc2.34



Hi,

On 2022-09-06 09:56, Bo YU wrote:
> Hi,
> On Wed, Aug 31, 2022 at 07:04:53PM +0200, Aurelien Jarno wrote:
> ...
> > reason for limiting the link with -latomic to pthread, but that has been
> > discussed internally before the patch submission to GCC, and has been
> > lost.
> > 
> > Anyway this is probably something to try, but the way is done in Arch,
> > i.e. patching the binaries, is ugly. It's probably better to patch the
> > sources that way (completely untested):
> > 
> > diff --git a/gcc/config/riscv/linux.h b/gcc/config/riscv/linux.h
> > --- a/gcc/config/riscv/linux.h
> > +++ b/gcc/config/riscv/linux.h
> > @@ -40,7 +40,7 @@ along with GCC; see the file COPYING3.  If not see
> > #undef LIB_SPEC
> > #ifdef LD_AS_NEEDED_OPTION
> > #define LIB_SPEC GNU_USER_TARGET_LIB_SPEC \
> > -  " %{pthread:" LD_AS_NEEDED_OPTION " -latomic " LD_NO_AS_NEEDED_OPTION "}"
> > +  LD_AS_NEEDED_OPTION " -latomic " LD_NO_AS_NEEDED_OPTION
> > #else
> > #define LIB_SPEC GNU_USER_TARGET_LIB_SPEC " -latomic "
> > #endif
> 
> I have built gcc-12 debian packages with your help and patch:
> https://drive.google.com/drive/folders/1jdqA9mrBea0BHhePVSHkPPOYo6pc7-dq?usp=sharing
> 
> I tried it once but it doesn't seem to solve the problem. But there is a
> high probability that there is something wrong with my testing method:
> 
> I installed gcc-12/g++-12 by manual on a clean riscv64 chroot and then
> try build thinkfan[0] with dpkg-buildpackage.
>
> I was wondering if it would be simpler to directly manipulate atomic
> statements in a c program also. Or could you help to verify it work or
> not again? The patch attached is full change at this time.

I confirm that the issue is still there, it seems that the patch is not
applied. The way to verify it is calling gcc -dumpspecs.

I have tried to rebuild gcc with the patch, and I ended up with the
attached patch, which is a slightly modified version of what I sent you.
Unfortunately it doesn't build. It appears that latomic is not built as
part of the gcc bootstrap process, so the gcc binary from stage 1 simply
doesn't work due to the lack of libatomic... I guess this is 1) why that
flag is only enabled for pthread 2) why gentoo is patching the binary
instead.

Aurelien

-- 
Aurelien Jarno                          GPG: 4096R/1DDD8C9B
aurelien@aurel32.net                 http://www.aurel32.net
diff -Nru gcc-12-12.2.0/debian/changelog gcc-12-12.2.0/debian/changelog
--- gcc-12-12.2.0/debian/changelog	2022-09-08 13:52:13.000000000 +0000
+++ gcc-12-12.2.0/debian/changelog	2022-09-11 11:58:07.000000000 +0000
@@ -1,3 +1,9 @@
+gcc-12 (12.2.0-2+latomic) UNRELEASED; urgency=medium
+
+  * Try to always link with libatomic.
+
+ -- Aurelien Jarno <aurel32@debian.org>  Sun, 11 Sep 2022 11:58:07 +0000
+
 gcc-12 (12.2.0-2) unstable; urgency=medium
 
   * Update to git 20220908 from the gcc-12 branch.
diff -Nru gcc-12-12.2.0/debian/patches/gcc-riscv64-latomic.diff gcc-12-12.2.0/debian/patches/gcc-riscv64-latomic.diff
--- gcc-12-12.2.0/debian/patches/gcc-riscv64-latomic.diff	1970-01-01 00:00:00.000000000 +0000
+++ gcc-12-12.2.0/debian/patches/gcc-riscv64-latomic.diff	2022-09-11 11:58:07.000000000 +0000
@@ -0,0 +1,14 @@
+# DP: Always link with -latomic on riscv64, even if -pthread is not used. Since
+# glibc 2.34, cmake does not use -pthread anymore.
+
+--- a/src/gcc/config/riscv/linux.h
++++ b/src/gcc/config/riscv/linux.h
+@@ -40,7 +40,7 @@ along with GCC; see the file COPYING3.  If not see
+ #undef LIB_SPEC
+ #ifdef LD_AS_NEEDED_OPTION
+ #define LIB_SPEC GNU_USER_TARGET_LIB_SPEC \
+-  " %{pthread:" LD_AS_NEEDED_OPTION " -latomic " LD_NO_AS_NEEDED_OPTION "}"
++  " " LD_AS_NEEDED_OPTION " -latomic " LD_NO_AS_NEEDED_OPTION
+ #else
+ #define LIB_SPEC GNU_USER_TARGET_LIB_SPEC " -latomic "
+ #endif
diff -Nru gcc-12-12.2.0/debian/rules.patch gcc-12-12.2.0/debian/rules.patch
--- gcc-12-12.2.0/debian/rules.patch	2022-08-22 07:44:25.000000000 +0000
+++ gcc-12-12.2.0/debian/rules.patch	2022-09-11 11:58:01.000000000 +0000
@@ -61,6 +61,7 @@
 	musl-ssp \
 	pr79724-revert \
 	pr104290-followup \
+	gcc-riscv64-latomic \
 
 ifneq (,$(filter $(distrelease),precise xenial bionic focal groovy hirsute))
   debian_patches += pr100067-revert

Attachment: signature.asc
Description: PGP signature


Reply to: