[binutils-gdb] readelf/objdump: Display SFrame fixed RA offset as 'f' in dump
Jens Remus
jremus@sourceware.org
Thu Jul 4 08:39:24 GMT 2024
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=5c7f6da4323c6e7c74ad2b89c92794438a2c0e13
commit 5c7f6da4323c6e7c74ad2b89c92794438a2c0e13
Author: Jens Remus <jremus@linux.ibm.com>
Date: Thu Jul 4 10:34:12 2024 +0200
readelf/objdump: Display SFrame fixed RA offset as 'f' in dump
For the SFrame FRE frame-pointer (FP) offset from CFA a 'u' is displayed
if it is unavailable.
For the SFrame FRE return-address (RA) offset from CFA a 'u' was
displayed if the ABI uses a fixed RA offset from CFA. By chance a
'u' was also displayed if the RA offset is unavailable, as the string
buffer was not initialized after formatting the FP offset. Note that it
could not occur that the FP offset was erroneously displayed as RA
offset, as the SFrame format cannot have a FRE with FP offset without
RA offset.
For the FRE RA offset display 'f' if the ABI uses a fixed RA offset
from CFA. Display a 'u' if it is unavailable.
libsframe/
* sframe-dump.c: Display SFrame fixed RA offset as 'f' in dump.
gas/testsuite/
* gas/cfi-sframe/cfi-sframe-common-4.d: Test for RA displayed
either as 'u' (if RA tracking) or as 'f' (fixed RA offset if no
RA tracking).
* gas/cfi-sframe/cfi-sframe-common-5.d: Likewise.
* gas/cfi-sframe/cfi-sframe-common-6.d: Likewise.
* gas/cfi-sframe/cfi-sframe-common-7.d: Likewise.
* gas/cfi-sframe/cfi-sframe-common-8.d: Likewise.
* gas/cfi-sframe/cfi-sframe-x86_64-1.d: Test for RA displayed
as 'f' (fixed RA offset), as x86-64 does not use RA tracking.
* gas/scfi/x86_64/scfi-cfi-sections-1.d: Likewise.
* gas/scfi/x86_64/scfi-dyn-stack-1.d: Likewise.
ld/testsuite/
* ld-x86-64/sframe-plt-1.d: Test for RA displayed as 'f' (fixed
RA offset), as x86-64 does not use RA tracking.
* ld-x86-64/sframe-simple-1.d: Likewise.
Signed-off-by: Jens Remus <jremus@linux.ibm.com>
Diff:
---
gas/testsuite/gas/cfi-sframe/cfi-sframe-common-4.d | 4 ++--
gas/testsuite/gas/cfi-sframe/cfi-sframe-common-5.d | 4 ++--
gas/testsuite/gas/cfi-sframe/cfi-sframe-common-6.d | 4 ++--
gas/testsuite/gas/cfi-sframe/cfi-sframe-common-7.d | 4 ++--
gas/testsuite/gas/cfi-sframe/cfi-sframe-common-8.d | 2 +-
gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-1.d | 8 ++++----
gas/testsuite/gas/scfi/x86_64/scfi-cfi-sections-1.d | 10 +++++-----
gas/testsuite/gas/scfi/x86_64/scfi-dyn-stack-1.d | 10 +++++-----
ld/testsuite/ld-x86-64/sframe-plt-1.d | 8 ++++----
ld/testsuite/ld-x86-64/sframe-simple-1.d | 16 ++++++++--------
libsframe/sframe-dump.c | 8 +++++---
11 files changed, 40 insertions(+), 38 deletions(-)
diff --git a/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-4.d b/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-4.d
index ca559bd0a02..8632613f532 100644
--- a/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-4.d
+++ b/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-4.d
@@ -17,7 +17,7 @@ Contents of the SFrame section .sframe:
func idx \[0\]: pc = 0x0, size = 12 bytes
STARTPC + CFA + FP + RA +
#...
- 0+0004 +sp\+16 +u +u +
- 0+0008 +sp\+32 +u +u +
+ 0+0004 +sp\+16 +u +[uf] +
+ 0+0008 +sp\+32 +u +[uf] +
#pass
diff --git a/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-5.d b/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-5.d
index ee82053e13d..dd2c32d3d9f 100644
--- a/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-5.d
+++ b/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-5.d
@@ -17,7 +17,7 @@ Contents of the SFrame section .sframe:
func idx \[0\]: pc = 0x0, size = 12 bytes
STARTPC + CFA + FP + RA +
#...
- 0+0004 +sp\+16 +u +u +
- 0+0008 +sp\+24 +u +u +
+ 0+0004 +sp\+16 +u +[uf] +
+ 0+0008 +sp\+24 +u +[uf] +
#pass
diff --git a/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-6.d b/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-6.d
index 9d54b98552b..34390c46a07 100644
--- a/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-6.d
+++ b/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-6.d
@@ -17,7 +17,7 @@ Contents of the SFrame section .sframe:
func idx \[0\]: pc = 0x0, size = 12 bytes
STARTPC + CFA + FP + RA +
#...
- 0+0004 +sp\+8 +u +u +
- 0+0008 +sp\+8 +u +u +
+ 0+0004 +sp\+8 +u +[uf] +
+ 0+0008 +sp\+8 +u +[uf] +
#pass
diff --git a/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-7.d b/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-7.d
index 2b7fe3aec8f..61efb9c4ed1 100644
--- a/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-7.d
+++ b/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-7.d
@@ -17,7 +17,7 @@ Contents of the SFrame section .sframe:
func idx \[0\]: pc = 0x0, size = 12 bytes
STARTPC + CFA + FP + RA +
#...
- 0+0004 +sp\+8 +u +u +
- 0+0008 +sp\+8 +u +u +
+ 0+0004 +sp\+8 +u +[uf] +
+ 0+0008 +sp\+8 +u +[uf] +
#pass
diff --git a/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-8.d b/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-8.d
index d654e1d0bcd..d77645636b3 100644
--- a/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-8.d
+++ b/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-8.d
@@ -17,6 +17,6 @@ Contents of the SFrame section .sframe:
func idx \[0\]: pc = 0x0, size = 8 bytes
STARTPC + CFA + FP + RA +
#...
- 0+0004 +sp\+16 +u +u +
+ 0+0004 +sp\+16 +u +[uf] +
#pass
diff --git a/gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-1.d b/gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-1.d
index c8b5e6adfea..88b4cc63dba 100644
--- a/gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-1.d
+++ b/gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-1.d
@@ -16,8 +16,8 @@ Contents of the SFrame section .sframe:
func idx \[0\]: pc = 0x0, size = 25 bytes
STARTPC +CFA +FP +RA +
- 0+0000 +sp\+8 +u +u +
- 0+0001 +sp\+16 +c\-16 +u +
- 0+0004 +fp\+16 +c\-16 +u +
- 0+0018 +sp\+8 +c\-16 +u +
+ 0+0000 +sp\+8 +u +f +
+ 0+0001 +sp\+16 +c\-16 +f +
+ 0+0004 +fp\+16 +c\-16 +f +
+ 0+0018 +sp\+8 +c\-16 +f +
#pass
diff --git a/gas/testsuite/gas/scfi/x86_64/scfi-cfi-sections-1.d b/gas/testsuite/gas/scfi/x86_64/scfi-cfi-sections-1.d
index c45933b72ed..7c247e33a6e 100644
--- a/gas/testsuite/gas/scfi/x86_64/scfi-cfi-sections-1.d
+++ b/gas/testsuite/gas/scfi/x86_64/scfi-cfi-sections-1.d
@@ -16,10 +16,10 @@ Contents of the SFrame section .sframe:
func idx \[0\]: pc = 0x0, size = 12 bytes
STARTPC + CFA + FP + RA +
- 0+0000 +sp\+8 +u +u +
- 0+0001 +sp\+16 +c\-16 +u +
- 0+0004 +fp\+16 +c-16 +u +
- 0+000a +sp\+16 +c\-16 +u +
- 0+000b +sp\+8 +u +u +
+ 0+0000 +sp\+8 +u +f +
+ 0+0001 +sp\+16 +c\-16 +f +
+ 0+0004 +fp\+16 +c-16 +f +
+ 0+000a +sp\+16 +c\-16 +f +
+ 0+000b +sp\+8 +u +f +
#pass
diff --git a/gas/testsuite/gas/scfi/x86_64/scfi-dyn-stack-1.d b/gas/testsuite/gas/scfi/x86_64/scfi-dyn-stack-1.d
index 6cd0484d579..c6a9b53f4e0 100644
--- a/gas/testsuite/gas/scfi/x86_64/scfi-dyn-stack-1.d
+++ b/gas/testsuite/gas/scfi/x86_64/scfi-dyn-stack-1.d
@@ -16,10 +16,10 @@ Contents of the SFrame section .sframe:
Function Index :
func idx \[0\]: pc = 0x0, size = 87 bytes
- STARTPC + CFA + FP + RA
- 0+0000 + sp\+8 + u + u
- 0+0001 + sp\+16 + c-16 + u
- 0+0004 + fp\+16 + c-16 + u
- 0+0056 + sp\+8 + u + u
+ STARTPC + CFA + FP + RA +
+ 0+0000 + sp\+8 + u + f +
+ 0+0001 + sp\+16 + c-16 + f +
+ 0+0004 + fp\+16 + c-16 + f +
+ 0+0056 + sp\+8 + u + f +
#pass
diff --git a/ld/testsuite/ld-x86-64/sframe-plt-1.d b/ld/testsuite/ld-x86-64/sframe-plt-1.d
index 6aea5f42469..52bca18d4c0 100644
--- a/ld/testsuite/ld-x86-64/sframe-plt-1.d
+++ b/ld/testsuite/ld-x86-64/sframe-plt-1.d
@@ -19,12 +19,12 @@ Contents of the SFrame section .sframe:
func idx \[0\]: pc = 0x1000, size = 16 bytes
STARTPC +CFA +FP +RA +
- 0+1000 +sp\+16 +u +u +
- 0+1006 +sp\+24 +u +u +
+ 0+1000 +sp\+16 +u +f +
+ 0+1006 +sp\+24 +u +f +
func idx \[1\]: pc = 0x1010, size = 16 bytes
STARTPC\[m\] +CFA +FP +RA +
- 0+0000 +sp\+8 +u +u +
- 0+000b +sp\+16 +u +u +
+ 0+0000 +sp\+8 +u +f +
+ 0+000b +sp\+16 +u +f +
#...
diff --git a/ld/testsuite/ld-x86-64/sframe-simple-1.d b/ld/testsuite/ld-x86-64/sframe-simple-1.d
index 5ffd0ca7818..7d88419226f 100644
--- a/ld/testsuite/ld-x86-64/sframe-simple-1.d
+++ b/ld/testsuite/ld-x86-64/sframe-simple-1.d
@@ -23,14 +23,14 @@ Contents of the SFrame section .sframe:
func idx \[2\]: pc = 0x1020, size = 53 bytes
STARTPC +CFA +FP +RA +
- 0+1020 +sp\+8 +u +u +
- 0+1021 +sp\+16 +c-16 +u +
- 0+1024 +fp\+16 +c-16 +u +
- 0+1054 +sp\+8 +c-16 +u +
+ 0+1020 +sp\+8 +u +f +
+ 0+1021 +sp\+16 +c-16 +f +
+ 0+1024 +fp\+16 +c-16 +f +
+ 0+1054 +sp\+8 +c-16 +f +
func idx \[3\]: pc = 0x1055, size = 37 bytes
STARTPC +CFA +FP +RA +
- 0+1055 +sp\+8 +u +u +
- 0+1056 +sp\+16 +c-16 +u +
- 0+1059 +fp\+16 +c-16 +u +
- 0+1079 +sp\+8 +c-16 +u +
+ 0+1055 +sp\+8 +u +f +
+ 0+1056 +sp\+16 +c-16 +f +
+ 0+1059 +fp\+16 +c-16 +f +
+ 0+1079 +sp\+8 +c-16 +f +
diff --git a/libsframe/sframe-dump.c b/libsframe/sframe-dump.c
index 493d052ce91..69633d53a33 100644
--- a/libsframe/sframe-dump.c
+++ b/libsframe/sframe-dump.c
@@ -181,13 +181,15 @@ dump_sframe_func_with_fres (sframe_decoder_ctx *sfd_ctx,
printf ("%-10s", temp);
/* Dump RA info.
- If an ABI does not track RA offset, e.g., AMD64, display a 'u',
+ If an ABI does not track RA offset, e.g., AMD64, display 'f',
else display the offset d as 'c+-d'. */
- if (sframe_decoder_get_fixed_ra_offset(sfd_ctx)
+ if (sframe_decoder_get_fixed_ra_offset (sfd_ctx)
!= SFRAME_CFA_FIXED_RA_INVALID)
- strcpy (temp, "u");
+ strcpy (temp, "f");
else if (err[2] == 0)
sprintf (temp, "c%+d", ra_offset);
+ else
+ strcpy (temp, "u");
/* Mark SFrame FRE's RA information with "[s]" if the RA is mangled
with signature bits. */
More information about the Binutils-cvs
mailing list