[V2 17/36] [SFrame-V3] gas: sframe: use three states for location tracking
Indu Bhagat
indu.bhagat@oracle.com
Thu Jan 8 08:43:05 GMT 2026
On 1/7/26 5:38 AM, Jens Remus wrote:
> On 1/7/2026 9:42 AM, Indu Bhagat wrote:
>> Up until now, for SFrame stack trace data generation (for default FDE
>> type), tracking of two states sufficed to distinguish between the two
>> cases:
>> - the tracked entity is saved on a location on stack (tracked by
>> SFRAME_FRE_ELEM_LOC_STACK)
>> - the tracked entity is in register (tracked by
>> SFRAME_FRE_ELEM_LOC_REG).
>
> Maybe use "identified by" instead of "tracked by"?
>
> Maybe clarify that register actually means its designated register (and
> not any register) in this context:
>
> - the tracked entity is in its designated register
> (identified by SFRAME_FRE_ELEM_LOC_REG)
>
OK.
>>
>> (In some sense, the distinction between the above two was the same as
>> saying SFRAME_FRE_ELEM_LOC_TRACKED or SFRAME_FRE_ELEM_LOC_UNTRACKED
>> respectively.)
>
> To me this is confusing. I thought "tracked" means whether an entity
> such as FP and RA is tracked in SFrame generation for an architecture/ABI,
> not whether it is saved.
Yes this is true. This is how I have been using "tracked" too. Sorry
for overloading the word.
Maybe use SFRAME_FRE_ELEM_LOC_SAVED and
> SFRAME_FRE_ELEM_LOC_UNSAVED instead? Or SFRAME_FRE_ELEM_LOC_STACK and
> SFRAME_FRE_ELEM_LOC_UNCHANGED?
>
I think its best to remove that line from commit log altogether as it
can be source of confusion.
>>
>> Soon though, we will start to generate a new FDE type
>> SFRAME_FDE_TYPE_FLEX, where:
>
> Maybe ", where in addition to the above:"?
>
OK.
>> - the tracked entity may be saved in a temporary register
>> - the tracked entity may be saved at a "non-standard" location, e.g.,
>> not a simple CFA+offset based location
>> - and other cases
>>
>> To effectively distinguish between the various states (necessary to
>> track for flex FDEs), define three states to track the location of each
>> tracked entity:
>> - SFRAME_FRE_ELEM_LOC_NONE: the entity is not tracked
>
> "the entity is in its designated register"? Or "designated location"
> (to cater for AMD64 where the RA is at CFA+8 instead of a register).
>
> Maybe SFRAME_FRE_ELEM_LOC_DESIGNATED instead of NONE? Finding a good
> terminology for this case drives me crazy.
>
>> - SFRAME_FRE_ELEM_LOC_REG: the entitiy is in a location based off a
>> register
>
> Nit: s/entitiy/entity/
>
>> - SFRAME_FRE_ELEM_LOC_STACK: the entity is in a located based off the
>> CFA
>
> Nit: s/located/location/
>
Done.
>>
>> While at it, rather than asserting in sframe_xlate_do_offset (), reset
>> the fp_reg state to SFRAME_FRE_REG_INVALID. This is in preparation for
>> upcoming flex FDE generation patches.
>>
>> TBD:
>> - Add Co-Authored-By, Suggested-By Jens
>
> As you like.
>
>> - Ideally the interfaces sframe_fre_set_ra_track,
>> sframe_fre_set_fp_track need an uplift, but we can address that when
>> time permits.
>>
>> gas/
>> * gen-sframe.c (sframe_xlate_do_offset): Reset other state.
>> (sframe_xlate_do_same_value): Reset to SFRAME_FRE_ELEM_LOC_NONE.
>> * gen-sframe.h (SFRAME_FRE_ELEM_LOC_REG): New definition.
>> (SFRAME_FRE_ELEM_LOC_STACK): Likewise.
>> (SFRAME_FRE_ELEM_LOC_NONE): Likewise.
>>
>> ---
>> [New in V1. Not represent in RFC.]
>>
>> [Changes in V2]
>> - Moved out some stubs resetting ra_reg, ra_deref_p, fp_deref_p
>> erroneously brought into this commit due a previous rebase. These
>> fields are introduced only in a later commit, and hence this patch
>> would introduce build failures, making this not bisectable [Indu].
>> [End of changes in V2]
>> ---
>> gas/gen-sframe.c | 6 +++---
>> gas/gen-sframe.h | 10 ++++++++--
>> 2 files changed, 11 insertions(+), 5 deletions(-)
>
> Reviewed-by: Jens Remus <jremus@linux.ibm.com>
>
> Regards,
> Jens
More information about the Binutils
mailing list