13
13
; bpf_log(__builtin_btf_type_id(tmp__abc, 0), &tmp__abc, sizeof(tmp__abc));
14
14
; }
15
15
; 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));
17
17
; }
18
18
; void prog3() {
19
19
; bpf_log(__builtin_btf_type_id(tmp__abc.f1[3], 1), &tmp__abc, sizeof(tmp__abc));
20
20
; }
21
21
; Compilation flag:
22
22
; clang -target bpf -O2 -g -S -emit-llvm test.c
23
23
24
- %struct.anon = type { [100 x i8 ], i32 }
25
-
26
24
@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
27
25
28
26
; Function Attrs: nounwind
29
27
define dso_local void @prog1 () local_unnamed_addr #0 !dbg !28 {
30
28
entry:
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
32
30
%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
33
31
ret void , !dbg !33
34
32
}
35
33
36
34
; 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
38
36
39
37
; Function Attrs: nounwind
40
38
define dso_local void @prog2 () local_unnamed_addr #0 !dbg !34 {
41
39
entry:
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
43
41
%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
44
42
ret void , !dbg !37
45
43
}
46
44
47
45
; Function Attrs: nounwind
48
46
define dso_local void @prog3 () local_unnamed_addr #0 !dbg !38 {
49
47
entry:
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
51
49
%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
52
50
ret void , !dbg !41
53
51
}
54
52
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
78
59
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
94
73
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
95
79
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
98
95
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" }
100
97
attributes #1 = { nounwind readnone }
101
98
attributes #2 = { nounwind }
102
99
@@ -106,7 +103,7 @@ attributes #2 = { nounwind }
106
103
107
104
!0 = !DIGlobalVariableExpression (var: !1 , expr: !DIExpression ())
108
105
!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)
110
107
!3 = !DIFile (filename: "test.c" , directory: "/tmp/home/yhs/work/tests/core" )
111
108
!4 = !{}
112
109
!5 = !{!6 , !11 }
@@ -131,7 +128,7 @@ attributes #2 = { nounwind }
131
128
!24 = !{i32 7 , !"Dwarf Version" , i32 4 }
132
129
!25 = !{i32 2 , !"Debug Info Version" , i32 3 }
133
130
!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 )" }
135
132
!28 = distinct !DISubprogram (name: "prog1" , scope: !3 , file: !3 , line: 6 , type: !29 , scopeLine: 6 , flags: DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2 , retainedNodes: !4 )
136
133
!29 = !DISubroutineType (types: !30 )
137
134
!30 = !{null }
0 commit comments