bug-gnulib
[Top][All Lists]
Advanced

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

Re: asyncsafe-spin.c fails to compile on Solaris 10 sparc


From: Bruno Haible
Subject: Re: asyncsafe-spin.c fails to compile on Solaris 10 sparc
Date: Sat, 28 Nov 2020 13:56:29 +0100
User-agent: KMail/5.1.3 (Linux/4.4.0-193-generic; KDE/5.18.0; x86_64; ; )

Hi Paul,

> I attempted to reproduce Tom Christensen's first problem listed here:
> 
> https://lists.gnu.org/r/bug-gnulib/2020-11/msg00062.html
> 
> on Solaris 10 sparc, by running this:
> 
> ./gnulib-tool --create-testdir --dir foo getumask
> 
> and then on Solaris:
> 
> ./configure
> make
> make check
> 
> This failed as follows:
> 
> depbase=`echo asyncsafe-spin.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
> gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I..  -DGNULIB_STRICT_CHECKING=1 
> -D_REENTRANT 
>   -g -O2 -MT asyncsafe-spin.o -MD -MP -MF $depbase.Tpo -c -o asyncsafe-spin.o 
> asyncsafe-spin.c &&\
> mv -f $depbase.Tpo $depbase.Po
> /usr/ccs/bin/as: "/tmp/ccK0uCIY.s", line 19: error: cannot use v8plus 
> instructions in a non-v8plus target binary
> /usr/ccs/bin/as: "/tmp/ccK0uCIY.s", line 39: error: cannot use v8plus 
> instructions in a non-v8plus target binary
> 
> These diagnostics come from these instructions:
> 
>           cas [%o0],%o1,%o2
>           ...
>           membar 2
> 
> which come from asm directives in lib/asyncsafe-spin.c. These instructions 
> are 
> not portable to SPARC v8 processors (32-bit only); they assume SPARC v8+ or 
> SPARC v9.
> 
> I worked around the problem by configuring this way:
> 
> ./configure CC='gcc -mcpu=v9 -m32'
> 
> to compile for SPARC v9, which is fine for my hardware (a production Sun Fire 
> 280R with an UltraSPARC III). I doubt whether anybody outside of computer 
> museums cares about SPARC v8 hardware any more, but it would be nice if 
> 'configure; make' just worked on Solaris 10 sparc so perhaps the 
> asyncsafe-spin 
> module should add the '-mcpu=v9 -m32' options on this platform, or maybe 
> asyncsafe-spin.c could simply omit the relevant instructions on 32-bit sparc 
> platforms.

While it can be worked around by the person who builds the GNU package, I agree
with you that it should better work out-of-the-box.

> I doubt whether anybody outside of computer 
> museums cares about SPARC v8 hardware any more

Yes. SPARC v9 was released in 1993, that is, 27 years ago.

> maybe asyncsafe-spin.c could simply omit the relevant instructions on 32-bit
> sparc platforms.

Better not, since often binaries built for older platforms are run on newer
platforms. I surely still have binaries from 2000 that I run on hardware from
2017.

On my way to reproduce the issue, I picked the 'unstable9s' machine on
opencsw.org, with CC="gcc -mno-v8plus -O2", and encountered this error:

gcc -O2 -std=gnu99  -g -O2  -L/home/haible/prefix-sparc32/lib -o 
test-asyncsafe-spin1 test-asyncsafe-spin1.o libtests.a ../gllib/libgnu.a 
libtests.a ../gllib/libgnu.a libtests.a  
Undefined                       first referenced
 symbol                             in file
__sync_val_compare_and_swap_4       ../gllib/libgnu.a(asyncsafe-spin.o)
ld: fatal: Symbol referencing errors. No output written to test-asyncsafe-spin1
collect2: ld returned 1 exit status

This is a GCC 4.6.4, and it apparently does not implement the library
functions for GCC built-ins that are supposedly implemented since GCC 4.1.

The first patch deals with that.

Then, I do reproduce your error, with a slightly different assembler message:

/var/tmp//ccUF6VQS.s: Assembler messages:
/var/tmp//ccUF6VQS.s:19: Error: Architecture mismatch on "membar".
/var/tmp//ccUF6VQS.s:19:  (Requires v9|v9a|v9b; requested architecture is v8.)
/var/tmp//ccUF6VQS.s:67: Error: Architecture mismatch on "cas".
/var/tmp//ccUF6VQS.s:67:  (Requires leon|v9|v9a|v9b; requested architecture is 
v8.)
/var/tmp//ccUF6VQS.s:103: Error: Architecture mismatch on "cas".
/var/tmp//ccUF6VQS.s:103:  (Requires leon|v9|v9a|v9b; requested architecture is 
v8.)
*** Error code 1

So, with this assembler, we need to turn on v9 support; v8+ support is not
sufficient. The second patch does this.


2020-11-28  Bruno Haible  <bruno@clisp.org>

        asyncsafe-spin: Fix compilation error with GCC on 32-bit SPARC.
        Reported by Paul Eggert in
        <https://lists.gnu.org/archive/html/bug-gnulib/2020-11/msg00066.html>.
        * m4/sparcv8+.m4: New file.
        * modules/sparcv8+: New file.
        * modules/asyncsafe-spin (Depends-on): Add sparcv8+.

2020-11-28  Bruno Haible  <bruno@clisp.org>

        asyncsafe-spin: Fix build error with GCC on 32-bit SPARC.
        * lib/asyncsafe-spin.c: Don't use GCC >= 4.1 primitives on SPARC.

Attachment: 0001-asyncsafe-spin-Fix-build-error-with-GCC-on-32-bit-SP.patch
Description: Text Data

Attachment: 0002-asyncsafe-spin-Fix-compilation-error-with-GCC-on-32-.patch
Description: Text Data


reply via email to

[Prev in Thread] Current Thread [Next in Thread]