diff options
author | Daniel Dunbar <daniel@zuster.org> | 2009-06-23 20:24:17 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2009-06-23 20:24:17 +0000 |
commit | 25e0d8f755736b0a17400adbdd367aee89fbecfc (patch) | |
tree | beb3d7132a920e53ca88de5180a2181b8bcbcbf0 | |
parent | 6f2c64d70aad5328a843a6f6a6547ada69ead33b (diff) |
Start sketching MCStreamer interface.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@73994 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/MC/MCContext.h | 41 | ||||
-rw-r--r-- | include/llvm/MC/MCStreamer.h | 61 |
2 files changed, 102 insertions, 0 deletions
diff --git a/include/llvm/MC/MCContext.h b/include/llvm/MC/MCContext.h new file mode 100644 index 0000000000..3c2addf58c --- /dev/null +++ b/include/llvm/MC/MCContext.h @@ -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 index 0000000000..909f0a585d --- /dev/null +++ b/include/llvm/MC/MCStreamer.h @@ -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 |