On 11/02/2018 05:31 PM, Sam Tebbs wrote:
> Hi all,
>
> The -mbranch-protection option combines the functionality of
> -msign-return-address and the BTI features new in Armv8.5 to better reflect
> their relationship. This new option therefore supersedes and deprecates the
> existing -msign-return-address option.
>
> -mbranch-protection=[none|standard|<types>] - Turns on different types of
> branch
> protection available where:
>
> * "none": Turn of all types of branch protection
> * "standard" : Turns on all the types of protection to their respective
> standard levels.
> * <types> can be "+" separated protection types:
>
> * "bti" : Branch Target Identification Mechanism.
> * "pac-ret{+leaf+b-key}": Return Address Signing. The default return
> address signing is enabled by signing functions that save the return
> address to memory (non-leaf functions will practically always do this)
> using the a-key. The optional tuning arguments allow the user to
> extend the scope of return address signing to include leaf functions
> and to change the key to b-key. The tuning arguments must proceed the
> protection type "pac-ret".
>
> Thus -mbranch-protection=standard -> -mbranch-protection=bti+pac-ret.
>
> Its mapping to -msign-return-address is as follows:
>
> * -mbranch-protection=none -> -msign-return-address=none
> * -mbranch-protection=standard -> -msign-return-address=leaf
> * -mbranch-protection=pac-ret -> -msign-return-address=non-leaf
> * -mbranch-protection=pac-ret+leaf -> -msign-return-address=all
>
> This patch implements the option's skeleton and the "none", "standard" and
> "pac-ret" types (along with its "leaf" subtype).
>
> The previous patch in this series is here:
> https://gcc.gnu.org/ml/gcc-patches/2018-11/msg00103.html
>
> Bootstrapped successfully and tested on aarch64-none-elf with no regressions.
>
> OK for trunk?
>
> gcc/ChangeLog:
>
> 2018-11-02 Sam Tebbs<[email protected]>
>
> * config/aarch64/aarch64.c (BRANCH_PROTEC_STR_MAX,
> aarch64_parse_branch_protection,
> struct aarch64_branch_protec_type,
> aarch64_handle_no_branch_protection,
> aarch64_handle_standard_branch_protection,
> aarch64_validate_mbranch_protection,
> aarch64_handle_pac_ret_protection,
> aarch64_handle_attr_branch_protection,
> accepted_branch_protection_string,
> aarch64_pac_ret_subtypes,
> aarch64_branch_protec_types,
> aarch64_handle_pac_ret_leaf): Define.
> (aarch64_override_options_after_change_1): Add check for
> accepted_branch_protection_string.
> (aarch64_override_options): Add check for
> accepted_branch_protection_string.
> (aarch64_option_save): Save accepted_branch_protection_string.
> (aarch64_option_restore): Save
> accepted_branch_protection_string.
> * config/aarch64/aarch64.c (aarch64_attributes): Add branch-protection.
> * config/aarch64/aarch64.opt: Add mbranch-protection. Deprecate
> msign-return-address.
> * doc/invoke.texi: Add mbranch-protection.
>
> gcc/testsuite/ChangeLog:
>
> 2018-11-02 Sam Tebbs<[email protected]>
>
> * (gcc.target/aarch64/return_address_sign_1.c,
> gcc.target/aarch64/return_address_sign_2.c,
> gcc.target/aarch64/return_address_sign_3.c (__attribute__)): Change
> option to -mbranch-protection.
>
ping