[V3 22/36] [SFrame-V3] sframe: gas: translate specific CFI directives for SFRAME_FDE_TYPE_FLEX

Jan Beulich jbeulich@suse.com
Wed Jan 21 08:57:01 GMT 2026


On 20.01.2026 22:18, Indu Bhagat wrote:
> On 1/16/26 1:13 AM, Jan Beulich wrote:
>> On 13.01.2026 12:12, Indu Bhagat via Binutils wrote:
>>> @@ -1636,6 +1661,132 @@ sframe_xlate_do_gnu_window_save (struct sframe_xlate_ctx *xlate_ctx,
>>>     return SFRAME_XLATE_ERR_NOTREPRESENTED;  /* Not represented.  */
>>>   }
>>>   
>>> +/* Translate a DWARF sleb128 offset in the CFI escape data E to an int64_t.  */
>>> +
>>> +static offsetT
>>> +sframe_xlate_escape_sleb128_to_int64 (const struct cfi_escape_data *e)
>>> +{
>>> +  offsetT offset = 0;
>>> +
>>> +  gas_assert (e->type == CFI_ESC_byte || e->type == CFI_ESC_sleb128);
>>> +  /* Read the offset.  */
>>> +  if (e->type == CFI_ESC_byte)
>>> +    {
>>> +      /* The user/compiler may provide an sleb128 encoded data of a single byte
>>> +	 length (DWARF offset of DW_OP_bregN is sleb128).  On a big-endian
>>> +	 host, the endianness of data itself needs to be accommodated then.  To
>>> +	 keep it simple, gather the LSB, and translate it to int64.  */
>>> +      unsigned char sleb_data = e->exp.X_add_number & 0xff;
>>> +      const unsigned char *buf_start = (const unsigned char *)&sleb_data;
>>> +      const unsigned char *buf_end = buf_start + 1;
>>> +      size_t read = read_sleb128_to_int64 (buf_start, buf_end, &offset);
>>> +      gas_assert (read);
>>
>> I fear asserting here isn't valid, as the user may have encoded something
>> bogus, or (in principle) it may be a multi-byte LEB128. The latter can't
>> occur right now as ...
>>
> 
> Since the code is attempting to read one byte ATM, I'd expect the assert 
> to never fail (read_sleb128_to_int64 will return 0 when start >= end). 

Right, and if the byte to process (bogusly) has the top bit set, that path
will be taken from all I can tell. Hence the assertion would trigger.

> I realize now though that this isnt necessarily fulfilling any purpose 
> other than documentation around expectations of the current code.
> 
> I am afraid I dont understand what you are suggesting.

A diagnostic needs issuing instead. Whether that's to be an error or a
warning I don't know.

Jan


More information about the Binutils mailing list