[Patch 1/8, Arm, AArch64, GCC] Refactor mbranch-protection option parsing and make it common to AArch32 and AArch64 backends. [Was RE: [Patch 2/7, Arm, GCC] Add option -mbranch-protection.]

Tejas Belagod Tejas.Belagod@arm.com
Thu Oct 28 11:41:21 GMT 2021



> -----Original Message-----
> From: Richard Earnshaw <Richard.Earnshaw@arm.com>
> Sent: Monday, October 11, 2021 1:58 PM
> To: Tejas Belagod <Tejas.Belagod@arm.com>; gcc-patches@gcc.gnu.org
> Subject: Re: [Patch 2/7, Arm, GCC] Add option -mbranch-protection.
> 
> On 08/10/2021 13:17, Tejas Belagod via Gcc-patches wrote:
> > Hi,
> >
> > Add -mbranch-protection option and its associated parsing routines.
> > This option enables the code-generation of pointer signing and
> > authentication instructions in function prologues and epilogues.
> >
> > Tested on arm-none-eabi. OK for trunk?
> >
> > 2021-10-04  Tejas Belagod  <tbelagod@arm.com>
> >
> > gcc/ChangeLog:
> >
> > 	* common/config/arm/arm-common.c
> > 	 (arm_print_hit_for_pacbti_option): New.
> > 	 (arm_progress_next_token): New.
> > 	 (arm_parse_pac_ret_clause): New routine for parsing the
> > 	pac-ret clause for -mbranch-protection.
> > 	(arm_parse_pacbti_option): New routine to parse all the options
> > 	to -mbranch-protection.
> > 	* config/arm/arm-protos.h (arm_parse_pacbti_option): Export.
> > 	* config/arm/arm.c (arm_configure)build_target): Handle option
> > 	to -mbranch-protection.
> > 	* config/arm/arm.opt (mbranch-protection). New.
> > 	(arm_enable_pacbti): New.
> >
> 
> You're missing documentation for invoke.texi.
> 
> Also, how does this differ from the exising option in aarch64?  Can the code
> from that be adapted to be made common to both targets rather than doing
> a new implementation?
> 
> Finally, there are far to many manifest constants in this patch, they need
> replacing with enums or #defines as appropriate if we cannot share the
> aarch64 code.
> 

Thanks for the reviews.

This change refactors all the mbranch-protection option parsing code and types
to make it common to both AArch32 and AArch64 backends.  This change also pulls
in some supporting types from AArch64 to make it common
(aarch_parse_opt_result).  The significant changes in this patch are the
movement of all branch protection parsing routines from aarch64.c to
aarch-common.c and supporting data types and static data structures.  This
patch also pre-declares variables and types required in the aarch32 back for
moved variables for function sign scope and key to prepare for the impending
series of patches that support parsing the feature mbranch-protection in the
aarch32 back end.

2021-10-25  Tejas Belagod  <tbelagod@arm.com>

gcc/ChangeLog:

	* common/config/aarch64/aarch64-common.c: Include aarch-common.h.
	(all_architectures): Fix comment.
	(aarch64_parse_extension): Rename return type, enum value names.
	* config/aarch64/aarch64-c.c (aarch64_update_cpp_builtins): Rename
	factored out aarch_ra_sign_scope and aarch_ra_sign_key variables.
	Also rename corresponding enum values.
	* config/aarch64/aarch64-opts.h (aarch64_function_type): Factor out
	aarch64_function_type and move it to common code as aarch_function_type
	in aarch-common.h.
	* config/aarch64/aarch64-protos.h: Include common types header, move out
	types aarch64_parse_opt_result and aarch64_key_type to aarch-common.h
	* config/aarch64/aarch64.c: Move mbranch-protection parsing types and
	functions out into aarch-common.h and aarch-common.c.  Fix up all the name
	changes resulting from the move.
	* config/aarch64/aarch64.md: Fix up aarch64_ra_sign_key type name change
	and enum value.
	* config/aarch64/aarch64.opt: Include aarch-common.h to import type move.
	Fix up name changes from factoring out common code and data.
	* config/arm/aarch-common-protos.h: Export factored out routines to both
	backends.
	* config/arm/aarch-common.c: Include newly factored out types.  Move all
	mbranch-protection code and data structures from aarch64.c.
	* config/arm/aarch-common.h: New header that declares types shared between
	aarch32 and aarch64 backends.
	* config/arm/arm-protos.h: Declare types and variables that are made common
	to aarch64 and aarch32 backends - aarch_ra_sign_key, aarch_ra_sign_scope and
	aarch_enable_bti.


Tested the following configurations. OK for trunk?

-mthumb/-march=armv8.1-m.main+pacbti/-mfloat-abi=soft
-marm/-march=armv7-a/-mfpu=vfpv3-d16/-mfloat-abi=softfp
mcmodel=small and tiny
aarch64-none-linux-gnu native test and bootstrap

Thanks,
Tejas.

> R.
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: refactor.txt
URL: <https://gcc.gnu.org/pipermail/gcc-patches/attachments/20211028/10325c8e/attachment-0001.txt>


More information about the Gcc-patches mailing list