Add basic CFI methods to the streamer interface.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@119972 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/MC/MCParser/AsmParser.cpp b/lib/MC/MCParser/AsmParser.cpp
index 63ddfb9..a03e496 100644
--- a/lib/MC/MCParser/AsmParser.cpp
+++ b/lib/MC/MCParser/AsmParser.cpp
@@ -2151,13 +2151,13 @@
 /// ::= .cfi_startproc
 bool GenericAsmParser::ParseDirectiveCFIStartProc(StringRef,
                                                   SMLoc DirectiveLoc) {
-  return false;
+  return getStreamer().EmitCFIStartProc();
 }
 
 /// ParseDirectiveCFIEndProc
 /// ::= .cfi_endproc
 bool GenericAsmParser::ParseDirectiveCFIEndProc(StringRef, SMLoc DirectiveLoc) {
-  return false;
+  return getStreamer().EmitCFIEndProc();
 }
 
 /// ParseDirectiveCFIDefCfaOffset
@@ -2168,7 +2168,7 @@
   if (getParser().ParseAbsoluteExpression(Offset))
     return true;
 
-  return false;
+  return getStreamer().EmitCFIDefCfaOffset(Offset);
 }
 
 /// ParseDirectiveCFIDefCfaRegister
@@ -2178,7 +2178,8 @@
   int64_t Register = 0;
   if (getParser().ParseAbsoluteExpression(Register))
     return true;
-  return false;
+
+  return getStreamer().EmitCFIDefCfaRegister(Register);
 }
 
 /// ParseDirectiveCFIOffset
@@ -2196,13 +2197,13 @@
   if (getParser().ParseAbsoluteExpression(Offset))
     return true;
 
-  return false;
+  return getStreamer().EmitCFIOffset(Register, Offset);
 }
 
 /// ParseDirectiveCFIPersonalityOrLsda
 /// ::= .cfi_personality encoding, [symbol_name]
 /// ::= .cfi_lsda encoding, [symbol_name]
-bool GenericAsmParser::ParseDirectiveCFIPersonalityOrLsda(StringRef,
+bool GenericAsmParser::ParseDirectiveCFIPersonalityOrLsda(StringRef IDVal,
                                                     SMLoc DirectiveLoc) {
   int64_t Encoding = 0;
   if (getParser().ParseAbsoluteExpression(Encoding))
@@ -2210,6 +2211,9 @@
   if (Encoding == 255)
     return false;
 
+  if (Encoding != 0)
+    return TokError("unsupported encoding.");
+
   if (getLexer().isNot(AsmToken::Comma))
     return TokError("unexpected token in directive");
   Lex();
@@ -2217,7 +2221,15 @@
   StringRef Name;
   if (getParser().ParseIdentifier(Name))
     return TokError("expected identifier in directive");
-  return false;
+
+  MCSymbol *Sym = getContext().GetOrCreateSymbol(Name);
+
+  if (IDVal == ".cfi_personality")
+    return getStreamer().EmitCFIPersonality(Sym);
+  else {
+    assert(IDVal == ".cfi_lsda");
+    return getStreamer().EmitCFILsda(Sym);
+  }
 }
 
 /// ParseDirectiveMacrosOnOff