This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH][BINUTILS][AARCH64] Add support for pointer authentication B key


On 11/01/2018 01:23 PM, Sam Tebbs wrote:

> Hi all,
>
> Armv8.3-A has another key used in pointer authentication called the 
> B-key (other
> than the A-key that is already supported). In order for stack 
> unwinders to work
> it is necessary to be able to identify frames that have been signed 
> with the
> B-key rather than the A-key and it was felt that keeping this as an 
> augmentation
> character in the CIE was the best bet. The DWARF extensions for ARM 
> therefore
> propose to add a new augmentation character 'B' to the CIE 
> augmentation string
> and the corresponding cfi directive ".cfi_b_key_frame". I've made the 
> relevant
> changes to GAS and LD to add support for B-key unwinding, which required
> modifying LD to check for 'B' in the augmentation string, adding the
> ".cfi_b_key_frame" directive to GAS and adding a "pauth_key" field to 
> GAS's
> fde_entry and cie_entry structs.
>
> The pointer authentication instructions will behave as NOPs on 
> architectures
> that don't support them, and so a check for the architecture being 
> assembled
> for is not necessary since there will be no behavioural difference 
> between
> augmentation strings with and without the 'B' character on such 
> architectures.
>
> Built on aarch64-linux-gnu and aarch64-none-elf, and tested on 
> aarch64-none-elf
> with no regressions. This patch has been tested with the corresponding 
> patch
> that enables B-key support in GCC.
>
> OK for trunk? I don't have write access so I'd appreciate someone 
> committing
> after approval.
>
> bfd/
> 2018-11-01  Sam Tebbs<sam.tebbs@arm.com>
>
>     * elf-eh-frame.c (_bfd_elf_parse_eh_frame): Add check for 'B'.
>
> gas/
> 2018-11-01  Sam Tebbs<sam.tebbs@arm.com>
>
>     * dw2gencfi.c (struct cie_entry): Add pauth_key field.
>     (alloc_fde_entry): Set pauth_key to AARCH64_PAUTH_KEY_A by default.
>     (output_cie): Output 'B' if pauth_key == AARCH64_PAUTH_KEY_B.
>     (select_cie_for_fde): Add check for pauth_key. Set cie's pauth_key to
>     fde's pauth_key.
>     (frch_cfi_data, cfa_save_data): Move to dwgencfi.h.
>     * config/tc-aarch64.c (dot_cfi_b_key_frame): Declare.
>     (md_pseudo_table): Add "cfi_b_key_frame".
>     * dw2gencfi.h (pointer_auth_key): Define.
>     (struct fde_entry): Add pauth_key field.
>     (frch_cfi_data, cfa_save_data): Move from dwgencfi.c.
>
> gas/doc/
> 2018-11-01  Sam Tebbs<sam.tebbs@arm.com>
>
>     * c-aarch64.texi (.cfi_b_key_frame): Add documentation.
>
> gas/testsuite
> 2018-11-01  Sam Tebbs<sam.tebbs@arm.com>
>
>     * gas/aarch64/(pac_ab_key.d, pac_ab_key.s): New file.
>

ping


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]