[llvm] [BPF] Support for `DW_TAG_variant_part` in BTF generation (PR #155783)
Michal R via llvm-commits
llvm-commits at lists.llvm.org
Mon Sep 1 07:09:03 PDT 2025
================
@@ -0,0 +1,95 @@
+; RUN: llc -mtriple=bpfel -filetype=obj -o %t1 %s
+; RUN: llvm-objcopy --dump-section='.BTF'=%t2 %t1
+; RUN: %python %p/print_btf.py %t2 | FileCheck -check-prefixes=CHECK-BTF %s
+; RUN: llc -mtriple=bpfeb -filetype=obj -o %t1 %s
+; RUN: llvm-objcopy --dump-section='.BTF'=%t2 %t1
+; RUN: %python %p/print_btf.py %t2 | FileCheck -check-prefixes=CHECK-BTF %s
+;
+; Source:
+; #![no_std]
+; #![no_main]
+;
+; pub enum DataCarryingEnum {
+; First { a: u32, b: i32 },
+; Second(u32, i32),
+; }
+;
+; #[unsafe(no_mangle)]
+; pub static X: DataCarryingEnum = DataCarryingEnum::First { a: 54, b: -23 };
+; #[unsafe(no_mangle)]
+; pub static Y: DataCarryingEnum = DataCarryingEnum::Second(54, -23);
+;
+; #[cfg(not(test))]
+; #[panic_handler]
+; fn panic(_info: &core::panic::PanicInfo) -> ! {
+; loop {}
+; }
+; Compilation flag:
+; cargo +nightly rustc -Zbuild-std=core --target=bpfel-unknown-none -- --emit=llvm-bc
+; llvm-extract --glob=X --glob=Y $(find target/ -name "*.bc" | head -n 1) -o data-carrying-enum.bc
+; llvm-dis data-carrying.bc -o data-carrying-enum.ll
+
+; ModuleID = 'data_carrying.bc'
+source_filename = "c0znihgkvro8hs0n88fgrtg6x"
+target datalayout = "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128"
+target triple = "bpfel"
+
+ at X = constant [12 x i8] c"\00\00\00\006\00\00\00\E9\FF\FF\FF", align 4, !dbg !0
+ at Y = constant [12 x i8] c"\01\00\00\006\00\00\00\E9\FF\FF\FF", align 4, !dbg !23
+
+!llvm.module.flags = !{!25, !26, !27, !28}
+!llvm.ident = !{!29}
+!llvm.dbg.cu = !{!30}
+
+; CHECK-BTF: [1] STRUCT 'DataCarryingEnum' size=12 vlen=1
+; CHECK-BTF-NEXT: '(anon)' type_id=2 bits_offset=0
+; CHECK-BTF-NEXT: [2] STRUCT '(anon)' size=12 vlen=2
+; CHECK-BTF-NEXT: 'First' type_id=3 bits_offset=0
+; CHECK-BTF-NEXT: 'Second' type_id=6 bits_offset=0
+; CHECK-BTF-NEXT: [3] STRUCT 'First' size=12 vlen=2
+; CHECK-BTF-NEXT: 'a' type_id=4 bits_offset=32
+; CHECK-BTF-NEXT: 'b' type_id=5 bits_offset=64
+; CHECK-BTF-NEXT: [4] INT 'u32' size=4 bits_offset=0 nr_bits=32 encoding=(none)
+; CHECK-BTF-NEXT: [5] INT 'i32' size=4 bits_offset=0 nr_bits=32 encoding=SIGNED
+; CHECK-BTF-NEXT: [6] STRUCT 'Second' size=12 vlen=2
----------------
vadorovsky wrote:
Good point, done.
https://github.com/llvm/llvm-project/pull/155783
More information about the llvm-commits
mailing list