aboutsummaryrefslogtreecommitdiff
path: root/gas/sframe-opt.c
diff options
context:
space:
mode:
authorIndu Bhagat <indu.bhagat@oracle.com>2023-01-06 09:30:20 -0800
committerIndu Bhagat <indu.bhagat@oracle.com>2023-01-06 09:30:56 -0800
commit725a19bfd142c845bf76ae28f6289972fd1cf5db (patch)
treed4312aa9fa29f28f4b2be090e87f0def39972629 /gas/sframe-opt.c
parentcd9aea32cffd8089f6f63f4eb86d4dccfc0b3850 (diff)
downloadbinutils-725a19bfd142c845bf76ae28f6289972fd1cf5db.zip
binutils-725a19bfd142c845bf76ae28f6289972fd1cf5db.tar.gz
binutils-725a19bfd142c845bf76ae28f6289972fd1cf5db.tar.bz2
sframe: fix the defined SFRAME_FRE_TYPE_*_LIMIT constants
An earlier commit 3f107464 defined the SFRAME_FRE_TYPE_*_LIMIT constants. These constants are used (by gas and libsframe) to pick an SFrame FRE type based on the function size. Those constants, however, were buggy, causing the generated SFrame sections to be bloated as SFRAME_FRE_TYPE_ADDR2/SFRAME_FRE_TYPE_ADDR4 got chosen more often than necessary. gas/ * sframe-opt.c (sframe_estimate_size_before_relax): Use typecast. (sframe_convert_frag): Likewise. libsframe/ * sframe.c (sframe_calc_fre_type): Use a more appropriate type for argument. Adjust the check for SFRAME_FRE_TYPE_ADDR4_LIMIT to keep it warning-free but meaningful. include/ * sframe-api.h (sframe_calc_fre_type): Use a more appropriate type for the argument. * sframe.h (SFRAME_FRE_TYPE_ADDR1_LIMIT): Correct the constant. (SFRAME_FRE_TYPE_ADDR2_LIMIT): Likewise. (SFRAME_FRE_TYPE_ADDR4_LIMIT): Likewise.
Diffstat (limited to 'gas/sframe-opt.c')
-rw-r--r--gas/sframe-opt.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/gas/sframe-opt.c b/gas/sframe-opt.c
index 01138f2..ec0509f 100644
--- a/gas/sframe-opt.c
+++ b/gas/sframe-opt.c
@@ -53,9 +53,9 @@ sframe_estimate_size_before_relax (fragS *frag)
widthS = exp->X_op_symbol;
width = resolve_symbol_value (widthS);
- if (width < SFRAME_FRE_TYPE_ADDR1_LIMIT)
+ if (width < (offsetT) SFRAME_FRE_TYPE_ADDR1_LIMIT)
ret = 1;
- else if (width < SFRAME_FRE_TYPE_ADDR2_LIMIT)
+ else if (width < (offsetT) SFRAME_FRE_TYPE_ADDR2_LIMIT)
ret = 2;
else
ret = 4;
@@ -123,9 +123,9 @@ sframe_convert_frag (fragS *frag)
/* Calculate the applicable fre_type. */
fsizeS = exp->X_op_symbol;
fsize = resolve_symbol_value (fsizeS);
- if (fsize < SFRAME_FRE_TYPE_ADDR1_LIMIT)
+ if (fsize < (offsetT) SFRAME_FRE_TYPE_ADDR1_LIMIT)
fre_type = SFRAME_FRE_TYPE_ADDR1;
- else if (fsize < SFRAME_FRE_TYPE_ADDR2_LIMIT)
+ else if (fsize < (offsetT) SFRAME_FRE_TYPE_ADDR2_LIMIT)
fre_type = SFRAME_FRE_TYPE_ADDR2;
else
fre_type = SFRAME_FRE_TYPE_ADDR4;
@@ -150,11 +150,11 @@ sframe_convert_frag (fragS *frag)
switch (frag->fr_subtype & 7)
{
case 1:
- gas_assert (fsize < SFRAME_FRE_TYPE_ADDR1_LIMIT);
+ gas_assert (fsize < (offsetT) SFRAME_FRE_TYPE_ADDR1_LIMIT);
frag->fr_literal[frag->fr_fix] = diff;
break;
case 2:
- gas_assert (fsize < SFRAME_FRE_TYPE_ADDR2_LIMIT);
+ gas_assert (fsize < (offsetT) SFRAME_FRE_TYPE_ADDR2_LIMIT);
md_number_to_chars (frag->fr_literal + frag->fr_fix, diff, 2);
break;
case 4: