[DebugInfo] Add calling convention support for DWARF and CodeView
Summary: Now DISubroutineType has a 'cc' field which should be a DW_CC_ enum. If it is present and non-zero, the backend will emit it as a DW_AT_calling_convention attribute. On the CodeView side, we translate it to the appropriate enum for the LF_PROCEDURE record. I added a new LLVM vendor specific enum to the list of DWARF calling conventions. DWARF does not appear to attempt to standardize these, so I assume it's OK to do this until we coordinate with GCC on how to emit vectorcall convention functions. Reviewers: dexonsmith, majnemer, aaboud, amccarth Subscribers: mehdi_amini, llvm-commits Differential Revision: http://reviews.llvm.org/D21114 llvm-svn: 272197
This commit is contained in:
@@ -2409,17 +2409,18 @@ std::error_code BitcodeReader::parseMetadata(bool ModuleLevel) {
|
||||
break;
|
||||
}
|
||||
case bitc::METADATA_SUBROUTINE_TYPE: {
|
||||
if (Record.size() != 3)
|
||||
if (Record.size() < 3 || Record.size() > 4)
|
||||
return error("Invalid record");
|
||||
bool IsOldTypeRefArray = Record[0] < 2;
|
||||
unsigned CC = (Record.size() > 3) ? Record[3] : 0;
|
||||
|
||||
IsDistinct = Record[0] & 0x1;
|
||||
bool IsOldTypeRefArray = Record[0] < 2;
|
||||
Metadata *Types = getMDOrNull(Record[2]);
|
||||
if (LLVM_UNLIKELY(IsOldTypeRefArray))
|
||||
Types = MetadataList.upgradeTypeRefArray(Types);
|
||||
|
||||
MetadataList.assignValue(
|
||||
GET_OR_DISTINCT(DISubroutineType, (Context, Record[1], Types)),
|
||||
GET_OR_DISTINCT(DISubroutineType, (Context, Record[1], CC, Types)),
|
||||
NextMetadataNo++);
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user