r267154 - in /trunk/gcc: ChangeLog config/i386/...

hjl@gcc.gnu.org hjl@gcc.gnu.org
Fri Dec 14 21:35:00 GMT 2018


Author: hjl
Date: Fri Dec 14 21:35:36 2018
New Revision: 267154

URL: https://gcc.gnu.org/viewcvs?rev=267154&root=gcc&view=rev
Log:
x86; Add -mmanual-endbr and cf_check function attribute

Currently GCC inserts ENDBR instruction at entries of all non-static
functions, unless LTO compilation is used.  Marking all functions,
which are not called indirectly with nocf_check attribute, is not
ideal since 99% of functions in a program may be of this kind.

This patch adds -mmanual-endbr and cf_check function attribute.  They
can be used together with -fcf-protection such that ENDBR instruction
is inserted only at entries of functions with cf_check attribute.  It
can limit number of ENDBR instructions to reduce program size.

gcc/

	* config/i386/i386.c (rest_of_insert_endbranch): Insert ENDBR
	at the function entry only when -mmanual-endbr isn't used or
	there is cf_check function attribute.
	(ix86_attribute_table): Add cf_check.
	* config/i386/i386.opt: Add -mmanual-endbr.
	* doc/extend.texi: Document cf_check attribute.
	* doc/invoke.texi: Document -mmanual-endbr.

gcc/testsuite/

	* gcc.target/i386/cf_check-1.c: New test.
	* gcc.target/i386/cf_check-2.c: Likewise.
	* gcc.target/i386/cf_check-3.c: Likewise.
	* gcc.target/i386/cf_check-4.c: Likewise.
	* gcc.target/i386/cf_check-5.c: Likewise.

Added:
    trunk/gcc/testsuite/gcc.target/i386/cf_check-1.c
    trunk/gcc/testsuite/gcc.target/i386/cf_check-2.c
    trunk/gcc/testsuite/gcc.target/i386/cf_check-3.c
    trunk/gcc/testsuite/gcc.target/i386/cf_check-4.c
    trunk/gcc/testsuite/gcc.target/i386/cf_check-5.c
Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/config/i386/i386.c
    trunk/gcc/config/i386/i386.opt
    trunk/gcc/doc/extend.texi
    trunk/gcc/doc/invoke.texi
    trunk/gcc/testsuite/ChangeLog



More information about the Gcc-cvs mailing list