NetBSD-Bugs archive

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

Re: port-sparc/58352: ld: /usr/lib/libubsan.so: undefined reference to `__sync_val_compare_and_swap_8'



On 2024/06/19 1:52, matthew green wrote:
campbell+netbsd%mumble.net@localhost writes:
Number:         58352
Category:       port-sparc
Synopsis:       ld: /usr/lib/libubsan.so: undefined reference to `__sync_val_compare_and_swap_8'

hmm, i thought i'd avoided this already.

it's one of the notes in README.gcc12.

It seems that `-mcpu=v8` is not sufficient for sparc:

(1) 64-bit atomic ops requires V8PLUS:

https://github.com/NetBSD/src/blob/trunk/external/gpl3/gcc/dist/gcc/config/sparc/sync.md#L23

(2) V8PLUS requires both VIS and V9:

https://github.com/NetBSD/src/blob/trunk/external/gpl3/gcc/dist/gcc/config/sparc/sparc.cc#L1938-L1948

(3) Earliest CPU model satisfy (2) seems `ultrasparc3`, IIUC:
(I'm not familiar to sparc although...)

https://github.com/NetBSD/src/blob/trunk/external/gpl3/gcc/dist/gcc/config/sparc/sparc.cc#L1766-L1767

Actually, lib*san.so built with -mcpu=v8 contain undefined reference to
__sync_val_compare_and_swap8, but they do not with -mcpu=ultrasparc3.

Thanks,
rin
----
diff --git a/external/gpl3/gcc/lib/Makefile.sanitizer b/external/gpl3/gcc/lib/Makefile.sanitizer
index e574f902c22..e20693c3241 100644
--- a/external/gpl3/gcc/lib/Makefile.sanitizer
+++ b/external/gpl3/gcc/lib/Makefile.sanitizer
@@ -128,7 +128,7 @@ COPTS.ubsan_init.cc += -O1
 # - 32-bit SPARC needs v8 to supply eg __sync_add_and_fetch_4
 # - i386 needs i586 for __sync_val_compare_and_swap_8.
 .if ${MACHINE_ARCH} == "sparc"
-COPTS+= -mcpu=v8
+COPTS+= -mcpu=ultrasparc3
 .endif
 .if ${MACHINE_ARCH} == "i386"
 COPTS+= -march=i586


Home | Main Index | Thread Index | Old Index