[1/8] sframe: Ignore section padding when converting endianness
Checks
Context |
Check |
Description |
linaro-tcwg-bot/tcwg_binutils_build--master-arm |
success
|
Build passed
|
linaro-tcwg-bot/tcwg_binutils_build--master-aarch64 |
success
|
Build passed
|
linaro-tcwg-bot/tcwg_binutils_check--master-aarch64 |
success
|
Test passed
|
linaro-tcwg-bot/tcwg_binutils_check--master-arm |
success
|
Test passed
|
Commit Message
The .sframe section may have a trailing padding due to the architecture-
specific default section alignment. Do not treat this padding as error
when converting between target and host endianness.
While at it reuse the determined SFrame section header size.
libsframe/
* sframe.c (flip_sframe): Ignore .sframe section padding. Reuse
SFrame header size.
Reported-by: Indu Bhagat <indu.bhagat@oracle.com>
Signed-off-by: Jens Remus <jremus@linux.ibm.com>
---
Notes (jremus):
This can be observed when building Binutils with SFrame s390 support on
x86-64 for s390x using configure option "--target=s390x-ibm-linux-gnu"
and running the GAS test suite.
libsframe/sframe.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
@@ -507,7 +507,7 @@ flip_sframe (char *frame_buf, size_t buf_size, uint32_t to_foreign)
fre_offset = fdep->sfde_func_start_fre_off;
}
- fp = frame_buf + sframe_get_hdr_size (ihp) + ihp->sfh_freoff;
+ fp = frame_buf + hdrsz + ihp->sfh_freoff;
fp += fre_offset;
for (; j < prev_frep_index + num_fres; j++)
{
@@ -522,8 +522,12 @@ flip_sframe (char *frame_buf, size_t buf_size, uint32_t to_foreign)
prev_frep_index = j;
}
/* All FDEs and FREs must have been endian flipped by now. */
- if ((j != ihp->sfh_num_fres) || (bytes_flipped != (buf_size - hdrsz)))
+ if ((j != ihp->sfh_num_fres) || (bytes_flipped > (buf_size - hdrsz)))
goto bad;
+ /* Optional trailing section padding. */
+ for (fp = frame_buf + hdrsz + bytes_flipped; fp < frame_buf + buf_size; fp++)
+ if (*fp != '\0')
+ goto bad;
/* Success. */
return 0;