On Thu, Oct 12, 2017 at 8:54 PM, Tsimbalist, Igor V
<igor.v.tsimbal...@intel.com> wrote:
> Attached is an updated patch according to your comments. New tests are
> added to test ICF optimization in presence of nocf_check attribute.
--- a/gcc/testsuite/c-c++-common/fcf-protection-2.c
+++ b/gcc/testsuite/c-c++-common/fcf-protection-2.c
@@ -1,4 +1,4 @@
 /* { dg-do compile } */
 /* { dg-options "-fcf-protection=branch" } */
-/* { dg-error "'-fcf-protection=branch' is not supported for this
target" "" { target { "i?86-*-* x86_64-*-*" } } 0 } */
+/* { dg-error "'-fcf-protection=branch' requires CET support on this
target. Use -mcet or one of -mibt, -mshstk options to enable CET" "" {
target { "i?86-*-* x86_64-*-*" } } 0 } */

Checking for "-fcf-protection=branch' requires CET support on this
target" should be enough. No need to check the whole message here and
in other tests.

 /* { dg-error "'-fcf-protection=branch' is not supported for this
target" "" { target { ! "i?86-*-* x86_64-*-*" } } 0 } */
diff --git a/gcc/testsuite/c-c++-common/fcf-protection-3.c
b/gcc/testsuite/c-c++-common/fcf-protection-3.c


--- a/gcc/testsuite/c-c++-common/fcf-protection-4.c
+++ b/gcc/testsuite/c-c++-common/fcf-protection-4.c
@@ -1,4 +1,4 @@
 /* { dg-do compile } */
 /* { dg-options "-fcf-protection=none" } */
-/* { dg-bogus "'-fcf-protection=none' is not supported for this
target" "" { target { "i?86-*-* x86_64-*-*" } } 0 } */
+/* { dg-bogus "'-fcf-protection=none' res CET support on this target.
Use -mcet or one of -mibt, -mshstk options to enable CET" "" { target
{ "i?86-*-* x86_64-*-*" } } 0 } */
 /* { dg-bogus "'-fcf-protection=none' is not supported for this
target" "" { target { ! "i?86-*-* x86_64-*-*" } } 0 } */
diff --git a/gcc/testsuite/c-c++-common/fcf-protection-5.c
b/gcc/testsuite/c-c++-common/fcf-protection-5.c

The above test checks for bogus messages? -fcf-protection=none option
should not generate any messages. So, the test should check that
-fcf-protection=none doesn't generate any error. (And, there is a typo
in the message, /s/res/requires.)

Uros.

> Igor
>
>
>> -----Original Message-----
>> From: Tsimbalist, Igor V
>> Sent: Tuesday, September 19, 2017 11:30 PM
>> To: Uros Bizjak <ubiz...@gmail.com>
>> Cc: gcc-patches@gcc.gnu.org; Tsimbalist, Igor V
>> <igor.v.tsimbal...@intel.com>
>> Subject: RE: 0006-Part-6.-Add-x86-tests-for-Intel-CET-implementation
>>
>> > -----Original Message-----
>> > From: gcc-patches-ow...@gcc.gnu.org [mailto:gcc-patches-
>> > ow...@gcc.gnu.org] On Behalf Of Uros Bizjak
>> > Sent: Tuesday, September 19, 2017 6:13 PM
>> > To: Tsimbalist, Igor V <igor.v.tsimbal...@intel.com>
>> > Cc: gcc-patches@gcc.gnu.org
>> > Subject: Re: 0006-Part-6.-Add-x86-tests-for-Intel-CET-implementation
>> >
>> > On Tue, Sep 19, 2017 at 5:18 PM, Tsimbalist, Igor V
>> > <igor.v.tsimbal...@intel.com> wrote:
>> > >> -----Original Message-----
>> > >> From: gcc-patches-ow...@gcc.gnu.org [mailto:gcc-patches-
>> > >> ow...@gcc.gnu.org] On Behalf Of Uros Bizjak
>> > >> Sent: Monday, September 18, 2017 12:17 PM
>> > >> To: gcc-patches@gcc.gnu.org
>> > >> Cc: Tsimbalist, Igor V <igor.v.tsimbal...@intel.com>; Tsimbalist,
>> > >> Igor V <igor.v.tsimbal...@intel.com>
>> > >> Subject: Re:
>> > >> 0006-Part-6.-Add-x86-tests-for-Intel-CET-implementation
>> > >>
>> > >> Hello!
>> > >>
>> > >> > gcc/testsuite/
>> > >> >
>> > >> > * g++.dg/cet-notrack-1.C: New test.
>> > >> > * gcc.target/i386/cet-intrin-1.c: Likewise.
>> > >> > * gcc.target/i386/cet-intrin-10.c: Likewise.
>> > >> > * gcc.target/i386/cet-intrin-2.c: Likewise.
>> > >> > * gcc.target/i386/cet-intrin-3.c: Likewise.
>> > >> > * gcc.target/i386/cet-intrin-4.c: Likewise.
>> > >> > * gcc.target/i386/cet-intrin-5.c: Likewise.
>> > >> > * gcc.target/i386/cet-intrin-6.c: Likewise.
>> > >> > * gcc.target/i386/cet-intrin-7.c: Likewise.
>> > >> > * gcc.target/i386/cet-intrin-8.c: Likewise.
>> > >> > * gcc.target/i386/cet-intrin-9.c: Likewise.
>> > >> > * gcc.target/i386/cet-label.c: Likewise.
>> > >> > * gcc.target/i386/cet-notrack-1a.c: Likewise.
>> > >> > * gcc.target/i386/cet-notrack-1b.c: Likewise.
>> > >> > * gcc.target/i386/cet-notrack-2a.c: Likewise.
>> > >> > * gcc.target/i386/cet-notrack-2b.c: Likewise.
>> > >> > * gcc.target/i386/cet-notrack-3.c: Likewise.
>> > >> > * gcc.target/i386/cet-notrack-4a.c: Likewise.
>> > >> > * gcc.target/i386/cet-notrack-4b.c: Likewise.
>> > >> > * gcc.target/i386/cet-notrack-5a.c: Likewise.
>> > >> > * gcc.target/i386/cet-notrack-5b.c: Likewise.
>> > >> > * gcc.target/i386/cet-notrack-6a.c: Likewise.
>> > >> > * gcc.target/i386/cet-notrack-6b.c: Likewise.
>> > >> > * gcc.target/i386/cet-notrack-7.c: Likewise.
>> > >> > * gcc.target/i386/cet-property-1.c: Likewise.
>> > >> > * gcc.target/i386/cet-property-2.c: Likewise.
>> > >> > * gcc.target/i386/cet-rdssp-1.c: Likewise.
>> > >> > * gcc.target/i386/cet-sjlj-1.c: Likewise.
>> > >> > * gcc.target/i386/cet-sjlj-2.c: Likewise.
>> > >> > * gcc.target/i386/cet-sjlj-3.c: Likewise.
>> > >> > * gcc.target/i386/cet-switch-1.c: Likewise.
>> > >> > * gcc.target/i386/cet-switch-2.c: Likewise.
>> > >> > * lib/target-supports.exp (check_effective_target_cet): New proc.
>> > >>
>> > >> A couple of questions:
>> > >>
>> > >> +/* { dg-do compile } */
>> > >> +/* { dg-options "-O2 -mcet" } */
>> > >> +/* { dg-final { scan-assembler-times "setssbsy" 2 } } */
>> > >> +
>> > >> +#include <immintrin.h>
>> > >> +
>> > >> +void f1 (void)
>> > >> +{
>> > >> +  __builtin_ia32_setssbsy ();
>> > >> +}
>> > >> +
>> > >> +void f2 (void)
>> > >> +{
>> > >> +  _setssbsy ();
>> > >> +}
>> > >>
>> > >> Is there a reason that both, __builtin and intrinsic versions are
>> > >> tested in a couple of places? The intrinsic version is just a
>> > >> wrapper for __builtin, so IMO testing intrinsic version should be
>> enough.
>> > > No strong reason. Just to check that intrinsic names are recognized
>> > > and
>> > processed correctly.
>> > > The implementation could change and the test will catch inconsistency.
>> > > I would also assume a user will use intrinsics that's why I add intrinsic
>> check.
>> > Should I remove it?
>> >
>> > Actually, these __builtins are considered as implementation detail,
>> > and their use should be discouraged. They are deliberately not
>> > documented, and users should use intrinsic headers instead. That said,
>> > builtins won't change without a reason, since Ada needs them.
>> >
>> > It can happen that the test fails due to change of intrinsics, so I'd
>> > recommend to remove them.
>> Ok, I will remove intrinsic.
>>
>> > >> diff --git a/gcc/testsuite/gcc.target/i386/cet-rdssp-1.c
>> > >> b/gcc/testsuite/gcc.target/i386/cet-rdssp-1.c
>> > >> new file mode 100644
>> > >> index 0000000..f9223a5
>> > >> --- /dev/null
>> > >> +++ b/gcc/testsuite/gcc.target/i386/cet-rdssp-1.c
>> > >> @@ -0,0 +1,39 @@
>> > >> +/* { dg-do run { target cet } } */
>> > >> +/* { dg-options "-O2 -finstrument-control-flow -mcet" } */
>> > >>
>> > >> The "target cet" directive just checks that CET instructions can be
>> > compiled.
>> > >> The test will (probably?) fail on targets with binutils that can
>> > >> compile CET instructions, but the target itself doesn't support CET.
>> > >> If this is the case, then check header has to be introduced, so the
>> > >> test can be bypassed on targets without runtime support.
>> > > The test will not fail even if a target doesn't support CET as 'rdssp'
>> > > instruction is a NOP on such target and further usage of CET
>> > > instruction is bypassed. In this case the code
>> > >
>> > > +  ssp = rdssp (ssp);
>> > >
>> > > Will keep ssp as 0.
>> >
>> > I assume that this is true also for other runtime tests, and this
>> > clears my concern about runtime failures with updated binutils.
>> Yes, that's true for other runtime tests.
>>
>> Igor
>>
>> >
>> > Uros.

Reply via email to