File tree Expand file tree Collapse file tree 5 files changed +38
-13
lines changed Expand file tree Collapse file tree 5 files changed +38
-13
lines changed Original file line number Diff line number Diff line change @@ -1224,8 +1224,8 @@ void BTFDebug::processGlobals(bool ProcessingMapDef) {
1224
1224
const DataLayout &DL = Global.getParent ()->getDataLayout ();
1225
1225
uint32_t Size = DL.getTypeAllocSize (Global.getType ()->getElementType ());
1226
1226
1227
- DataSecEntries[std::string (SecName)]->addVar (VarId, Asm-> getSymbol (&Global) ,
1228
- Size);
1227
+ DataSecEntries[std::string (SecName)]->addDataSecEntry (VarId,
1228
+ Asm-> getSymbol (&Global), Size);
1229
1229
}
1230
1230
}
1231
1231
@@ -1303,7 +1303,19 @@ void BTFDebug::processFuncPrototypes(const Function *F) {
1303
1303
uint8_t Scope = BTF::FUNC_EXTERN;
1304
1304
auto FuncTypeEntry =
1305
1305
std::make_unique<BTFTypeFunc>(SP->getName (), ProtoTypeId, Scope);
1306
- addType (std::move (FuncTypeEntry));
1306
+ uint32_t FuncId = addType (std::move (FuncTypeEntry));
1307
+ if (F->hasSection ()) {
1308
+ StringRef SecName = F->getSection ();
1309
+
1310
+ if (DataSecEntries.find (std::string (SecName)) == DataSecEntries.end ()) {
1311
+ DataSecEntries[std::string (SecName)] =
1312
+ std::make_unique<BTFKindDataSec>(Asm, std::string (SecName));
1313
+ }
1314
+
1315
+ // We really don't know func size, set it to 0.
1316
+ DataSecEntries[std::string (SecName)]->addDataSecEntry (FuncId,
1317
+ Asm->getSymbol (F), 0 );
1318
+ }
1307
1319
}
1308
1320
1309
1321
void BTFDebug::endModule () {
Original file line number Diff line number Diff line change @@ -187,7 +187,7 @@ class BTFKindDataSec : public BTFTypeBase {
187
187
uint32_t getSize () override {
188
188
return BTFTypeBase::getSize () + BTF::BTFDataSecVarSize * Vars.size ();
189
189
}
190
- void addVar (uint32_t Id, const MCSymbol *Sym, uint32_t Size) {
190
+ void addDataSecEntry (uint32_t Id, const MCSymbol *Sym, uint32_t Size) {
191
191
Vars.push_back (std::make_tuple (Id, Sym, Size));
192
192
}
193
193
std::string getName () { return Name; }
Original file line number Diff line number Diff line change @@ -23,9 +23,9 @@ declare !dbg !4 extern_weak dso_local i32 @global_func(i8 signext) local_unnamed
23
23
; CHECK-NEXT: .byte 0
24
24
; CHECK-NEXT: .long 24
25
25
; CHECK-NEXT: .long 0
26
- ; CHECK-NEXT: .long 88
27
- ; CHECK-NEXT: .long 88
28
- ; CHECK-NEXT: .long 72
26
+ ; CHECK-NEXT: .long 112
27
+ ; CHECK-NEXT: .long 112
28
+ ; CHECK-NEXT: .long 76
29
29
; CHECK-NEXT: .long 0 # BTF_KIND_FUNC_PROTO(id = 1)
30
30
; CHECK-NEXT: .long 218103808 # 0xd000000
31
31
; CHECK-NEXT: .long 2
@@ -48,6 +48,12 @@ declare !dbg !4 extern_weak dso_local i32 @global_func(i8 signext) local_unnamed
48
48
; CHECK-NEXT: .long 60 # BTF_KIND_FUNC(id = 6)
49
49
; CHECK-NEXT: .long 201326594 # 0xc000002
50
50
; CHECK-NEXT: .long 4
51
+ ; CHECK-NEXT: .long 72 # BTF_KIND_DATASEC(id = 7)
52
+ ; CHECK-NEXT: .long 251658241 # 0xf000001
53
+ ; CHECK-NEXT: .long 0
54
+ ; CHECK-NEXT: .long 6
55
+ ; CHECK-NEXT: .long global_func
56
+ ; CHECK-NEXT: .long 0
51
57
; CHECK-NEXT: .byte 0 # string offset=0
52
58
; CHECK-NEXT: .ascii "int" # string offset=1
53
59
; CHECK-NEXT: .byte 0
@@ -61,6 +67,7 @@ declare !dbg !4 extern_weak dso_local i32 @global_func(i8 signext) local_unnamed
61
67
; CHECK-NEXT: .byte 0
62
68
; CHECK-NEXT: .ascii "global_func" # string offset=60
63
69
; CHECK-NEXT: .byte 0
70
+ ; CHECK-NEXT: .ascii "abc" # string offset=72
64
71
65
72
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" }
66
73
attributes #1 = { "correctly-rounded-divide-sqrt-fp-math" ="false" "disable-tail-calls" ="false" "frame-pointer" ="all" "less-precise-fpmad" ="false" "no-infs-fp-math" ="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" }
Original file line number Diff line number Diff line change 28
28
; CHECK-NEXT: .byte 0
29
29
; CHECK-NEXT: .long 24
30
30
; CHECK-NEXT: .long 0
31
- ; CHECK-NEXT: .long 128
32
- ; CHECK-NEXT: .long 128
31
+ ; CHECK-NEXT: .long 140
32
+ ; CHECK-NEXT: .long 140
33
33
; CHECK-NEXT: .long 79
34
34
; CHECK-NEXT: .long 0 # BTF_KIND_FUNC_PROTO(id = 1)
35
35
; CHECK-NEXT: .long 218103808 # 0xd000000
@@ -58,7 +58,10 @@ entry:
58
58
; CHECK-NEXT: .long 5
59
59
; CHECK-NEXT: .long 2
60
60
; CHECK-NEXT: .long 75 # BTF_KIND_DATASEC(id = 8)
61
- ; CHECK-NEXT: .long 251658241 # 0xf000001
61
+ ; CHECK-NEXT: .long 251658242 # 0xf000002
62
+ ; CHECK-NEXT: .long 0
63
+ ; CHECK-NEXT: .long 6
64
+ ; CHECK-NEXT: .long global_func
62
65
; CHECK-NEXT: .long 0
63
66
; CHECK-NEXT: .long 7
64
67
; CHECK-NEXT: .long ch
Original file line number Diff line number Diff line change @@ -28,8 +28,8 @@ declare !dbg !6 extern_weak dso_local i32 @global_func(i8 signext) local_unnamed
28
28
; CHECK-NEXT: .byte 0
29
29
; CHECK-NEXT: .long 24
30
30
; CHECK-NEXT: .long 0
31
- ; CHECK-NEXT: .long 128
32
- ; CHECK-NEXT: .long 128
31
+ ; CHECK-NEXT: .long 140
32
+ ; CHECK-NEXT: .long 140
33
33
; CHECK-NEXT: .long 79
34
34
; CHECK-NEXT: .long 0 # BTF_KIND_FUNC_PROTO(id = 1)
35
35
; CHECK-NEXT: .long 218103808 # 0xd000000
@@ -58,7 +58,10 @@ declare !dbg !6 extern_weak dso_local i32 @global_func(i8 signext) local_unnamed
58
58
; CHECK-NEXT: .long 5
59
59
; CHECK-NEXT: .long 2
60
60
; CHECK-NEXT: .long 75 # BTF_KIND_DATASEC(id = 8)
61
- ; CHECK-NEXT: .long 251658241 # 0xf000001
61
+ ; CHECK-NEXT: .long 251658242 # 0xf000002
62
+ ; CHECK-NEXT: .long 0
63
+ ; CHECK-NEXT: .long 6
64
+ ; CHECK-NEXT: .long global_func
62
65
; CHECK-NEXT: .long 0
63
66
; CHECK-NEXT: .long 7
64
67
; CHECK-NEXT: .long ch
You can’t perform that action at this time.
0 commit comments