@@ -79,79 +79,65 @@ const MCSymbol *MCFragment::getAtom() const {
79
79
return cast<MCSectionMachO>(Parent)->getAtom (LayoutOrder);
80
80
}
81
81
82
- // Debugging methods
83
-
84
- namespace llvm {
85
-
86
- raw_ostream &operator <<(raw_ostream &OS, const MCFixup &AF) {
87
- OS << " <MCFixup" << " Offset:" << AF.getOffset () << " Value:" ;
88
- AF.getValue ()->print (OS, nullptr );
89
- OS << " Kind:" << AF.getKind () << " >" ;
90
- return OS;
91
- }
92
-
93
- } // end namespace llvm
94
82
95
83
#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
96
84
LLVM_DUMP_METHOD void MCFragment::dump () const {
97
85
raw_ostream &OS = errs ();
98
86
99
- OS << " < " ;
87
+ OS << Offset << ' ' ;
100
88
switch (getKind ()) {
101
- case MCFragment::FT_Align: OS << " MCAlignFragment" ; break ;
102
- case MCFragment::FT_Data: OS << " MCDataFragment" ; break ;
103
- case MCFragment::FT_Fill: OS << " MCFillFragment" ; break ;
104
- case MCFragment::FT_Nops:
105
- OS << " MCFNopsFragment" ;
106
- break ;
107
- case MCFragment::FT_Relaxable: OS << " MCRelaxableFragment" ; break ;
108
- case MCFragment::FT_Org: OS << " MCOrgFragment" ; break ;
109
- case MCFragment::FT_Dwarf: OS << " MCDwarfFragment" ; break ;
110
- case MCFragment::FT_DwarfFrame: OS << " MCDwarfCallFrameFragment" ; break ;
111
- case MCFragment::FT_LEB: OS << " MCLEBFragment" ; break ;
112
- case MCFragment::FT_BoundaryAlign: OS<<" MCBoundaryAlignFragment" ; break ;
113
- case MCFragment::FT_SymbolId: OS << " MCSymbolIdFragment" ; break ;
114
- case MCFragment::FT_CVInlineLines: OS << " MCCVInlineLineTableFragment" ; break ;
115
- case MCFragment::FT_CVDefRange: OS << " MCCVDefRangeTableFragment" ; break ;
116
- case MCFragment::FT_PseudoProbe:
117
- OS << " MCPseudoProbe" ;
118
- break ;
89
+ // clang-format off
90
+ case MCFragment::FT_Align: OS << " Align" ; break ;
91
+ case MCFragment::FT_Data: OS << " Data" ; break ;
92
+ case MCFragment::FT_Fill: OS << " Fill" ; break ;
93
+ case MCFragment::FT_Nops: OS << " Nops" ; break ;
94
+ case MCFragment::FT_Relaxable: OS << " Relaxable" ; break ;
95
+ case MCFragment::FT_Org: OS << " Org" ; break ;
96
+ case MCFragment::FT_Dwarf: OS << " Dwarf" ; break ;
97
+ case MCFragment::FT_DwarfFrame: OS << " DwarfCallFrame" ; break ;
98
+ case MCFragment::FT_LEB: OS << " LEB" ; break ;
99
+ case MCFragment::FT_BoundaryAlign: OS<<" BoundaryAlign" ; break ;
100
+ case MCFragment::FT_SymbolId: OS << " SymbolId" ; break ;
101
+ case MCFragment::FT_CVInlineLines: OS << " CVInlineLineTable" ; break ;
102
+ case MCFragment::FT_CVDefRange: OS << " CVDefRangeTable" ; break ;
103
+ case MCFragment::FT_PseudoProbe: OS << " PseudoProbe" ; break ;
104
+ // clang-format on
119
105
}
120
106
121
- OS << " <MCFragment " << (const void *)this << " LayoutOrder:" << LayoutOrder
122
- << " Offset:" << Offset << " HasInstructions:" << hasInstructions ();
123
107
if (const auto *EF = dyn_cast<MCEncodedFragment>(this ))
124
- OS << " BundlePadding:" << static_cast <unsigned >(EF->getBundlePadding ());
125
- OS << " >" ;
108
+ if (auto Pad = static_cast <unsigned >(EF->getBundlePadding ()))
109
+ OS << " BundlePadding:" << Pad;
110
+
111
+ auto printFixups = [&](llvm::ArrayRef<MCFixup> Fixups) {
112
+ if (Fixups.empty ())
113
+ return ;
114
+ for (auto [I, F] : llvm::enumerate (Fixups)) {
115
+ OS << " \n Fixup Offset:" << F.getOffset () << " Value:" ;
116
+ F.getValue ()->print (OS, nullptr );
117
+ OS << " Kind:" << F.getKind ();
118
+ }
119
+ };
126
120
127
121
switch (getKind ()) {
128
122
case MCFragment::FT_Align: {
129
123
const auto *AF = cast<MCAlignFragment>(this );
124
+ OS << " Align:" << AF->getAlignment ().value () << " Value:" << AF->getValue ()
125
+ << " ValueSize:" << AF->getValueSize ()
126
+ << " MaxBytesToEmit:" << AF->getMaxBytesToEmit ();
130
127
if (AF->hasEmitNops ())
131
- OS << " (emit nops)" ;
132
- OS << " \n " ;
133
- OS << " Alignment:" << AF->getAlignment ().value ()
134
- << " Value:" << AF->getValue () << " ValueSize:" << AF->getValueSize ()
135
- << " MaxBytesToEmit:" << AF->getMaxBytesToEmit () << " >" ;
128
+ OS << " Nops" ;
136
129
break ;
137
130
}
138
131
case MCFragment::FT_Data: {
139
- const auto *DF = cast<MCDataFragment>(this );
140
- OS << " \n " ;
141
- OS << " Contents:[" ;
142
- const SmallVectorImpl<char > &Contents = DF->getContents ();
132
+ const auto *F = cast<MCDataFragment>(this );
133
+ const SmallVectorImpl<char > &Contents = F->getContents ();
134
+ OS << " Size:" << Contents.size () << " [" ;
143
135
for (unsigned i = 0 , e = Contents.size (); i != e; ++i) {
144
136
if (i) OS << " ," ;
145
- OS << hexdigit ((Contents[i] >> 4 ) & 0xF ) << hexdigit (Contents[i] & 0xF );
146
- }
147
- OS << " ] (" << Contents.size () << " bytes)" ;
148
-
149
- if (DF->getFixups ().size ()) {
150
- OS << " ,\n " ;
151
- OS << " Fixups:[" ;
152
- interleave (DF->getFixups (), OS, " ,\n " );
153
- OS << " ]" ;
137
+ OS << format (" %02x" , uint8_t (Contents[i]));
154
138
}
139
+ OS << ' ]' ;
140
+ printFixups (F->getFixups ());
155
141
break ;
156
142
}
157
143
case MCFragment::FT_Fill: {
@@ -170,66 +156,58 @@ LLVM_DUMP_METHOD void MCFragment::dump() const {
170
156
}
171
157
case MCFragment::FT_Relaxable: {
172
158
const auto *F = cast<MCRelaxableFragment>(this );
173
- OS << " \n " ;
174
- OS << " Inst:" ;
159
+ OS << " Size:" << F->getContents ().size () << ' ' ;
175
160
F->getInst ().dump_pretty (OS);
176
- OS << " ( " << F->getContents (). size () << " bytes) " ;
161
+ printFixups ( F->getFixups ()) ;
177
162
break ;
178
163
}
179
164
case MCFragment::FT_Org: {
180
165
const auto *OF = cast<MCOrgFragment>(this );
181
- OS << " \n " ;
182
166
OS << " Offset:" ;
183
167
OF->getOffset ().print (OS, nullptr );
184
168
OS << " Value:" << static_cast <unsigned >(OF->getValue ());
185
169
break ;
186
170
}
187
171
case MCFragment::FT_Dwarf: {
188
172
const auto *OF = cast<MCDwarfLineAddrFragment>(this );
189
- OS << " \n " ;
190
173
OS << " AddrDelta:" ;
191
174
OF->getAddrDelta ().print (OS, nullptr );
192
175
OS << " LineDelta:" << OF->getLineDelta ();
193
176
break ;
194
177
}
195
178
case MCFragment::FT_DwarfFrame: {
196
179
const auto *CF = cast<MCDwarfCallFrameFragment>(this );
197
- OS << " \n " ;
198
180
OS << " AddrDelta:" ;
199
181
CF->getAddrDelta ().print (OS, nullptr );
200
182
break ;
201
183
}
202
184
case MCFragment::FT_LEB: {
203
185
const auto *LF = cast<MCLEBFragment>(this );
204
- OS << " \n " ;
205
186
OS << " Value:" ;
206
187
LF->getValue ().print (OS, nullptr );
207
188
OS << " Signed:" << LF->isSigned ();
208
189
break ;
209
190
}
210
191
case MCFragment::FT_BoundaryAlign: {
211
192
const auto *BF = cast<MCBoundaryAlignFragment>(this );
212
- OS << " \n " ;
213
193
OS << " BoundarySize:" << BF->getAlignment ().value ()
214
194
<< " LastFragment:" << BF->getLastFragment ()
215
195
<< " Size:" << BF->getSize ();
216
196
break ;
217
197
}
218
198
case MCFragment::FT_SymbolId: {
219
199
const auto *F = cast<MCSymbolIdFragment>(this );
220
- OS << " \n " ;
221
200
OS << " Sym:" << F->getSymbol ();
222
201
break ;
223
202
}
224
203
case MCFragment::FT_CVInlineLines: {
225
204
const auto *F = cast<MCCVInlineLineTableFragment>(this );
226
- OS << " \n " ;
227
205
OS << " Sym:" << *F->getFnStartSym ();
228
206
break ;
229
207
}
230
208
case MCFragment::FT_CVDefRange: {
231
209
const auto *F = cast<MCCVDefRangeFragment>(this );
232
- OS << " \n " ;
210
+ OS << " \n " ;
233
211
for (std::pair<const MCSymbol *, const MCSymbol *> RangeStartEnd :
234
212
F->getRanges ()) {
235
213
OS << " RangeStart:" << RangeStartEnd.first ;
@@ -239,12 +217,10 @@ LLVM_DUMP_METHOD void MCFragment::dump() const {
239
217
}
240
218
case MCFragment::FT_PseudoProbe: {
241
219
const auto *OF = cast<MCPseudoProbeAddrFragment>(this );
242
- OS << " \n " ;
243
220
OS << " AddrDelta:" ;
244
221
OF->getAddrDelta ().print (OS, nullptr );
245
222
break ;
246
223
}
247
224
}
248
- OS << " >" ;
249
225
}
250
226
#endif
0 commit comments