summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2011-12-29 20:24:47 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2011-12-29 20:24:47 +0000
commit6f0b181bc70318f8d5d4b9bdead7fc748677fe2a (patch)
treef70b8db2e505690885127c12971359f9597f9b28 /include
parent19f18be449268605ea210e68b02220a0e7bd0c15 (diff)
downloadllvm-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.h10
-rw-r--r--include/llvm/MC/MCStreamer.h1
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();