On Sunday 13 July 2025 21:56:16 LIU Hao wrote:
> z
> 在 2025-7-13 21:43, Pali Rohár 写道:
> > On Sunday 13 July 2025 21:35:23 LIU Hao wrote:
> > > 在 2025-7-13 21:25, Pali Rohár 写道:
> > > > And throws warning: ‘no_stack_protector’ attribute directive ignored
> > > > [-Wattributes]
> > > >
> > > >
> > > > If I understand correctly the code at 3d-4c is the stack protection
> > > > check, which should have been disabled for that function. But because
> > > > the ___stack_chk_guard is being changed in the function, it cause
> > > > calling the ___stack_chk_fail.
> > > >
> > > > So the warning is NOT harmless and cannot be ignored. It is a real
> > > > issue.
> > >
> > > The CRT should not be built with stack protector.
> >
> > Ok. But the attribute __no_stack_protector__ is there to allow building
> > CRT with -fstack-protector, no?
>
> Yes; but it's not a very common use, and it requires GCC 11+.
>
>
> > But it is different than without the -fstack-protector-all flag.
> >
> > It is usable? If yes then I would propose to to define
> > __no_stack_protector__ as __optimize__("no-stack-protector") for those
> > older gcc.
>
> GCC doc says
> (https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html):
>
> optimize (level, …)
> optimize (string, …)
>
> ... Other substrings are taken as suffixes to the -f prefix jointly
> forming the
> name of an optimization option. See Options That Control Optimization.
>
> ...
>
> Not every optimization option that starts with the -f prefix specified by
> the
> attribute necessarily has an effect on the function. The optimize attribute
> should be used for debugging purposes only. It is not suitable in
> production code.
>
>
> AFAICT `-fstack-protector` is not an optimization option. And in addition to
> that, the last sentence looks like a big warning that it shouldn't be used
> here.
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
With new gcc / clang it does nothing, for older gcc without
-fstack-protector in CFLAGS it mutes the warning and for older gcc with
-fstack-protector in CFLAGS it workaround compilation of
stack_chk_guard.c file.
_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public