On Monday 14 July 2025 19:47:49 Pali Rohár wrote:
> On Monday 14 July 2025 10:46:36 LIU Hao wrote:
> > 在 2025-7-13 23:02, Pali Rohár 写道:
> > > I see. But I think it is better to apply at least this "debugging
> > > purposes" attribute than nothing. It is only for older gcc versions.
> > > And with __SSP__ checks it can be targeted just for
> > > -fstack-protector-string CRT builds, which is what the original commit
> > > is aiming.
> > >
> > > What about something like this in the stack_chk_guard.c file?
> > >
> > > #if !defined(__clang__) && defined(__GNUC__) && __GNUC__ < 11
> > > #if (defined(__SSP__) || defined(__SSP_STRONG__) ||
> > > defined(__SSP_ALL__))
> > > #define __no_stack_protector__ __optimize__("no-stack-protector")
> > > #else
> > > #define __no_stack_protector__
> > > #endif
> > > #endif
> >
> > I'd rather that we don't abuse the `optimize` attribute. Clang also doesn't
> > support it, so there's no workaround for Clang 7-.
> >
> > It should be an error if SSP is enabled when compiling this file:
> >
> >
> > diff --git a/mingw-w64-crt/ssp/stack_chk_guard.c
> > b/mingw-w64-crt/ssp/stack_chk_guard.c
> > index be43d8c7e..6a728d712 100644
> > --- a/mingw-w64-crt/ssp/stack_chk_guard.c
> > +++ b/mingw-w64-crt/ssp/stack_chk_guard.c
> > @@ -10,10 +10,18 @@
> >
> > void *__stack_chk_guard;
> >
> > +#if defined __SSP__ || defined __SSP_STRONG__ || defined __SSP_ALL__
> > // This function requires `no_stack_protector` because it changes the
> > // value of `__stack_chk_guard`, causing stack checks to fail before
> > // returning from this function.
> > -__attribute__((__constructor__, __no_stack_protector__))
> > +# if (defined __GNUC__ && __GNUC__ >= 11) || (defined __clang__ &&
> > __clang_major__ >= 7)
> > +__attribute__((__no_stack_protector__))
> > +# else
> > +# error This file can't be built with stack protector enabled. Remove \
> > + -fstack-protector* options from CFLAGS.
> > +# endif
> > +#endif
> > +__attribute__((__constructor__))
> > static void __cdecl init(void)
> > {
> > unsigned int ui;
> >
>
> Ok, that is also a solution.
The change should be applied also to v11.x, v12.x and v13.x branches as
it is fixing the already applied commit.
_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public