aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIndu Bhagat <indu.bhagat@oracle.com>2022-12-22 09:57:27 -0800
committerIndu Bhagat <indu.bhagat@oracle.com>2022-12-22 09:57:27 -0800
commit95e829affb0a46394fd87048e7599ce950eabf5f (patch)
tree62d621d0d9cd60614f858d621608fff6928d021c
parent3369de90b81592b44ba34360642a74a68afbdf7a (diff)
downloadbinutils-95e829affb0a46394fd87048e7599ce950eabf5f.zip
binutils-95e829affb0a46394fd87048e7599ce950eabf5f.tar.gz
binutils-95e829affb0a46394fd87048e7599ce950eabf5f.tar.bz2
objdump/readelf: sframe: emit marker for SFrame FDE with B key
ChangeLog: * libsframe/sframe-dump.c (is_sframe_abi_arch_aarch64): New definition. (dump_sframe_func_with_fres): Emit a string if B key is used.
-rw-r--r--libsframe/sframe-dump.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/libsframe/sframe-dump.c b/libsframe/sframe-dump.c
index 5f778be..c00ff40 100644
--- a/libsframe/sframe-dump.c
+++ b/libsframe/sframe-dump.c
@@ -25,6 +25,21 @@
#define SFRAME_HEADER_FLAGS_STR_MAX_LEN 50
+/* Return TRUE if the SFrame section is associated with the aarch64 ABIs. */
+
+static bool
+is_sframe_abi_arch_aarch64 (sframe_decoder_ctx *sfd_ctx)
+{
+ bool aarch64_p = false;
+
+ unsigned char abi_arch = sframe_decoder_get_abi_arch (sfd_ctx);
+ if ((abi_arch == SFRAME_ABI_AARCH64_ENDIAN_BIG)
+ || (abi_arch == SFRAME_ABI_AARCH64_ENDIAN_LITTLE))
+ aarch64_p = true;
+
+ return aarch64_p;
+}
+
static void
dump_sframe_header (sframe_decoder_ctx *sfd_ctx)
{
@@ -113,6 +128,10 @@ dump_sframe_func_with_fres (sframe_decoder_ctx *sfd_ctx,
func_start_pc_vma,
func_size);
+ if (is_sframe_abi_arch_aarch64 (sfd_ctx)
+ && (SFRAME_V1_FUNC_PAUTH_KEY (func_info) == SFRAME_AARCH64_PAUTH_KEY_B))
+ printf (", pauth = B key");
+
char temp[100];
memset (temp, 0, 100);