@@ -79,79 +79,65 @@ const MCSymbol *MCFragment::getAtom() const {
7979 return cast<MCSectionMachO>(Parent)->getAtom (LayoutOrder);
8080}
8181
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
9482
9583#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
9684LLVM_DUMP_METHOD void MCFragment::dump () const {
9785 raw_ostream &OS = errs ();
9886
99- OS << " < " ;
87+ OS << Offset << ' ' ;
10088 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
119105 }
120106
121- OS << " <MCFragment " << (const void *)this << " LayoutOrder:" << LayoutOrder
122- << " Offset:" << Offset << " HasInstructions:" << hasInstructions ();
123107 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+ };
126120
127121 switch (getKind ()) {
128122 case MCFragment::FT_Align: {
129123 const auto *AF = cast<MCAlignFragment>(this );
124+ OS << " Align:" << AF->getAlignment ().value () << " Value:" << AF->getValue ()
125+ << " ValueSize:" << AF->getValueSize ()
126+ << " MaxBytesToEmit:" << AF->getMaxBytesToEmit ();
130127 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" ;
136129 break ;
137130 }
138131 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 () << " [" ;
143135 for (unsigned i = 0 , e = Contents.size (); i != e; ++i) {
144136 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]));
154138 }
139+ OS << ' ]' ;
140+ printFixups (F->getFixups ());
155141 break ;
156142 }
157143 case MCFragment::FT_Fill: {
@@ -170,66 +156,58 @@ LLVM_DUMP_METHOD void MCFragment::dump() const {
170156 }
171157 case MCFragment::FT_Relaxable: {
172158 const auto *F = cast<MCRelaxableFragment>(this );
173- OS << " \n " ;
174- OS << " Inst:" ;
159+ OS << " Size:" << F->getContents ().size () << ' ' ;
175160 F->getInst ().dump_pretty (OS);
176- OS << " ( " << F->getContents (). size () << " bytes) " ;
161+ printFixups ( F->getFixups ()) ;
177162 break ;
178163 }
179164 case MCFragment::FT_Org: {
180165 const auto *OF = cast<MCOrgFragment>(this );
181- OS << " \n " ;
182166 OS << " Offset:" ;
183167 OF->getOffset ().print (OS, nullptr );
184168 OS << " Value:" << static_cast <unsigned >(OF->getValue ());
185169 break ;
186170 }
187171 case MCFragment::FT_Dwarf: {
188172 const auto *OF = cast<MCDwarfLineAddrFragment>(this );
189- OS << " \n " ;
190173 OS << " AddrDelta:" ;
191174 OF->getAddrDelta ().print (OS, nullptr );
192175 OS << " LineDelta:" << OF->getLineDelta ();
193176 break ;
194177 }
195178 case MCFragment::FT_DwarfFrame: {
196179 const auto *CF = cast<MCDwarfCallFrameFragment>(this );
197- OS << " \n " ;
198180 OS << " AddrDelta:" ;
199181 CF->getAddrDelta ().print (OS, nullptr );
200182 break ;
201183 }
202184 case MCFragment::FT_LEB: {
203185 const auto *LF = cast<MCLEBFragment>(this );
204- OS << " \n " ;
205186 OS << " Value:" ;
206187 LF->getValue ().print (OS, nullptr );
207188 OS << " Signed:" << LF->isSigned ();
208189 break ;
209190 }
210191 case MCFragment::FT_BoundaryAlign: {
211192 const auto *BF = cast<MCBoundaryAlignFragment>(this );
212- OS << " \n " ;
213193 OS << " BoundarySize:" << BF->getAlignment ().value ()
214194 << " LastFragment:" << BF->getLastFragment ()
215195 << " Size:" << BF->getSize ();
216196 break ;
217197 }
218198 case MCFragment::FT_SymbolId: {
219199 const auto *F = cast<MCSymbolIdFragment>(this );
220- OS << " \n " ;
221200 OS << " Sym:" << F->getSymbol ();
222201 break ;
223202 }
224203 case MCFragment::FT_CVInlineLines: {
225204 const auto *F = cast<MCCVInlineLineTableFragment>(this );
226- OS << " \n " ;
227205 OS << " Sym:" << *F->getFnStartSym ();
228206 break ;
229207 }
230208 case MCFragment::FT_CVDefRange: {
231209 const auto *F = cast<MCCVDefRangeFragment>(this );
232- OS << " \n " ;
210+ OS << " \n " ;
233211 for (std::pair<const MCSymbol *, const MCSymbol *> RangeStartEnd :
234212 F->getRanges ()) {
235213 OS << " RangeStart:" << RangeStartEnd.first ;
@@ -239,12 +217,10 @@ LLVM_DUMP_METHOD void MCFragment::dump() const {
239217 }
240218 case MCFragment::FT_PseudoProbe: {
241219 const auto *OF = cast<MCPseudoProbeAddrFragment>(this );
242- OS << " \n " ;
243220 OS << " AddrDelta:" ;
244221 OF->getAddrDelta ().print (OS, nullptr );
245222 break ;
246223 }
247224 }
248- OS << " >" ;
249225}
250226#endif
0 commit comments