This patch adjusts the initialization of __sync built-in functions: instead of conditionalizing on TARGET_LINUX_ABI, directly place the target-hook #define in config/nios2/linux.h. This appears to be in line with other similar ports, e.g. m68k.
Sebastian, this should solve your issue of not wanting __sync_* libcalls generated on RTEMS (which also uses TARGET_LINUX_ABI due to TLS support), can you verify it works for you? Chung-Lin PR target/78357 * config/nios2/nios2.c (nios2_init_libfuncs): Remove TARGET_LINUX_ABI condition. (TARGET_INIT_LIBFUNCS): Delete definition and... * config/nios2/linux.h (TARGET_INIT_LIBFUNCS): ...move to here, add comments.
Index: config/nios2/nios2.c =================================================================== --- config/nios2/nios2.c (revision 242468) +++ config/nios2/nios2.c (working copy) @@ -3607,9 +3607,7 @@ nios2_expand_builtin (tree exp, rtx target, rtx su static void nios2_init_libfuncs (void) { - /* For Linux, we have access to kernel support for atomic operations. */ - if (TARGET_LINUX_ABI) - init_sync_libfuncs (UNITS_PER_WORD); + init_sync_libfuncs (UNITS_PER_WORD); } @@ -4986,9 +4984,6 @@ nios2_adjust_reg_alloc_order (void) #undef TARGET_BUILTIN_DECL #define TARGET_BUILTIN_DECL nios2_builtin_decl -#undef TARGET_INIT_LIBFUNCS -#define TARGET_INIT_LIBFUNCS nios2_init_libfuncs - #undef TARGET_FUNCTION_OK_FOR_SIBCALL #define TARGET_FUNCTION_OK_FOR_SIBCALL hook_bool_tree_tree_true Index: config/nios2/linux.h =================================================================== --- config/nios2/linux.h (revision 242468) +++ config/nios2/linux.h (working copy) @@ -44,3 +44,7 @@ Nios II Processor Reference Handbook. */ #define TARGET_LINUX_ABI 1 +/* For Linux, we have access to kernel support for atomic operations, + add initialization for __sync_* builtins. */ +#undef TARGET_INIT_LIBFUNCS +#define TARGET_INIT_LIBFUNCS nios2_init_libfuncs