summaryrefslogtreecommitdiffstats
path: root/llvm/lib/MC/MCAsmStreamer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/MC/MCAsmStreamer.cpp')
-rw-r--r--llvm/lib/MC/MCAsmStreamer.cpp86
1 files changed, 28 insertions, 58 deletions
diff --git a/llvm/lib/MC/MCAsmStreamer.cpp b/llvm/lib/MC/MCAsmStreamer.cpp
index 0a006ecf66d..f254cb50b60 100644
--- a/llvm/lib/MC/MCAsmStreamer.cpp
+++ b/llvm/lib/MC/MCAsmStreamer.cpp
@@ -218,10 +218,6 @@ public:
MD5::MD5Result *Checksum = 0,
Optional<StringRef> Source = None,
unsigned CUID = 0) override;
- void emitDwarfFile0Directive(StringRef Directory, StringRef Filename,
- MD5::MD5Result *Checksum,
- Optional<StringRef> Source,
- unsigned CUID = 0) override;
void EmitDwarfLocDirective(unsigned FileNo, unsigned Line,
unsigned Column, unsigned Flags,
unsigned Isa, unsigned Discriminator,
@@ -1080,10 +1076,21 @@ void MCAsmStreamer::EmitFileDirective(StringRef Filename) {
EmitEOL();
}
-void printDwarfFileDirective(unsigned FileNo, StringRef Directory,
- StringRef Filename, MD5::MD5Result *Checksum,
- Optional<StringRef> Source, bool UseDwarfDirectory,
- raw_svector_ostream &OS) {
+Expected<unsigned> MCAsmStreamer::tryEmitDwarfFileDirective(
+ unsigned FileNo, StringRef Directory, StringRef Filename,
+ MD5::MD5Result *Checksum, Optional<StringRef> Source, unsigned CUID) {
+ assert(CUID == 0);
+
+ MCDwarfLineTable &Table = getContext().getMCDwarfLineTable(CUID);
+ unsigned NumFiles = Table.getMCDwarfFiles().size();
+ Expected<unsigned> FileNoOrErr =
+ Table.tryGetFile(Directory, Filename, Checksum, Source, FileNo);
+ if (!FileNoOrErr)
+ return FileNoOrErr.takeError();
+ FileNo = FileNoOrErr.get();
+ if (NumFiles == Table.getMCDwarfFiles().size())
+ return FileNo;
+
SmallString<128> FullPathName;
if (!UseDwarfDirectory && !Directory.empty()) {
@@ -1097,68 +1104,31 @@ void printDwarfFileDirective(unsigned FileNo, StringRef Directory,
}
}
- OS << "\t.file\t" << FileNo << ' ';
+ SmallString<128> Str;
+ raw_svector_ostream OS1(Str);
+ OS1 << "\t.file\t" << FileNo << ' ';
if (!Directory.empty()) {
- PrintQuotedString(Directory, OS);
- OS << ' ';
+ PrintQuotedString(Directory, OS1);
+ OS1 << ' ';
}
- PrintQuotedString(Filename, OS);
+ PrintQuotedString(Filename, OS1);
if (Checksum) {
- OS << " md5 ";
- PrintQuotedString(Checksum->digest(), OS);
+ OS1 << " md5 ";
+ PrintQuotedString(Checksum->digest(), OS1);
}
if (Source) {
- OS << " source ";
- PrintQuotedString(*Source, OS);
+ OS1 << " source ";
+ PrintQuotedString(*Source, OS1);
}
-}
-
-Expected<unsigned> MCAsmStreamer::tryEmitDwarfFileDirective(
- unsigned FileNo, StringRef Directory, StringRef Filename,
- MD5::MD5Result *Checksum, Optional<StringRef> Source, unsigned CUID) {
- assert(CUID == 0 && "multiple CUs not supported by MCAsmStreamer");
-
- MCDwarfLineTable &Table = getContext().getMCDwarfLineTable(CUID);
- unsigned NumFiles = Table.getMCDwarfFiles().size();
- Expected<unsigned> FileNoOrErr =
- Table.tryGetFile(Directory, Filename, Checksum, Source, FileNo);
- if (!FileNoOrErr)
- return FileNoOrErr.takeError();
- FileNo = FileNoOrErr.get();
- if (NumFiles == Table.getMCDwarfFiles().size())
- return FileNo;
-
- SmallString<128> Str;
- raw_svector_ostream OS1(Str);
- printDwarfFileDirective(FileNo, Directory, Filename, Checksum, Source,
- UseDwarfDirectory, OS1);
-
- if (MCTargetStreamer *TS = getTargetStreamer())
+ if (MCTargetStreamer *TS = getTargetStreamer()) {
TS->emitDwarfFileDirective(OS1.str());
- else
+ } else {
EmitRawText(OS1.str());
+ }
return FileNo;
}
-void MCAsmStreamer::emitDwarfFile0Directive(StringRef Directory,
- StringRef Filename,
- MD5::MD5Result *Checksum,
- Optional<StringRef> Source,
- unsigned CUID) {
- assert(CUID == 0);
-
- SmallString<128> Str;
- raw_svector_ostream OS1(Str);
- printDwarfFileDirective(0, Directory, Filename, Checksum, Source,
- UseDwarfDirectory, OS1);
-
- if (MCTargetStreamer *TS = getTargetStreamer())
- TS->emitDwarfFileDirective(OS1.str());
- else
- EmitRawText(OS1.str());
-}
-
void MCAsmStreamer::EmitDwarfLocDirective(unsigned FileNo, unsigned Line,
unsigned Column, unsigned Flags,
unsigned Isa,
OpenPOWER on IntegriCloud