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.