//===----------------------------------------------------------------------===//
#include "llvm/MC/MCStreamer.h"
-#include "llvm/ADT/OwningPtr.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/ADT/Twine.h"
formatted_raw_ostream &OS;
const MCAsmInfo *MAI;
private:
- OwningPtr<MCInstPrinter> InstPrinter;
- OwningPtr<MCCodeEmitter> Emitter;
- OwningPtr<MCAsmBackend> AsmBackend;
+ std::unique_ptr<MCInstPrinter> InstPrinter;
+ std::unique_ptr<MCCodeEmitter> Emitter;
+ std::unique_ptr<MCAsmBackend> AsmBackend;
SmallString<128> CommentToEmit;
raw_svector_ostream CommentStream;
unsigned IsVerboseAsm : 1;
unsigned ShowInst : 1;
- unsigned UseLoc : 1;
unsigned UseCFI : 1;
unsigned UseDwarfDirectory : 1;
public:
MCAsmStreamer(MCContext &Context, formatted_raw_ostream &os,
- bool isVerboseAsm, bool useLoc, bool useCFI,
- bool useDwarfDirectory, MCInstPrinter *printer,
- MCCodeEmitter *emitter, MCAsmBackend *asmbackend, bool showInst)
+ bool isVerboseAsm, bool useCFI, bool useDwarfDirectory,
+ MCInstPrinter *printer, MCCodeEmitter *emitter,
+ MCAsmBackend *asmbackend, bool showInst)
: MCStreamer(Context), OS(os), MAI(Context.getAsmInfo()),
InstPrinter(printer), Emitter(emitter), AsmBackend(asmbackend),
CommentStream(CommentToEmit), IsVerboseAsm(isVerboseAsm),
- ShowInst(showInst), UseLoc(useLoc), UseCFI(useCFI),
+ ShowInst(showInst), UseCFI(useCFI),
UseDwarfDirectory(useDwarfDirectory) {
if (InstPrinter && IsVerboseAsm)
InstPrinter->setCommentStream(CommentStream);
return CommentStream;
}
- void emitRawComment(const Twine &T, bool TabPrefix = true) LLVM_OVERRIDE;
+ void emitRawComment(const Twine &T, bool TabPrefix = true) override;
/// AddBlankLine - Emit a blank line to a .s file to pretty it up.
virtual void AddBlankLine() {
virtual void ChangeSection(const MCSection *Section,
const MCExpr *Subsection);
- virtual void InitSections(bool Force) {
- if (Force)
- SwitchSection(getContext().getObjectFileInfo()->getTextSection());
- }
-
virtual void EmitLabel(MCSymbol *Symbol);
virtual void EmitDebugLabel(MCSymbol *Symbol);
// emit alignments as a power of two if possible.
if (isPowerOf2_32(ByteAlignment)) {
switch (ValueSize) {
- default: llvm_unreachable("Invalid size for machine code value!");
- case 1: OS << MAI->getAlignDirective(); break;
- // FIXME: use MAI for this!
- case 2: OS << ".p2alignw "; break;
- case 4: OS << ".p2alignl "; break;
- case 8: llvm_unreachable("Unsupported alignment size!");
+ default:
+ llvm_unreachable("Invalid size for machine code value!");
+ case 1:
+ OS << "\t.align\t";
+ break;
+ case 2:
+ OS << ".p2alignw ";
+ break;
+ case 4:
+ OS << ".p2alignl ";
+ break;
+ case 8:
+ llvm_unreachable("Unsupported alignment size!");
}
if (MAI->getAlignmentIsInBytes())
return EmitDwarfFileDirective(FileNo, "", FullPathName, CUID);
}
- if (UseLoc) {
- OS << "\t.file\t" << FileNo << ' ';
- if (!Directory.empty()) {
- PrintQuotedString(Directory, OS);
- OS << ' ';
- }
- PrintQuotedString(Filename, OS);
- EmitEOL();
- // All .file will belong to a single CUID.
- CUID = 0;
+ OS << "\t.file\t" << FileNo << ' ';
+ if (!Directory.empty()) {
+ PrintQuotedString(Directory, OS);
+ OS << ' ';
}
+ PrintQuotedString(Filename, OS);
+ EmitEOL();
+ // All .file will belong to a single CUID.
+ CUID = 0;
+
return this->MCStreamer::EmitDwarfFileDirective(FileNo, Directory, Filename,
CUID);
}
StringRef FileName) {
this->MCStreamer::EmitDwarfLocDirective(FileNo, Line, Column, Flags,
Isa, Discriminator, FileName);
- if (!UseLoc)
- return;
-
OS << "\t.loc\t" << FileNo << " " << Line << " " << Column;
if (Flags & DWARF2_FLAG_BASIC_BLOCK)
OS << " basic_block";
}
if (Isa)
- OS << "isa " << Isa;
+ OS << " isa " << Isa;
if (Discriminator)
- OS << "discriminator " << Discriminator;
+ OS << " discriminator " << Discriminator;
if (IsVerboseAsm) {
OS.PadToColumn(MAI->getCommentColumn());
}
void MCAsmStreamer::FinishImpl() {
- // FIXME: This header is duplicated with MCObjectStreamer
- // Dump out the dwarf file & directory tables and line tables.
- const MCSymbol *LineSectionSymbol = NULL;
- if (getContext().hasDwarfFiles() && !UseLoc)
- LineSectionSymbol = MCDwarfFileTable::Emit(this);
-
// If we are generating dwarf for assembly source files dump out the sections.
if (getContext().getGenDwarfForAssembly())
- MCGenDwarfInfo::Emit(this, LineSectionSymbol);
+ MCGenDwarfInfo::Emit(this, NULL);
if (!UseCFI)
EmitFrames(AsmBackend.get(), false);
MCStreamer *llvm::createAsmStreamer(MCContext &Context,
formatted_raw_ostream &OS,
- bool isVerboseAsm, bool useLoc, bool useCFI,
+ bool isVerboseAsm, bool useCFI,
bool useDwarfDirectory, MCInstPrinter *IP,
MCCodeEmitter *CE, MCAsmBackend *MAB,
bool ShowInst) {
- return new MCAsmStreamer(Context, OS, isVerboseAsm, useLoc,
- useCFI, useDwarfDirectory, IP, CE, MAB, ShowInst);
+ return new MCAsmStreamer(Context, OS, isVerboseAsm, useCFI, useDwarfDirectory,
+ IP, CE, MAB, ShowInst);
}