On Sun, Dec 14, 2025 at 8:10 AM H.J. Lu <[email protected]> wrote:
>
> On Sat, Dec 13, 2025 at 5:33 PM Stefan Schulze Frielinghaus
> <[email protected]> wrote:
> >
> > On Sun, Oct 26, 2025 at 10:29:30AM +0800, H.J. Lu 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.
> > >
>
> Here is the v6 patch to rename the target hook, stack_protect_guard_symbol,
> to stack_protect_guard_symbol_p.
>
> Add a new target hook, stack_protect_guard_symbol_p, 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_p): New target hook.
> * targhooks.cc (default_stack_protect_guard): If the
> stack_protect_guard_symbol_p 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_p): New.
> (TARGET_STACK_PROTECT_GUARD_SYMBOL_P): Likewise.
> * doc/tm.texi: Regenerated.
> * doc/tm.texi.in (TARGET_STACK_PROTECT_GUARD_SYMBOL_P): 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_p
> 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_p 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.

Reply via email to