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]

Re: [PATCH 3/3][GCC][AARCH64] Add support for pointer authentication B key


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]