Ping

2015-02-16 20:15 GMT+03:00 Ilya Enkovich <enkovich....@gmail.com>:
> On 16 Feb 17:01, Jakub Jelinek wrote:
>> On Mon, Feb 16, 2015 at 06:56:45PM +0300, Ilya Enkovich wrote:
>> > On 16 Feb 16:31, Jakub Jelinek wrote:
>> > > On Mon, Feb 16, 2015 at 06:20:59PM +0300, Ilya Enkovich wrote:
>> > > > This patch restricts usage of Pointer Bounds Checker with Sanitizer.  
>> > > > OK for trunk?
>> > >
>> > > There are many sanitizers, and for most of them I don't see why they 
>> > > would
>> > > be in any conflict with -mmpx, it is just -fsanitize=address and
>> > > -fsanitize=kernel-address.
>> > > So perhaps test instead if (flag_sanitize & SANITIZE_ADDRESS) != 0, and
>> > > better clear the flag_pointer_bounds after issuing the error, error () is
>> > > not a fatal function, so you need something sensible for error-recovery.
>> > >
>> > >   Jakub
>> >
>> > I don't know all sanitizers in details.  Code generated by some of them 
>> > may be incorrect from checker point of view.  Thus I just wanted to 
>> > disable unexplored and untested combinations.
>>
>> Shouldn't be that hard to write a testcase and test it.
>>
>> Most of the sanitizers just add code like
>> if (some_condition)
>>   __ubsan_handle_... ();
>> where from the POV of the program the __ubsan_* function reports or might
>> report some problem, and optionally abort the program.
>> That some_condition can be a check of the pointer value, shift count,
>> divisor check, etc.
>>
>>       Jakub
>
> OK.  With no tricky memory references this should be safe.  Here is a patch 
> to filter off Adress Sanitizer only.
>
> Thanks for review!
>
> Ilya
> --
> gcc/
>
> 2015-02-16  Ilya Enkovich  <ilya.enkov...@intel.com>
>
>         PR target/65044
>         * toplev.c (process_options): Restrict Pointer Bounds Checker
>         usage with Address Sanitizer.
>
> gcc/testsuite/
>
> 2015-02-16  Ilya Enkovich  <ilya.enkov...@intel.com>
>
>         PR target/65044
>         * gcc.target/i386/pr65044.c: New.
>
>
> diff --git a/gcc/testsuite/gcc.target/i386/pr65044.c 
> b/gcc/testsuite/gcc.target/i386/pr65044.c
> new file mode 100644
> index 0000000..4f318d6
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/i386/pr65044.c
> @@ -0,0 +1,12 @@
> +/* { dg-error "-fcheck-pointer-bounds is not supported with Address 
> Sanitizer" } */
> +/* { dg-do compile } */
> +/* { dg-require-effective-target mpx } */
> +/* { dg-options "-fcheck-pointer-bounds -mmpx -fsanitize=address" } */
> +
> +extern int x[];
> +
> +void
> +foo ()
> +{
> +  x[0] = 0;
> +}
> diff --git a/gcc/toplev.c b/gcc/toplev.c
> index 99cf180..70eb6b6 100644
> --- a/gcc/toplev.c
> +++ b/gcc/toplev.c
> @@ -1376,6 +1376,11 @@ process_options (void)
>      {
>        if (targetm.chkp_bound_mode () == VOIDmode)
>         error ("-fcheck-pointer-bounds is not supported for this target");
> +
> +      if (flag_sanitize & SANITIZE_ADDRESS)
> +       error ("-fcheck-pointer-bounds is not supported with Address 
> Sanitizer");
> +
> +      flag_check_pointer_bounds = 0;
>      }
>
>    /* One region RA really helps to decrease the code size.  */

Reply via email to