Message ID | 20150225091930.GA65329@msticlxl57.ims.intel.com |
---|---|
State | New |
Headers | show |
Committed to trunk. 2015-02-25 12:19 GMT+03:00 Ilya Enkovich <enkovich.gnu@gmail.com>: > Hi, > > This patch fixes a case when outdated checker local data is used to process external calls. Bootstrapped and tested on x86_64-unknown-linux-gnu. OK for trunk? > > Thanks, > Ilya > -- > gcc/ > > 2015-02-25 Ilya Enkovich <ilya.enkovich@intel.com> > > PR target/65183 > * tree-chkp.c (chkp_check_lower): Don't check against > zero bounds for already instrumented functions. > (chkp_check_upper): Likewise. > (chkp_fini): Clean pass local data to avoid wrong reusage. > > gcc/testsuite/ > > 2015-02-25 Ilya Enkovich <ilya.enkovich@intel.com> > > PR target/65183 > * gcc.target/i386/pr65183.c: New. > > > diff --git a/gcc/testsuite/gcc.target/i386/pr65183.c b/gcc/testsuite/gcc.target/i386/pr65183.c > new file mode 100644 > index 0000000..069a543 > --- /dev/null > +++ b/gcc/testsuite/gcc.target/i386/pr65183.c > @@ -0,0 +1,20 @@ > +/* { dg-do compile } */ > +/* { dg-require-effective-target mpx } */ > +/* { dg-options "-O -fcheck-pointer-bounds -fchkp-use-nochk-string-functions -mmpx" } */ > + > +extern void bar(void *); > +extern void baz(void); > + > +static int lc[32]; > + > +void foobar(void *c) > +{ > + bar(&c); > + __builtin_memcpy (lc, c, lc[0]); > +} > + > +void foo () > +{ > + baz (); > + foobar(0); > +} > diff --git a/gcc/tree-chkp.c b/gcc/tree-chkp.c > index b0a3a15..d2df4ba 100644 > --- a/gcc/tree-chkp.c > +++ b/gcc/tree-chkp.c > @@ -1268,7 +1268,8 @@ chkp_check_lower (tree addr, tree bounds, > gimple check; > tree node; > > - if (bounds == chkp_get_zero_bounds ()) > + if (!chkp_function_instrumented_p (current_function_decl) > + && bounds == chkp_get_zero_bounds ()) > return; > > if (dirflag == integer_zero_node > @@ -1314,7 +1315,8 @@ chkp_check_upper (tree addr, tree bounds, > gimple check; > tree node; > > - if (bounds == chkp_get_zero_bounds ()) > + if (!chkp_function_instrumented_p (current_function_decl) > + && bounds == chkp_get_zero_bounds ()) > return; > > if (dirflag == integer_zero_node > @@ -4306,6 +4308,10 @@ chkp_fini (void) > free_dominance_info (CDI_POST_DOMINATORS); > > bitmap_obstack_release (NULL); > + > + entry_block = NULL; > + zero_bounds = NULL_TREE; > + none_bounds = NULL_TREE; > } > > /* Main instrumentation pass function. */
> On Mar 2, 2015, at 1:41 PM, Ilya Enkovich <enkovich.gnu@gmail.com> wrote: > > Committed to trunk. Hi Ilya, Was this approved offline? If so, it is a good habit to note in the "Committed to trunk" message who approved it. This way we have reviewer's name on file. Thank you, -- Maxim Kuvyrkov www.linaro.org > > 2015-02-25 12:19 GMT+03:00 Ilya Enkovich <enkovich.gnu@gmail.com>: >> Hi, >> >> This patch fixes a case when outdated checker local data is used to process external calls. Bootstrapped and tested on x86_64-unknown-linux-gnu. OK for trunk? >> >> Thanks, >> Ilya >> -- >> gcc/ >> >> 2015-02-25 Ilya Enkovich <ilya.enkovich@intel.com> >> >> PR target/65183 >> * tree-chkp.c (chkp_check_lower): Don't check against >> zero bounds for already instrumented functions. >> (chkp_check_upper): Likewise. >> (chkp_fini): Clean pass local data to avoid wrong reusage. >> >> gcc/testsuite/ >> >> 2015-02-25 Ilya Enkovich <ilya.enkovich@intel.com> >> >> PR target/65183 >> * gcc.target/i386/pr65183.c: New. >> >> >> diff --git a/gcc/testsuite/gcc.target/i386/pr65183.c b/gcc/testsuite/gcc.target/i386/pr65183.c >> new file mode 100644 >> index 0000000..069a543 >> --- /dev/null >> +++ b/gcc/testsuite/gcc.target/i386/pr65183.c >> @@ -0,0 +1,20 @@ >> +/* { dg-do compile } */ >> +/* { dg-require-effective-target mpx } */ >> +/* { dg-options "-O -fcheck-pointer-bounds -fchkp-use-nochk-string-functions -mmpx" } */ >> + >> +extern void bar(void *); >> +extern void baz(void); >> + >> +static int lc[32]; >> + >> +void foobar(void *c) >> +{ >> + bar(&c); >> + __builtin_memcpy (lc, c, lc[0]); >> +} >> + >> +void foo () >> +{ >> + baz (); >> + foobar(0); >> +} >> diff --git a/gcc/tree-chkp.c b/gcc/tree-chkp.c >> index b0a3a15..d2df4ba 100644 >> --- a/gcc/tree-chkp.c >> +++ b/gcc/tree-chkp.c >> @@ -1268,7 +1268,8 @@ chkp_check_lower (tree addr, tree bounds, >> gimple check; >> tree node; >> >> - if (bounds == chkp_get_zero_bounds ()) >> + if (!chkp_function_instrumented_p (current_function_decl) >> + && bounds == chkp_get_zero_bounds ()) >> return; >> >> if (dirflag == integer_zero_node >> @@ -1314,7 +1315,8 @@ chkp_check_upper (tree addr, tree bounds, >> gimple check; >> tree node; >> >> - if (bounds == chkp_get_zero_bounds ()) >> + if (!chkp_function_instrumented_p (current_function_decl) >> + && bounds == chkp_get_zero_bounds ()) >> return; >> >> if (dirflag == integer_zero_node >> @@ -4306,6 +4308,10 @@ chkp_fini (void) >> free_dominance_info (CDI_POST_DOMINATORS); >> >> bitmap_obstack_release (NULL); >> + >> + entry_block = NULL; >> + zero_bounds = NULL_TREE; >> + none_bounds = NULL_TREE; >> } >> >> /* Main instrumentation pass function. */
2015-03-02 15:25 GMT+03:00 Maxim Kuvyrkov <maxim.kuvyrkov@linaro.org>: >> On Mar 2, 2015, at 1:41 PM, Ilya Enkovich <enkovich.gnu@gmail.com> wrote: >> >> Committed to trunk. > > > Hi Ilya, > > Was this approved offline? If so, it is a good habit to note in the "Committed to trunk" message who approved it. This way we have reviewer's name on file. Hi, I just self-approved this patch, thus no reviewer's name. Thanks, Ilya > > Thank you, > > -- > Maxim Kuvyrkov > www.linaro.org > > >> >> 2015-02-25 12:19 GMT+03:00 Ilya Enkovich <enkovich.gnu@gmail.com>: >>> Hi, >>> >>> This patch fixes a case when outdated checker local data is used to process external calls. Bootstrapped and tested on x86_64-unknown-linux-gnu. OK for trunk? >>> >>> Thanks, >>> Ilya >>> -- >>> gcc/ >>> >>> 2015-02-25 Ilya Enkovich <ilya.enkovich@intel.com> >>> >>> PR target/65183 >>> * tree-chkp.c (chkp_check_lower): Don't check against >>> zero bounds for already instrumented functions. >>> (chkp_check_upper): Likewise. >>> (chkp_fini): Clean pass local data to avoid wrong reusage. >>> >>> gcc/testsuite/ >>> >>> 2015-02-25 Ilya Enkovich <ilya.enkovich@intel.com> >>> >>> PR target/65183 >>> * gcc.target/i386/pr65183.c: New. >>> >>> >>> diff --git a/gcc/testsuite/gcc.target/i386/pr65183.c b/gcc/testsuite/gcc.target/i386/pr65183.c >>> new file mode 100644 >>> index 0000000..069a543 >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/i386/pr65183.c >>> @@ -0,0 +1,20 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-require-effective-target mpx } */ >>> +/* { dg-options "-O -fcheck-pointer-bounds -fchkp-use-nochk-string-functions -mmpx" } */ >>> + >>> +extern void bar(void *); >>> +extern void baz(void); >>> + >>> +static int lc[32]; >>> + >>> +void foobar(void *c) >>> +{ >>> + bar(&c); >>> + __builtin_memcpy (lc, c, lc[0]); >>> +} >>> + >>> +void foo () >>> +{ >>> + baz (); >>> + foobar(0); >>> +} >>> diff --git a/gcc/tree-chkp.c b/gcc/tree-chkp.c >>> index b0a3a15..d2df4ba 100644 >>> --- a/gcc/tree-chkp.c >>> +++ b/gcc/tree-chkp.c >>> @@ -1268,7 +1268,8 @@ chkp_check_lower (tree addr, tree bounds, >>> gimple check; >>> tree node; >>> >>> - if (bounds == chkp_get_zero_bounds ()) >>> + if (!chkp_function_instrumented_p (current_function_decl) >>> + && bounds == chkp_get_zero_bounds ()) >>> return; >>> >>> if (dirflag == integer_zero_node >>> @@ -1314,7 +1315,8 @@ chkp_check_upper (tree addr, tree bounds, >>> gimple check; >>> tree node; >>> >>> - if (bounds == chkp_get_zero_bounds ()) >>> + if (!chkp_function_instrumented_p (current_function_decl) >>> + && bounds == chkp_get_zero_bounds ()) >>> return; >>> >>> if (dirflag == integer_zero_node >>> @@ -4306,6 +4308,10 @@ chkp_fini (void) >>> free_dominance_info (CDI_POST_DOMINATORS); >>> >>> bitmap_obstack_release (NULL); >>> + >>> + entry_block = NULL; >>> + zero_bounds = NULL_TREE; >>> + none_bounds = NULL_TREE; >>> } >>> >>> /* Main instrumentation pass function. */ >
diff --git a/gcc/testsuite/gcc.target/i386/pr65183.c b/gcc/testsuite/gcc.target/i386/pr65183.c new file mode 100644 index 0000000..069a543 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr65183.c @@ -0,0 +1,20 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target mpx } */ +/* { dg-options "-O -fcheck-pointer-bounds -fchkp-use-nochk-string-functions -mmpx" } */ + +extern void bar(void *); +extern void baz(void); + +static int lc[32]; + +void foobar(void *c) +{ + bar(&c); + __builtin_memcpy (lc, c, lc[0]); +} + +void foo () +{ + baz (); + foobar(0); +} diff --git a/gcc/tree-chkp.c b/gcc/tree-chkp.c index b0a3a15..d2df4ba 100644 --- a/gcc/tree-chkp.c +++ b/gcc/tree-chkp.c @@ -1268,7 +1268,8 @@ chkp_check_lower (tree addr, tree bounds, gimple check; tree node; - if (bounds == chkp_get_zero_bounds ()) + if (!chkp_function_instrumented_p (current_function_decl) + && bounds == chkp_get_zero_bounds ()) return; if (dirflag == integer_zero_node @@ -1314,7 +1315,8 @@ chkp_check_upper (tree addr, tree bounds, gimple check; tree node; - if (bounds == chkp_get_zero_bounds ()) + if (!chkp_function_instrumented_p (current_function_decl) + && bounds == chkp_get_zero_bounds ()) return; if (dirflag == integer_zero_node @@ -4306,6 +4308,10 @@ chkp_fini (void) free_dominance_info (CDI_POST_DOMINATORS); bitmap_obstack_release (NULL); + + entry_block = NULL; + zero_bounds = NULL_TREE; + none_bounds = NULL_TREE; } /* Main instrumentation pass function. */