Skip to content
Snippets Groups Projects
  • Sam Tebbs's avatar
    8fc16d72
    [PATCH 3/3][GCC][AARCH64] Add support for pointer authentication B key · 8fc16d72
    Sam Tebbs authored
    gcc/
    2019-05-29  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_handle_standard_branch_protection,
    	aarch64_handle_pac_ret_protection): Set default sign key to A.
    	* config/aarch64/aarch64.c (aarch64_expand_epilogue,
    	aarch64_expand_prologue): 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.
    	* doc/invoke.texi (-mbranch-protection): Add b-key type.
    	* config/aarch64/aarch64-bti-insert.c (aarch64_pac_insn_p): Rename
    	UNSPEC_PACISP to UNSPEC_PACIASP and UNSPEC_PACIBSP.
    
    gcc/testsuite
    2019-05-29  Sam Tebbs  <sam.tebbs@arm.com>
    
    	* 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_ab_exception.c: New file.
    	* gcc.target/aarch64/return_address_sign_builtin.c: New file
    
    libgcc/
    2019-05-29  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.
    	* config/aarch64/aarch64-unwind-h (aarch64_post_extract_frame_addr,
    	aarch64_post_frob_eh_handler_addr, aarch64_post_frob_update_context):
    	Rename RA_A_SIGNED_BIT to RA_SIGNED_BIT.
    	* 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.
    	(RA_A_SIGNED_BIT): Rename to RA_SIGNED_BIT.
    
    From-SVN: r271735
    8fc16d72
    History
    [PATCH 3/3][GCC][AARCH64] Add support for pointer authentication B key
    Sam Tebbs authored
    gcc/
    2019-05-29  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_handle_standard_branch_protection,
    	aarch64_handle_pac_ret_protection): Set default sign key to A.
    	* config/aarch64/aarch64.c (aarch64_expand_epilogue,
    	aarch64_expand_prologue): 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.
    	* doc/invoke.texi (-mbranch-protection): Add b-key type.
    	* config/aarch64/aarch64-bti-insert.c (aarch64_pac_insn_p): Rename
    	UNSPEC_PACISP to UNSPEC_PACIASP and UNSPEC_PACIBSP.
    
    gcc/testsuite
    2019-05-29  Sam Tebbs  <sam.tebbs@arm.com>
    
    	* 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_ab_exception.c: New file.
    	* gcc.target/aarch64/return_address_sign_builtin.c: New file
    
    libgcc/
    2019-05-29  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.
    	* config/aarch64/aarch64-unwind-h (aarch64_post_extract_frame_addr,
    	aarch64_post_frob_eh_handler_addr, aarch64_post_frob_update_context):
    	Rename RA_A_SIGNED_BIT to RA_SIGNED_BIT.
    	* 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.
    	(RA_A_SIGNED_BIT): Rename to RA_SIGNED_BIT.
    
    From-SVN: r271735