diff options
author | Marek Polacek <polacek@redhat.com> | 2024-11-26 14:37:21 -0500 |
---|---|---|
committer | Marek Polacek <polacek@redhat.com> | 2025-02-13 17:17:16 -0500 |
commit | a134dcd8a010744a0097d190f73a4efc2e381531 (patch) | |
tree | e358ce920fda691dc363074e2cfa139aec9db9e3 /gcc/testsuite/c-c++-common | |
parent | a560b5b5b508f39294989ee2559fcecdd2d8924a (diff) | |
download | gcc-a134dcd8a010744a0097d190f73a4efc2e381531.zip gcc-a134dcd8a010744a0097d190f73a4efc2e381531.tar.gz gcc-a134dcd8a010744a0097d190f73a4efc2e381531.tar.bz2 |
driver: -fhardened and -z lazy/-z norelro [PR117739]
As the manual states, using "-fhardened -fstack-protector" will produce
a warning because -fhardened wants to enable -fstack-protector-strong,
but it can't since it's been overriden by the weaker -fstack-protector.
-fhardened also attempts to enable -Wl,-z,relro,-z,now. By the same
logic as above, "-fhardened -z norelro" or "-fhardened -z lazy" should
produce the same warning. But we don't detect this combination, so
this patch fixes it. I also renamed a variable to better reflect its
purpose.
Also don't check warn_hardened in process_command, since it's always
true there.
Also tweak wording in the manual as Jon Wakely suggested on IRC.
PR driver/117739
gcc/ChangeLog:
* doc/invoke.texi: Tweak wording for -Whardened.
* gcc.cc (driver_handle_option): If -z lazy or -z norelro was
specified, don't enable linker hardening.
(process_command): Don't check warn_hardened.
gcc/testsuite/ChangeLog:
* c-c++-common/fhardened-16.c: New test.
* c-c++-common/fhardened-17.c: New test.
* c-c++-common/fhardened-18.c: New test.
* c-c++-common/fhardened-19.c: New test.
* c-c++-common/fhardened-20.c: New test.
* c-c++-common/fhardened-21.c: New test.
Reviewed-by: Jakub Jelinek <jakub@redhat.com>
Diffstat (limited to 'gcc/testsuite/c-c++-common')
-rw-r--r-- | gcc/testsuite/c-c++-common/fhardened-16.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/c-c++-common/fhardened-17.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/c-c++-common/fhardened-18.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/c-c++-common/fhardened-19.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/c-c++-common/fhardened-20.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/c-c++-common/fhardened-21.c | 5 |
6 files changed, 30 insertions, 0 deletions
diff --git a/gcc/testsuite/c-c++-common/fhardened-16.c b/gcc/testsuite/c-c++-common/fhardened-16.c new file mode 100644 index 0000000..7a50ad0 --- /dev/null +++ b/gcc/testsuite/c-c++-common/fhardened-16.c @@ -0,0 +1,5 @@ +/* PR driver/117739 */ +/* { dg-do compile { target *-*-linux* *-*-gnu* } } */ +/* { dg-options "-fhardened -O -Wl,-z,lazy -Whardened" } */ + +/* { dg-warning "linker hardening options not enabled" "" { target *-*-* } 0 } */ diff --git a/gcc/testsuite/c-c++-common/fhardened-17.c b/gcc/testsuite/c-c++-common/fhardened-17.c new file mode 100644 index 0000000..acef8c6 --- /dev/null +++ b/gcc/testsuite/c-c++-common/fhardened-17.c @@ -0,0 +1,5 @@ +/* PR driver/117739 */ +/* { dg-do compile { target *-*-linux* *-*-gnu* } } */ +/* { dg-options "-fhardened -O -z lazy -Whardened" } */ + +/* { dg-warning "linker hardening options not enabled" "" { target *-*-* } 0 } */ diff --git a/gcc/testsuite/c-c++-common/fhardened-18.c b/gcc/testsuite/c-c++-common/fhardened-18.c new file mode 100644 index 0000000..1a9a34b --- /dev/null +++ b/gcc/testsuite/c-c++-common/fhardened-18.c @@ -0,0 +1,5 @@ +/* PR driver/117739 */ +/* { dg-do compile { target *-*-linux* *-*-gnu* } } */ +/* { dg-options "-Wl,-z,lazy -fhardened -O -Whardened" } */ + +/* { dg-warning "linker hardening options not enabled" "" { target *-*-* } 0 } */ diff --git a/gcc/testsuite/c-c++-common/fhardened-19.c b/gcc/testsuite/c-c++-common/fhardened-19.c new file mode 100644 index 0000000..a871702 --- /dev/null +++ b/gcc/testsuite/c-c++-common/fhardened-19.c @@ -0,0 +1,5 @@ +/* PR driver/117739 */ +/* { dg-do compile { target *-*-linux* *-*-gnu* } } */ +/* { dg-options "-z lazy -fhardened -O -Whardened" } */ + +/* { dg-warning "linker hardening options not enabled" "" { target *-*-* } 0 } */ diff --git a/gcc/testsuite/c-c++-common/fhardened-20.c b/gcc/testsuite/c-c++-common/fhardened-20.c new file mode 100644 index 0000000..c9f2d89 --- /dev/null +++ b/gcc/testsuite/c-c++-common/fhardened-20.c @@ -0,0 +1,5 @@ +/* PR driver/117739 */ +/* { dg-do compile { target *-*-linux* *-*-gnu* } } */ +/* { dg-options "-fhardened -O -Wl,-z,norelro -Whardened" } */ + +/* { dg-warning "linker hardening options not enabled" "" { target *-*-* } 0 } */ diff --git a/gcc/testsuite/c-c++-common/fhardened-21.c b/gcc/testsuite/c-c++-common/fhardened-21.c new file mode 100644 index 0000000..07b7ee1 --- /dev/null +++ b/gcc/testsuite/c-c++-common/fhardened-21.c @@ -0,0 +1,5 @@ +/* PR driver/117739 */ +/* { dg-do compile { target *-*-linux* *-*-gnu* } } */ +/* { dg-options "-fhardened -O -z norelro -Whardened" } */ + +/* { dg-warning "linker hardening options not enabled" "" { target *-*-* } 0 } */ |