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<sam.te...@arm.com>
>
>       * 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<sam.te...@arm.com>
>
>       * (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

Reply via email to