aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIndu Bhagat <indu.bhagat@oracle.com>2022-12-09 10:23:07 -0800
committerIndu Bhagat <indu.bhagat@oracle.com>2022-12-09 10:23:07 -0800
commit3f107464e35cf63a529358a1c240821b30c35d2b (patch)
tree5e4a62b1c62e48a1c17b35ed303c26f6f04f512e
parent70cfae61f4ed5db02d8daa59dc4432ff2d9302bd (diff)
downloadfsf-binutils-gdb-3f107464e35cf63a529358a1c240821b30c35d2b.zip
fsf-binutils-gdb-3f107464e35cf63a529358a1c240821b30c35d2b.tar.gz
fsf-binutils-gdb-3f107464e35cf63a529358a1c240821b30c35d2b.tar.bz2
sframe: gas: libsframe: define constants and remove magic numbers
Define constants in sframe.h for the various limits associated with the range of offsets that can be encoded in the start address of an SFrame FRE. E.g., sframe_frame_row_entry_addr1 is used when start address offset can be encoded as 1-byte unsigned value. Update the code in gas to use these defined constants as it checks for these limits, and remove the usage of magic numbers. ChangeLog: * gas/sframe-opt.c (sframe_estimate_size_before_relax): (sframe_convert_frag): Do not use magic numbers. * libsframe/sframe.c (sframe_calc_fre_type): Likewise. include/ChangeLog: * sframe.h (SFRAME_FRE_TYPE_ADDR1_LIMIT): New constant. (SFRAME_FRE_TYPE_ADDR2_LIMIT): Likewise. (SFRAME_FRE_TYPE_ADDR4_LIMIT): Likewise.
-rw-r--r--gas/sframe-opt.c12
-rw-r--r--include/sframe.h15
-rw-r--r--libsframe/sframe.c6
3 files changed, 24 insertions, 9 deletions
diff --git a/gas/sframe-opt.c b/gas/sframe-opt.c
index c17fd6b..6901aa8 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 < 0x100)
+ if (width < SFRAME_FRE_TYPE_ADDR1_LIMIT)
ret = 1;
- else if (width < 0x10000)
+ else if (width < SFRAME_FRE_TYPE_ADDR2_LIMIT)
ret = 2;
else
ret = 4;
@@ -109,9 +109,9 @@ sframe_convert_frag (fragS *frag)
{
fsizeS = frag->fr_symbol;
fsize = resolve_symbol_value (fsizeS);
- if (fsize < 0x100)
+ if (fsize < SFRAME_FRE_TYPE_ADDR1_LIMIT)
func_info = SFRAME_FRE_TYPE_ADDR1;
- else if (fsize < 0x10000)
+ else if (fsize < SFRAME_FRE_TYPE_ADDR2_LIMIT)
func_info = SFRAME_FRE_TYPE_ADDR2;
else
func_info = SFRAME_FRE_TYPE_ADDR4;
@@ -133,11 +133,11 @@ sframe_convert_frag (fragS *frag)
switch (frag->fr_subtype & 7)
{
case 1:
- gas_assert (fsize < 0x100);
+ gas_assert (fsize < SFRAME_FRE_TYPE_ADDR1_LIMIT);
frag->fr_literal[frag->fr_fix] = diff;
break;
case 2:
- gas_assert (fsize < 0x10000);
+ gas_assert (fsize < SFRAME_FRE_TYPE_ADDR2_LIMIT);
md_number_to_chars (frag->fr_literal + frag->fr_fix, diff, 2);
break;
case 4:
diff --git a/include/sframe.h b/include/sframe.h
index 7e167bf..03a2d75 100644
--- a/include/sframe.h
+++ b/include/sframe.h
@@ -273,6 +273,7 @@ typedef struct sframe_fre_info
fi
*/
+/* Used when SFRAME_FRE_TYPE_ADDR1 is specified as FRE type. */
typedef struct sframe_frame_row_entry_addr1
{
/* Start address of the frame row entry. Encoded as an 1-byte unsigned
@@ -281,6 +282,11 @@ typedef struct sframe_frame_row_entry_addr1
sframe_fre_info sfre_info;
} ATTRIBUTE_PACKED sframe_frame_row_entry_addr1;
+/* Upper limit of start address in sframe_frame_row_entry_addr1
+ is 0x100 (not inclusive). */
+#define SFRAME_FRE_TYPE_ADDR1_LIMIT ((SFRAME_FRE_TYPE_ADDR1 + 1) * 8)
+
+/* Used when SFRAME_FRE_TYPE_ADDR2 is specified as FRE type. */
typedef struct sframe_frame_row_entry_addr2
{
/* Start address of the frame row entry. Encoded as an 2-byte unsigned
@@ -289,6 +295,11 @@ typedef struct sframe_frame_row_entry_addr2
sframe_fre_info sfre_info;
} ATTRIBUTE_PACKED sframe_frame_row_entry_addr2;
+/* Upper limit of start address in sframe_frame_row_entry_addr2
+ is 0x10000 (not inclusive). */
+#define SFRAME_FRE_TYPE_ADDR2_LIMIT ((SFRAME_FRE_TYPE_ADDR2 * 2) * 8)
+
+/* Used when SFRAME_FRE_TYPE_ADDR4 is specified as FRE type. */
typedef struct sframe_frame_row_entry_addr4
{
/* Start address of the frame row entry. Encoded as a 4-byte unsigned
@@ -297,6 +308,10 @@ typedef struct sframe_frame_row_entry_addr4
sframe_fre_info sfre_info;
} ATTRIBUTE_PACKED sframe_frame_row_entry_addr4;
+/* Upper limit of start address in sframe_frame_row_entry_addr2
+ is 0x100000000 (not inclusive). */
+#define SFRAME_FRE_TYPE_ADDR4_LIMIT ((SFRAME_FRE_TYPE_ADDR4 * 2) * 8)
+
#ifdef __cplusplus
}
#endif
diff --git a/libsframe/sframe.c b/libsframe/sframe.c
index 6e0eb7b..64fa907 100644
--- a/libsframe/sframe.c
+++ b/libsframe/sframe.c
@@ -572,11 +572,11 @@ unsigned int
sframe_calc_fre_type (unsigned int func_size)
{
unsigned int fre_type = 0;
- if (func_size <= 0xff)
+ if (func_size < SFRAME_FRE_TYPE_ADDR1_LIMIT)
fre_type = SFRAME_FRE_TYPE_ADDR1;
- else if (func_size <= 0xffff)
+ else if (func_size < SFRAME_FRE_TYPE_ADDR2_LIMIT)
fre_type = SFRAME_FRE_TYPE_ADDR2;
- else if (func_size <= 0xffffffff)
+ else if (func_size < SFRAME_FRE_TYPE_ADDR4_LIMIT)
fre_type = SFRAME_FRE_TYPE_ADDR4;
return fre_type;
}