public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
From: Srinath Parvathaneni <srinath.parvathaneni@arm.com>
To: <binutils@sourceware.org>
Cc: <nd@arm.com>, <richard.earnshaw@arm.com>, <nickc@redhat.com>
Subject: [PATCH][Binutils, gas] arm: Add support for new unwinder directive ".pacspval".
Date: Fri, 11 Nov 2022 10:51:43 +0000	[thread overview]
Message-ID: <c5ab35f0-595a-439c-b120-f93bd109ab96@AZ-NEU-EX04.Arm.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 4161 bytes --]

Hi,

This patch adds the assembler support for the new unwinder directive
".pacspval" and encodes this directives with opcode "0xb5". This opcode
indicates the unwinder to use effective vsp as modifier for PAC validation.

Regression testing for arm-none-eabi target and found no regressions.

Ok for binutils-master?

Regards,
Srinath.

gas/ChangeLog:

2022-11-07  Srinath Parvathaneni  <srinath.parvathaneni@arm.com>

        * doc/c-arm.texi: Document directive.
        * config/tc-arm.c (s_arm_unwind_pacspval): Define function.
        (md_pseudo_table): Add entry for pacspval directive.
        * testsuite/gas/arm/ehabi-pacbti-m.d: New test.
        * testsuite/gas/arm/ehabi-pacbti-m.s: Likewise.


###############     Attachment also inlined for ease of reply    ###############


diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c
index 0f7d7695c0eb9b2eb5431ca314c54edfed9b633e..c7837195e667a03d3f8f6d16b62c01ac875ee5fd 100644
--- a/gas/config/tc-arm.c
+++ b/gas/config/tc-arm.c
@@ -4929,6 +4929,22 @@ s_arm_unwind_pad (int ignored ATTRIBUTE_UNUSED)
   demand_empty_rest_of_line ();
 }
 
+/* Parse an unwind_pacspval directive.  */
+
+static void
+s_arm_unwind_pacspval (int ignored ATTRIBUTE_UNUSED)
+{
+  valueT op;
+
+  if (!unwind.proc_start)
+    as_bad (MISSING_FNSTART);
+
+  demand_empty_rest_of_line ();
+
+  op = 0xb5;
+  add_unwind_opcode (op, 1);
+}
+
 /* Parse an unwind_setfp directive.  */
 
 static void
@@ -5205,6 +5221,7 @@ const pseudo_typeS md_pseudo_table[] =
   { "vsave",		s_arm_unwind_save,	1 },
   { "movsp",		s_arm_unwind_movsp,	0 },
   { "pad",		s_arm_unwind_pad,	0 },
+  { "pacspval",		s_arm_unwind_pacspval,	0 },
   { "setfp",		s_arm_unwind_setfp,	0 },
   { "unwind_raw",	s_arm_unwind_raw,	0 },
   { "eabi_attribute",	s_arm_eabi_attribute,	0 },
diff --git a/gas/doc/c-arm.texi b/gas/doc/c-arm.texi
index 4016d3a76957e545ad8d3f1fad2067b94bb9b83e..8e00ccf55a5c86443e2977c3b8c6f4e6d7ef39d9 100644
--- a/gas/doc/c-arm.texi
+++ b/gas/doc/c-arm.texi
@@ -1085,6 +1085,12 @@ This directive writes 12-byte packed floating-point values to the
 output section.  These are not compatible with current ARM processors
 or ABIs.
 
+@anchor{arm_pacspval}
+@cindex @code{.pacspval} directive, ARM
+@item .pacspval
+Generate unwinder annotations to use effective vsp as modifier in PAC
+validation.
+
 @anchor{arm_pad}
 @cindex @code{.pad} directive, ARM
 @item .pad #@var{count}
diff --git a/gas/testsuite/gas/arm/ehabi-pacbti-m.d b/gas/testsuite/gas/arm/ehabi-pacbti-m.d
new file mode 100644
index 0000000000000000000000000000000000000000..6039945f931a2975ae4752a5f711e62a00b6ce69
--- /dev/null
+++ b/gas/testsuite/gas/arm/ehabi-pacbti-m.d
@@ -0,0 +1,15 @@
+# name: Unwind Stack Frame information for Armv8.1-M.Mainline PAC extension
+# source: ehabi-pacbti-m.s
+# as: -march=armv8.1-m.main+mve+pacbti
+# readelf: -u
+
+Unwind section '.ARM.exidx' at offset 0x5c contains 1 entry:
+
+0x0: @0x0
+  Compact model index: 1
+  0xb1 0x08 pop {r3}
+  0x80 0x08 pop {r7}
+  0xb4      pop {ra_auth_code}
+  0x84 0x00 pop {r14}
+  0xb1 0x0f pop {r0, r1, r2, r3}
+  0xb5      vsp as modifier for PAC validation
diff --git a/gas/testsuite/gas/arm/ehabi-pacbti-m.s b/gas/testsuite/gas/arm/ehabi-pacbti-m.s
new file mode 100644
index 0000000000000000000000000000000000000000..10185484c8c9716c394ab0cbe171c626b9847bfc
--- /dev/null
+++ b/gas/testsuite/gas/arm/ehabi-pacbti-m.s
@@ -0,0 +1,38 @@
+        .syntax unified
+        .thumb
+        .thumb_func
+	.fnstart
+	.cfi_startproc
+	.pacspval
+	pac	ip, lr, sp
+	.cfi_register 143, 12
+	push	{r0, r1, r2, r3}
+	.save {r0, r1, r2, r3}
+	.cfi_def_cfa_offset 16
+	.cfi_offset 0, -16
+	.cfi_offset 1, -12
+	.cfi_offset 2, -8
+	.cfi_offset 3, -4
+	push	{r3, r7, ip, lr}
+	.save {r3, r7, ra_auth_code, lr}
+	.cfi_def_cfa_offset 32
+	.cfi_offset 3, -32
+	.cfi_offset 7, -28
+	.cfi_offset 143, -24
+	.cfi_offset 14, -20
+	pop	{r3, r7, ip, lr}
+	.cfi_restore 14
+	.cfi_restore 143
+	.cfi_restore 7
+	.cfi_restore 3
+	.cfi_def_cfa_offset 0
+	add	sp, sp, #16
+	.cfi_restore 3
+	.cfi_restore 2
+	.cfi_restore 1
+	.cfi_restore 0
+	.cfi_def_cfa_offset -16
+	aut	ip, lr, sp
+	bx	lr
+	.cfi_endproc
+	.fnend




[-- Attachment #2: rb16526.patch --]
[-- Type: text/plain, Size: 3369 bytes --]

diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c
index 0f7d7695c0eb9b2eb5431ca314c54edfed9b633e..c7837195e667a03d3f8f6d16b62c01ac875ee5fd 100644
--- a/gas/config/tc-arm.c
+++ b/gas/config/tc-arm.c
@@ -4929,6 +4929,22 @@ s_arm_unwind_pad (int ignored ATTRIBUTE_UNUSED)
   demand_empty_rest_of_line ();
 }
 
+/* Parse an unwind_pacspval directive.  */
+
+static void
+s_arm_unwind_pacspval (int ignored ATTRIBUTE_UNUSED)
+{
+  valueT op;
+
+  if (!unwind.proc_start)
+    as_bad (MISSING_FNSTART);
+
+  demand_empty_rest_of_line ();
+
+  op = 0xb5;
+  add_unwind_opcode (op, 1);
+}
+
 /* Parse an unwind_setfp directive.  */
 
 static void
@@ -5205,6 +5221,7 @@ const pseudo_typeS md_pseudo_table[] =
   { "vsave",		s_arm_unwind_save,	1 },
   { "movsp",		s_arm_unwind_movsp,	0 },
   { "pad",		s_arm_unwind_pad,	0 },
+  { "pacspval",		s_arm_unwind_pacspval,	0 },
   { "setfp",		s_arm_unwind_setfp,	0 },
   { "unwind_raw",	s_arm_unwind_raw,	0 },
   { "eabi_attribute",	s_arm_eabi_attribute,	0 },
diff --git a/gas/doc/c-arm.texi b/gas/doc/c-arm.texi
index 4016d3a76957e545ad8d3f1fad2067b94bb9b83e..8e00ccf55a5c86443e2977c3b8c6f4e6d7ef39d9 100644
--- a/gas/doc/c-arm.texi
+++ b/gas/doc/c-arm.texi
@@ -1085,6 +1085,12 @@ This directive writes 12-byte packed floating-point values to the
 output section.  These are not compatible with current ARM processors
 or ABIs.
 
+@anchor{arm_pacspval}
+@cindex @code{.pacspval} directive, ARM
+@item .pacspval
+Generate unwinder annotations to use effective vsp as modifier in PAC
+validation.
+
 @anchor{arm_pad}
 @cindex @code{.pad} directive, ARM
 @item .pad #@var{count}
diff --git a/gas/testsuite/gas/arm/ehabi-pacbti-m.d b/gas/testsuite/gas/arm/ehabi-pacbti-m.d
new file mode 100644
index 0000000000000000000000000000000000000000..6039945f931a2975ae4752a5f711e62a00b6ce69
--- /dev/null
+++ b/gas/testsuite/gas/arm/ehabi-pacbti-m.d
@@ -0,0 +1,15 @@
+# name: Unwind Stack Frame information for Armv8.1-M.Mainline PAC extension
+# source: ehabi-pacbti-m.s
+# as: -march=armv8.1-m.main+mve+pacbti
+# readelf: -u
+
+Unwind section '.ARM.exidx' at offset 0x5c contains 1 entry:
+
+0x0: @0x0
+  Compact model index: 1
+  0xb1 0x08 pop {r3}
+  0x80 0x08 pop {r7}
+  0xb4      pop {ra_auth_code}
+  0x84 0x00 pop {r14}
+  0xb1 0x0f pop {r0, r1, r2, r3}
+  0xb5      vsp as modifier for PAC validation
diff --git a/gas/testsuite/gas/arm/ehabi-pacbti-m.s b/gas/testsuite/gas/arm/ehabi-pacbti-m.s
new file mode 100644
index 0000000000000000000000000000000000000000..10185484c8c9716c394ab0cbe171c626b9847bfc
--- /dev/null
+++ b/gas/testsuite/gas/arm/ehabi-pacbti-m.s
@@ -0,0 +1,38 @@
+        .syntax unified
+        .thumb
+        .thumb_func
+	.fnstart
+	.cfi_startproc
+	.pacspval
+	pac	ip, lr, sp
+	.cfi_register 143, 12
+	push	{r0, r1, r2, r3}
+	.save {r0, r1, r2, r3}
+	.cfi_def_cfa_offset 16
+	.cfi_offset 0, -16
+	.cfi_offset 1, -12
+	.cfi_offset 2, -8
+	.cfi_offset 3, -4
+	push	{r3, r7, ip, lr}
+	.save {r3, r7, ra_auth_code, lr}
+	.cfi_def_cfa_offset 32
+	.cfi_offset 3, -32
+	.cfi_offset 7, -28
+	.cfi_offset 143, -24
+	.cfi_offset 14, -20
+	pop	{r3, r7, ip, lr}
+	.cfi_restore 14
+	.cfi_restore 143
+	.cfi_restore 7
+	.cfi_restore 3
+	.cfi_def_cfa_offset 0
+	add	sp, sp, #16
+	.cfi_restore 3
+	.cfi_restore 2
+	.cfi_restore 1
+	.cfi_restore 0
+	.cfi_def_cfa_offset -16
+	aut	ip, lr, sp
+	bx	lr
+	.cfi_endproc
+	.fnend




             reply	other threads:[~2022-11-11 10:52 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-11-11 10:51 Srinath Parvathaneni [this message]
2022-11-14 14:20 ` Nick Clifton
2022-11-15 21:51   ` [gas] " Alan Modra

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=c5ab35f0-595a-439c-b120-f93bd109ab96@AZ-NEU-EX04.Arm.com \
    --to=srinath.parvathaneni@arm.com \
    --cc=binutils@sourceware.org \
    --cc=nd@arm.com \
    --cc=nickc@redhat.com \
    --cc=richard.earnshaw@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).