Hello, it seems that the variants without a _1, _2, ... are explicitly provided (libatomic_i.h):
/* And the generic sized versions. */ void libat_load (size_t, void *, void *, int) MAN(load); void libat_store (size_t, void *, void *, int) MAN(store); void libat_exchange (size_t, void *, void *, void *, int) MAN(exchange); bool libat_compare_exchange (size_t, void *, void *, void *, int, int) MAN(compare_exchange); bool libat_is_lock_free (size_t, void *) MAN(is_lock_free); I am not really sure why there is no alias to the _1 variant for the DECLARE_ALL_SIZED(1); operations. Does this patch make any sense? diff --git a/libatomic/libatomic_i.h b/libatomic/libatomic_i.h index e59dd412e17..afc356d257d 100644 --- a/libatomic/libatomic_i.h +++ b/libatomic/libatomic_i.h @@ -237,7 +237,8 @@ bool libat_is_lock_free (size_t, void *) MAN(is_lock_free); #endif #if IFUNC_ALT -# define EXPORT_ALIAS(X) /* exported symbol in non-alternate file */ +# define EXPORT_ALIAS_2(X, Y) /* exported symbol in non-alternate file */ +# define EXPORT_ALIAS(X) #elif defined(N) && IFUNC_NCOND(N) # if IFUNC_NCOND(N) == 1 # define GEN_SELECTOR(X) \ @@ -278,18 +279,21 @@ bool libat_is_lock_free (size_t, void *) MAN(is_lock_free); # else # error "Unsupported number of ifunc alternatives." # endif -# define EXPORT_ALIAS(X) \ +# define EXPORT_ALIAS_2(X, Y) \ GEN_SELECTOR(X) \ - typeof(C2(libat_,X)) C2(ifunc_,X) \ - ASMNAME(C2(__atomic_,X)) \ + typeof(C2(libat_,X)) C2(ifunc_,Y) \ + ASMNAME(C2(__atomic_,Y)) \ __attribute__((ifunc(S(C2(select_,X))))) +# define EXPORT_ALIAS(X) EXPORT_ALIAS_2(X, X) #elif defined(HAVE_ATTRIBUTE_ALIAS) -# define EXPORT_ALIAS(X) \ - extern typeof(C2(libat_,X)) C2(export_,X) \ - ASMNAME(C2(__atomic_,X)) \ +# define EXPORT_ALIAS_2(X, Y) \ + extern typeof(C2(libat_,X)) C2(export_,Y) \ + ASMNAME(C2(__atomic_,Y)) \ __attribute__((alias(S(C2(libat_,X))))) +# define EXPORT_ALIAS(X) EXPORT_ALIAS_2(X, X) #else -# define EXPORT_ALIAS(X) /* original symbol is exported */ +# define EXPORT_ALIAS_2(X, Y) /* original symbol is exported */ +# define EXPORT_ALIAS(X) #endif #endif /* LIBATOMIC_H */ diff --git a/libatomic/tas_n.c b/libatomic/tas_n.c index 036a3d23307..fad9d00b280 100644 --- a/libatomic/tas_n.c +++ b/libatomic/tas_n.c @@ -114,4 +114,7 @@ SIZE(libat_test_and_set) (UTYPE *mptr, int smodel UNUSED) #endif EXPORT_ALIAS (SIZE(test_and_set)); +#if N == 1 +EXPORT_ALIAS_2 (SIZE(test_and_set), test_and_set); +#endif #undef LAT_TAS_N ----- Am 2. Jul 2025 um 9:20 schrieb Sebastian Huber sebastian.hu...@embedded-brains.de: > Hello, > > for the RISC-V target, I would like to use the -march=rv64imc ISA variant. > However, there is an issue with the libatomic for this target in the RTEMS > configuration. For this test code: > > #include <stdatomic.h> > > bool tas(atomic_flag *f) > { > return atomic_flag_test_and_set(f); > } > > GCC 15 generates: > > riscv-rtems6-gcc -O2 -S -o - -march=rv64imc -mabi=lp64 test.c > .file "test.c" > .option nopic > .attribute arch, "rv64i2p1_m2p0_c2p0_zmmul1p0_zca1p0" > .attribute unaligned_access, 0 > .attribute stack_align, 16 > .text > .align 1 > .globl tas > .type tas, @function > tas: > li a1,5 > tail __atomic_test_and_set > .size tas, .-tas > .ident "GCC: 15.1.1 20250517" > .section .note.GNU-stack,"",@progbits > > In the corresponding libatomic.a multilib, there are the following functions > (omitting *_4, *_8, *_16 variants which exist for all *_1 variants): > > __atomic_add_fetch_1 > __atomic_and_fetch_1 > __atomic_compare_exchange > __atomic_compare_exchange_1 > __atomic_exchange > __atomic_exchange_1 > __atomic_feraiseexcept > __atomic_fetch_add_1 > __atomic_fetch_and_1 > __atomic_fetch_nand_1 > __atomic_fetch_or_1 > __atomic_fetch_sub_1 > __atomic_fetch_xor_1 > __atomic_is_lock_free > __atomic_load > __atomic_load_1 > __atomic_nand_fetch_1 > __atomic_or_fetch_1 > __atomic_store > __atomic_store_1 > __atomic_sub_fetch_1 > __atomic_test_and_set_1 > __atomic_xor_fetch_1 > > Some operations have a variant without a _1, _2, _4, _8, and _16 postfix > (example: __atomic_store). Others do not have such a variant, examples: > __atomic_test_and_set_1, __atomic_add_fetch_1. > > I am a bit clueless what is going on here. Are the missing variants a > libatomic > configuration error? Is it a general configuration error or specific to RTEMS? > > -- > embedded brains GmbH & Co. KG > Herr Sebastian HUBER > Dornierstr. 4 > 82178 Puchheim > Germany > email: sebastian.hu...@embedded-brains.de > phone: +49-89-18 94 741 - 16 > fax: +49-89-18 94 741 - 08 > > Registergericht: Amtsgericht München > Registernummer: HRB 157899 > Vertretungsberechtigte Geschäftsführer: Peter Rasmussen, Thomas Dörfler > Unsere Datenschutzerklärung finden Sie hier: > https://embedded-brains.de/datenschutzerklaerung/ -- embedded brains GmbH & Co. KG Herr Sebastian HUBER Dornierstr. 4 82178 Puchheim Germany email: sebastian.hu...@embedded-brains.de phone: +49-89-18 94 741 - 16 fax: +49-89-18 94 741 - 08 Registergericht: Amtsgericht München Registernummer: HRB 157899 Vertretungsberechtigte Geschäftsführer: Peter Rasmussen, Thomas Dörfler Unsere Datenschutzerklärung finden Sie hier: https://embedded-brains.de/datenschutzerklaerung/