aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
Diffstat (limited to 'gas')
-rw-r--r--gas/config/tc-arm.c17
-rw-r--r--gas/doc/c-arm.texi6
-rw-r--r--gas/testsuite/gas/arm/ehabi-pacbti-m.d15
-rw-r--r--gas/testsuite/gas/arm/ehabi-pacbti-m.s38
4 files changed, 76 insertions, 0 deletions
diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c
index 8864286..8f0e8b0 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 0605d32..0f43272 100644
--- a/gas/doc/c-arm.texi
+++ b/gas/doc/c-arm.texi
@@ -1086,6 +1086,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 0000000..6039945
--- /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 0000000..1018548
--- /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