LTO: Add -fcf-protection=check
authorH.J. Lu <hjl.tools@gmail.com>
Thu, 16 Jul 2020 14:03:27 +0000 (07:03 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Mon, 27 Jul 2020 11:40:13 +0000 (04:40 -0700)
commitc4c22e830251e1961c6ebec78d28d039eb2e6017
treec8ca64121d22d1d3222b58e85fc477bd68166c6a
parentfd5966e8e044785f51cd7373b59ad9575a5ac96c
LTO: Add -fcf-protection=check

Mixing -fcf-protection and -fcf-protection=none objects are allowed.
Linker just merges -fcf-protection values from all input objects.

Add -fcf-protection=check for the final link with LTO.  An error is
issued if LTO object files are compiled with different -fcf-protection
values.  Otherwise, -fcf-protection=check is ignored at the compile
time.  Without explicit -fcf-protection at link time, -fcf-protection
values from LTO object files are merged at the final link.

gcc/

PR bootstrap/96203
* common.opt: Add -fcf-protection=check.
* flag-types.h (cf_protection_level): Add CF_CHECK.
* lto-wrapper.c (merge_and_complain): Issue an error for
mismatching -fcf-protection values with -fcf-protection=check.
Otherwise, merge -fcf-protection values.
* doc/invoke.texi: Document -fcf-protection=check.

gcc/testsuite/

PR bootstrap/96203
* gcc.target/i386/pr96203-1.c: New test.
* gcc.target/i386/pr96203-2.c: Likewise.
gcc/common.opt
gcc/doc/invoke.texi
gcc/flag-types.h
gcc/lto-wrapper.c
gcc/testsuite/gcc.target/i386/pr96203-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr96203-2.c [new file with mode: 0644]