mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-02-17 13:10:12 +08:00
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>
This commit is contained in:
parent
76f05e1dfb
commit
5c7f6da432
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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 +
|
||||
|
||||
#...
|
||||
|
@ -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 +
|
||||
|
@ -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. */
|
||||
|
Loading…
Reference in New Issue
Block a user