Skip to content

Commit eea989a

Browse files
committed
[StackMaps] Add location size to llvm-readobj -stackmap output
The size field of a location can be different for each entry, so it is useful to have this displayed in the output of llvm-readobj -stackmap. Below is an example of how the output would look: Record ID: 2882400000, instruction offset: 16 3 locations: #1: Constant 1, size: 8 #2: Constant 2, size: 8 #3: Constant 3, size: 8 0 live-outs: [ ] Patch By: jacob.hughes@kcl.ac.uk (with heavy modification by me) Differential Revision: https://reviews.llvm.org/D59169 llvm-svn: 358324
1 parent f7acef9 commit eea989a

File tree

3 files changed

+73
-73
lines changed

3 files changed

+73
-73
lines changed

Diff for: llvm/include/llvm/Object/StackMapParser.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ class StackMapParser {
116116
}
117117

118118
/// Get the Size for this location.
119-
uint8_t getSize() const {
119+
unsigned getSizeInBytes() const {
120120
return read<uint8_t>(P + SizeOffset);
121121

122122
}

Diff for: llvm/test/Object/stackmap-dump.test

+66-66
Original file line numberDiff line numberDiff line change
@@ -29,123 +29,123 @@ CHECK-NEXT: #3: 4294967296
2929
CHECK-NEXT: Num Records: 20
3030
CHECK-NEXT: Record ID: 1, instruction offset: 4
3131
CHECK-NEXT: 12 locations:
32-
CHECK-NEXT: #1: Constant 4294967295
33-
CHECK-NEXT: #2: Constant 4294967295
34-
CHECK-NEXT: #3: Constant 65536
35-
CHECK-NEXT: #4: Constant 2000000000
36-
CHECK-NEXT: #5: Constant 2147483647
37-
CHECK-NEXT: #6: Constant 4294967295
38-
CHECK-NEXT: #7: Constant 4294967295
39-
CHECK-NEXT: #8: Constant 0
40-
CHECK-NEXT: #9: ConstantIndex #0 (2147483648)
41-
CHECK-NEXT: #10: ConstantIndex #1 (4294967295)
42-
CHECK-NEXT: #11: ConstantIndex #2 (4294967296)
43-
CHECK-NEXT: #12: Constant 4294967295
32+
CHECK-NEXT: #1: Constant 4294967295, size: 8
33+
CHECK-NEXT: #2: Constant 4294967295, size: 8
34+
CHECK-NEXT: #3: Constant 65536, size: 8
35+
CHECK-NEXT: #4: Constant 2000000000, size: 8
36+
CHECK-NEXT: #5: Constant 2147483647, size: 8
37+
CHECK-NEXT: #6: Constant 4294967295, size: 8
38+
CHECK-NEXT: #7: Constant 4294967295, size: 8
39+
CHECK-NEXT: #8: Constant 0, size: 8
40+
CHECK-NEXT: #9: ConstantIndex #0 (2147483648), size: 8
41+
CHECK-NEXT: #10: ConstantIndex #1 (4294967295), size: 8
42+
CHECK-NEXT: #11: ConstantIndex #2 (4294967296), size: 8
43+
CHECK-NEXT: #12: Constant 4294967295, size: 8
4444
CHECK-NEXT: 1 live-outs: [ R#7 (8-bytes) ]
4545

4646
CHECK: Record ID: 3, instruction offset: 22
4747
CHECK-NEXT: 2 locations:
48-
CHECK-NEXT: #1: Register R#3
49-
CHECK-NEXT: #2: Register R#14
48+
CHECK-NEXT: #1: Register R#3, size: 8
49+
CHECK-NEXT: #2: Register R#14, size: 8
5050
CHECK-NEXT: 0 live-outs: [ ]
5151

5252
CHECK: Record ID: 4, instruction offset: 10
5353
CHECK-NEXT: 2 locations:
54-
CHECK-NEXT: #1: Register R#5
55-
CHECK-NEXT: #2: Register R#4
54+
CHECK-NEXT: #1: Register R#5, size: 8
55+
CHECK-NEXT: #2: Register R#4, size: 8
5656
CHECK-NEXT: 0 live-outs: [ ]
5757

5858
CHECK: Record ID: 5, instruction offset: 4
5959
CHECK-NEXT: 2 locations:
60-
CHECK-NEXT: #1: Register R#0
61-
CHECK-NEXT: #2: Register R#5
60+
CHECK-NEXT: #1: Register R#0, size: 8
61+
CHECK-NEXT: #2: Register R#5, size: 8
6262
CHECK-NEXT: 2 live-outs: [ R#0 (8-bytes) R#7 (8-bytes) ]
6363

6464
CHECK: Record ID: 6, instruction offset: 4
6565
CHECK-NEXT: 2 locations:
66-
CHECK-NEXT: #1: Register R#4
67-
CHECK-NEXT: #2: Register R#2
66+
CHECK-NEXT: #1: Register R#4, size: 8
67+
CHECK-NEXT: #2: Register R#2, size: 8
6868
CHECK-NEXT: 1 live-outs: [ R#7 (8-bytes) ]
6969

7070
CHECK: Record ID: 7, instruction offset: 10
7171
CHECK-NEXT: 2 locations:
72-
CHECK-NEXT: #1: Register R#2
73-
CHECK-NEXT: #2: Register R#8
72+
CHECK-NEXT: #1: Register R#2, size: 8
73+
CHECK-NEXT: #2: Register R#8, size: 8
7474
CHECK-NEXT: 1 live-outs: [ R#7 (8-bytes) ]
7575

7676
CHECK: Record ID: 8, instruction offset: 10
7777
CHECK-NEXT: 2 locations:
78-
CHECK-NEXT: #1: Register R#2
79-
CHECK-NEXT: #2: Register R#8
78+
CHECK-NEXT: #1: Register R#2, size: 8
79+
CHECK-NEXT: #2: Register R#8, size: 8
8080
CHECK-NEXT: 2 live-outs: [ R#0 (8-bytes) R#7 (8-bytes) ]
8181

8282
CHECK: Record ID: 11, instruction offset: 42
8383
CHECK-NEXT: 17 locations:
84-
CHECK-NEXT: #1: Register R#9
85-
CHECK-NEXT: #2: Register R#14
86-
CHECK-NEXT: #3: Register R#10
87-
CHECK-NEXT: #4: Register R#3
88-
CHECK-NEXT: #5: Register R#0
89-
CHECK-NEXT: #6: Register R#13
90-
CHECK-NEXT: #7: Register R#12
91-
CHECK-NEXT: #8: Register R#15
92-
CHECK-NEXT: #9: Indirect [R#6 + 72]
93-
CHECK-NEXT: #10: Indirect [R#6 + 80]
94-
CHECK-NEXT: #11: Indirect [R#6 + 88]
95-
CHECK-NEXT: #12: Indirect [R#6 + 96]
96-
CHECK-NEXT: #13: Indirect [R#6 + 104]
97-
CHECK-NEXT: #14: Indirect [R#6 + 112]
98-
CHECK-NEXT: #15: Indirect [R#6 + 120]
99-
CHECK-NEXT: #16: Indirect [R#6 + 128]
100-
CHECK-NEXT: #17: Indirect [R#6 + 136]
84+
CHECK-NEXT: #1: Register R#9, size: 8
85+
CHECK-NEXT: #2: Register R#14, size: 8
86+
CHECK-NEXT: #3: Register R#10, size: 8
87+
CHECK-NEXT: #4: Register R#3, size: 8
88+
CHECK-NEXT: #5: Register R#0, size: 8
89+
CHECK-NEXT: #6: Register R#13, size: 8
90+
CHECK-NEXT: #7: Register R#12, size: 8
91+
CHECK-NEXT: #8: Register R#15, size: 8
92+
CHECK-NEXT: #9: Indirect [R#6 + 72], size: 8
93+
CHECK-NEXT: #10: Indirect [R#6 + 80], size: 8
94+
CHECK-NEXT: #11: Indirect [R#6 + 88], size: 8
95+
CHECK-NEXT: #12: Indirect [R#6 + 96], size: 8
96+
CHECK-NEXT: #13: Indirect [R#6 + 104], size: 8
97+
CHECK-NEXT: #14: Indirect [R#6 + 112], size: 8
98+
CHECK-NEXT: #15: Indirect [R#6 + 120], size: 8
99+
CHECK-NEXT: #16: Indirect [R#6 + 128], size: 8
100+
CHECK-NEXT: #17: Indirect [R#6 + 136], size: 8
101101
CHECK-NEXT: 1 live-outs: [ R#7 (8-bytes) ]
102102

103103
CHECK: Record ID: 12, instruction offset: 62
104104
CHECK-NEXT: 17 locations:
105-
CHECK-NEXT: #1: Register R#0
106-
CHECK-NEXT: #2: Register R#14
107-
CHECK-NEXT: #3: Register R#10
108-
CHECK-NEXT: #4: Register R#9
109-
CHECK-NEXT: #5: Register R#8
110-
CHECK-NEXT: #6: Register R#4
111-
CHECK-NEXT: #7: Register R#1
112-
CHECK-NEXT: #8: Register R#2
113-
CHECK-NEXT: #9: Register R#5
114-
CHECK-NEXT: #10: Register R#3
115-
CHECK-NEXT: #11: Register R#13
116-
CHECK-NEXT: #12: Register R#12
117-
CHECK-NEXT: #13: Register R#15
118-
CHECK-NEXT: #14: Indirect [R#6 + 112]
119-
CHECK-NEXT: #15: Indirect [R#6 + 120]
120-
CHECK-NEXT: #16: Indirect [R#6 + 128]
121-
CHECK-NEXT: #17: Indirect [R#6 + 136]
105+
CHECK-NEXT: #1: Register R#0, size: 8
106+
CHECK-NEXT: #2: Register R#14, size: 8
107+
CHECK-NEXT: #3: Register R#10, size: 8
108+
CHECK-NEXT: #4: Register R#9, size: 8
109+
CHECK-NEXT: #5: Register R#8, size: 8
110+
CHECK-NEXT: #6: Register R#4, size: 8
111+
CHECK-NEXT: #7: Register R#1, size: 8
112+
CHECK-NEXT: #8: Register R#2, size: 8
113+
CHECK-NEXT: #9: Register R#5, size: 8
114+
CHECK-NEXT: #10: Register R#3, size: 8
115+
CHECK-NEXT: #11: Register R#13, size: 8
116+
CHECK-NEXT: #12: Register R#12, size: 8
117+
CHECK-NEXT: #13: Register R#15, size: 8
118+
CHECK-NEXT: #14: Indirect [R#6 + 112], size: 8
119+
CHECK-NEXT: #15: Indirect [R#6 + 120], size: 8
120+
CHECK-NEXT: #16: Indirect [R#6 + 128], size: 8
121+
CHECK-NEXT: #17: Indirect [R#6 + 136], size: 8
122122
CHECK-NEXT: 0 live-outs: [ ]
123123

124124
CHECK: Record ID: 13, instruction offset: 50
125125
CHECK-NEXT: 1 locations:
126-
CHECK-NEXT: #1: Indirect [R#6 + -48]
126+
CHECK-NEXT: #1: Indirect [R#6 + -48], size: 4
127127
CHECK-NEXT: 0 live-outs: [ ]
128128

129129
CHECK: Record ID: 14, instruction offset: 24
130130
CHECK-NEXT: 2 locations:
131-
CHECK-NEXT: #1: Register R#0
132-
CHECK-NEXT: #2: Register R#3
131+
CHECK-NEXT: #1: Register R#0, size: 1
132+
CHECK-NEXT: #2: Register R#3, size: 1
133133
CHECK-NEXT: 0 live-outs: [ ]
134134

135135
CHECK: Record ID: 15, instruction offset: 4
136136
CHECK-NEXT: 1 locations:
137-
CHECK-NEXT: #1: Constant 33
137+
CHECK-NEXT: #1: Constant 33, size: 8
138138
CHECK-NEXT: 0 live-outs: [ ]
139139

140140
CHECK: Record ID: 16, instruction offset: 32
141141
CHECK-NEXT: 1 locations:
142-
CHECK-NEXT: #1: Direct R#6 + -32
142+
CHECK-NEXT: #1: Direct R#6 + -32, size: 8
143143
CHECK-NEXT: 0 live-outs: [ ]
144144

145145
CHECK: Record ID: 17, instruction offset: 32
146146
CHECK-NEXT: 2 locations:
147-
CHECK-NEXT: #1: Direct R#6 + -8
148-
CHECK-NEXT: #2: Direct R#6 + -40
147+
CHECK-NEXT: #1: Direct R#6 + -8, size: 8
148+
CHECK-NEXT: #2: Direct R#6 + -40, size: 8
149149
CHECK-NEXT: 1 live-outs: [ R#7 (8-bytes) ]
150150

151151
CHECK: Record ID: 4294967295, instruction offset: 4
@@ -166,7 +166,7 @@ CHECK-NEXT: 1 live-outs: [ R#7 (8-bytes) ]
166166

167167
CHECK: Record ID: 16, instruction offset: 18
168168
CHECK-NEXT: 1 locations:
169-
CHECK-NEXT: #1: Indirect [R#6 + -44]
169+
CHECK-NEXT: #1: Indirect [R#6 + -44], size: 4
170170
CHECK-NEXT: 0 live-outs: [ ]
171171

172172
CHECK: Record ID: 0, instruction offset: 26

Diff for: llvm/tools/llvm-readobj/StackMapPrinter.h

+6-6
Original file line numberDiff line numberDiff line change
@@ -47,24 +47,24 @@ void prettyPrintStackMap(ScopedPrinter &W, const StackMapParserT &SMP) {
4747
OS << " #" << ++LocationIndex << ": ";
4848
switch (Loc.getKind()) {
4949
case StackMapParserT::LocationKind::Register:
50-
OS << "Register R#" << Loc.getDwarfRegNum() << "\n";
50+
OS << "Register R#" << Loc.getDwarfRegNum();
5151
break;
5252
case StackMapParserT::LocationKind::Direct:
53-
OS << "Direct R#" << Loc.getDwarfRegNum() << " + " << Loc.getOffset()
54-
<< "\n";
53+
OS << "Direct R#" << Loc.getDwarfRegNum() << " + " << Loc.getOffset();
5554
break;
5655
case StackMapParserT::LocationKind::Indirect:
5756
OS << "Indirect [R#" << Loc.getDwarfRegNum() << " + " << Loc.getOffset()
58-
<< "]\n";
57+
<< "]";
5958
break;
6059
case StackMapParserT::LocationKind::Constant:
61-
OS << "Constant " << Loc.getSmallConstant() << "\n";
60+
OS << "Constant " << Loc.getSmallConstant();
6261
break;
6362
case StackMapParserT::LocationKind::ConstantIndex:
6463
OS << "ConstantIndex #" << Loc.getConstantIndex() << " ("
65-
<< SMP.getConstant(Loc.getConstantIndex()).getValue() << ")\n";
64+
<< SMP.getConstant(Loc.getConstantIndex()).getValue() << ")";
6665
break;
6766
}
67+
OS << ", size: " << Loc.getSizeInBytes() << "\n";
6868
}
6969

7070
raw_ostream &OS = W.startLine();

0 commit comments

Comments
 (0)