NetBSD Problem Report #58975
From www@netbsd.org Wed Jan 8 12:34:11 2025
Return-Path: <www@netbsd.org>
Received: from mail.netbsd.org (mail.netbsd.org [199.233.217.200])
(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
key-exchange X25519 server-signature RSA-PSS (2048 bits)
client-signature RSA-PSS (2048 bits))
(Client CN "mail.NetBSD.org", Issuer "mail.NetBSD.org CA" (not verified))
by mollari.NetBSD.org (Postfix) with ESMTPS id D7ECF1A9238
for <gnats-bugs@gnats.NetBSD.org>; Wed, 8 Jan 2025 12:34:11 +0000 (UTC)
Message-Id: <20250108123410.27CA71A923B@mollari.NetBSD.org>
Date: Wed, 8 Jan 2025 12:34:10 +0000 (UTC)
From: uwe@stderr.spb.ru
Reply-To: uwe@stderr.spb.ru
To: gnats-bugs@NetBSD.org
Subject: sparc64 compat32 libc missing symbols
X-Send-Pr-Version: www-1.0
>Number: 58975
>Category: port-sparc64
>Synopsis: sparc64 compat32 libc missing symbols
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: port-sparc64-maintainer
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Wed Jan 08 12:35:00 +0000 2025
>Last-Modified: Thu Jan 09 15:52:24 +0000 2025
>Originator: Valery Ushakov
>Release: NetBSD current
>Organization:
>Environment:
>Description:
I'm using an Ultra 1 sparc64 machine for some 32-bit sparc work
(inferno-os, self, etc) using cc -m32 - diskless krups is waaay too
slow for that :)
Unfortunately, native sparc64 gdb cannot handle 32-bit binaries (which
is a separate problem), so I thought I can bring over 32-bit gdb
binary from sparc. Unfortunately^2, that doesn't work:
$ gdb32 -q --args ./NetBSD/sparc/bin/emu -c5 /catchme.dis
Reading symbols from ./NetBSD/sparc/bin/emu...
gdb32: Undefined PLT symbol "__atomic_compare_exchange_1" (symnum = 322)
>How-To-Repeat:
Copy gdb from a sparc (32-bit) build. Try to run it on sparc64:
$ LD_BIND_NOW=1 gdb32
gdb32: Undefined PLT symbol "__sync_bool_compare_and_swap_4" (symnum = 152)
This is on a slightly out of date current:
$ ll distrib/sparc/lib/libc.so.12.222 distrib/sparc64/lib/libc.so.12.222
-r--r--r-- 1 uwe uwe 2228224 Nov 30 15:15 distrib/sparc/lib/libc.so.12.222
-r--r--r-- 1 uwe uwe 2564624 Nov 30 18:01 distrib/sparc64/lib/libc.so.12.222
Some symbols are missing from the 32-bit libc built as part of sparc64
build, compared to the 32-bit libc built as part of the normal sparc
build:
$ nm -D distrib/sparc/lib/libc.so.12.222 | grep atomic_compare
000edc9c T __atomic_compare_exchange_1
00089ba0 T __atomic_compare_exchange_2
000f6490 T __atomic_compare_exchange_4
$ nm -D distrib/sparc64/lib/libc.so.12.222 | grep atomic_compare
$
>Fix:
>Release-Note:
>Audit-Trail:
From: Valery Ushakov <uwe@stderr.spb.ru>
To: gnats-bugs@netbsd.org
Cc:
Subject: Re: port-sparc64/58975: sparc64 compat32 libc missing symbols
Date: Wed, 8 Jan 2025 16:03:42 +0300
$ nm --dynamic /emul/netbsd32/lib/libc.so.12 | awk '{$1=""; print}' > 32
$ nm --dynamic /usr/lib/sparc/libc.so.12 | awk '{$1=""; print}' > 64
$ diff -u 32 64
--- 32 2025-01-08 16:00:19.747836166 +0300
+++ 64 2025-01-08 16:00:24.348508210 +0300
@@ -243,38 +243,15 @@
T __assert13
D __assertion_failed
B __atexit_mutex
- T __atomic_add_fetch_4
- T __atomic_compare_exchange_1
- T __atomic_compare_exchange_2
- T __atomic_compare_exchange_4
- T __atomic_exchange_1
- T __atomic_exchange_2
- T __atomic_exchange_4
- T __atomic_fetch_add_1
- T __atomic_fetch_add_2
- T __atomic_fetch_add_4
- T __atomic_fetch_and_1
- T __atomic_fetch_and_2
- T __atomic_fetch_and_4
- T __atomic_fetch_nand_1
- T __atomic_fetch_nand_2
- T __atomic_fetch_nand_4
- T __atomic_fetch_or_1
- T __atomic_fetch_or_2
- T __atomic_fetch_or_4
- T __atomic_fetch_sub_1
- T __atomic_fetch_sub_2
- T __atomic_fetch_sub_4
- T __atomic_fetch_xor_1
- T __atomic_fetch_xor_2
- T __atomic_fetch_xor_4
- T __atomic_is_lock_free
- T __atomic_load_1
- T __atomic_load_2
- T __atomic_load_4
- T __atomic_store_1
- T __atomic_store_2
- T __atomic_store_4
+ T __atomic_add_fetch_8
+ T __atomic_and_fetch_8
+ T __atomic_exchange_8
+ T __atomic_fetch_add_8
+ T __atomic_fetch_and_8
+ T __atomic_fetch_or_8
+ T __atomic_fetch_sub_8
+ T __atomic_fetch_xor_8
+ T __atomic_or_fetch_8
T __b2d_D2A
T __b64_ntop
T __b64_pton
@@ -1079,51 +1056,21 @@
T __sym_ntop
T __sym_ntos
T __sym_ston
- T __sync_add_and_fetch_1
- T __sync_add_and_fetch_2
- T __sync_add_and_fetch_4
- T __sync_and_and_fetch_1
- T __sync_and_and_fetch_2
- T __sync_and_and_fetch_4
- T __sync_bool_compare_and_swap_1
- T __sync_bool_compare_and_swap_2
- T __sync_bool_compare_and_swap_4
- T __sync_fetch_and_add_1
- T __sync_fetch_and_add_2
- T __sync_fetch_and_add_4
- T __sync_fetch_and_and_1
- T __sync_fetch_and_and_2
- T __sync_fetch_and_and_4
- T __sync_fetch_and_nand_1
- T __sync_fetch_and_nand_2
- T __sync_fetch_and_nand_4
- T __sync_fetch_and_or_1
- T __sync_fetch_and_or_2
- T __sync_fetch_and_or_4
- T __sync_fetch_and_sub_1
- T __sync_fetch_and_sub_2
- T __sync_fetch_and_sub_4
- T __sync_fetch_and_xor_1
- T __sync_fetch_and_xor_2
- T __sync_fetch_and_xor_4
- T __sync_lock_test_and_set_1
- T __sync_lock_test_and_set_2
- T __sync_lock_test_and_set_4
- T __sync_nand_and_fetch_1
- T __sync_nand_and_fetch_2
- T __sync_nand_and_fetch_4
- T __sync_or_and_fetch_1
- T __sync_or_and_fetch_2
- T __sync_or_and_fetch_4
- T __sync_sub_and_fetch_1
- T __sync_sub_and_fetch_2
- T __sync_sub_and_fetch_4
- T __sync_val_compare_and_swap_1
- T __sync_val_compare_and_swap_2
- T __sync_val_compare_and_swap_4
- T __sync_xor_and_fetch_1
- T __sync_xor_and_fetch_2
- T __sync_xor_and_fetch_4
+ T __sync_add_and_fetch_8
+ T __sync_and_and_fetch_8
+ T __sync_bool_compare_and_swap_8
+ T __sync_fetch_and_add_8
+ T __sync_fetch_and_and_8
+ T __sync_fetch_and_nand_8
+ T __sync_fetch_and_or_8
+ T __sync_fetch_and_sub_8
+ T __sync_fetch_and_xor_8
+ T __sync_lock_test_and_set_8
+ T __sync_nand_and_fetch_8
+ T __sync_or_and_fetch_8
+ T __sync_sub_and_fetch_8
+ T __sync_val_compare_and_swap_8
+ T __sync_xor_and_fetch_8
V __sys_errlist
D __sys_errlist14
V __sys_nerr
@@ -1226,24 +1173,26 @@
T _atoll
T _atomic_add_32
T _atomic_add_32_nv
+ T _atomic_add_64
+ T _atomic_add_64_nv
T _atomic_add_int
T _atomic_add_int_nv
T _atomic_add_long
T _atomic_add_long_nv
T _atomic_add_ptr
T _atomic_add_ptr_nv
- T _atomic_and_16_nv
T _atomic_and_32
T _atomic_and_32_nv
- T _atomic_and_8_nv
+ T _atomic_and_64
+ T _atomic_and_64_nv
T _atomic_and_uint
T _atomic_and_uint_nv
T _atomic_and_ulong
T _atomic_and_ulong_nv
- T _atomic_cas_16
T _atomic_cas_32
T _atomic_cas_32_ni
- T _atomic_cas_8
+ T _atomic_cas_64
+ T _atomic_cas_64_ni
T _atomic_cas_ptr
T _atomic_cas_ptr_ni
T _atomic_cas_uint
@@ -1252,6 +1201,8 @@
T _atomic_cas_ulong_ni
T _atomic_dec_32
T _atomic_dec_32_nv
+ T _atomic_dec_64
+ T _atomic_dec_64_nv
T _atomic_dec_ptr
T _atomic_dec_ptr_nv
T _atomic_dec_uint
@@ -1260,6 +1211,8 @@
T _atomic_dec_ulong_nv
T _atomic_inc_32
T _atomic_inc_32_nv
+ T _atomic_inc_64
+ T _atomic_inc_64_nv
T _atomic_inc_ptr
T _atomic_inc_ptr_nv
T _atomic_inc_uint
@@ -1268,11 +1221,14 @@
T _atomic_inc_ulong_nv
T _atomic_or_32
T _atomic_or_32_nv
+ T _atomic_or_64
+ T _atomic_or_64_nv
T _atomic_or_uint
T _atomic_or_uint_nv
T _atomic_or_ulong
T _atomic_or_ulong_nv
T _atomic_swap_32
+ T _atomic_swap_64
T _atomic_swap_ptr
T _atomic_swap_uint
T _atomic_swap_ulong
@@ -2473,22 +2429,26 @@
W atoll
W atomic_add_32
W atomic_add_32_nv
+ W atomic_add_64
+ W atomic_add_64_nv
W atomic_add_int
W atomic_add_int_nv
W atomic_add_long
W atomic_add_long_nv
W atomic_add_ptr
W atomic_add_ptr_nv
- W atomic_and_16_nv
W atomic_and_32
W atomic_and_32_nv
- W atomic_and_8_nv
+ W atomic_and_64
+ W atomic_and_64_nv
W atomic_and_uint
W atomic_and_uint_nv
W atomic_and_ulong
W atomic_and_ulong_nv
W atomic_cas_32
W atomic_cas_32_ni
+ W atomic_cas_64
+ W atomic_cas_64_ni
W atomic_cas_ptr
W atomic_cas_ptr_ni
W atomic_cas_uint
@@ -2497,6 +2457,8 @@
W atomic_cas_ulong_ni
W atomic_dec_32
W atomic_dec_32_nv
+ W atomic_dec_64
+ W atomic_dec_64_nv
W atomic_dec_ptr
W atomic_dec_ptr_nv
W atomic_dec_uint
@@ -2505,6 +2467,8 @@
W atomic_dec_ulong_nv
W atomic_inc_32
W atomic_inc_32_nv
+ W atomic_inc_64
+ W atomic_inc_64_nv
W atomic_inc_ptr
W atomic_inc_ptr_nv
W atomic_inc_uint
@@ -2513,11 +2477,14 @@
W atomic_inc_ulong_nv
W atomic_or_32
W atomic_or_32_nv
+ W atomic_or_64
+ W atomic_or_64_nv
W atomic_or_uint
W atomic_or_uint_nv
W atomic_or_ulong
W atomic_or_ulong_nv
W atomic_swap_32
+ W atomic_swap_64
W atomic_swap_ptr
W atomic_swap_uint
W atomic_swap_ulong
@@ -2752,8 +2719,6 @@
T fexecve
T fflush
T ffs
- T ffsl
- T ffsll
T fgetc
W fgetln
T fgetpos
@@ -3246,7 +3211,6 @@
T mempcpy
T memrchr
T memset
- T memset_explicit
W mergesort
W mi_vector_hash
T mincore
-uwe
From: Valery Ushakov <uwe@stderr.spb.ru>
To: gnats-bugs@netbsd.org
Cc:
Subject: Re: port-sparc64/58975: sparc64 compat32 libc missing symbols
Date: Wed, 8 Jan 2025 16:27:23 +0300
With tooldir compilers:
$ sparc--netbsdelf-gcc-12.4.0 -dM -E - < /dev/null | sort > sparc-32-32.def
$ sparc64--netbsd-gcc-12.4.0 -m32 -dM -E - < /dev/null | sort > sparc-32-64.def
$ diff -u sparc-32-32.def sparc-32-64.def
--- sparc-32-32.def 2025-01-08 16:23:43.585411956 +0300
+++ sparc-32-64.def 2025-01-08 16:24:06.071632943 +0300
@@ -97,18 +97,21 @@
#define __FLT_MIN__ 1.1754943508222875e-38F
#define __FLT_NORM_MAX__ 3.4028234663852886e+38F
#define __FLT_RADIX__ 2
-#define __GCC_ATOMIC_BOOL_LOCK_FREE 1
-#define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 1
-#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 1
-#define __GCC_ATOMIC_CHAR_LOCK_FREE 1
-#define __GCC_ATOMIC_INT_LOCK_FREE 1
+#define __GCC_ATOMIC_BOOL_LOCK_FREE 2
+#define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2
+#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2
+#define __GCC_ATOMIC_CHAR_LOCK_FREE 2
+#define __GCC_ATOMIC_INT_LOCK_FREE 2
#define __GCC_ATOMIC_LLONG_LOCK_FREE 1
-#define __GCC_ATOMIC_LONG_LOCK_FREE 1
-#define __GCC_ATOMIC_POINTER_LOCK_FREE 1
-#define __GCC_ATOMIC_SHORT_LOCK_FREE 1
+#define __GCC_ATOMIC_LONG_LOCK_FREE 2
+#define __GCC_ATOMIC_POINTER_LOCK_FREE 2
+#define __GCC_ATOMIC_SHORT_LOCK_FREE 2
#define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 255
-#define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 1
+#define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2
#define __GCC_HAVE_DWARF2_CFI_ASM 1
+#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1
+#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1
+#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1
#define __GCC_IEC_559 2
#define __GCC_IEC_559_COMPLEX 2
#define __GNUC_EXECUTION_CHARSET_NAME "UTF-8"
@@ -267,6 +270,7 @@
#define __WINT_WIDTH__ 32
#define __sparc 1
#define __sparc__ 1
+#define __sparc_v9__ 1
#define __syslog_attribute__ 1
#define __unix__ 1
#define sparc 1
-uwe
From: Valery Ushakov <uwe@stderr.spb.ru>
To: gnats-bugs@netbsd.org
Cc: Martin Husemann <martin@netbsd.org>
Subject: Re: port-sparc64/58975: sparc64 compat32 libc missing symbols
Date: Thu, 9 Jan 2025 18:44:22 +0300
src/common/lib/libc/arch/sparc/atomic/Makefile.inc is a crazy mudball
that is included by four different libraries and drags in different
functions depending on which library it's a part of.
I figure the top level .if/.else that tests for sparc64 should really
be just an .if, with most of the file, that is currently inside
sparc's .else, processed unconditionally, so that sparc64 compat32
version gets all the symbols that sparc also gets.
-uwe
Responsible-Changed-From-To: lib-bug-people->port-sparc64-maintainer
Responsible-Changed-By: uwe@NetBSD.org
Responsible-Changed-When: Thu, 09 Jan 2025 15:52:24 +0000
Responsible-Changed-Why:
This was misfiled initially and I forgot to change responsible when
I changed the category.
>Unformatted:
(Contact us)
$NetBSD: query-full-pr,v 1.47 2022/09/11 19:34:41 kim Exp $
$NetBSD: gnats_config.sh,v 1.9 2014/08/02 14:16:04 spz Exp $
Copyright © 1994-2025
The NetBSD Foundation, Inc. ALL RIGHTS RESERVED.