1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-25 12:12:47 +01:00

[DebugInfo] Fix DWARFDebugFrame instruction operand ordering

We can't rely on the evalution order of function arguments.

Differential Revision: http://reviews.llvm.org/D16509

llvm-svn: 258806
This commit is contained in:
Igor Laevsky 2016-01-26 13:31:11 +00:00
parent 0800d72a1a
commit 3044550590

View File

@ -160,18 +160,26 @@ void FrameEntry::parseInstructions(DataExtractor Data, uint32_t *Offset,
case DW_CFA_offset_extended:
case DW_CFA_register:
case DW_CFA_def_cfa:
case DW_CFA_val_offset:
case DW_CFA_val_offset: {
// Operands: ULEB128, ULEB128
addInstruction(Opcode, Data.getULEB128(Offset),
Data.getULEB128(Offset));
// Note: We can not embed getULEB128 directly into function
// argument list. getULEB128 changes Offset and order of evaluation
// for arguments is unspecified.
auto op1 = Data.getULEB128(Offset);
auto op2 = Data.getULEB128(Offset);
addInstruction(Opcode, op1, op2);
break;
}
case DW_CFA_offset_extended_sf:
case DW_CFA_def_cfa_sf:
case DW_CFA_val_offset_sf:
case DW_CFA_val_offset_sf: {
// Operands: ULEB128, SLEB128
addInstruction(Opcode, Data.getULEB128(Offset),
Data.getSLEB128(Offset));
// Note: see comment for the previous case
auto op1 = Data.getULEB128(Offset);
auto op2 = (uint64_t)Data.getSLEB128(Offset);
addInstruction(Opcode, op1, op2);
break;
}
case DW_CFA_def_cfa_expression:
case DW_CFA_expression:
case DW_CFA_val_expression: