On Sun, Oct 26, 2025 at 10:29 AM H.J. Lu <[email protected]> wrote: > > On Sat, Oct 25, 2025 at 4:42 PM H.J. Lu <[email protected]> wrote: > ... > > Here is the v4 patch. > > > > Add a new target hook, stack_protect_guard_symbol, to support the user > > provided stack protection guard as an internal symbol. If the hook is > > true, > > > > 1. Make __stack_chk_guard an internal C/C++ symbol. > > 2. Declare __stack_chk_guard as a size_t variable if size_t has the same > > size as pointer so that it can be initialized as an integer. > > 3. If the user declared variable matches __stack_chk_guard, merge it > > with __stack_chk_guard, including its visibility attribute. > > 4. Define the __stack_protection_guard_is_internal_symbol__ macro to > > indicate that __stack_chk_guard is an internal symbol. > > > > gcc/ > > > > PR c/121911 > > * target.def (stack_protect_guard_symbol): New target hook. > > * targhooks.cc (default_stack_protect_guard): If > > targetm.stack_protect_guard_symbol is true, make it an internal > > symbol and use size_type_node if it has the same size as > > ptr_type_node. > > * tree.cc (build_common_tree_nodes): If stack protector is > > enabled and targetm.stack_protect_guard_symbol is true, call > > targetm.stack_protect_guard. > > * config/i386/i386.cc (TARGET_STACK_PROTECT_GUARD_SYMBOL): New. > > * doc/tm.texi: Regenerated. > > * doc/tm.texi.in (TARGET_STACK_PROTECT_GUARD_SYMBOL): New. > > > > gcc/c-family/ > > > > PR c/121911 > > * c-common.cc (matching_stack_protect_guard_decl_p): New. > > * c-common.h (matching_stack_protect_guard_decl_p): Likewise. > > * c-cppbuiltin.cc (c_cpp_builtins): Define the > > __stack_protection_guard_is_internal_symbol__ macro if > > targetm.stack_protect_guard_symbol is true. > > > > gcc/c/ > > > > PR c/121911 > > * c-decl.cc: Include "c-family/c-common.h". > > (merge_decls): Add a bool argument to keep the old type and copy > > the old type if true. > > (duplicate_decls): If the old decl is the stack protect guard and > > the new decl matches the old decl, keep the type of the old decl. > > > > gcc/cp/ > > > > PR c/121911 > > * decl.cc: Include "c-family/c-common.h". > > (duplicate_decls): 2 types match if the old decl is the stack > > protect guard and the new decl matches the old decl. > > > > gcc/testsuite/ > > > > PR c/121911 > > * g++.target/i386/ssp-global-1.C: New test. > > * g++.target/i386/ssp-global-2.C: Likewise. > > * g++.target/i386/ssp-global-3.C: Likewise. > > * g++.target/i386/ssp-global-4.C: Likewise. > > * g++.target/i386/ssp-global-hidden-1.C: Likewise. > > * g++.target/i386/ssp-global-hidden-2.C: Likewise. > > * g++.target/i386/ssp-global-hidden-3.C: Likewise. > > * gcc.target/i386/ssp-global-2.c: Likewise. > > * gcc.target/i386/ssp-global-3.c: Likewise. > > * gcc.target/i386/ssp-global-4.c: Likewise. > > * gcc.target/i386/ssp-global-hidden-1.c: Likewise. > > * gcc.target/i386/ssp-global-hidden-2.c: Likewise. > > * gcc.target/i386/ssp-global-hidden-3.c: Likewise. > > > > Here is the v5 patch. The main difference is that __stack_chk_guard > is an internal symbol with C linkage now. > > --- > Add a new target hook, stack_protect_guard_symbol, to support the user > provided stack protection guard as an internal symbol. If the hook > returns true, > > 1. Make __stack_chk_guard an internal C/C++ symbol. > 2. Declare __stack_chk_guard as a size_t variable if size_t has the same > size as pointer so that it can be initialized as an integer. > 3. If the user declared variable matches __stack_chk_guard, merge it > with __stack_chk_guard, including its visibility attribute. > 4. Define the __stack_protection_guard_is_internal_symbol__ macro to > indicate that __stack_chk_guard is an internal symbol. > > gcc/ > > PR c/121911 > * target.def (stack_protect_guard_symbol): New target hook. > * targhooks.cc (default_stack_protect_guard): If the > stack_protect_guard_symbol hook returns true, use size_type_node > if it has the same size as ptr_type_node. > * config/i386/i386.cc (ix86_stack_protect_guard_symbol): New. > (TARGET_STACK_PROTECT_GUARD_SYMBOL): Likewise. > * doc/tm.texi: Regenerated. > * doc/tm.texi.in (TARGET_STACK_PROTECT_GUARD_SYMBOL): New. > > gcc/c-family/ > > PR c/121911 > * c-common.cc (stack_protect_guard_decl): New. > (pushing_stack_protect_guard_decl): Likewise. > (c_stack_protect_guard_decl_p): Likewise. > (duplicate_stack_protect_guard_decl_p): Likewise. > (c_common_nodes_and_builtins): If the stack_protect_guard_symbol > hook returns true, call targetm.stack_protect_guard. > * c-common.h (c_stack_protect_guard_decl_p): New. > (duplicate_stack_protect_guard_decl_p): Likewise. > * c-cppbuiltin.cc (c_cpp_builtins): Define the > __stack_protection_guard_is_internal_symbol__ macro if the > stack_protect_guard_symbol hook returns. > > gcc/c/ > > PR c/121911 > * c-decl.cc: Include "c-family/c-common.h". > (merge_decls): Add a bool argument to keep the old type and copy > the old type if true. > (duplicate_decls): If the old decl is the stack protect guard and > the new decl matches the old decl, keep the type of the old decl. > > gcc/cp/ > > PR c/121911 > * cp-objcp-common.cc (cp_pushdecl): Change the stack protection > guard symbol to C linkage. > * decl.cc: Include "c-family/c-common.h". > (duplicate_decls): 2 types match if the old decl is the stack > protect guard and the new decl matches the old decl. > > gcc/testsuite/ > > PR c/121911 > * g++.target/i386/ssp-global-1.C: New test. > * g++.target/i386/ssp-global-2.C: Likewise. > * g++.target/i386/ssp-global-3.C: Likewise. > * g++.target/i386/ssp-global-4.C: Likewise. > * g++.target/i386/ssp-global-hidden-1.C: Likewise. > * g++.target/i386/ssp-global-hidden-2.C: Likewise. > * g++.target/i386/ssp-global-hidden-3.C: Likewise. > * gcc.target/i386/ssp-global-2.c: Likewise. > * gcc.target/i386/ssp-global-3.c: Likewise. > * gcc.target/i386/ssp-global-4.c: Likewise. > * gcc.target/i386/ssp-global-hidden-1.c: Likewise. > * gcc.target/i386/ssp-global-hidden-2.c: Likewise. > * gcc.target/i386/ssp-global-hidden-3.c: Likewise. > > > -- > H.J.
PING. -- H.J.
