From: Richard Earnshaw <Richard.Earnshaw@foss.arm.com>
To: Victor Do Nascimento <victor.donascimento@arm.com>,
binutils@sourceware.org
Cc: richard.earnshaw@arm.com
Subject: Re: [PATCH][Binutils][GAS] arm: Add cfi expression support for ra_auth_code
Date: Tue, 19 Jul 2022 10:44:50 +0100 [thread overview]
Message-ID: <137e4b3a-0d13-1fbe-8e44-56cf5a3447d2@foss.arm.com> (raw)
In-Reply-To: <20220718160129.15652-1-victor.donascimento@arm.com>
On 18/07/2022 17:01, Victor Do Nascimento via Binutils wrote:
> Hi all,
>
> This patch extends assembler support for the use of ra_auth_code register,
> particularly in the context of CFI directives, mapping the register to
> the correct DWARF-2 register number.
>
> Tested for arm-none-eabi.
>
> Thanks,
> Victor.
>
> gas/Changelog:
>
> * gas/config/tc-arm.c (tc_arm_regname_to_dw2regnum): Add
> REG_TYPE_PSEUDO handling.
> * gas/testsuite/gas/arm/cfi-pacbti-m-readelf.d: New.
> * gas/testsuite/gas/arm/cfi-pacbti-m.s: New.
> ---
> gas/config/tc-arm.c | 9 ++++++
> gas/testsuite/gas/arm/cfi-pacbti-m-readelf.d | 31 ++++++++++++++++++++
> gas/testsuite/gas/arm/cfi-pacbti-m.s | 22 ++++++++++++++
> 3 files changed, 62 insertions(+)
> create mode 100644 gas/testsuite/gas/arm/cfi-pacbti-m-readelf.d
> create mode 100644 gas/testsuite/gas/arm/cfi-pacbti-m.s
>
> diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c
> index 2e6d175482e..bf912ccf2d5 100644
> --- a/gas/config/tc-arm.c
> +++ b/gas/config/tc-arm.c
> @@ -27933,6 +27933,15 @@ tc_arm_regname_to_dw2regnum (char *regname)
> if (reg != FAIL)
> return reg + 256;
>
> + reg = arm_reg_parse (®name, REG_TYPE_PSEUDO);
> + switch (reg)
> + {
> + case 12:
> + return 143;
Sorry, this doesn't look right. The comment where the pseudos are
defined says:
/* DWARF ABI defines RA_AUTH_CODE to 143. It also reserves 134-142
for future
expansion. RA_AUTH_CODE here is given the value 143 % 134 to make
it easy
for tc_arm_regname_to_dw2regnum to translate to DWARF reg number using
134 + reg_number should the range 134 to 142 be used for more
pseudo regs
in the future. This also helps fit RA_AUTH_CODE into a bitmask. */
though I'll note that 143 % 134 is 9, not 12.
So really, the code here should be adding back the base for the range
that it covers rather than just handling a special case.
And, of course, either the comment needs fixing, or the assigned
internal number needs fixing.
R.
> + default:
> + break;
> + }
> +
> return FAIL;
> }
>
> diff --git a/gas/testsuite/gas/arm/cfi-pacbti-m-readelf.d b/gas/testsuite/gas/arm/cfi-pacbti-m-readelf.d
> new file mode 100644
> index 00000000000..997ea75f179
> --- /dev/null
> +++ b/gas/testsuite/gas/arm/cfi-pacbti-m-readelf.d
> @@ -0,0 +1,31 @@
> +#readelf: -wf
> +#source: cfi-pacbti-m.s
> +#name: Call Frame information for Armv8.1-M.Mainline PACBTI extension
> +# This test is only valid on ELF based ports.
> +#notarget: *-*-pe *-*-wince
> +# VxWorks needs a special variant of this file.
> +#skip: *-*-vxworks*
> +
> +Contents of the .eh_frame section:
> +
> +
> +00000000 00000010 00000000 CIE
> + Version: 1
> + Augmentation: "zR"
> + Code alignment factor: 2
> + Data alignment factor: -4
> + Return address column: 14
> + Augmentation data: 1b
> + DW_CFA_def_cfa: r13 ofs 0
> +
> +00000014 00000020 00000018 FDE cie=00000000 pc=00000000..0000000c
> + DW_CFA_advance_loc: 4 to 00000004
> + DW_CFA_register: r143 in r12
> + DW_CFA_advance_loc: 4 to 00000008
> + DW_CFA_def_cfa_offset: 8
> + DW_CFA_offset: r14 at cfa-8
> + DW_CFA_offset: r12 at cfa-4
> + DW_CFA_advance_loc: 4 to 0000000c
> + DW_CFA_restore_extended: r143
> + DW_CFA_restore: r14
> + DW_CFA_def_cfa_offset: 0
> diff --git a/gas/testsuite/gas/arm/cfi-pacbti-m.s b/gas/testsuite/gas/arm/cfi-pacbti-m.s
> new file mode 100644
> index 00000000000..515400d86f5
> --- /dev/null
> +++ b/gas/testsuite/gas/arm/cfi-pacbti-m.s
> @@ -0,0 +1,22 @@
> + .arch armv8.1-m.main
> + .arch_extension pacbti
> + .eabi_attribute Tag_PAC_extension, 2
> + .eabi_attribute Tag_BTI_extension, 2
> + .eabi_attribute Tag_BTI_use, 1
> + .eabi_attribute Tag_PACRET_use, 1
> + .syntax unified
> + .text
> + .thumb
> +.Lstart:
> + .cfi_startproc
> + pacbti ip, lr, sp
> + .cfi_register ra_auth_code, ip
> + push {ip, lr}
> + .cfi_def_cfa_offset 8
> + .cfi_offset lr, -8
> + .cfi_offset ip, -4
> + pop {ip, lr}
> + .cfi_restore 143
> + .cfi_restore 14
> + .cfi_def_cfa_offset 0
> + .cfi_endproc
next prev parent reply other threads:[~2022-07-19 9:44 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-07-18 16:01 Victor Do Nascimento
2022-07-19 9:44 ` Richard Earnshaw [this message]
2022-07-19 11:28 ` Victor L. Do Nascimento
2022-07-19 12:01 ` Richard Earnshaw
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=137e4b3a-0d13-1fbe-8e44-56cf5a3447d2@foss.arm.com \
--to=richard.earnshaw@foss.arm.com \
--cc=binutils@sourceware.org \
--cc=richard.earnshaw@arm.com \
--cc=victor.donascimento@arm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).