Thanks, fixed in r266095
On Tue, Apr 12, 2016 at 10:15 AM, Robinson, Paul <paul_robin...@playstation.sony.com> wrote: > > >> -----Original Message----- >> From: cfe-commits [mailto:cfe-commits-boun...@lists.llvm.org] On Behalf Of >> Evgeniy Stepanov via cfe-commits >> Sent: Monday, April 11, 2016 3:28 PM >> To: cfe-commits@lists.llvm.org >> Subject: r266005 - Allow simultaneous safestack and stackprotector >> attributes. >> >> Author: eugenis >> Date: Mon Apr 11 17:27:55 2016 >> New Revision: 266005 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=266005&view=rev >> Log: >> Allow simultaneous safestack and stackprotector attributes. >> >> This is the clang part of http://reviews.llvm.org/D18846. >> SafeStack instrumentation pass adds stack protector canaries if both >> attributes are present on a function. StackProtector pass will step >> back if the function has a safestack attribute. >> >> Modified: >> cfe/trunk/lib/Driver/Tools.cpp >> cfe/trunk/test/CodeGen/stack-protector.c >> cfe/trunk/test/Driver/fsanitize.c >> >> Modified: cfe/trunk/lib/Driver/Tools.cpp >> URL: http://llvm.org/viewvc/llvm- >> project/cfe/trunk/lib/Driver/Tools.cpp?rev=266005&r1=266004&r2=266005&view >> =diff >> ========================================================================== >> ==== >> --- cfe/trunk/lib/Driver/Tools.cpp (original) >> +++ cfe/trunk/lib/Driver/Tools.cpp Mon Apr 11 17:27:55 2016 >> @@ -4878,15 +4878,10 @@ void Clang::ConstructJob(Compilation &C, >> >> // -stack-protector=0 is default. >> unsigned StackProtectorLevel = 0; >> - if (getToolChain().getSanitizerArgs().needsSafeStackRt()) { >> - Args.ClaimAllArgs(options::OPT_fno_stack_protector); >> - Args.ClaimAllArgs(options::OPT_fstack_protector_all); >> - Args.ClaimAllArgs(options::OPT_fstack_protector_strong); >> - Args.ClaimAllArgs(options::OPT_fstack_protector); >> - } else if (Arg *A = Args.getLastArg(options::OPT_fno_stack_protector, >> - options::OPT_fstack_protector_all, >> - >> options::OPT_fstack_protector_strong, >> - options::OPT_fstack_protector)) { >> + if (Arg *A = Args.getLastArg(options::OPT_fno_stack_protector, >> + options::OPT_fstack_protector_all, >> + options::OPT_fstack_protector_strong, >> + options::OPT_fstack_protector)) { >> if (A->getOption().matches(options::OPT_fstack_protector)) { >> StackProtectorLevel = std::max<unsigned>( >> LangOptions::SSPOn, >> >> Modified: cfe/trunk/test/CodeGen/stack-protector.c >> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/stack- >> protector.c?rev=266005&r1=266004&r2=266005&view=diff >> ========================================================================== >> ==== >> --- cfe/trunk/test/CodeGen/stack-protector.c (original) >> +++ cfe/trunk/test/CodeGen/stack-protector.c Mon Apr 11 17:27:55 2016 >> @@ -1,13 +1,13 @@ >> -// RUN: %clang_cc1 -emit-llvm -o - %s -stack-protector 0 | FileCheck - >> check-prefix=NOSSP %s >> -// NOSSP: define {{.*}}void @test1(i8* %msg) #0 { >> -// RUN: %clang_cc1 -emit-llvm -o - %s -stack-protector 1 | FileCheck - >> check-prefix=WITHSSP %s >> -// WITHSSP: define {{.*}}void @test1(i8* %msg) #0 { >> -// RUN: %clang_cc1 -emit-llvm -o - %s -stack-protector 2 | FileCheck - >> check-prefix=SSPSTRONG %s >> -// SSPSTRONG: define {{.*}}void @test1(i8* %msg) #0 { >> -// RUN: %clang_cc1 -emit-llvm -o - %s -stack-protector 3 | FileCheck - >> check-prefix=SSPREQ %s >> -// SSPREQ: define {{.*}}void @test1(i8* %msg) #0 { >> -// RUN: %clang_cc1 -emit-llvm -o - %s -fsanitize=safe-stack | FileCheck - >> check-prefix=SAFESTACK %s >> -// SAFESTACK: define {{.*}}void @test1(i8* %msg) #0 { >> +// RUN: %clang_cc1 -emit-llvm -o - %s -stack-protector 0 | FileCheck - >> check-prefix=DEF -check-prefix=NOSSP %s >> +// RUN: %clang_cc1 -emit-llvm -o - %s -stack-protector 1 | FileCheck - >> check-prefix=DEF -check-prefix=SSP %s >> +// RUN: %clang_cc1 -emit-llvm -o - %s -stack-protector 2 | FileCheck - >> check-prefix=DEF -check-prefix=SSPSTRONG %s >> +// RUN: %clang_cc1 -emit-llvm -o - %s -stack-protector 3 | FileCheck - >> check-prefix=DEF -check-prefix=SSPREQ %s >> + >> +// RUN: %clang_cc1 -emit-llvm -o - %s -fsanitize=safe-stack | FileCheck - >> check-prefix=DEF -check-prefix=SAFESTACK-NOSSP %s >> +// RUN: %clang_cc1 -emit-llvm -o - %s -fsanitize=safe-stack -stack- >> protector 0 | FileCheck -check-prefix=DEF -check-prefix=SAFESTACK-NOSSP %s >> +// RUN: %clang_cc1 -emit-llvm -o - %s -fsanitize=safe-stack -stack- >> protector 1 | FileCheck -check-prefix=DEF -check-prefix=SAFESTACK-SSP %s >> +// RUN: %clang_cc1 -emit-llvm -o - %s -fsanitize=safe-stack -stack- >> protector 2 | FileCheck -check-prefix=DEF -check-prefix=SAFESTACK- >> SSPSTRONG %s >> +// RUN: %clang_cc1 -emit-llvm -o - %s -fsanitize=safe-stack -stack- >> protector 3 | FileCheck -check-prefix=DEF -check-prefix=SAFESTACK-SSPREQ >> %s >> >> typedef __SIZE_TYPE__ size_t; >> >> @@ -15,18 +15,21 @@ int printf(const char * _Format, ...); >> size_t strlen(const char *s); >> char *strcpy(char *s1, const char *s2); >> >> +// DEF: define {{.*}}void @test1(i8* %msg) #[[A:.*]] { >> void test1(const char *msg) { >> char a[strlen(msg) + 1]; >> strcpy(a, msg); >> printf("%s\n", a); >> } >> >> -// NOSSP: attributes #{{.*}} = { nounwind{{.*}} } >> - >> -// WITHSSP: attributes #{{.*}} = { nounwind ssp{{.*}} } >> - >> -// SSPSTRONG: attributes #{{.*}} = { nounwind sspstrong{{.*}} } >> - >> -// SSPREQ: attributes #{{.*}} = { nounwind sspreq{{.*}} } >> - >> -// SAFESTACK: attributes #{{.*}} = { nounwind safestack{{.*}} } >> +// NOSSP-NOT: attributes #[[A]] = {{.*}} ssp >> +// SSP: attributes #[[A]] = {{.*}} ssp > > Note that because 'ssp' is a prefix of 'sspstrong' and 'sspreq' > this will match those attributes, not just 'ssp'. You want a > regex that guarantees a space after 'ssp', which is probably > +// SSP: attributes #[[A]] = {{.*}} ssp{{ }} > >> +// SSPSTRONG: attributes #[[A]] = {{.*}} sspstrong >> +// SSPREQ: attributes #[[A]] = {{.*}} sspreq >> + >> +// SAFESTACK-NOSSP: attributes #[[A]] = {{.*}} safestack >> +// SAFESTACK-NOSSP-NOT: ssp >> + >> +// SAFESTACK-SSP: attributes #[[A]] = {{.*}} safestack ssp > > Same here. > --paulr > >> +// SAFESTACK-SSPSTRONG: attributes #[[A]] = {{.*}} safestack sspstrong >> +// SAFESTACK-SSPREQ: attributes #[[A]] = {{.*}} safestack sspreq >> >> Modified: cfe/trunk/test/Driver/fsanitize.c >> URL: http://llvm.org/viewvc/llvm- >> project/cfe/trunk/test/Driver/fsanitize.c?rev=266005&r1=266004&r2=266005&v >> iew=diff >> ========================================================================== >> ==== >> --- cfe/trunk/test/Driver/fsanitize.c (original) >> +++ cfe/trunk/test/Driver/fsanitize.c Mon Apr 11 17:27:55 2016 >> @@ -317,16 +317,21 @@ >> // RUN: %clang -fno-sanitize=safe-stack -### %s 2>&1 | FileCheck %s - >> check-prefix=NOSP >> // NOSP-NOT: "-fsanitize=safe-stack" >> >> -// RUN: %clang -target x86_64-linux-gnu -fsanitize=safe-stack -### %s >> 2>&1 | FileCheck %s -check-prefix=SP >> -// RUN: %clang -target x86_64-linux-gnu -fsanitize=address,safe-stack - >> ### %s 2>&1 | FileCheck %s -check-prefix=SP-ASAN >> +// RUN: %clang -target x86_64-linux-gnu -fsanitize=safe-stack -### %s >> 2>&1 | FileCheck %s -check-prefix=NO-SP >> +// RUN: %clang -target x86_64-linux-gnu -fsanitize=address,safe-stack - >> ### %s 2>&1 | FileCheck %s -check-prefix=NO-SP-ASAN >> // RUN: %clang -target x86_64-linux-gnu -fstack-protector - >> fsanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=SP >> // RUN: %clang -target x86_64-linux-gnu -fsanitize=safe-stack -fstack- >> protector-all -### %s 2>&1 | FileCheck %s -check-prefix=SP >> -// RUN: %clang -target arm-linux-androideabi -fsanitize=safe-stack -### >> %s 2>&1 | FileCheck %s -check-prefix=SP >> -// RUN: %clang -target aarch64-linux-android -fsanitize=safe-stack -### >> %s 2>&1 | FileCheck %s -check-prefix=SP >> -// SP-NOT: stack-protector >> +// RUN: %clang -target arm-linux-androideabi -fsanitize=safe-stack -### >> %s 2>&1 | FileCheck %s -check-prefix=NO-SP >> +// RUN: %clang -target aarch64-linux-android -fsanitize=safe-stack -### >> %s 2>&1 | FileCheck %s -check-prefix=NO-SP >> +// NO-SP-NOT: stack-protector >> +// NO-SP: "-fsanitize=safe-stack" >> // SP: "-fsanitize=safe-stack" >> -// SP-ASAN-NOT: stack-protector >> -// SP-ASAN: "-fsanitize=address,safe-stack" >> +// SP: -stack-protector >> +// NO-SP-NOT: stack-protector >> + >> +// NO-SP-ASAN-NOT: stack-protector >> +// NO-SP-ASAN: "-fsanitize=address,safe-stack" >> +// NO-SP-ASAN-NOT: stack-protector >> >> // RUN: %clang -target powerpc64-unknown-linux-gnu -fsanitize=memory %s - >> ### 2>&1 | FileCheck %s -check-prefix=CHECK-SANM >> // RUN: %clang -target powerpc64le-unknown-linux-gnu -fsanitize=memory %s >> -### 2>&1 | FileCheck %s -check-prefix=CHECK-SANM >> >> >> _______________________________________________ >> cfe-commits mailing list >> cfe-commits@lists.llvm.org >> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits