[PATCH] D143967: [DebugInfo][BPF] Add 'btf:type_tag' annotation in DWARF
Jose E. Marchesi via cfe-commits
cfe-commits at lists.llvm.org
Thu Mar 30 06:16:52 PDT 2023
> eddyz87 added a comment.
>
> In D143967#4232089 <https://reviews.llvm.org/D143967#4232089>, @jemarch wrote:
>
>> Thinking about typedef, some C cases may be problematic if we adopt the
>> flexible rule we are discussing:
>>
>> typedef int bar;
>> const bar __tag1 var1;
>> bar var2;
>>
>> DWARF:
>>
>> var1 -> const -> typedef (bar) -> int
>> | ^
>> __tag1 |
>> |
>> var2 ----------------+
>>
>> If we would allow __tag1 to be "moved" to either the typedef DWARF node
>> or the node for int like this:
>>
>> DWARF:
>>
>> var1 -> const -> typedef (bar) -> int
>> ^ |
>> | __tag1
>> var2 ----------------+
>>
>> Then the __tag1 would also apply to var2's type. But I would say in the
>> C snippet above __tag1 should apply to the type of var1, but not
>> to the type of var2.
>
> I'm not sure I understand, the DWARF #2 is not a valid representation
> of the program for all the reasons you write. Current LLVM
> implementation should generate DWARF #1 in this case.
Yes that was my point: tags can cross qualifiers and still keep C
language semantics, but not (all) typedefs.
> If some tooling applies such tags movement it should also apply
> appropriate copying of tags, e.g. it should transform DWARF like this:
>
> var1 -> const -> typedef (bar) -> int
> |
> __tag1
>
> var2 ----------> typedef (bar) -> int
>
> (and it is what needs to be implemented in pahole to get BTF
> qualifiers ordering expected by kernel, but the move is in the
> opposite direction).
So the kernel expects tags to precede typedefs as well as qualifiers?
i.e. given this DWARF:
var1 -> const -> typedef (bar) -> int
^ |
| __tag1
|
var2 ----------------+
We have to transform to these two BTF type chains:
var1 -> __tag1 -> const -> typedef (bar) -> int
^
|
var2 -> __tag1 -----------------+
Correct?
>> PS: I am a bit concerned with the fact that the kernel's interpretation
>>
>> of BTF is so rigit in this case as to assume C's type system
>> semantics when it comes to type qualifiers. Other languages may be
>> coming to the BPF world (Rust, for example) and in these languages
>> the ordering of type qualifiers may actually matter. There is a
>> reason why DWARF encodes qualifiers as explicit nodes in the type
>> chain rather than as attributes of the type nodes.
>
> Need to read a bit about Rust, can't comment right now.
>
>
> Repository:
> rG LLVM Github Monorepo
>
> CHANGES SINCE LAST ACTION
> https://reviews.llvm.org/D143967/new/
>
> https://reviews.llvm.org/D143967
More information about the cfe-commits
mailing list