Message ID | 1426212518-14867-1-git-send-email-hong.gyu.kim@lge.com |
---|---|
State | New |
Headers | show |
> Hi, Hi Honggyu, Thanks for helping out. I've got a couple of pointers for the testcase inline. > > I have wrote a testcase that reproduces argument overwriting bug during > arm code generation. > > I wrote this testcase with the help of Mikael Pettersson. > If some format is not proper to run in gcc testsuite framework, please correct > me. > > Please refer to the following bugzilla link for details: > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65358 > > Honggyu > --- > gcc/testsuite/ChangeLog | 5 +++++ > gcc/testsuite/gcc.target/arm/pr65358.c | 34 > ++++++++++++++++++++++++++++++++ > 2 files changed, 39 insertions(+) > create mode 100644 gcc/testsuite/gcc.target/arm/pr65358.c > > diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index > 5302dbd..9acd12a 100644 > --- a/gcc/testsuite/ChangeLog > +++ b/gcc/testsuite/ChangeLog > @@ -1,3 +1,8 @@ > +2015-03-13 Honggyu Kim <hong.gyu.kim@lge.com> > + > + PR target/65235 > + * gcc.target/arm/pr65358.c: New test for sibcall argument passing > bug. Just 'New test.' for the entry should be enough, but it's not a big deal. > + > 2015-03-12 Kyrylo Tkachov <kyrylo.tkachov@arm.com> > > PR rtl-optimization/65235 > diff --git a/gcc/testsuite/gcc.target/arm/pr65358.c > b/gcc/testsuite/gcc.target/arm/pr65358.c > new file mode 100644 > index 0000000..d663dcf > --- /dev/null > +++ b/gcc/testsuite/gcc.target/arm/pr65358.c > @@ -0,0 +1,34 @@ > +/* PR target/65358 */ > +/* { dg-do compile { target arm*-*-* } } */ No need for the target selector. The fact that it's in gcc.target/arm already means it will only be run for the arm targets. Also, the bug is exposed at runtime, so this should be a dg-do run test. Cheers, Kyrill > +/* { dg-options "-O2" } */ > + > +struct pack > +{ > + int fine; > + int victim; > + int killer; > +}; > + > +int __attribute__ ((__noinline__, __noclone__)) bar (int a, int b, > +struct pack p) { > + if (a != 20 || b != 30) > + __builtin_abort (); > + if (p.fine != 40 || p.victim != 50 || p.killer != 60) > + __builtin_abort (); > + return 0; > +} > + > +int __attribute__ ((__noinline__, __noclone__)) foo (int arg1, int > +arg2, int arg3, struct pack p) { > + return bar (arg2, arg3, p); > +} > + > +int main (void) > +{ > + struct pack p = { 40, 50, 60 }; > + > + (void) foo (10, 20, 30, p); > + return 0; > +} > -- > 1.7.9.5 >
On 03/13/15 13:04, Kyrill Tkachov wrote: > >> Hi, > > Hi Honggyu, > Thanks for helping out. I've got a couple of pointers for the testcase > inline. > >> >> I have wrote a testcase that reproduces argument overwriting bug during >> arm code generation. >> >> I wrote this testcase with the help of Mikael Pettersson. >> If some format is not proper to run in gcc testsuite framework, please > correct >> me. >> >> Please refer to the following bugzilla link for details: >> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65358 >> >> Honggyu >> --- >> gcc/testsuite/ChangeLog | 5 +++++ >> gcc/testsuite/gcc.target/arm/pr65358.c | 34 >> ++++++++++++++++++++++++++++++++ >> 2 files changed, 39 insertions(+) >> create mode 100644 gcc/testsuite/gcc.target/arm/pr65358.c >> >> diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index >> 5302dbd..9acd12a 100644 >> --- a/gcc/testsuite/ChangeLog >> +++ b/gcc/testsuite/ChangeLog >> @@ -1,3 +1,8 @@ >> +2015-03-13 Honggyu Kim <hong.gyu.kim@lge.com> >> + >> + PR target/65235 Looks like the PR number is wrong. >> + * gcc.target/arm/pr65358.c: New test for sibcall argument passing >> bug. > > Just 'New test.' for the entry should be enough, but it's not a big deal. > >> + >> 2015-03-12 Kyrylo Tkachov <kyrylo.tkachov@arm.com> >> >> PR rtl-optimization/65235 >> diff --git a/gcc/testsuite/gcc.target/arm/pr65358.c >> b/gcc/testsuite/gcc.target/arm/pr65358.c >> new file mode 100644 >> index 0000000..d663dcf >> --- /dev/null >> +++ b/gcc/testsuite/gcc.target/arm/pr65358.c >> @@ -0,0 +1,34 @@ >> +/* PR target/65358 */ >> +/* { dg-do compile { target arm*-*-* } } */ > > No need for the target selector. The fact that it's in gcc.target/arm > already > means it will only be run for the arm targets. > Also, the bug is exposed at runtime, so this should be a dg-do run test. > > Cheers, > Kyrill > >> +/* { dg-options "-O2" } */ >> + >> +struct pack >> +{ >> + int fine; >> + int victim; >> + int killer; >> +}; >> + >> +int __attribute__ ((__noinline__, __noclone__)) bar (int a, int b, >> +struct pack p) { >> + if (a != 20 || b != 30) >> + __builtin_abort (); >> + if (p.fine != 40 || p.victim != 50 || p.killer != 60) >> + __builtin_abort (); >> + return 0; >> +} >> + >> +int __attribute__ ((__noinline__, __noclone__)) foo (int arg1, int >> +arg2, int arg3, struct pack p) { >> + return bar (arg2, arg3, p); >> +} >> + >> +int main (void) >> +{ >> + struct pack p = { 40, 50, 60 }; >> + >> + (void) foo (10, 20, 30, p); >> + return 0; >> +} >> -- >> 1.7.9.5 >> > > > > > . >
On Fri, Mar 13, 2015 at 12:04:28PM -0000, Kyrill Tkachov wrote: > > diff --git a/gcc/testsuite/gcc.target/arm/pr65358.c > > b/gcc/testsuite/gcc.target/arm/pr65358.c > > new file mode 100644 > > index 0000000..d663dcf > > --- /dev/null > > +++ b/gcc/testsuite/gcc.target/arm/pr65358.c > > @@ -0,0 +1,34 @@ > > +/* PR target/65358 */ > > +/* { dg-do compile { target arm*-*-* } } */ > > No need for the target selector. The fact that it's in gcc.target/arm > already > means it will only be run for the arm targets. > Also, the bug is exposed at runtime, so this should be a dg-do run test. Why make this testcase arm-specific at all? I don't see anything that wouldn't work on other targets? Segher
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5302dbd..9acd12a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-03-13 Honggyu Kim <hong.gyu.kim@lge.com> + + PR target/65235 + * gcc.target/arm/pr65358.c: New test for sibcall argument passing bug. + 2015-03-12 Kyrylo Tkachov <kyrylo.tkachov@arm.com> PR rtl-optimization/65235 diff --git a/gcc/testsuite/gcc.target/arm/pr65358.c b/gcc/testsuite/gcc.target/arm/pr65358.c new file mode 100644 index 0000000..d663dcf --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/pr65358.c @@ -0,0 +1,34 @@ +/* PR target/65358 */ +/* { dg-do compile { target arm*-*-* } } */ +/* { dg-options "-O2" } */ + +struct pack +{ + int fine; + int victim; + int killer; +}; + +int __attribute__ ((__noinline__, __noclone__)) +bar (int a, int b, struct pack p) +{ + if (a != 20 || b != 30) + __builtin_abort (); + if (p.fine != 40 || p.victim != 50 || p.killer != 60) + __builtin_abort (); + return 0; +} + +int __attribute__ ((__noinline__, __noclone__)) +foo (int arg1, int arg2, int arg3, struct pack p) +{ + return bar (arg2, arg3, p); +} + +int main (void) +{ + struct pack p = { 40, 50, 60 }; + + (void) foo (10, 20, 30, p); + return 0; +}