Start sketching MCStreamer interface.
authorDaniel Dunbar <daniel@zuster.org>
Tue, 23 Jun 2009 20:24:17 +0000 (20:24 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Tue, 23 Jun 2009 20:24:17 +0000 (20:24 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@73994 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/MC/MCContext.h [new file with mode: 0644]
include/llvm/MC/MCStreamer.h [new file with mode: 0644]

diff --git a/include/llvm/MC/MCContext.h b/include/llvm/MC/MCContext.h
new file mode 100644 (file)
index 0000000..3c2addf
--- /dev/null
@@ -0,0 +1,41 @@
+//===- MCContext.h - Machine Code Context -----------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_MC_MCCONTEXT_H
+#define LLVM_MC_MCCONTEXT_H
+
+namespace llvm {
+  class MCAtom;
+  class MCImm;
+  class MCSection;
+  class MCSymbol;
+
+  /// MCContext - Context object for machine code objects.
+  class MCContext {
+    MCContext(const MCContext&); // DO NOT IMPLEMENT
+    MCContext &operator=(const MCContext&); // DO NOT IMPLEMENT
+
+  public:
+    MCContext();
+    ~MCContext();
+
+    MCSection *GetSection(const char *Name);
+    MCAtom *CreateAtom(MCSection *Section);
+    MCSymbol *CreateSymbol(MCAtom *Atom,
+                           const char *Name,
+                           bool IsTemporary);
+    MCSymbol *LookupSymbol(const char *Name) const;
+
+    void SetSymbolValue(MCSymbol *Sym, const MCImm &Value);
+    const MCImm &GetSymbolValue(MCSymbol *Sym) const;
+  };
+
+} // end namespace llvm
+
+#endif
diff --git a/include/llvm/MC/MCStreamer.h b/include/llvm/MC/MCStreamer.h
new file mode 100644 (file)
index 0000000..909f0a5
--- /dev/null
@@ -0,0 +1,61 @@
+//===- MCStreamer.h - High-level Streaming Machine Code Output --*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_MC_MCSTREAMER_H
+#define LLVM_MC_MCSTREAMER_H
+
+namespace llvm {
+  class MCAtom;
+  class MCContext;
+  class MCImm;
+  class MCInst;
+  class MCSection;
+  class MCSymbol;
+  class raw_ostream;
+
+  /// MCStreamer - Streaming machine code generation interface.
+  class MCStreamer {
+  public:
+    enum SymbolAttr {
+      Global,
+      Weak,
+      PrivateExtern
+    };
+
+  private:
+    MCContext &Context;
+
+    MCStreamer(const MCStreamer&); // DO NOT IMPLEMENT
+    MCStreamer &operator=(const MCStreamer&); // DO NOT IMPLEMENT
+
+  public:
+    MCStreamer(MCContext &Ctx);
+    virtual ~MCStreamer();
+
+    MCContext &getContext() const { return Context; }
+
+    virtual void SwitchSection(MCSection *Sect) = 0;
+
+    virtual void EmitSymbol(MCSymbol *Sym);
+    virtual void EmitSymbolAssignment(MCSymbol *Sym, const MCImm &Value) = 0;
+    virtual void EmitSymbolAttribute(MCSymbol *Sym, 
+                                     SymbolAttr Attr) = 0;
+
+    virtual void EmitBytes(const char *Data, unsigned Length) = 0;
+    virtual void EmitValue(const MCImm &Value, unsigned Size) = 0;
+    virtual void EmitInstruction(const MCInst &Inst) = 0;
+  };
+
+  MCStreamer *createAsmStreamer(MCContext &Ctx, raw_ostream &OS);
+  MCStreamer *createMachOStreamer(MCContext &Ctx, raw_ostream &OS);
+  MCStreamer *createELFStreamer(MCContext &Ctx, raw_ostream &OS);
+
+} // end namespace llvm
+
+#endif