mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2026-08-27 00:26:02 -04:00
include: libsframe: rename SFrame V3 Flexible FDE macros to CTRLWORD
The existing SFrame V3 macros for Flexible FDEs used the term 'OFFSET' to refer to the data word encoding control/register data word. This can be confusing, as the control data word (register ID, dereference flags) is distinct from a stack offset. This patch renames these macros to use 'CTRLWORD' to better reflect their purpose. It also updates the assembler and libsframe dumper to use the new nomenclature. No functional change. Reviewed-by: Jens Remus <jremus@linux.ibm.com> gas/ * gen-sframe.c (sframe_get_fre_dataword_size): Use SFRAME_V3_FLEX_FDE_CTRLWORD_ENCODE. (output_sframe_row_entry_datawords): Likewise. include/ * sframe.h (SFRAME_V3_FLEX_FDE_REG_ENCODE): Rename from .. (SFRAME_V3_FLEX_FDE_CTRLWORD_ENCODE): .. to. (SFRAME_V3_FLEX_FDE_CTRLWORD_REGNUM): Rename from SFRAME_V3_FLEX_FDE_OFFSET_REG_NUM to this. (SFRAME_V3_FLEX_FDE_CTRLWORD_DEREF_P): Rename from SFRAME_V3_FLEX_FDE_OFFSET_REG_DEREF_P to this. (SFRAME_V3_FLEX_FDE_CTRLWORD_REG_P): Rename from SFRAME_V3_FLEX_FDE_OFFSET_REG_P to this. (SFRAME_V3_FRE_RA_UNDEFINED_P): Add new V3 macro. libsframe/ * sframe-dump.c (dump_sframe_func_fres_flex): Update all callers to use the new CTRLWORD macros. libsframe/testsuite/ * libsframe.decode/be-flipping-v3.c: Use renamed macros.
This commit is contained in:
parent
be3c73b461
commit
4edeb9be08
4 changed files with 37 additions and 34 deletions
|
|
@ -461,17 +461,17 @@ sframe_get_fre_dataword_size (const struct sframe_row_entry *sframe_fre,
|
|||
{
|
||||
bool reg_p = (sframe_fre->cfa_base_reg != SFRAME_FRE_REG_INVALID);
|
||||
unsigned int data
|
||||
= SFRAME_V3_FLEX_FDE_REG_ENCODE (sframe_fre->cfa_base_reg,
|
||||
sframe_fre->cfa_deref_p, reg_p);
|
||||
= SFRAME_V3_FLEX_FDE_CTRLWORD_ENCODE (sframe_fre->cfa_base_reg,
|
||||
sframe_fre->cfa_deref_p, reg_p);
|
||||
unsigned int cfa_control_word_size = get_udata_size_in_bytes (data);
|
||||
if (cfa_control_word_size > max_dataword_size)
|
||||
max_dataword_size = cfa_control_word_size;
|
||||
|
||||
if (sframe_fre->ra_loc == SFRAME_FRE_ELEM_LOC_REG)
|
||||
{
|
||||
data = SFRAME_V3_FLEX_FDE_REG_ENCODE (sframe_fre->ra_reg,
|
||||
sframe_fre->ra_deref_p,
|
||||
1 /* reg_p. */);
|
||||
data = SFRAME_V3_FLEX_FDE_CTRLWORD_ENCODE (sframe_fre->ra_reg,
|
||||
sframe_fre->ra_deref_p,
|
||||
1 /* reg_p. */);
|
||||
unsigned ra_control_word_size = get_udata_size_in_bytes (data);
|
||||
if (ra_control_word_size > max_dataword_size)
|
||||
max_dataword_size = ra_control_word_size;
|
||||
|
|
@ -479,9 +479,9 @@ sframe_get_fre_dataword_size (const struct sframe_row_entry *sframe_fre,
|
|||
|
||||
if (sframe_fre->fp_loc == SFRAME_FRE_ELEM_LOC_REG)
|
||||
{
|
||||
data = SFRAME_V3_FLEX_FDE_REG_ENCODE (sframe_fre->fp_reg,
|
||||
sframe_fre->fp_deref_p,
|
||||
1 /* reg_p. */);
|
||||
data = SFRAME_V3_FLEX_FDE_CTRLWORD_ENCODE (sframe_fre->fp_reg,
|
||||
sframe_fre->fp_deref_p,
|
||||
1 /* reg_p. */);
|
||||
unsigned fp_control_word_size = get_udata_size_in_bytes (data);
|
||||
if (fp_control_word_size > max_dataword_size)
|
||||
max_dataword_size = fp_control_word_size;
|
||||
|
|
@ -660,9 +660,9 @@ output_sframe_row_entry_datawords (const struct sframe_func_entry *sframe_fde,
|
|||
/* SFrame FDE of type SFRAME_FDE_TYPE_FLEX. */
|
||||
/* Output CFA related FRE data words. */
|
||||
uint32_t reg = sframe_fre->cfa_base_reg;
|
||||
bool deref_p = sframe_fre->cfa_deref_p;
|
||||
uint32_t reg_data
|
||||
= SFRAME_V3_FLEX_FDE_REG_ENCODE (reg, sframe_fre->cfa_deref_p,
|
||||
1 /* reg_p. */);
|
||||
= SFRAME_V3_FLEX_FDE_CTRLWORD_ENCODE (reg, deref_p, 1 /* reg_p. */);
|
||||
offsetT offset_data = sframe_fre->cfa_offset;
|
||||
dataword_func_map[idx].out_func (reg_data);
|
||||
dataword_func_map[idx].out_func (offset_data);
|
||||
|
|
@ -674,9 +674,9 @@ output_sframe_row_entry_datawords (const struct sframe_func_entry *sframe_fde,
|
|||
/* Output RA related FRE data words. */
|
||||
reg_p = sframe_fre->ra_loc == SFRAME_FRE_ELEM_LOC_REG;
|
||||
reg = reg_p ? sframe_fre->ra_reg : 0;
|
||||
reg_data = SFRAME_V3_FLEX_FDE_REG_ENCODE (reg,
|
||||
sframe_fre->ra_deref_p,
|
||||
reg_p);
|
||||
deref_p = sframe_fre->ra_deref_p;
|
||||
reg_data = SFRAME_V3_FLEX_FDE_CTRLWORD_ENCODE (reg, deref_p, reg_p);
|
||||
|
||||
offset_data = sframe_fre->ra_offset;
|
||||
dataword_func_map[idx].out_func (reg_data);
|
||||
dataword_func_map[idx].out_func (offset_data);
|
||||
|
|
@ -687,7 +687,7 @@ output_sframe_row_entry_datawords (const struct sframe_func_entry *sframe_fde,
|
|||
/* If RA is not in REG/STACK, emit RA padding if there are more
|
||||
data words to follow. Note that, emitting
|
||||
SFRAME_FRE_RA_OFFSET_INVALID is equivalent to emitting
|
||||
SFRAME_V3_FLEX_FDE_REG_ENCODE (0, 0, 0). */
|
||||
SFRAME_V3_FLEX_FDE_CTRLWORD_ENCODE (0, 0, 0). */
|
||||
dataword_func_map[idx].out_func (SFRAME_FRE_RA_OFFSET_INVALID);
|
||||
fre_write_datawords += 1;
|
||||
}
|
||||
|
|
@ -697,9 +697,9 @@ output_sframe_row_entry_datawords (const struct sframe_func_entry *sframe_fde,
|
|||
/* Output FP related FRE data words. */
|
||||
reg_p = sframe_fre->fp_loc == SFRAME_FRE_ELEM_LOC_REG;
|
||||
reg = reg_p ? sframe_fre->fp_reg : 0;
|
||||
reg_data = SFRAME_V3_FLEX_FDE_REG_ENCODE (reg,
|
||||
sframe_fre->fp_deref_p,
|
||||
reg_p);
|
||||
deref_p = sframe_fre->fp_deref_p;
|
||||
reg_data = SFRAME_V3_FLEX_FDE_CTRLWORD_ENCODE (reg, deref_p, reg_p);
|
||||
|
||||
offset_data = sframe_fre->fp_offset;
|
||||
dataword_func_map[idx].out_func (reg_data);
|
||||
dataword_func_map[idx].out_func (offset_data);
|
||||
|
|
|
|||
|
|
@ -342,12 +342,15 @@ typedef struct sframe_func_desc_attr_v3
|
|||
#define SFRAME_V3_FDE_UPDATE_SIGNAL_P(signal_p, info) \
|
||||
((((signal_p) & 0x1) << 7) | ((info) & 0x7f))
|
||||
|
||||
#define SFRAME_V3_FLEX_FDE_REG_ENCODE(reg, deref_p, reg_p) \
|
||||
#define SFRAME_V3_FLEX_FDE_CTRLWORD_ENCODE(reg, deref_p, reg_p) \
|
||||
((((reg) << 0x3) | (0 << 0x2) | (((deref_p) & 0x1) << 0x1) | ((reg_p) & 0x1)))
|
||||
|
||||
#define SFRAME_V3_FLEX_FDE_OFFSET_REG_NUM(data) ((data) >> 3)
|
||||
#define SFRAME_V3_FLEX_FDE_OFFSET_REG_DEREF_P(data) (((data) >> 1) & 0x1)
|
||||
#define SFRAME_V3_FLEX_FDE_OFFSET_REG_P(data) ((data) & 0x1)
|
||||
#define SFRAME_V3_FLEX_FDE_CTRLWORD_REGNUM(data) ((data) >> 3)
|
||||
#define SFRAME_V3_FLEX_FDE_CTRLWORD_DEREF_P(data) (((data) >> 1) & 0x1)
|
||||
#define SFRAME_V3_FLEX_FDE_CTRLWORD_REG_P(data) ((data) & 0x1)
|
||||
|
||||
#define SFRAME_V3_FRE_RA_UNDEFINED_P(fre_info) \
|
||||
(SFRAME_V2_FRE_RA_UNDEFINED_P (fre_info))
|
||||
|
||||
/* Size of stack frame offsets in an SFrame Frame Row Entry. A single
|
||||
SFrame FRE has all offsets of the same size. Offset size may vary
|
||||
|
|
|
|||
|
|
@ -385,11 +385,11 @@ dump_sframe_func_fres_flex (const sframe_decoder_ctx *sfd_ctx,
|
|||
int32_t cfa_offset = sframe_fre_get_cfa_offset (sfd_ctx, &fre, fde_type,
|
||||
&err_cfa_offset);
|
||||
sframe_assert (!err_cfa_reg && !err_cfa_offset);
|
||||
bool cfa_reg_p = SFRAME_V3_FLEX_FDE_OFFSET_REG_P (cfa_reg_data);
|
||||
bool cfa_reg_p = SFRAME_V3_FLEX_FDE_CTRLWORD_REG_P (cfa_reg_data);
|
||||
if (cfa_reg_p)
|
||||
{
|
||||
cfa_reg = SFRAME_V3_FLEX_FDE_OFFSET_REG_NUM (cfa_reg_data);
|
||||
cfa_deref_p = SFRAME_V3_FLEX_FDE_OFFSET_REG_DEREF_P (cfa_reg_data);
|
||||
cfa_reg = SFRAME_V3_FLEX_FDE_CTRLWORD_REGNUM (cfa_reg_data);
|
||||
cfa_deref_p = SFRAME_V3_FLEX_FDE_CTRLWORD_DEREF_P (cfa_reg_data);
|
||||
}
|
||||
|
||||
int err_ra_reg = 0;
|
||||
|
|
@ -399,11 +399,11 @@ dump_sframe_func_fres_flex (const sframe_decoder_ctx *sfd_ctx,
|
|||
&err_ra_reg);
|
||||
int32_t ra_offset = sframe_fre_get_ra_offset (sfd_ctx, &fre, fde_type,
|
||||
&err_ra_offset);
|
||||
bool ra_reg_p = SFRAME_V3_FLEX_FDE_OFFSET_REG_P (ra_reg_data);
|
||||
bool ra_reg_p = SFRAME_V3_FLEX_FDE_CTRLWORD_REG_P (ra_reg_data);
|
||||
if (ra_reg_p)
|
||||
{
|
||||
ra_reg = SFRAME_V3_FLEX_FDE_OFFSET_REG_NUM (ra_reg_data);
|
||||
ra_deref_p = SFRAME_V3_FLEX_FDE_OFFSET_REG_DEREF_P (ra_reg_data);
|
||||
ra_reg = SFRAME_V3_FLEX_FDE_CTRLWORD_REGNUM (ra_reg_data);
|
||||
ra_deref_p = SFRAME_V3_FLEX_FDE_CTRLWORD_DEREF_P (ra_reg_data);
|
||||
}
|
||||
|
||||
int err_fp_reg = 0;
|
||||
|
|
@ -416,11 +416,11 @@ dump_sframe_func_fres_flex (const sframe_decoder_ctx *sfd_ctx,
|
|||
uint32_t fp_reg_data = sframe_get_fre_udata (&fre, fp_idx, &err_fp_reg);
|
||||
int32_t fp_offset = sframe_fre_get_fp_offset (sfd_ctx, &fre, fde_type,
|
||||
&err_fp_offset);
|
||||
bool fp_reg_p = SFRAME_V3_FLEX_FDE_OFFSET_REG_P (fp_reg_data);
|
||||
bool fp_reg_p = SFRAME_V3_FLEX_FDE_CTRLWORD_REG_P (fp_reg_data);
|
||||
if (fp_reg_p)
|
||||
{
|
||||
fp_reg = SFRAME_V3_FLEX_FDE_OFFSET_REG_NUM (fp_reg_data);
|
||||
fp_deref_p = SFRAME_V3_FLEX_FDE_OFFSET_REG_DEREF_P (fp_reg_data);
|
||||
fp_reg = SFRAME_V3_FLEX_FDE_CTRLWORD_REGNUM (fp_reg_data);
|
||||
fp_deref_p = SFRAME_V3_FLEX_FDE_CTRLWORD_DEREF_P (fp_reg_data);
|
||||
}
|
||||
|
||||
/* Dump CFA info. */
|
||||
|
|
|
|||
|
|
@ -91,18 +91,18 @@ main (void)
|
|||
/* Expected RA reg r16. */
|
||||
reg_data = sframe_get_fre_udata (&fre, SFRAME_FRE_RA_OFFSET_IDX * 2,
|
||||
&err_reg_data);
|
||||
TEST ((err_reg_data == 0 && SFRAME_V3_FLEX_FDE_OFFSET_REG_P (reg_data) == 0x1),
|
||||
TEST ((err_reg_data == 0 && SFRAME_V3_FLEX_FDE_CTRLWORD_REG_P (reg_data) == 0x1),
|
||||
"be-flipping-v3: Whether RA reg_p is true");
|
||||
TEST ((err_reg_data == 0 && SFRAME_V3_FLEX_FDE_OFFSET_REG_NUM (reg_data) == 16),
|
||||
TEST ((err_reg_data == 0 && SFRAME_V3_FLEX_FDE_CTRLWORD_REGNUM (reg_data) == 16),
|
||||
"be-flipping-v3: Get RA reg of third FRE");
|
||||
|
||||
/* Expected FP reg r17. */
|
||||
err_reg_data = 0;
|
||||
reg_data = sframe_get_fre_udata (&fre, SFRAME_FRE_FP_OFFSET_IDX * 2,
|
||||
&err_reg_data);
|
||||
TEST ((err_reg_data == 0 && SFRAME_V3_FLEX_FDE_OFFSET_REG_P (reg_data) == 0x1),
|
||||
TEST ((err_reg_data == 0 && SFRAME_V3_FLEX_FDE_CTRLWORD_REG_P (reg_data) == 0x1),
|
||||
"be-flipping-v3: Whether FP reg_p is true");
|
||||
TEST ((err_reg_data == 0 && SFRAME_V3_FLEX_FDE_OFFSET_REG_NUM (reg_data) == 17),
|
||||
TEST ((err_reg_data == 0 && SFRAME_V3_FLEX_FDE_CTRLWORD_REGNUM (reg_data) == 17),
|
||||
"be-flipping-v3: Get FP reg of third FRE");
|
||||
|
||||
free (sf_buf);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue