From 837827f8f2542c36ba5944b4da0a76ea6a64b08b Mon Sep 17 00:00:00 2001 From: Iain Sandoe Date: Tue, 16 Jan 2024 10:21:14 +0000 Subject: Fix __builtin_nested_func_ptr_{created,deleted} symbol versions [PR113402] The symbols for the functions supporting heap-based trampolines were exported at an incorrect symbol version, the following patch fixes that. As requested in the PR, this also renames __builtin_nested_func_ptr* to __gcc_nested_func_ptr*. In carrying our the rename, we move the builtins to use DEF_EXT_LIB_BUILTIN. PR libgcc/113402 gcc/ChangeLog: * builtins.cc (expand_builtin): Handle BUILT_IN_GCC_NESTED_PTR_CREATED and BUILT_IN_GCC_NESTED_PTR_DELETED. * builtins.def (BUILT_IN_GCC_NESTED_PTR_CREATED, BUILT_IN_GCC_NESTED_PTR_DELETED): Make these builtins LIB-EXT and rename the library fallbacks to __gcc_nested_func_ptr_created and __gcc_nested_func_ptr_deleted. * doc/invoke.texi: Rename these to __gcc_nested_func_ptr_created and __gcc_nested_func_ptr_deleted. * tree-nested.cc (finalize_nesting_tree_1): Use builtin_explicit for BUILT_IN_GCC_NESTED_PTR_CREATED and BUILT_IN_GCC_NESTED_PTR_DELETED. * tree.cc (build_common_builtin_nodes): Build the BUILT_IN_GCC_NESTED_PTR_CREATED and BUILT_IN_GCC_NESTED_PTR_DELETED local builtins only for non-explicit. libgcc/ChangeLog: * config/aarch64/heap-trampoline.c: Rename __builtin_nested_func_ptr_created to __gcc_nested_func_ptr_created and __builtin_nested_func_ptr_deleted to __gcc_nested_func_ptr_deleted. * config/i386/heap-trampoline.c: Likewise. * libgcc2.h: Likewise. * libgcc-std.ver.in (GCC_7.0.0): Likewise and then move __gcc_nested_func_ptr_created and __gcc_nested_func_ptr_deleted from this symbol version to ... (GCC_14.0.0): ... this one. Signed-off-by: Iain Sandoe Co-authored-by: Jakub Jelinek --- libgcc/config/aarch64/heap-trampoline.c | 8 ++++---- libgcc/config/i386/heap-trampoline.c | 8 ++++---- libgcc/libgcc-std.ver.in | 5 ++--- libgcc/libgcc2.h | 4 ++-- 4 files changed, 12 insertions(+), 13 deletions(-) (limited to 'libgcc') diff --git a/libgcc/config/aarch64/heap-trampoline.c b/libgcc/config/aarch64/heap-trampoline.c index f222339..2041fe6 100644 --- a/libgcc/config/aarch64/heap-trampoline.c +++ b/libgcc/config/aarch64/heap-trampoline.c @@ -20,8 +20,8 @@ int get_trampolines_per_page (void); struct tramp_ctrl_data *allocate_tramp_ctrl (struct tramp_ctrl_data *parent); void *allocate_trampoline_page (void); -void __builtin_nested_func_ptr_created (void *chain, void *func, void **dst); -void __builtin_nested_func_ptr_deleted (void); +void __gcc_nested_func_ptr_created (void *chain, void *func, void **dst); +void __gcc_nested_func_ptr_deleted (void); #if defined(__gnu_linux__) static const uint32_t aarch64_trampoline_insns[] = { @@ -108,7 +108,7 @@ allocate_tramp_ctrl (struct tramp_ctrl_data *parent) } void -__builtin_nested_func_ptr_created (void *chain, void *func, void **dst) +__gcc_nested_func_ptr_created (void *chain, void *func, void **dst) { if (tramp_ctrl_curr == NULL) { @@ -155,7 +155,7 @@ __builtin_nested_func_ptr_created (void *chain, void *func, void **dst) } void -__builtin_nested_func_ptr_deleted (void) +__gcc_nested_func_ptr_deleted (void) { if (tramp_ctrl_curr == NULL) abort (); diff --git a/libgcc/config/i386/heap-trampoline.c b/libgcc/config/i386/heap-trampoline.c index 4b9f436..726cf55 100644 --- a/libgcc/config/i386/heap-trampoline.c +++ b/libgcc/config/i386/heap-trampoline.c @@ -20,8 +20,8 @@ int get_trampolines_per_page (void); struct tramp_ctrl_data *allocate_tramp_ctrl (struct tramp_ctrl_data *parent); void *allocate_trampoline_page (void); -void __builtin_nested_func_ptr_created (void *chain, void *func, void **dst); -void __builtin_nested_func_ptr_deleted (void); +void __gcc_nested_func_ptr_created (void *chain, void *func, void **dst); +void __gcc_nested_func_ptr_deleted (void); static const uint8_t trampoline_insns[] = { /* movabs $,%r11 */ @@ -108,7 +108,7 @@ allocate_tramp_ctrl (struct tramp_ctrl_data *parent) } void -__builtin_nested_func_ptr_created (void *chain, void *func, void **dst) +__gcc_nested_func_ptr_created (void *chain, void *func, void **dst) { if (tramp_ctrl_curr == NULL) { @@ -155,7 +155,7 @@ __builtin_nested_func_ptr_created (void *chain, void *func, void **dst) } void -__builtin_nested_func_ptr_deleted (void) +__gcc_nested_func_ptr_deleted (void) { if (tramp_ctrl_curr == NULL) abort (); diff --git a/libgcc/libgcc-std.ver.in b/libgcc/libgcc-std.ver.in index a81c5a1..ac8f661 100644 --- a/libgcc/libgcc-std.ver.in +++ b/libgcc/libgcc-std.ver.in @@ -1943,9 +1943,6 @@ GCC_4.8.0 { GCC_7.0.0 { __PFX__divmoddi4 __PFX__divmodti4 - - __builtin_nested_func_ptr_created - __builtin_nested_func_ptr_deleted } %inherit GCC_14.0.0 GCC_7.0.0 @@ -1960,4 +1957,6 @@ GCC_14.0.0 { __PFX__strub_enter __PFX__strub_update __PFX__strub_leave + __gcc_nested_func_ptr_created + __gcc_nested_func_ptr_deleted } diff --git a/libgcc/libgcc2.h b/libgcc/libgcc2.h index 5050456..0b67fab 100644 --- a/libgcc/libgcc2.h +++ b/libgcc/libgcc2.h @@ -29,8 +29,8 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #pragma GCC visibility push(default) #endif -extern void __builtin_nested_func_ptr_created (void *, void *, void **); -extern void __builtin_nested_func_ptr_deleted (void); +extern void __gcc_nested_func_ptr_created (void *, void *, void **); +extern void __gcc_nested_func_ptr_deleted (void); extern int __gcc_bcmp (const unsigned char *, const unsigned char *, size_t); extern void __clear_cache (void *, void *); -- cgit v1.1