diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2011-12-29 20:24:47 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2011-12-29 20:24:47 +0000 |
commit | 6f0b181bc70318f8d5d4b9bdead7fc748677fe2a (patch) | |
tree | f70b8db2e505690885127c12971359f9597f9b28 /include | |
parent | 19f18be449268605ea210e68b02220a0e7bd0c15 (diff) | |
download | llvm-6f0b181bc70318f8d5d4b9bdead7fc748677fe2a.tar.gz llvm-6f0b181bc70318f8d5d4b9bdead7fc748677fe2a.tar.bz2 llvm-6f0b181bc70318f8d5d4b9bdead7fc748677fe2a.tar.xz |
Implement .cfi_escape. Patch by Brian Anderson!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@147352 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r-- | include/llvm/MC/MCDwarf.h | 10 | ||||
-rw-r--r-- | include/llvm/MC/MCStreamer.h | 1 |
2 files changed, 10 insertions, 1 deletions
diff --git a/include/llvm/MC/MCDwarf.h b/include/llvm/MC/MCDwarf.h index 9c77218215..2e026ab072 100644 --- a/include/llvm/MC/MCDwarf.h +++ b/include/llvm/MC/MCDwarf.h @@ -271,13 +271,14 @@ namespace llvm { class MCCFIInstruction { public: - enum OpType { SameValue, Remember, Restore, Move, RelMove }; + enum OpType { SameValue, Remember, Restore, Move, RelMove, Escape }; private: OpType Operation; MCSymbol *Label; // Move to & from location. MachineLocation Destination; MachineLocation Source; + std::vector<char> Values; public: MCCFIInstruction(OpType Op, MCSymbol *L) : Operation(Op), Label(L) { @@ -296,10 +297,17 @@ namespace llvm { : Operation(Op), Label(L), Destination(D), Source(S) { assert(Op == RelMove); } + MCCFIInstruction(OpType Op, MCSymbol *L, StringRef Vals) + : Operation(Op), Label(L), Values(Vals.begin(), Vals.end()) { + assert(Op == Escape); + } OpType getOperation() const { return Operation; } MCSymbol *getLabel() const { return Label; } const MachineLocation &getDestination() const { return Destination; } const MachineLocation &getSource() const { return Source; } + const StringRef getValues() const { + return StringRef(&Values[0], Values.size()); + } }; struct MCDwarfFrameInfo { diff --git a/include/llvm/MC/MCStreamer.h b/include/llvm/MC/MCStreamer.h index 9ba50b1a26..5483fb07f1 100644 --- a/include/llvm/MC/MCStreamer.h +++ b/include/llvm/MC/MCStreamer.h @@ -549,6 +549,7 @@ namespace llvm { virtual void EmitCFISameValue(int64_t Register); virtual void EmitCFIRelOffset(int64_t Register, int64_t Offset); virtual void EmitCFIAdjustCfaOffset(int64_t Adjustment); + virtual void EmitCFIEscape(StringRef Values); virtual void EmitWin64EHStartProc(const MCSymbol *Symbol); virtual void EmitWin64EHEndProc(); |