1313; bpf_log(__builtin_btf_type_id(tmp__abc, 0), &tmp__abc, sizeof(tmp__abc));
1414; }
1515; void prog2() {
16- ; bpf_log(__builtin_btf_type_id(&tmp__abc, 1 ), &tmp__abc, sizeof(tmp__abc));
16+ ; bpf_log(__builtin_btf_type_id(&tmp__abc, 0 ), &tmp__abc, sizeof(tmp__abc));
1717; }
1818; void prog3() {
1919; bpf_log(__builtin_btf_type_id(tmp__abc.f1[3], 1), &tmp__abc, sizeof(tmp__abc));
2020; }
2121; Compilation flag:
2222; clang -target bpf -O2 -g -S -emit-llvm test.c
2323
24- %struct.anon = type { [100 x i8 ], i32 }
25-
2624@tmp__abc = dso_local global { <{ i8 , i8 , [98 x i8 ] }>, i32 } { <{ i8 , i8 , [98 x i8 ] }> <{ i8 1 , i8 3 , [98 x i8 ] zeroinitializer }>, i32 0 }, align 4 , !dbg !0
2725
2826; Function Attrs: nounwind
2927define dso_local void @prog1 () local_unnamed_addr #0 !dbg !28 {
3028entry:
31- %0 = tail call i32 @llvm.bpf.btf.type.id.p0s_struct.anons.i32 ( %struct.anon* bitcast ({ <{ i8 , i8 , [ 98 x i8 ] }>, i32 }* @tmp__abc to %struct.anon* ), i32 1 , i64 0 ), !dbg !31 , !llvm.preserve.access.index !7
29+ %0 = tail call i32 @llvm.bpf.btf.type.id ( i32 0 , i64 0 ), !dbg !31 , !llvm.preserve.access.index !7
3230 %call = tail call i32 inttoptr (i64 999 to i32 (i32 , i8* , i32 )*)(i32 %0 , i8* getelementptr inbounds ({ <{ i8 , i8 , [98 x i8 ] }>, i32 }, { <{ i8 , i8 , [98 x i8 ] }>, i32 }* @tmp__abc , i64 0 , i32 0 , i32 0 ), i32 104 ) #2 , !dbg !32
3331 ret void , !dbg !33
3432}
3533
3634; Function Attrs: nounwind readnone
37- declare i32 @llvm.bpf.btf.type.id.p0s_struct.anons.i32 ( %struct.anon* , i32 , i64 ) #1
35+ declare i32 @llvm.bpf.btf.type.id ( i32 , i64 ) #1
3836
3937; Function Attrs: nounwind
4038define dso_local void @prog2 () local_unnamed_addr #0 !dbg !34 {
4139entry:
42- %0 = tail call i32 @llvm.bpf.btf.type.id.p0s_struct.anons.i32 ( %struct.anon* bitcast ({ <{ i8 , i8 , [ 98 x i8 ] }>, i32 }* @tmp__abc to %struct.anon* ), i32 0 , i64 1 ), !dbg !35 , !llvm.preserve.access.index !6
40+ %0 = tail call i32 @llvm.bpf.btf.type.id ( i32 1 , i64 0 ), !dbg !35 , !llvm.preserve.access.index !6
4341 %call = tail call i32 inttoptr (i64 999 to i32 (i32 , i8* , i32 )*)(i32 %0 , i8* getelementptr inbounds ({ <{ i8 , i8 , [98 x i8 ] }>, i32 }, { <{ i8 , i8 , [98 x i8 ] }>, i32 }* @tmp__abc , i64 0 , i32 0 , i32 0 ), i32 104 ) #2 , !dbg !36
4442 ret void , !dbg !37
4543}
4644
4745; Function Attrs: nounwind
4846define dso_local void @prog3 () local_unnamed_addr #0 !dbg !38 {
4947entry:
50- %0 = tail call i32 @llvm.bpf.btf.type.id.p0i8.i32 ( i8* getelementptr inbounds ({ <{ i8 , i8 , [ 98 x i8 ] }>, i32 }, { <{ i8 , i8 , [ 98 x i8 ] }>, i32 }* @tmp__abc , i64 0 , i32 0 , i32 2 , i64 1 ), i32 1 , i64 1 ), !dbg !39 , !llvm.preserve.access.index !11
48+ %0 = tail call i32 @llvm.bpf.btf.type.id ( i32 2 , i64 1 ), !dbg !39 , !llvm.preserve.access.index !11
5149 %call = tail call i32 inttoptr (i64 999 to i32 (i32 , i8* , i32 )*)(i32 %0 , i8* getelementptr inbounds ({ <{ i8 , i8 , [98 x i8 ] }>, i32 }, { <{ i8 , i8 , [98 x i8 ] }>, i32 }* @tmp__abc , i64 0 , i32 0 , i32 0 ), i32 104 ) #2 , !dbg !40
5250 ret void , !dbg !41
5351}
5452
55- ; CHECK-LABEL: prog1
56- ; CHECK: r1 = 3
57- ; CHECK-LABEL: prog2
58- ; CHECK: r1 = 10
59- ; CHECK-LABEL: prog3
60- ; CHECK: r1 = 4
61- ;
62- ; CHECK: .long 0 # BTF_KIND_STRUCT(id = 3)
63- ; CHECK-NEXT: .long 67108866 # 0x4000002
64- ; CHECK-NEXT: .long 104
65- ; CHECK-NEXT: .long 13
66- ; CHECK-NEXT: .long 5
67- ; CHECK-NEXT: .long 0 # 0x0
68- ; CHECK-NEXT: .long 16
69- ; CHECK-NEXT: .long 7
70- ; CHECK-NEXT: .long 800 # 0x320
71- ; CHECK-NEXT: .long 19 # BTF_KIND_INT(id = 4)
72- ; CHECK-NEXT: .long 16777216 # 0x1000000
73- ; CHECK-NEXT: .long 1
74- ; CHECK-NEXT: .long 16777224 # 0x1000008
75- ; CHECK: .long 0 # BTF_KIND_PTR(id = 10)
76- ; CHECK-NEXT: .long 33554432 # 0x2000000
77- ; CHECK-NEXT: .long 3
53+ ; CHECK-LABEL: prog1
54+ ; CHECK: r1 = 3
55+ ; CHECK-LABEL: prog2
56+ ; CHECK: r1 = 10
57+ ; CHECK-LABEL: prog3
58+ ; CHECK: r1 = 4
7859
79- ; CHECK: .long 16 # FieldReloc
80- ; CHECK-NEXT: .long {{[0-9]+}} # Field reloc section string offset={{[0-9]+}}
81- ; CHECK-NEXT: .long 3
82- ; CHECK-NEXT: .long .Ltmp{{[0-9]+}}
83- ; CHECK-NEXT: .long 3
84- ; CHECK-NEXT: .long {{[0-9]+}}
85- ; CHECK-NEXT: .long 6
86- ; CHECK-NEXT: .long .Ltmp{{[0-9]+}}
87- ; CHECK-NEXT: .long 10
88- ; CHECK-NEXT: .long {{[0-9]+}}
89- ; CHECK-NEXT: .long 7
90- ; CHECK-NEXT: .long .Ltmp{{[0-9]+}}
91- ; CHECK-NEXT: .long 4
92- ; CHECK-NEXT: .long {{[0-9]+}}
93- ; CHECK-NEXT: .long 7
60+ ; CHECK: .long 0 # BTF_KIND_STRUCT(id = 3)
61+ ; CHECK-NEXT: .long 67108866 # 0x4000002
62+ ; CHECK-NEXT: .long 104
63+ ; CHECK-NEXT: .long 13
64+ ; CHECK-NEXT: .long 5
65+ ; CHECK-NEXT: .long 0 # 0x0
66+ ; CHECK-NEXT: .long 16
67+ ; CHECK-NEXT: .long 7
68+ ; CHECK-NEXT: .long 800 # 0x320
69+ ; CHECK: .long 19 # BTF_KIND_INT(id = 4)
70+ ; CHECK: .long 0 # BTF_KIND_PTR(id = 10)
71+ ; CHECK-NEXT: .long 33554432 # 0x2000000
72+ ; CHECK-NEXT: .long 3
9473
74+ ; CHECK: .ascii ".text" # string offset=7
75+ ; CHECK: .ascii "f1" # string offset=13
76+ ; CHECK: .ascii "f2" # string offset=16
77+ ; CHECK: .ascii "char" # string offset=19
78+ ; CHECK: .byte 48 # string offset=48
9579
96- ; Function Attrs: nounwind readnone
97- declare i32 @llvm.bpf.btf.type.id.p0i8.i32 (i8* , i32 , i64 ) #1
80+ ; CHECK: .long 16 # FieldReloc
81+ ; CHECK-NEXT: .long 7 # Field reloc section string offset=7
82+ ; CHECK-NEXT: .long 3
83+ ; CHECK-NEXT: .long .Ltmp{{[0-9]+}}
84+ ; CHECK-NEXT: .long 3
85+ ; CHECK-NEXT: .long 48
86+ ; CHECK-NEXT: .long 6
87+ ; CHECK-NEXT: .long .Ltmp{{[0-9]+}}
88+ ; CHECK-NEXT: .long 10
89+ ; CHECK-NEXT: .long 48
90+ ; CHECK-NEXT: .long 6
91+ ; CHECK-NEXT: .long .Ltmp{{[0-9]+}}
92+ ; CHECK-NEXT: .long 4
93+ ; CHECK-NEXT: .long 48
94+ ; CHECK-NEXT: .long 7
9895
99- attributes #0 = { nounwind "correctly-rounded-divide-sqrt-fp-math" ="false" "disable-tail-calls" ="false" "frame-pointer" ="all" "less-precise-fpmad" ="false" "min-legal-vector-width" ="0" "no-infs-fp-math" ="false" "no-jump-tables" ="false" "no-nans-fp-math" ="false" "no-signed-zeros-fp-math" ="false" "no-trapping-math" ="false " "stack-protector-buffer-size" ="8" "unsafe-fp-math" ="false" "use-soft-float" ="false" }
96+ attributes #0 = { nounwind "correctly-rounded-divide-sqrt-fp-math" ="false" "disable-tail-calls" ="false" "frame-pointer" ="all" "less-precise-fpmad" ="false" "min-legal-vector-width" ="0" "no-infs-fp-math" ="false" "no-jump-tables" ="false" "no-nans-fp-math" ="false" "no-signed-zeros-fp-math" ="false" "no-trapping-math" ="true " "stack-protector-buffer-size" ="8" "unsafe-fp-math" ="false" "use-soft-float" ="false" }
10097attributes #1 = { nounwind readnone }
10198attributes #2 = { nounwind }
10299
@@ -106,7 +103,7 @@ attributes #2 = { nounwind }
106103
107104!0 = !DIGlobalVariableExpression (var: !1 , expr: !DIExpression ())
108105!1 = distinct !DIGlobalVariable (name: "tmp__abc" , scope: !2 , file: !3 , line: 5 , type: !7 , isLocal: false , isDefinition: true )
109- !2 = distinct !DICompileUnit (language: DW_LANG_C99, file: !3 , producer: "clang version 11 .0.0 (https://github.com/llvm/llvm-project.git 95253d8f16b8085b4b85cb3a6106ccbfe8a6d9b2 )" , isOptimized: true , runtimeVersion: 0 , emissionKind: FullDebug, enums: !4 , retainedTypes: !5 , globals: !16 , splitDebugInlining: false , nameTableKind: None)
106+ !2 = distinct !DICompileUnit (language: DW_LANG_C99, file: !3 , producer: "clang version 12 .0.0 (https://github.com/llvm/llvm-project.git f39aae11dca3f8f8c2c755a871726ed2fa82fd57 )" , isOptimized: true , runtimeVersion: 0 , emissionKind: FullDebug, enums: !4 , retainedTypes: !5 , globals: !16 , splitDebugInlining: false , nameTableKind: None)
110107!3 = !DIFile (filename: "test.c" , directory: "/tmp/home/yhs/work/tests/core" )
111108!4 = !{}
112109!5 = !{!6 , !11 }
@@ -131,7 +128,7 @@ attributes #2 = { nounwind }
131128!24 = !{i32 7 , !"Dwarf Version" , i32 4 }
132129!25 = !{i32 2 , !"Debug Info Version" , i32 3 }
133130!26 = !{i32 1 , !"wchar_size" , i32 4 }
134- !27 = !{!"clang version 11 .0.0 (https://github.com/llvm/llvm-project.git 95253d8f16b8085b4b85cb3a6106ccbfe8a6d9b2 )" }
131+ !27 = !{!"clang version 12 .0.0 (https://github.com/llvm/llvm-project.git f39aae11dca3f8f8c2c755a871726ed2fa82fd57 )" }
135132!28 = distinct !DISubprogram (name: "prog1" , scope: !3 , file: !3 , line: 6 , type: !29 , scopeLine: 6 , flags: DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2 , retainedNodes: !4 )
136133!29 = !DISubroutineType (types: !30 )
137134!30 = !{null }
0 commit comments