On Mon, Feb 3, 2025 at 8:01 AM Paul Robinson <pogo.w...@gmail.com> wrote:

> Also, fixed-size DIEs are much easier when quickly scanning for something;
> you can derive the size of the DIE from the abbrev without having to look
> at the DIE content. When you have variable-size values such as LEB128 then
> you need to parse the values in order to determine where the next DIE
> starts.
> (Greg Clayton [LLDB] in particular has expressed a strong preference for
> fixed-size values for this reason.)
> --paulr
>

Yeah, seems like that ship's probably sailed a bit now with more LEB forms
we have added in DWARFv5 (the Spilt-DWARF related forms that got
back-ported to non-split DWARF too) - addrx, loclistx, exprloc, etc.

But I'll certainly gather some data on fixed size records that would be
made non-fixed size if I get some data on this.


>
> On Mon, Feb 3, 2025 at 1:09 AM Cary Coutant <ccout...@gmail.com> wrote:
>
>> As an alternative to the indexed proposal in 250130.1, which proposes
>>> allowing a constant classed value for DW_AT_object_pointer, as an index
>>> into the formal parameters of the subprogram, I was wondering how folks
>>> would feel about something a bit different:
>>>
>>> What about a reference classed form that is a (signed) LEB128 relative
>>> DIE offset - relative to the start of the DIE containing the attribute
>>> value?
>>>
>>> This would allow for other shortenings of DIEs that are commonly nearby.
>>>
>>> I don't have measurements on how much it could decrease DWARF size, but
>>> could maybe prototype such a thing (bit expensive, because it makes DWARF
>>> byte size dependent on itself in some ways - and LLVM's DWARF generation
>>> precomputes DIE offsets, etc, rather than relying on assembler relaxation)
>>>
>>
>> Yes, it's worth discussing, but I suspect the downsides you've mentioned
>> would outweigh any benefits obtained by using an offset rather than an
>> index. If anything, I'd think the index would be more useful if
>> you read and internalize the DIE tree. An index would also almost always be
>> a single byte (and its size would be predictable), while an offset would be
>> more likely to require 2 bytes.
>>
>
More likely, mathematically, but in terms of the population in practice I
think they'll be within a byte mostly.

but the major motivation for this proposal is to generalize to other cases
- to be able to use smaller encodings for other DIE-to-DIE references (like
for DW_AT_type, DW_AT_abstract_origin, etc).

We could address this with smaller fixed forms (like we have for, say,
strx1, strx2, etc... before going to ULEB) - either still as CU-relative
offsets, or as DIE-relative offsets (the DIE relative offsets would help
ensure that a longer CU doesn't necessarily make DWARF later in that CU
larger than DWARF earlier in the CU)

I guess I'll have to gather some data to help motivate this.


>
>> -cary
>>
>>
-- 
Dwarf-discuss mailing list
Dwarf-discuss@lists.dwarfstd.org
https://lists.dwarfstd.org/mailman/listinfo/dwarf-discuss

Reply via email to