[COMMITTED] libsframe: use offsets to FDE and FRE sub-sections
Indu Bhagat
indu.bhagat@oracle.com
Sat Aug 23 19:14:22 GMT 2025
More information about the Binutils mailing list
Sat Aug 23 19:14:22 GMT 2025
- Previous message (by thread): [PATCH] x86-64: Use the GOT indirection in no-plt-check1.S
- Next message (by thread): [PATCH] x86: Distinguish no PLT build and run test names
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
In SFrame format, the SFrame FDEs begin at an offset 'sfh_fdeoff' from
the end of the SFrame header. Similarly, the SFrame FREs begin at an
offset 'sfh_freoff' from the end of the SFrame header.
While the GNU assembler generates these subsections such that sfd_fdeoff
is zero, the correct way to decode the SFrame section (conforming with
the specification) is to use both sfh_fdeoff and sfh_freoff in
sframe_decode.
libsframe/
* sframe.c (sframe_decode): Use offsets to SFrame FDE and FRE
sub-sections as applicable.
---
libsframe/sframe.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/libsframe/sframe.c b/libsframe/sframe.c
index 824d1fd7ed9..85500791f8a 100644
--- a/libsframe/sframe.c
+++ b/libsframe/sframe.c
@@ -969,12 +969,11 @@ sframe_decode (const char *sf_buf, size_t sf_size, int *errp)
sframe_ret_set_errno (errp, SFRAME_ERR_NOMEM);
goto decode_fail_free;
}
- memcpy (dctx->sfd_funcdesc, frame_buf, fidx_size);
+ /* SFrame FDEs are at an offset of sfh_fdeoff from SFrame header end. */
+ memcpy (dctx->sfd_funcdesc, frame_buf + sfheaderp->sfh_fdeoff, fidx_size);
debug_printf ("%u total fidx size\n", fidx_size);
- frame_buf += (fidx_size);
-
/* Handle the SFrame Frame Row Entry section. */
dctx->sfd_fres = (char *) malloc (sfheaderp->sfh_fre_len);
if (dctx->sfd_fres == NULL)
@@ -982,7 +981,10 @@ sframe_decode (const char *sf_buf, size_t sf_size, int *errp)
sframe_ret_set_errno (errp, SFRAME_ERR_NOMEM);
goto decode_fail_free;
}
- memcpy (dctx->sfd_fres, frame_buf, sfheaderp->sfh_fre_len);
+ /* SFrame FREs are at an offset of sfh_freoff from SFrame header end. */
+ memcpy (dctx->sfd_fres,
+ frame_buf + sfheaderp->sfh_freoff,
+ sfheaderp->sfh_fre_len);
fre_bytes = sfheaderp->sfh_fre_len;
dctx->sfd_fre_nbytes = fre_bytes;
--
2.43.0
- Previous message (by thread): [PATCH] x86-64: Use the GOT indirection in no-plt-check1.S
- Next message (by thread): [PATCH] x86: Distinguish no PLT build and run test names
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Binutils mailing list