This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC 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] |
On 11/9/18 11:04 AM, Sam Tebbs wrote: > On 11/02/2018 06:01 PM, Sam Tebbs wrote: > >> On 11/02/2018 05:35 PM, Sam Tebbs wrote: >> >>> Hi all, >>> >>> This patch adds support for the Armv8.3-A pointer authentication instructions >>> that use the B-key (pacib*, autib* and retab). This required adding builtins for >>> pacib1716 and autib1716, adding the "b-key" feature to the -mbranch-protection >>> option, and required emitting a new CFI directive ".cfi_b_key_frame" which >>> causes GAS to add 'B' to the CIE augmentation string. I also had to add a new >>> hook called ASM_POST_CFI_STARTPROC which is triggered when the .cfi_startproc >>> directive is emitted. >>> >>> The libgcc stack unwinder has been amended to authenticate return addresses >>> with the B key when the function has been signed with the B key. >>> >>> The previous patch in this series is here: >>> https://gcc.gnu.org/ml/gcc-patches/2018-11/msg00104.html >>> >>> Bootstrapped successfully and regression tested on aarch64-none-elf. >>> >>> OK for trunk? >>> >>> gcc/ >>> 2018-11-02 Sam Tebbs <sam.tebbs@arm.com> >>> >>> * config/aarch64/aarch64-builtins.c (aarch64_builtins): Add >>> AARCH64_PAUTH_BUILTIN_AUTIB1716 and AARCH64_PAUTH_BUILTIN_PACIB1716. >>> * config/aarch64/aarch64-builtins.c (aarch64_init_pauth_hint_builtins): >>> Add autib1716 and pacib1716 initialisation. >>> * config/aarch64/aarch64-builtins.c (aarch64_expand_builtin): Add checks >>> for autib1716 and pacib1716. >>> * config/aarch64/aarch64-protos.h (aarch64_key_type, >>> aarch64_post_cfi_startproc): Define. >>> * config/aarch64/aarch64-protos.h (aarch64_ra_sign_key): Define extern. >>> * config/aarch64/aarch64.c (aarch64_return_address_signing_enabled): Add >>> check for b-key, remove frame.laid_out assertion. >>> * config/aarch64/aarch64.c (aarch64_ra_sign_key, >>> aarch64_post_cfi_startproc, aarch64_handle_pac_ret_b_key): Define. >>> * config/aarch64/aarch64.h (TARGET_ASM_POST_CFI_STARTPROC): Define. >>> * config/aarch64/aarch64.c (aarch64_pac_ret_subtypes): Add "b-key". >>> * config/aarch64/aarch64.md (unspec): Add UNSPEC_AUTIA1716, >>> UNSPEC_AUTIB1716, UNSPEC_AUTIASP, UNSPEC_AUTIBSP, UNSPEC_PACIA1716, >>> UNSPEC_PACIB1716, UNSPEC_PACIASP, UNSPEC_PACIBSP. >>> * config/aarch64/aarch64.md (do_return): Add check for b-key. >>> * config/aarch64/aarch64.md (<pauth_mnem_prefix>sp): Add check for >>> signing key and scope selected. >>> * config/aarch64/aarch64.md (<pauth_mnem_prefix>1716): Add check for >>> signing key and scope selected. >>> * config/aarch64/aarch64.opt (msign-return-address=): Deprecate. >>> * config/aarch64/iterators.md (PAUTH_LR_SP): Add UNSPEC_AUTIASP, >>> UNSPEC_AUTIBSP, UNSPEC_PACIASP, UNSPEC_PACIBSP. >>> * config/aarch64/iterators.md (PAUTH_17_16): Add UNSPEC_AUTIA1716, >>> UNSPEC_AUTIB1716, UNSPEC_PACIA1716, UNSPEC_PACIB1716. >>> * config/aarch64/iterators.md (pauth_mnem_prefix): Add UNSPEC_AUTIA1716, >>> UNSPEC_AUTIB1716, UNSPEC_PACIA1716, UNSPEC_PACIB1716, UNSPEC_AUTIASP, >>> UNSPEC_AUTIBSP, UNSPEC_PACIASP, UNSPEC_PACIBSP. >>> * config/aarch64/iterators.md (pauth_hint_num_a): Replace >>> UNSPEC_PACI1716 and UNSPEC_AUTI1716 with UNSPEC_PACIA1716 and >>> UNSPEC_AUTIA1716 respectively. >>> * config/aarch64/iterators.md (pauth_hint_num_b): New int attribute. >>> >>> gcc/testsuite >>> 2018-11-02 Sam Tebbs <sam.tebbs@arm.com> >>> >>> * gcc.target/aarch64/return_address_sign_1.c (dg-final): Replace >>> "autiasp" and "paciasp" with "hint\t29 // autisp" and >>> "hint\t25 // pacisp" respectively. >>> * gcc.target/aarch64/return_address_sign_2.c (dg-final): Replace >>> "paciasp" with "hint\t25 // pacisp". >>> * gcc.target/aarch64/return_address_sign_3.c (dg-final): Replace >>> "paciasp" and "autiasp" with "pacisp" and "autisp" respectively. >>> * gcc.target/aarch64/return_address_sign_b_1.c: New file. >>> * gcc.target/aarch64/return_address_sign_b_2.c: New file. >>> * gcc.target/aarch64/return_address_sign_b_3.c: New file. >>> * gcc.target/aarch64/return_address_sign_b_exception.c: New file. >>> * gcc.target/aarch64/return_address_sign_builtin.c: New file >>> >>> libgcc/ >>> 2018-11-02 Sam Tebbs <sam.tebbs@arm.com> >>> >>> * config/aarch64/aarch64-unwind.h (aarch64_cie_signed_with_b_key): New >>> function. >>> * config/aarch64/aarch64-unwind.h (aarch64_post_extract_frame_addr, >>> aarch64_post_frob_eh_handler_addr): Add check for b-key. >>> * unwind-dw2-fde.c (get_cie_encoding): Add check for 'B' in augmentation >>> string. >>> * unwind-dw2.c (extract_cie_info): Add check for 'B' in augmentation >>> string. >> Attached is an updated patch rebased on an improvement to the >> -mbranch-protection option documentation. > ping Attached is an improved patch with "hint" removed from the test scans, pauth_hint_num_a and pauth_hint_num_b merged into pauth_hint_num and the "gcc_assert (cfun->machine->frame.laid_out)" removal reverted since was an unnecessary change. OK for trunk? gcc/ 2018-12-21 Sam Tebbs<sam.tebbs@arm.com> * config/aarch64/aarch64-builtins.c (aarch64_builtins): Add AARCH64_PAUTH_BUILTIN_AUTIB1716 and AARCH64_PAUTH_BUILTIN_PACIB1716. * config/aarch64/aarch64-builtins.c (aarch64_init_pauth_hint_builtins): Add autib1716 and pacib1716 initialisation. * config/aarch64/aarch64-builtins.c (aarch64_expand_builtin): Add checks for autib1716 and pacib1716. * config/aarch64/aarch64-protos.h (aarch64_key_type, aarch64_post_cfi_startproc): Define. * config/aarch64/aarch64-protos.h (aarch64_ra_sign_key): Define extern. * config/aarch64/aarch64.c (aarch64_return_address_signing_enabled): Add check for b-key. * config/aarch64/aarch64.c (aarch64_ra_sign_key, aarch64_post_cfi_startproc, aarch64_handle_pac_ret_b_key): Define. * config/aarch64/aarch64.h (TARGET_ASM_POST_CFI_STARTPROC): Define. * config/aarch64/aarch64.c (aarch64_pac_ret_subtypes): Add "b-key". * config/aarch64/aarch64.md (unspec): Add UNSPEC_AUTIA1716, UNSPEC_AUTIB1716, UNSPEC_AUTIASP, UNSPEC_AUTIBSP, UNSPEC_PACIA1716, UNSPEC_PACIB1716, UNSPEC_PACIASP, UNSPEC_PACIBSP. * config/aarch64/aarch64.md (do_return): Add check for b-key. * config/aarch64/aarch64.md (<pauth_mnem_prefix>sp): Replace pauth_hint_num_a with pauth_hint_num. * config/aarch64/aarch64.md (<pauth_mnem_prefix>1716): Replace pauth_hint_num_a with pauth_hint_num. * config/aarch64/aarch64.opt (msign-return-address=): Deprecate. * config/aarch64/iterators.md (PAUTH_LR_SP): Add UNSPEC_AUTIASP, UNSPEC_AUTIBSP, UNSPEC_PACIASP, UNSPEC_PACIBSP. * config/aarch64/iterators.md (PAUTH_17_16): Add UNSPEC_AUTIA1716, UNSPEC_AUTIB1716, UNSPEC_PACIA1716, UNSPEC_PACIB1716. * config/aarch64/iterators.md (pauth_mnem_prefix): Add UNSPEC_AUTIA1716, UNSPEC_AUTIB1716, UNSPEC_PACIA1716, UNSPEC_PACIB1716, UNSPEC_AUTIASP, UNSPEC_AUTIBSP, UNSPEC_PACIASP, UNSPEC_PACIBSP. * config/aarch64/iterators.md (pauth_hint_num_a): Replace UNSPEC_PACI1716 and UNSPEC_AUTI1716 with UNSPEC_PACIA1716 and UNSPEC_AUTIA1716 respectively. * config/aarch64/iterators.md (pauth_hint_num_a): Rename to pauth_hint_num and add UNSPEC_PACIBSP, UNSPEC_AUTIBSP, UNSPEC_PACIB1716, UNSPEC_AUTIB1716. gcc/testsuite 2018-12-21 Sam Tebbs<sam.tebbs@arm.com> * gcc.target/aarch64/return_address_sign_1.c (dg-final): Replace "autiasp" and "paciasp" with "hint\t29 // autisp" and "hint\t25 // pacisp" respectively. * gcc.target/aarch64/return_address_sign_2.c (dg-final): Replace "paciasp" with "hint\t25 // pacisp". * gcc.target/aarch64/return_address_sign_3.c (dg-final): Replace "paciasp" and "autiasp" with "pacisp" and "autisp" respectively. * gcc.target/aarch64/return_address_sign_b_1.c: New file. * gcc.target/aarch64/return_address_sign_b_2.c: New file. * gcc.target/aarch64/return_address_sign_b_3.c: New file. * gcc.target/aarch64/return_address_sign_b_exception.c: New file. * gcc.target/aarch64/return_address_sign_builtin.c: New file libgcc/ 2018-12-21 Sam Tebbs<sam.tebbs@arm.com> * config/aarch64/aarch64-unwind.h (aarch64_cie_signed_with_b_key): New function. * config/aarch64/aarch64-unwind.h (aarch64_post_extract_frame_addr, aarch64_post_frob_eh_handler_addr): Add check for b-key. * unwind-dw2-fde.c (get_cie_encoding): Add check for 'B' in augmentation string. * unwind-dw2.c (extract_cie_info): Add check for 'B' in augmentation string.
Attachment:
diff
Description: diff
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |