[llvm] [BPF] Support wrapping BPF map structs into nested, single field structs (PR #144097)

Tamir Duberstein via llvm-commits llvm-commits at lists.llvm.org
Fri Jun 13 09:28:43 PDT 2025


================
@@ -976,11 +976,21 @@ void BTFDebug::visitMapDefType(const DIType *Ty, uint32_t &TypeId) {
   if (Tag != dwarf::DW_TAG_structure_type || CTy->isForwardDecl())
     return;
 
-  // Visit all struct members to ensure pointee type is visited
+  // Visit all struct members to ensure their types are visited.
   const DINodeArray Elements = CTy->getElements();
+  // In Aya/Rust, BPF maps are wrapped into nested types. Such wrapper types
+  // always have only one element. When encountering them, we need to visit its
+  // (only) element with an assumption that it might contain either an another
+  // wrapper, or an actual map struct.
+  const bool IsAWrapperType = Elements.size() == 1;
   for (const auto *Element : Elements) {
     const auto *MemberType = cast<DIDerivedType>(Element);
-    visitTypeEntry(MemberType->getBaseType());
+    if (IsAWrapperType) {
+      // Visit a type which is either a map definition or an another wrapper.
----------------
tamird wrote:

"an another" is incorrect. but also I think both of these comments are pointless, just drop them (here and below, the comments are repeating the code)

https://github.com/llvm/llvm-project/pull/144097


More information about the llvm-commits mailing list