WIP MachO binutils port assisted by AI I may consider upstreaming this in the future.
0

Configure Feed

Select the types of activity you want to include in your feed.

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.

Indu Bhagat (Jan 29, 2026, 8:02 PM -0800) 4edeb9be be3c73b4

+37 -34
+17 -17
gas/gen-sframe.c
··· 461 461 { 462 462 bool reg_p = (sframe_fre->cfa_base_reg != SFRAME_FRE_REG_INVALID); 463 463 unsigned int data 464 - = SFRAME_V3_FLEX_FDE_REG_ENCODE (sframe_fre->cfa_base_reg, 465 - sframe_fre->cfa_deref_p, reg_p); 464 + = SFRAME_V3_FLEX_FDE_CTRLWORD_ENCODE (sframe_fre->cfa_base_reg, 465 + sframe_fre->cfa_deref_p, reg_p); 466 466 unsigned int cfa_control_word_size = get_udata_size_in_bytes (data); 467 467 if (cfa_control_word_size > max_dataword_size) 468 468 max_dataword_size = cfa_control_word_size; 469 469 470 470 if (sframe_fre->ra_loc == SFRAME_FRE_ELEM_LOC_REG) 471 471 { 472 - data = SFRAME_V3_FLEX_FDE_REG_ENCODE (sframe_fre->ra_reg, 473 - sframe_fre->ra_deref_p, 474 - 1 /* reg_p. */); 472 + data = SFRAME_V3_FLEX_FDE_CTRLWORD_ENCODE (sframe_fre->ra_reg, 473 + sframe_fre->ra_deref_p, 474 + 1 /* reg_p. */); 475 475 unsigned ra_control_word_size = get_udata_size_in_bytes (data); 476 476 if (ra_control_word_size > max_dataword_size) 477 477 max_dataword_size = ra_control_word_size; ··· 479 479 480 480 if (sframe_fre->fp_loc == SFRAME_FRE_ELEM_LOC_REG) 481 481 { 482 - data = SFRAME_V3_FLEX_FDE_REG_ENCODE (sframe_fre->fp_reg, 483 - sframe_fre->fp_deref_p, 484 - 1 /* reg_p. */); 482 + data = SFRAME_V3_FLEX_FDE_CTRLWORD_ENCODE (sframe_fre->fp_reg, 483 + sframe_fre->fp_deref_p, 484 + 1 /* reg_p. */); 485 485 unsigned fp_control_word_size = get_udata_size_in_bytes (data); 486 486 if (fp_control_word_size > max_dataword_size) 487 487 max_dataword_size = fp_control_word_size; ··· 660 660 /* SFrame FDE of type SFRAME_FDE_TYPE_FLEX. */ 661 661 /* Output CFA related FRE data words. */ 662 662 uint32_t reg = sframe_fre->cfa_base_reg; 663 + bool deref_p = sframe_fre->cfa_deref_p; 663 664 uint32_t reg_data 664 - = SFRAME_V3_FLEX_FDE_REG_ENCODE (reg, sframe_fre->cfa_deref_p, 665 - 1 /* reg_p. */); 665 + = SFRAME_V3_FLEX_FDE_CTRLWORD_ENCODE (reg, deref_p, 1 /* reg_p. */); 666 666 offsetT offset_data = sframe_fre->cfa_offset; 667 667 dataword_func_map[idx].out_func (reg_data); 668 668 dataword_func_map[idx].out_func (offset_data); ··· 674 674 /* Output RA related FRE data words. */ 675 675 reg_p = sframe_fre->ra_loc == SFRAME_FRE_ELEM_LOC_REG; 676 676 reg = reg_p ? sframe_fre->ra_reg : 0; 677 - reg_data = SFRAME_V3_FLEX_FDE_REG_ENCODE (reg, 678 - sframe_fre->ra_deref_p, 679 - reg_p); 677 + deref_p = sframe_fre->ra_deref_p; 678 + reg_data = SFRAME_V3_FLEX_FDE_CTRLWORD_ENCODE (reg, deref_p, reg_p); 679 + 680 680 offset_data = sframe_fre->ra_offset; 681 681 dataword_func_map[idx].out_func (reg_data); 682 682 dataword_func_map[idx].out_func (offset_data); ··· 687 687 /* If RA is not in REG/STACK, emit RA padding if there are more 688 688 data words to follow. Note that, emitting 689 689 SFRAME_FRE_RA_OFFSET_INVALID is equivalent to emitting 690 - SFRAME_V3_FLEX_FDE_REG_ENCODE (0, 0, 0). */ 690 + SFRAME_V3_FLEX_FDE_CTRLWORD_ENCODE (0, 0, 0). */ 691 691 dataword_func_map[idx].out_func (SFRAME_FRE_RA_OFFSET_INVALID); 692 692 fre_write_datawords += 1; 693 693 } ··· 697 697 /* Output FP related FRE data words. */ 698 698 reg_p = sframe_fre->fp_loc == SFRAME_FRE_ELEM_LOC_REG; 699 699 reg = reg_p ? sframe_fre->fp_reg : 0; 700 - reg_data = SFRAME_V3_FLEX_FDE_REG_ENCODE (reg, 701 - sframe_fre->fp_deref_p, 702 - reg_p); 700 + deref_p = sframe_fre->fp_deref_p; 701 + reg_data = SFRAME_V3_FLEX_FDE_CTRLWORD_ENCODE (reg, deref_p, reg_p); 702 + 703 703 offset_data = sframe_fre->fp_offset; 704 704 dataword_func_map[idx].out_func (reg_data); 705 705 dataword_func_map[idx].out_func (offset_data);
+7 -4
include/sframe.h
··· 342 342 #define SFRAME_V3_FDE_UPDATE_SIGNAL_P(signal_p, info) \ 343 343 ((((signal_p) & 0x1) << 7) | ((info) & 0x7f)) 344 344 345 - #define SFRAME_V3_FLEX_FDE_REG_ENCODE(reg, deref_p, reg_p) \ 345 + #define SFRAME_V3_FLEX_FDE_CTRLWORD_ENCODE(reg, deref_p, reg_p) \ 346 346 ((((reg) << 0x3) | (0 << 0x2) | (((deref_p) & 0x1) << 0x1) | ((reg_p) & 0x1))) 347 347 348 - #define SFRAME_V3_FLEX_FDE_OFFSET_REG_NUM(data) ((data) >> 3) 349 - #define SFRAME_V3_FLEX_FDE_OFFSET_REG_DEREF_P(data) (((data) >> 1) & 0x1) 350 - #define SFRAME_V3_FLEX_FDE_OFFSET_REG_P(data) ((data) & 0x1) 348 + #define SFRAME_V3_FLEX_FDE_CTRLWORD_REGNUM(data) ((data) >> 3) 349 + #define SFRAME_V3_FLEX_FDE_CTRLWORD_DEREF_P(data) (((data) >> 1) & 0x1) 350 + #define SFRAME_V3_FLEX_FDE_CTRLWORD_REG_P(data) ((data) & 0x1) 351 + 352 + #define SFRAME_V3_FRE_RA_UNDEFINED_P(fre_info) \ 353 + (SFRAME_V2_FRE_RA_UNDEFINED_P (fre_info)) 351 354 352 355 /* Size of stack frame offsets in an SFrame Frame Row Entry. A single 353 356 SFrame FRE has all offsets of the same size. Offset size may vary
+9 -9
libsframe/sframe-dump.c
··· 385 385 int32_t cfa_offset = sframe_fre_get_cfa_offset (sfd_ctx, &fre, fde_type, 386 386 &err_cfa_offset); 387 387 sframe_assert (!err_cfa_reg && !err_cfa_offset); 388 - bool cfa_reg_p = SFRAME_V3_FLEX_FDE_OFFSET_REG_P (cfa_reg_data); 388 + bool cfa_reg_p = SFRAME_V3_FLEX_FDE_CTRLWORD_REG_P (cfa_reg_data); 389 389 if (cfa_reg_p) 390 390 { 391 - cfa_reg = SFRAME_V3_FLEX_FDE_OFFSET_REG_NUM (cfa_reg_data); 392 - cfa_deref_p = SFRAME_V3_FLEX_FDE_OFFSET_REG_DEREF_P (cfa_reg_data); 391 + cfa_reg = SFRAME_V3_FLEX_FDE_CTRLWORD_REGNUM (cfa_reg_data); 392 + cfa_deref_p = SFRAME_V3_FLEX_FDE_CTRLWORD_DEREF_P (cfa_reg_data); 393 393 } 394 394 395 395 int err_ra_reg = 0; ··· 399 399 &err_ra_reg); 400 400 int32_t ra_offset = sframe_fre_get_ra_offset (sfd_ctx, &fre, fde_type, 401 401 &err_ra_offset); 402 - bool ra_reg_p = SFRAME_V3_FLEX_FDE_OFFSET_REG_P (ra_reg_data); 402 + bool ra_reg_p = SFRAME_V3_FLEX_FDE_CTRLWORD_REG_P (ra_reg_data); 403 403 if (ra_reg_p) 404 404 { 405 - ra_reg = SFRAME_V3_FLEX_FDE_OFFSET_REG_NUM (ra_reg_data); 406 - ra_deref_p = SFRAME_V3_FLEX_FDE_OFFSET_REG_DEREF_P (ra_reg_data); 405 + ra_reg = SFRAME_V3_FLEX_FDE_CTRLWORD_REGNUM (ra_reg_data); 406 + ra_deref_p = SFRAME_V3_FLEX_FDE_CTRLWORD_DEREF_P (ra_reg_data); 407 407 } 408 408 409 409 int err_fp_reg = 0; ··· 416 416 uint32_t fp_reg_data = sframe_get_fre_udata (&fre, fp_idx, &err_fp_reg); 417 417 int32_t fp_offset = sframe_fre_get_fp_offset (sfd_ctx, &fre, fde_type, 418 418 &err_fp_offset); 419 - bool fp_reg_p = SFRAME_V3_FLEX_FDE_OFFSET_REG_P (fp_reg_data); 419 + bool fp_reg_p = SFRAME_V3_FLEX_FDE_CTRLWORD_REG_P (fp_reg_data); 420 420 if (fp_reg_p) 421 421 { 422 - fp_reg = SFRAME_V3_FLEX_FDE_OFFSET_REG_NUM (fp_reg_data); 423 - fp_deref_p = SFRAME_V3_FLEX_FDE_OFFSET_REG_DEREF_P (fp_reg_data); 422 + fp_reg = SFRAME_V3_FLEX_FDE_CTRLWORD_REGNUM (fp_reg_data); 423 + fp_deref_p = SFRAME_V3_FLEX_FDE_CTRLWORD_DEREF_P (fp_reg_data); 424 424 } 425 425 426 426 /* Dump CFA info. */
+4 -4
libsframe/testsuite/libsframe.decode/be-flipping-v3.c
··· 91 91 /* Expected RA reg r16. */ 92 92 reg_data = sframe_get_fre_udata (&fre, SFRAME_FRE_RA_OFFSET_IDX * 2, 93 93 &err_reg_data); 94 - TEST ((err_reg_data == 0 && SFRAME_V3_FLEX_FDE_OFFSET_REG_P (reg_data) == 0x1), 94 + TEST ((err_reg_data == 0 && SFRAME_V3_FLEX_FDE_CTRLWORD_REG_P (reg_data) == 0x1), 95 95 "be-flipping-v3: Whether RA reg_p is true"); 96 - TEST ((err_reg_data == 0 && SFRAME_V3_FLEX_FDE_OFFSET_REG_NUM (reg_data) == 16), 96 + TEST ((err_reg_data == 0 && SFRAME_V3_FLEX_FDE_CTRLWORD_REGNUM (reg_data) == 16), 97 97 "be-flipping-v3: Get RA reg of third FRE"); 98 98 99 99 /* Expected FP reg r17. */ 100 100 err_reg_data = 0; 101 101 reg_data = sframe_get_fre_udata (&fre, SFRAME_FRE_FP_OFFSET_IDX * 2, 102 102 &err_reg_data); 103 - TEST ((err_reg_data == 0 && SFRAME_V3_FLEX_FDE_OFFSET_REG_P (reg_data) == 0x1), 103 + TEST ((err_reg_data == 0 && SFRAME_V3_FLEX_FDE_CTRLWORD_REG_P (reg_data) == 0x1), 104 104 "be-flipping-v3: Whether FP reg_p is true"); 105 - TEST ((err_reg_data == 0 && SFRAME_V3_FLEX_FDE_OFFSET_REG_NUM (reg_data) == 17), 105 + TEST ((err_reg_data == 0 && SFRAME_V3_FLEX_FDE_CTRLWORD_REGNUM (reg_data) == 17), 106 106 "be-flipping-v3: Get FP reg of third FRE"); 107 107 108 108 free (sf_buf);