diff options
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/MC/MCParser/AsmParser.cpp | 21 | 
1 files changed, 20 insertions, 1 deletions
diff --git a/llvm/lib/MC/MCParser/AsmParser.cpp b/llvm/lib/MC/MCParser/AsmParser.cpp index 38b6171ede9..fd226eac4cd 100644 --- a/llvm/lib/MC/MCParser/AsmParser.cpp +++ b/llvm/lib/MC/MCParser/AsmParser.cpp @@ -467,6 +467,7 @@ private:      DK_CV_INLINE_LINETABLE,      DK_CV_DEF_RANGE,      DK_CV_STRINGTABLE, +    DK_CV_STRING,      DK_CV_FILECHECKSUMS,      DK_CV_FILECHECKSUM_OFFSET,      DK_CV_FPO_DATA, @@ -538,7 +539,7 @@ private:    bool parseDirectiveStabs();    // ".cv_file", ".cv_func_id", ".cv_inline_site_id", ".cv_loc", ".cv_linetable", -  // ".cv_inline_linetable", ".cv_def_range" +  // ".cv_inline_linetable", ".cv_def_range", ".cv_string"    bool parseDirectiveCVFile();    bool parseDirectiveCVFuncId();    bool parseDirectiveCVInlineSiteId(); @@ -546,6 +547,7 @@ private:    bool parseDirectiveCVLinetable();    bool parseDirectiveCVInlineLinetable();    bool parseDirectiveCVDefRange(); +  bool parseDirectiveCVString();    bool parseDirectiveCVStringTable();    bool parseDirectiveCVFileChecksums();    bool parseDirectiveCVFileChecksumOffset(); @@ -2029,6 +2031,8 @@ bool AsmParser::parseStatement(ParseStatementInfo &Info,        return parseDirectiveCVInlineLinetable();      case DK_CV_DEF_RANGE:        return parseDirectiveCVDefRange(); +    case DK_CV_STRING: +      return parseDirectiveCVString();      case DK_CV_STRINGTABLE:        return parseDirectiveCVStringTable();      case DK_CV_FILECHECKSUMS: @@ -3813,6 +3817,20 @@ bool AsmParser::parseDirectiveCVDefRange() {    return false;  } +/// parseDirectiveCVString +/// ::= .cv_stringtable "string" +bool AsmParser::parseDirectiveCVString() { +  std::string Data; +  if (checkForValidSection() || parseEscapedString(Data)) +    return addErrorSuffix(" in '.cv_string' directive"); + +  // Put the string in the table and emit the offset. +  std::pair<StringRef, unsigned> Insertion = +      getCVContext().addToStringTable(Data); +  getStreamer().EmitIntValue(Insertion.second, 4); +  return false; +} +  /// parseDirectiveCVStringTable  /// ::= .cv_stringtable  bool AsmParser::parseDirectiveCVStringTable() { @@ -5238,6 +5256,7 @@ void AsmParser::initializeDirectiveKindMap() {    DirectiveKindMap[".cv_inline_linetable"] = DK_CV_INLINE_LINETABLE;    DirectiveKindMap[".cv_inline_site_id"] = DK_CV_INLINE_SITE_ID;    DirectiveKindMap[".cv_def_range"] = DK_CV_DEF_RANGE; +  DirectiveKindMap[".cv_string"] = DK_CV_STRING;    DirectiveKindMap[".cv_stringtable"] = DK_CV_STRINGTABLE;    DirectiveKindMap[".cv_filechecksums"] = DK_CV_FILECHECKSUMS;    DirectiveKindMap[".cv_filechecksumoffset"] = DK_CV_FILECHECKSUM_OFFSET;  | 

