[v3,03/15] readelf/objdump: Dump SFrame CFA fixed FP and RA offsets
Checks
Context |
Check |
Description |
linaro-tcwg-bot/tcwg_binutils_build--master-arm |
success
|
Testing passed
|
linaro-tcwg-bot/tcwg_binutils_build--master-aarch64 |
success
|
Testing passed
|
linaro-tcwg-bot/tcwg_binutils_check--master-aarch64 |
success
|
Testing passed
|
linaro-tcwg-bot/tcwg_binutils_check--master-arm |
success
|
Testing passed
|
Commit Message
The SFrame format allows architectures to specify fixed offsets from the
CFA, if any, from which the frame pointer (FP) and/or return address
(RA) may be recovered. These offsets are stored in the SFrame header.
For instance the SFrame generation in the assembler for x86 AMD64
specifies a fixed offset from the CFA, from which the return address
(RA) may be recovered.
When dumping the SFrame header, for instance in readelf/objdump with
option --sframe, do also dump the specified fixed offsets from the CFA,
if any, from which the frame pointer (FP) and return address (RA) may
be recovered.
Update the common SFrame test case verification patterns to allow for
the optional dumping of the CFA fixed FP/RA offsets. Update the x86-
specific SFrame and SCFI test case verification patterns to require a
CFA fixed RA offset of -8.
libsframe/
* sframe-dump.c: Dump CFA fixed FP and RA offsets.
gas/testsuite/
* gas/cfi-sframe/cfi-sframe-common-1.d: Test for optional fixed
FP and RA offsets.
* gas/cfi-sframe/cfi-sframe-common-2.d: Likewise.
* gas/cfi-sframe/cfi-sframe-common-3.d: Likewise.
* gas/cfi-sframe/cfi-sframe-common-4.d: Likewise.
* 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 fixed
RA offset.
* gas/cfi-sframe/common-empty-1.d: Test for optional fixed
FP and RA offsets.
* gas/cfi-sframe/common-empty-2.d: Likewise.
* gas/cfi-sframe/common-empty-3.d: Likewise.
* gas/scfi/x86_64/scfi-cfi-sections-1.d: Test for SFrame fixed
RA offset.
* gas/scfi/x86_64/scfi-dyn-stack-1.d: Likewise.
ld/testsuite/
* ld-x86-64/sframe-plt-1.d: Test for SFrame fixed RA offset.
* ld-x86-64/sframe-simple-1.d: Likewise.
Reviewed-by: Andreas Krebbel <krebbel@linux.ibm.com>
Signed-off-by: Jens Remus <jremus@linux.ibm.com>
---
Notes (jremus):
Changes v2 -> v3:
- Updated gas synthesized CFI test cases for x86 AMD64 to test for
architecture-specific fixed RA offset instead of using a pattern.
- Updated ld SFrame test cases for x86 AMD64 to test for architecture-
specific fixed RA offset.
- Corrected formatting of ChangeLog in commit message.
gas/testsuite/gas/cfi-sframe/cfi-sframe-common-1.d | 2 ++
gas/testsuite/gas/cfi-sframe/cfi-sframe-common-2.d | 2 ++
gas/testsuite/gas/cfi-sframe/cfi-sframe-common-3.d | 2 ++
gas/testsuite/gas/cfi-sframe/cfi-sframe-common-4.d | 2 ++
gas/testsuite/gas/cfi-sframe/cfi-sframe-common-5.d | 2 ++
gas/testsuite/gas/cfi-sframe/cfi-sframe-common-6.d | 2 ++
gas/testsuite/gas/cfi-sframe/cfi-sframe-common-7.d | 2 ++
gas/testsuite/gas/cfi-sframe/cfi-sframe-common-8.d | 2 ++
gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-1.d | 1 +
gas/testsuite/gas/cfi-sframe/common-empty-1.d | 2 ++
gas/testsuite/gas/cfi-sframe/common-empty-2.d | 2 ++
gas/testsuite/gas/cfi-sframe/common-empty-3.d | 2 ++
gas/testsuite/gas/scfi/x86_64/scfi-cfi-sections-1.d | 1 +
gas/testsuite/gas/scfi/x86_64/scfi-dyn-stack-1.d | 1 +
ld/testsuite/ld-x86-64/sframe-plt-1.d | 1 +
ld/testsuite/ld-x86-64/sframe-simple-1.d | 1 +
libsframe/sframe-dump.c | 10 ++++++++++
17 files changed, 37 insertions(+)
Comments
On 4/12/24 07:47, Jens Remus wrote:
> The SFrame format allows architectures to specify fixed offsets from the
> CFA, if any, from which the frame pointer (FP) and/or return address
> (RA) may be recovered. These offsets are stored in the SFrame header.
>
> For instance the SFrame generation in the assembler for x86 AMD64
> specifies a fixed offset from the CFA, from which the return address
> (RA) may be recovered.
>
> When dumping the SFrame header, for instance in readelf/objdump with
> option --sframe, do also dump the specified fixed offsets from the CFA,
> if any, from which the frame pointer (FP) and return address (RA) may
> be recovered.
>
> Update the common SFrame test case verification patterns to allow for
> the optional dumping of the CFA fixed FP/RA offsets. Update the x86-
> specific SFrame and SCFI test case verification patterns to require a
> CFA fixed RA offset of -8.
>
> libsframe/
> * sframe-dump.c: Dump CFA fixed FP and RA offsets.
>
> gas/testsuite/
> * gas/cfi-sframe/cfi-sframe-common-1.d: Test for optional fixed
> FP and RA offsets.
> * gas/cfi-sframe/cfi-sframe-common-2.d: Likewise.
> * gas/cfi-sframe/cfi-sframe-common-3.d: Likewise.
> * gas/cfi-sframe/cfi-sframe-common-4.d: Likewise.
> * 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 fixed
> RA offset.
> * gas/cfi-sframe/common-empty-1.d: Test for optional fixed
> FP and RA offsets.
> * gas/cfi-sframe/common-empty-2.d: Likewise.
> * gas/cfi-sframe/common-empty-3.d: Likewise.
> * gas/scfi/x86_64/scfi-cfi-sections-1.d: Test for SFrame fixed
> RA offset.
> * gas/scfi/x86_64/scfi-dyn-stack-1.d: Likewise.
>
> ld/testsuite/
> * ld-x86-64/sframe-plt-1.d: Test for SFrame fixed RA offset.
> * ld-x86-64/sframe-simple-1.d: Likewise.
>
> Reviewed-by: Andreas Krebbel <krebbel@linux.ibm.com>
> Signed-off-by: Jens Remus <jremus@linux.ibm.com>
LGTM.
Thanks for your patch.
> ---
>
> Notes (jremus):
> Changes v2 -> v3:
> - Updated gas synthesized CFI test cases for x86 AMD64 to test for
> architecture-specific fixed RA offset instead of using a pattern.
> - Updated ld SFrame test cases for x86 AMD64 to test for architecture-
> specific fixed RA offset.
> - Corrected formatting of ChangeLog in commit message.
>
> gas/testsuite/gas/cfi-sframe/cfi-sframe-common-1.d | 2 ++
> gas/testsuite/gas/cfi-sframe/cfi-sframe-common-2.d | 2 ++
> gas/testsuite/gas/cfi-sframe/cfi-sframe-common-3.d | 2 ++
> gas/testsuite/gas/cfi-sframe/cfi-sframe-common-4.d | 2 ++
> gas/testsuite/gas/cfi-sframe/cfi-sframe-common-5.d | 2 ++
> gas/testsuite/gas/cfi-sframe/cfi-sframe-common-6.d | 2 ++
> gas/testsuite/gas/cfi-sframe/cfi-sframe-common-7.d | 2 ++
> gas/testsuite/gas/cfi-sframe/cfi-sframe-common-8.d | 2 ++
> gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-1.d | 1 +
> gas/testsuite/gas/cfi-sframe/common-empty-1.d | 2 ++
> gas/testsuite/gas/cfi-sframe/common-empty-2.d | 2 ++
> gas/testsuite/gas/cfi-sframe/common-empty-3.d | 2 ++
> gas/testsuite/gas/scfi/x86_64/scfi-cfi-sections-1.d | 1 +
> gas/testsuite/gas/scfi/x86_64/scfi-dyn-stack-1.d | 1 +
> ld/testsuite/ld-x86-64/sframe-plt-1.d | 1 +
> ld/testsuite/ld-x86-64/sframe-simple-1.d | 1 +
> libsframe/sframe-dump.c | 10 ++++++++++
> 17 files changed, 37 insertions(+)
>
> diff --git a/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-1.d b/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-1.d
> index 32577f31860e..5f4ae00747de 100644
> --- a/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-1.d
> +++ b/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-1.d
> @@ -8,6 +8,8 @@ Contents of the SFrame section .sframe:
>
> Version: SFRAME_VERSION_2
> Flags: NONE
> +#? CFA fixed FP offset: \-?\d+
> +#? CFA fixed RA offset: \-?\d+
> Num FDEs: 1
> Num FREs: 1
>
> diff --git a/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-2.d b/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-2.d
> index 3e3f74dbe424..ded8c450a942 100644
> --- a/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-2.d
> +++ b/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-2.d
> @@ -8,6 +8,8 @@ Contents of the SFrame section .sframe:
>
> Version: SFRAME_VERSION_2
> Flags: NONE
> +#? CFA fixed FP offset: \-?\d+
> +#? CFA fixed RA offset: \-?\d+
> Num FDEs: 1
> Num FREs: 1
>
> diff --git a/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-3.d b/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-3.d
> index 6430d463a891..d23fd9790f63 100644
> --- a/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-3.d
> +++ b/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-3.d
> @@ -8,6 +8,8 @@ Contents of the SFrame section .sframe:
>
> Version: SFRAME_VERSION_2
> Flags: NONE
> +#? CFA fixed FP offset: \-?\d+
> +#? CFA fixed RA offset: \-?\d+
> Num FDEs: 1
> Num FREs: 1
>
> 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 319ff96cce2a..ca559bd0a029 100644
> --- a/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-4.d
> +++ b/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-4.d
> @@ -8,6 +8,8 @@ Contents of the SFrame section .sframe:
>
> Version: SFRAME_VERSION_2
> Flags: NONE
> +#? CFA fixed FP offset: \-?\d+
> +#? CFA fixed RA offset: \-?\d+
> Num FDEs: 1
> Num FREs: 3
>
> 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 82d34973ddde..ee82053e13db 100644
> --- a/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-5.d
> +++ b/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-5.d
> @@ -8,6 +8,8 @@ Contents of the SFrame section .sframe:
>
> Version: SFRAME_VERSION_2
> Flags: NONE
> +#? CFA fixed FP offset: \-?\d+
> +#? CFA fixed RA offset: \-?\d+
> Num FDEs: 1
> Num FREs: 3
>
> 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 fe6917c70800..9d54b98552bf 100644
> --- a/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-6.d
> +++ b/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-6.d
> @@ -8,6 +8,8 @@ Contents of the SFrame section .sframe:
>
> Version: SFRAME_VERSION_2
> Flags: NONE
> +#? CFA fixed FP offset: \-?\d+
> +#? CFA fixed RA offset: \-?\d+
> Num FDEs: 1
> Num FREs: 3
>
> 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 39724d9cdf19..2b7fe3aec8f4 100644
> --- a/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-7.d
> +++ b/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-7.d
> @@ -8,6 +8,8 @@ Contents of the SFrame section .sframe:
>
> Version: SFRAME_VERSION_2
> Flags: NONE
> +#? CFA fixed FP offset: \-?\d+
> +#? CFA fixed RA offset: \-?\d+
> Num FDEs: 1
> Num FREs: 3
>
> 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 c0a0e627fad9..d654e1d0bcd4 100644
> --- a/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-8.d
> +++ b/gas/testsuite/gas/cfi-sframe/cfi-sframe-common-8.d
> @@ -8,6 +8,8 @@ Contents of the SFrame section .sframe:
>
> Version: SFRAME_VERSION_2
> Flags: NONE
> +#? CFA fixed FP offset: \-?\d+
> +#? CFA fixed RA offset: \-?\d+
> Num FDEs: 1
> Num FREs: 2
>
> 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 ae36c21b3b7c..c8b5e6adfea0 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
> @@ -8,6 +8,7 @@ Contents of the SFrame section .sframe:
>
> Version: SFRAME_VERSION_2
> Flags: NONE
> + CFA fixed RA offset: \-8
> Num FDEs: 1
> Num FREs: 4
>
> diff --git a/gas/testsuite/gas/cfi-sframe/common-empty-1.d b/gas/testsuite/gas/cfi-sframe/common-empty-1.d
> index b133b15b051d..125612ff841f 100644
> --- a/gas/testsuite/gas/cfi-sframe/common-empty-1.d
> +++ b/gas/testsuite/gas/cfi-sframe/common-empty-1.d
> @@ -9,6 +9,8 @@ Contents of the SFrame section .sframe:
>
> Version: SFRAME_VERSION_2
> Flags: NONE
> +#? CFA fixed FP offset: \-?\d+
> +#? CFA fixed RA offset: \-?\d+
> Num FDEs: 0
> Num FREs: 0
>
> diff --git a/gas/testsuite/gas/cfi-sframe/common-empty-2.d b/gas/testsuite/gas/cfi-sframe/common-empty-2.d
> index c5bc8594f1b7..59328fc1033f 100644
> --- a/gas/testsuite/gas/cfi-sframe/common-empty-2.d
> +++ b/gas/testsuite/gas/cfi-sframe/common-empty-2.d
> @@ -9,6 +9,8 @@ Contents of the SFrame section .sframe:
>
> Version: SFRAME_VERSION_2
> Flags: NONE
> +#? CFA fixed FP offset: \-?\d+
> +#? CFA fixed RA offset: \-?\d+
> Num FDEs: 0
> Num FREs: 0
>
> diff --git a/gas/testsuite/gas/cfi-sframe/common-empty-3.d b/gas/testsuite/gas/cfi-sframe/common-empty-3.d
> index df0b19ee1bd1..5914c620760d 100644
> --- a/gas/testsuite/gas/cfi-sframe/common-empty-3.d
> +++ b/gas/testsuite/gas/cfi-sframe/common-empty-3.d
> @@ -8,6 +8,8 @@ Contents of the SFrame section .sframe:
>
> Version: SFRAME_VERSION_2
> Flags: NONE
> +#? CFA fixed FP offset: \-?\d+
> +#? CFA fixed RA offset: \-?\d+
> Num FDEs: 0
> Num FREs: 0
>
> 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 5962980256c1..c45933b72edc 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
> @@ -8,6 +8,7 @@ Contents of the SFrame section .sframe:
>
> Version: SFRAME_VERSION_2
> Flags: NONE
> + CFA fixed RA offset: \-8
> Num FDEs: 1
> Num FREs: 5
>
> 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 b51546af1494..6cd0484d5793 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
> @@ -9,6 +9,7 @@ Contents of the SFrame section .sframe:
>
> Version: SFRAME_VERSION_2
> Flags: NONE
> + CFA fixed RA offset: \-8
> Num FDEs: 1
> Num FREs: 4
>
> diff --git a/ld/testsuite/ld-x86-64/sframe-plt-1.d b/ld/testsuite/ld-x86-64/sframe-plt-1.d
> index 5e734610b970..9d123a73826d 100644
> --- a/ld/testsuite/ld-x86-64/sframe-plt-1.d
> +++ b/ld/testsuite/ld-x86-64/sframe-plt-1.d
> @@ -12,6 +12,7 @@ Contents of the SFrame section .sframe:
>
> Version: SFRAME_VERSION_2
> Flags: SFRAME_F_FDE_SORTED
> + CFA fixed RA offset: \-8
> #...
>
> Function Index :
> diff --git a/ld/testsuite/ld-x86-64/sframe-simple-1.d b/ld/testsuite/ld-x86-64/sframe-simple-1.d
> index 7f4db31fe1b7..ce5f94386ac2 100644
> --- a/ld/testsuite/ld-x86-64/sframe-simple-1.d
> +++ b/ld/testsuite/ld-x86-64/sframe-simple-1.d
> @@ -12,6 +12,7 @@ Contents of the SFrame section .sframe:
>
> Version: SFRAME_VERSION_2
> Flags: SFRAME_F_FDE_SORTED
> + CFA fixed RA offset: \-8
> #...
>
> Function Index :
> diff --git a/libsframe/sframe-dump.c b/libsframe/sframe-dump.c
> index 42a086a5691f..493d052ce91f 100644
> --- a/libsframe/sframe-dump.c
> +++ b/libsframe/sframe-dump.c
> @@ -47,6 +47,8 @@ dump_sframe_header (sframe_decoder_ctx *sfd_ctx)
> uint8_t flags;
> char *flags_str;
> const char *ver_str = NULL;
> + int8_t cfa_fixed_fp_offset;
> + int8_t cfa_fixed_ra_offset;
> const sframe_header *header = &(sfd_ctx->sfd_header);
>
> /* Prepare SFrame section version string. */
> @@ -82,12 +84,20 @@ dump_sframe_header (sframe_decoder_ctx *sfd_ctx)
> else
> strcpy (flags_str, "NONE");
>
> + /* CFA fixed FP and RA offsets. */
> + cfa_fixed_fp_offset = header->sfh_cfa_fixed_fp_offset;
> + cfa_fixed_ra_offset = header->sfh_cfa_fixed_ra_offset;
> +
> const char* subsec_name = "Header";
> printf ("\n");
> printf (" %s :\n", subsec_name);
> printf ("\n");
> printf (" Version: %s\n", ver_str);
> printf (" Flags: %s\n", flags_str);
> + if (cfa_fixed_fp_offset != SFRAME_CFA_FIXED_FP_INVALID)
> + printf (" CFA fixed FP offset: %d\n", cfa_fixed_fp_offset);
> + if (cfa_fixed_ra_offset != SFRAME_CFA_FIXED_RA_INVALID)
> + printf (" CFA fixed RA offset: %d\n", cfa_fixed_ra_offset);
> printf (" Num FDEs: %d\n", sframe_decoder_get_num_fidx (sfd_ctx));
> printf (" Num FREs: %d\n", header->sfh_num_fres);
>
@@ -8,6 +8,8 @@ Contents of the SFrame section .sframe:
Version: SFRAME_VERSION_2
Flags: NONE
+#? CFA fixed FP offset: \-?\d+
+#? CFA fixed RA offset: \-?\d+
Num FDEs: 1
Num FREs: 1
@@ -8,6 +8,8 @@ Contents of the SFrame section .sframe:
Version: SFRAME_VERSION_2
Flags: NONE
+#? CFA fixed FP offset: \-?\d+
+#? CFA fixed RA offset: \-?\d+
Num FDEs: 1
Num FREs: 1
@@ -8,6 +8,8 @@ Contents of the SFrame section .sframe:
Version: SFRAME_VERSION_2
Flags: NONE
+#? CFA fixed FP offset: \-?\d+
+#? CFA fixed RA offset: \-?\d+
Num FDEs: 1
Num FREs: 1
@@ -8,6 +8,8 @@ Contents of the SFrame section .sframe:
Version: SFRAME_VERSION_2
Flags: NONE
+#? CFA fixed FP offset: \-?\d+
+#? CFA fixed RA offset: \-?\d+
Num FDEs: 1
Num FREs: 3
@@ -8,6 +8,8 @@ Contents of the SFrame section .sframe:
Version: SFRAME_VERSION_2
Flags: NONE
+#? CFA fixed FP offset: \-?\d+
+#? CFA fixed RA offset: \-?\d+
Num FDEs: 1
Num FREs: 3
@@ -8,6 +8,8 @@ Contents of the SFrame section .sframe:
Version: SFRAME_VERSION_2
Flags: NONE
+#? CFA fixed FP offset: \-?\d+
+#? CFA fixed RA offset: \-?\d+
Num FDEs: 1
Num FREs: 3
@@ -8,6 +8,8 @@ Contents of the SFrame section .sframe:
Version: SFRAME_VERSION_2
Flags: NONE
+#? CFA fixed FP offset: \-?\d+
+#? CFA fixed RA offset: \-?\d+
Num FDEs: 1
Num FREs: 3
@@ -8,6 +8,8 @@ Contents of the SFrame section .sframe:
Version: SFRAME_VERSION_2
Flags: NONE
+#? CFA fixed FP offset: \-?\d+
+#? CFA fixed RA offset: \-?\d+
Num FDEs: 1
Num FREs: 2
@@ -8,6 +8,7 @@ Contents of the SFrame section .sframe:
Version: SFRAME_VERSION_2
Flags: NONE
+ CFA fixed RA offset: \-8
Num FDEs: 1
Num FREs: 4
@@ -9,6 +9,8 @@ Contents of the SFrame section .sframe:
Version: SFRAME_VERSION_2
Flags: NONE
+#? CFA fixed FP offset: \-?\d+
+#? CFA fixed RA offset: \-?\d+
Num FDEs: 0
Num FREs: 0
@@ -9,6 +9,8 @@ Contents of the SFrame section .sframe:
Version: SFRAME_VERSION_2
Flags: NONE
+#? CFA fixed FP offset: \-?\d+
+#? CFA fixed RA offset: \-?\d+
Num FDEs: 0
Num FREs: 0
@@ -8,6 +8,8 @@ Contents of the SFrame section .sframe:
Version: SFRAME_VERSION_2
Flags: NONE
+#? CFA fixed FP offset: \-?\d+
+#? CFA fixed RA offset: \-?\d+
Num FDEs: 0
Num FREs: 0
@@ -8,6 +8,7 @@ Contents of the SFrame section .sframe:
Version: SFRAME_VERSION_2
Flags: NONE
+ CFA fixed RA offset: \-8
Num FDEs: 1
Num FREs: 5
@@ -9,6 +9,7 @@ Contents of the SFrame section .sframe:
Version: SFRAME_VERSION_2
Flags: NONE
+ CFA fixed RA offset: \-8
Num FDEs: 1
Num FREs: 4
@@ -12,6 +12,7 @@ Contents of the SFrame section .sframe:
Version: SFRAME_VERSION_2
Flags: SFRAME_F_FDE_SORTED
+ CFA fixed RA offset: \-8
#...
Function Index :
@@ -12,6 +12,7 @@ Contents of the SFrame section .sframe:
Version: SFRAME_VERSION_2
Flags: SFRAME_F_FDE_SORTED
+ CFA fixed RA offset: \-8
#...
Function Index :
@@ -47,6 +47,8 @@ dump_sframe_header (sframe_decoder_ctx *sfd_ctx)
uint8_t flags;
char *flags_str;
const char *ver_str = NULL;
+ int8_t cfa_fixed_fp_offset;
+ int8_t cfa_fixed_ra_offset;
const sframe_header *header = &(sfd_ctx->sfd_header);
/* Prepare SFrame section version string. */
@@ -82,12 +84,20 @@ dump_sframe_header (sframe_decoder_ctx *sfd_ctx)
else
strcpy (flags_str, "NONE");
+ /* CFA fixed FP and RA offsets. */
+ cfa_fixed_fp_offset = header->sfh_cfa_fixed_fp_offset;
+ cfa_fixed_ra_offset = header->sfh_cfa_fixed_ra_offset;
+
const char* subsec_name = "Header";
printf ("\n");
printf (" %s :\n", subsec_name);
printf ("\n");
printf (" Version: %s\n", ver_str);
printf (" Flags: %s\n", flags_str);
+ if (cfa_fixed_fp_offset != SFRAME_CFA_FIXED_FP_INVALID)
+ printf (" CFA fixed FP offset: %d\n", cfa_fixed_fp_offset);
+ if (cfa_fixed_ra_offset != SFRAME_CFA_FIXED_RA_INVALID)
+ printf (" CFA fixed RA offset: %d\n", cfa_fixed_ra_offset);
printf (" Num FDEs: %d\n", sframe_decoder_get_num_fidx (sfd_ctx));
printf (" Num FREs: %d\n", header->sfh_num_fres);