[PATCH] D143967: [DebugInfo][BPF] Add 'btf:type_tag' annotation in DWARF

Eduard Zingerman via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Mar 29 18:09:54 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.
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).

> 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