Skip to content

Commit 279e808

Browse files
committed
MC: Make mc-dump output compact
Remove unneeded details like "<" and ">". Reduce indentation. Omit `this` address to simplify output comparison. Add a -debug-only=mc-dump test. While here, add fixup printing for MCRelaxableFragment.
1 parent 2248cdf commit 279e808

File tree

5 files changed

+95
-91
lines changed

5 files changed

+95
-91
lines changed

llvm/lib/MC/MCAssembler.cpp

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1274,30 +1274,26 @@ void MCAssembler::flushPendingErrors() const {
12741274
LLVM_DUMP_METHOD void MCAssembler::dump() const{
12751275
raw_ostream &OS = errs();
12761276

1277-
OS << "<MCAssembler\n";
1278-
OS << " Sections:[\n ";
1277+
OS << "Sections:[";
12791278
bool First = true;
12801279
for (const MCSection &Sec : *this) {
1281-
if (First)
1282-
First = false;
1283-
else
1284-
OS << ",\n ";
1280+
OS << '\n';
12851281
Sec.dump();
12861282
}
1287-
OS << "],\n";
1288-
OS << " Symbols:[";
1283+
OS << "\n]\n";
1284+
OS << "Symbols:[\n";
12891285

12901286
First = true;
12911287
for (const MCSymbol &Sym : symbols()) {
12921288
if (First)
12931289
First = false;
12941290
else
1295-
OS << ",\n ";
1291+
OS << "\n";
12961292
OS << "(";
12971293
Sym.dump();
12981294
OS << ", Index:" << Sym.getIndex() << ", ";
12991295
OS << ")";
13001296
}
1301-
OS << "]>\n";
1297+
OS << "\n]\n";
13021298
}
13031299
#endif

llvm/lib/MC/MCFragment.cpp

Lines changed: 42 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -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)
9684
LLVM_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

llvm/lib/MC/MCSection.cpp

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -70,16 +70,10 @@ StringRef MCSection::getVirtualSectionKind() const { return "virtual"; }
7070
LLVM_DUMP_METHOD void MCSection::dump() const {
7171
raw_ostream &OS = errs();
7272

73-
OS << "<MCSection Name:" << getName();
74-
OS << " Fragments:[\n ";
75-
bool First = true;
73+
OS << "MCSection Name:" << getName();
7674
for (auto &F : *this) {
77-
if (First)
78-
First = false;
79-
else
80-
OS << ",\n ";
75+
OS << '\n';
8176
F.dump();
8277
}
83-
OS << "]>";
8478
}
8579
#endif

llvm/test/DebugInfo/X86/debug-line-in-one-fragment.ll

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,15 +43,13 @@
4343
;; single data fragment. (Check that we see one data fragment, then no more
4444
;; fragments until the next section).
4545
;
46-
; FRAGMENTS: <MCSection Name:.debug_line Fragments:[
47-
; FRAGMENTS-NEXT: <MCDataFragment<MCFragment
48-
; FRAGMENTS-NEXT: Contents:[
49-
; FRAGMENTS-NEXT: Fixups:[
46+
; FRAGMENTS: Section Name:.debug_line
47+
; FRAGMENTS-NEXT: Data
48+
; FRAGMENTS-NEXT: Fixup
5049
;
51-
; FRAGMENTS-NOT: MCDataFragment
52-
; FRAGMENTS-NOT: MCFragment
50+
; FRAGMENTS-NOT: Data
5351
;
54-
; FRAGMENTS: <MCSection Name:.debug_line_str Fragments:[
52+
; FRAGMENTS: Section Name:.debug_line_str
5553

5654
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
5755
target triple = "x86_64-unknown-linux-gnu"

llvm/test/MC/ELF/mc-dump.s

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# REQUIRES: asserts
2+
# RUN: llvm-mc -filetype=obj -triple=x86_64 %s -o %t -debug-only=mc-dump 2>&1 | FileCheck %s --match-full-lines --strict-whitespace
3+
4+
#CHECK-LABEL:assembler backend - pre-layout
5+
# CHECK:MCSection Name:.text
6+
#CHECK-LABEL:assembler backend - final-layout
7+
# CHECK:Sections:[
8+
# CHECK-NEXT:MCSection Name:.text
9+
# CHECK-NEXT:0 Data Size:0 []
10+
# CHECK-NEXT:0 Align Align:4 Value:0 ValueSize:1 MaxBytesToEmit:4 Nops
11+
# CHECK-NEXT:0 Data Size:0 []
12+
# CHECK-NEXT:0 Org Offset:3 Value:0
13+
# CHECK-NEXT:3 Relaxable Size:2 <MCInst #1996 <MCOperand Expr:.Ltmp1>>
14+
# CHECK-NEXT: Fixup Offset:1 Value:.Ltmp1-1 Kind:4006
15+
# CHECK-NEXT:5 Data Size:16 [48,8b,04,25,00,00,00,00,48,8b,04,25,00,00,00,00]
16+
# CHECK-NEXT: Fixup Offset:4 Value:f0@<variant 11> Kind:4021
17+
# CHECK-NEXT: Fixup Offset:12 Value:f1@<variant 11> Kind:4021
18+
# CHECK-NEXT:MCSection Name:.data
19+
# CHECK-NEXT:0 Data Size:0 []
20+
# CHECK-NEXT:0 Align Align:4 Value:0 ValueSize:1 MaxBytesToEmit:4
21+
# CHECK-NEXT:0 Data Size:4 [01,00,00,00]
22+
# CHECK-NEXT:4 Fill Value:0 ValueSize:1 NumValues:1
23+
# CHECK-NEXT:5 LEB Value:.Ltmp1-.Ltmp0 Signed:0
24+
# CHECK-NEXT:]
25+
# CHECK-NEXT:Symbols:[
26+
# CHECK-NEXT:(.text, Index:0, )
27+
# CHECK-NEXT:(.Ltmp0, Index:0, )
28+
29+
0:
30+
.org 3
31+
jmp 1f
32+
movq f0@GOTPCREL, %rax
33+
movq f1@GOTPCREL, %rax
34+
1:
35+
36+
.data
37+
.p2align 2
38+
.long 1
39+
.space 1
40+
.uleb128 1b-0b

0 commit comments

Comments
 (0)