diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2017-12-24 01:00:08 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2017-12-24 01:00:08 +0000 | 
| commit | c7dac04c3480f3c20487f912f77343139fce2d99 (patch) | |
| tree | 21a09bce0171e27bd1e92649db9df797fa097cea /lib/MC/MCAsmStreamer.cpp | |
| parent | 044eb2f6afba375a914ac9d8024f8f5142bb912e (diff) | |
Diffstat (limited to 'lib/MC/MCAsmStreamer.cpp')
| -rw-r--r-- | lib/MC/MCAsmStreamer.cpp | 47 | 
1 files changed, 33 insertions, 14 deletions
| diff --git a/lib/MC/MCAsmStreamer.cpp b/lib/MC/MCAsmStreamer.cpp index 3357553cf19f1..e521b6e7c7049 100644 --- a/lib/MC/MCAsmStreamer.cpp +++ b/lib/MC/MCAsmStreamer.cpp @@ -405,9 +405,13 @@ void MCAsmStreamer::emitExplicitComments() {  void MCAsmStreamer::ChangeSection(MCSection *Section,                                    const MCExpr *Subsection) {    assert(Section && "Cannot switch to a null section!"); -  Section->PrintSwitchToSection( -      *MAI, getContext().getObjectFileInfo()->getTargetTriple(), OS, -      Subsection); +  if (MCTargetStreamer *TS = getTargetStreamer()) { +    TS->changeSection(getCurrentSectionOnly(), Section, Subsection, OS); +  } else { +    Section->PrintSwitchToSection( +        *MAI, getContext().getObjectFileInfo()->getTargetTriple(), OS, +        Subsection); +  }  }  void MCAsmStreamer::EmitLabel(MCSymbol *Symbol, SMLoc Loc) { @@ -796,10 +800,15 @@ void MCAsmStreamer::EmitBytes(StringRef Data) {           "Cannot emit contents before setting section!");    if (Data.empty()) return; -  if (Data.size() == 1) { -    OS << MAI->getData8bitsDirective(); -    OS << (unsigned)(unsigned char)Data[0]; -    EmitEOL(); +  // If only single byte is provided or no ascii or asciz directives is +  // supported, emit as vector of 8bits data. +  if (Data.size() == 1 || +      !(MAI->getAscizDirective() || MAI->getAsciiDirective())) { +    const char *Directive = MAI->getData8bitsDirective(); +    for (const unsigned char C : Data.bytes()) { +      OS << Directive << (unsigned)C; +      EmitEOL(); +    }      return;    } @@ -884,8 +893,12 @@ void MCAsmStreamer::EmitValueImpl(const MCExpr *Value, unsigned Size,    assert(Directive && "Invalid size for machine code value!");    OS << Directive; -  Value->print(OS, MAI); -  EmitEOL(); +  if (MCTargetStreamer *TS = getTargetStreamer()) { +    TS->emitValue(Value); +  } else { +    Value->print(OS, MAI); +    EmitEOL(); +  }  }  void MCAsmStreamer::EmitULEB128Value(const MCExpr *Value) { @@ -1097,13 +1110,19 @@ unsigned MCAsmStreamer::EmitDwarfFileDirective(unsigned FileNo,      }    } -  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, OS1); +  if (MCTargetStreamer *TS = getTargetStreamer()) { +    TS->emitDwarfFileDirective(OS1.str()); +  } else { +    EmitRawText(OS1.str());    } -  PrintQuotedString(Filename, OS); -  EmitEOL();    return FileNo;  } | 
