On Fri, 2025-01-24 at 17:25 +0100, Jakub Jelinek wrote:
> On Thu, Jan 09, 2025 at 01:15:30AM +0100, Ilya Leoshkevich wrote:
> > Bootstrapped and regtested on x86_64-redhat-linux. Ok for master?
> >
> >
> >
> > The FakeStack flag is not zeroed out when can_store_by_pieces()
> > returns false. Over time, this causes FakeStack::Allocate() to
> > perform
> > the maximum number of loop iterations, significantly slowing down
> > the
> > instrumented program.
>
> Took me a while to construct a testcase where it makes a difference,
> but e.g.
> void foo (int *, int *, int *, int *, int *, int *);
>
> int
> bar (void)
> {
> int a[3], b[26];
> foo (a, b, 0, 0, 0, 0);
> return 0;
> }
>
> int
> baz (void)
> {
> int a[3], b[26], c[371], d[12], e[257], f[5];
> foo (a, b, c, d, e, f);
> return 0;
> }
> shows it on s390x with -O2 -fsanitize=address on bar but not baz (on
> x86_64
> not on either).
>
> > gcc/ChangeLog:
> >
> > * asan.cc (asan_emit_stack_protection): Always zero the flag
> > unless it is cleared by the __asan_stack_free_N() libcall.
> >
> > Signed-off-by: Ilya Leoshkevich <[email protected]>
> > ---
> > gcc/asan.cc | 30 ++++++++++++++++++------------
> > 1 file changed, 18 insertions(+), 12 deletions(-)
[...]
> Ok for trunk with that nit fixed.
>
> Jakub
Thank you for the review!
I have fixed the style and committed this.
Would it be okay to backport this to gcc-13 and gcc-14?
Bootstrap and regtest pass on x86_64-redhat-linux.