Re: port-sparc64/60518: sparc64 compat32 is not compatible enough

Taylor R Campbell <[email protected]> Wed, 29 Jul 2026 23:29:53 +0000
Newsgroups gmane.os.netbsd.bugs
Message-ID <[email protected]>
I bet this is the relevant part that's missing files needed for
__atomic_compare_exchange_1, __sync_bool_compare_and_swap_4, and
whatever else -- in addition to (or perhaps instead of) what the
comment says, I think it is used when building compat32 libc.so on
sparc64:

      5 # This is called with MACHINE=3Dsparc64 && MACHINE_ARCH=3Dsparc whe=
n building
      6 # 32 bit kernels for ultrasparc hardware
      7 .if ${MACHINE} =3D=3D "sparc64" && \
      8 	(${HAVE_LLVM:Uno} =3D=3D "no" || (defined(LIB) && ${LIB} =3D=3D "k=
ern"))
      9=20
     10 SPARC64DIR=3D	${.PARSEDIR}/../../sparc64/atomic
     11 .PATH.c: ${SPARC64DIR}
     12 .PATH.S: ${SPARC64DIR}
     13=20
     14 .include "${SPARC64DIR}/Makefile.inc"
     15=20
     16 .if defined(LIB) && (${LIB} =3D=3D "kern" || ${LIB} =3D=3D "c" || $=
{LIB} =3D=3D "pthread" \
     17 	|| ${LIB} =3D=3D "rump")
     18 SRCS+=3D	atomic_nand_64_cas.c atomic_xor_64_cas.c atomic_sub_64_cas=
.c \
     19 	atomic_cas_64_cas.c
     20 .endif
     21=20
     22 .else

https://nxr.NetBSD.org/xref/src/common/lib/libc/arch/sparc/atomic/Makefile.=
inc?r=3D1.24#5

Try adding the following files to it (Makefile.inc rev. 1.18 from
back in 2014):

atomic_c11_compare_exchange_cas_32.c
atomic_c11_compare_exchange_cas_16.c
atomic_c11_compare_exchange_cas_8.c

Also, try comparing the output of:

sparc$ nm -gD --defined-only /usr/lib/libc.so
sparc64$ nm -gD --defined-only /usr/lib/sparc/libc.so

I bet there'll be other discrepancies too that have been overlooked
over the years.