Debug info: Use DW_OP_bit_piece instead of DW_OP_piece in the

intermediate representation. This
- increases consistency by using the same granularity everywhere
- allows for pieces < 1 byte
- DW_OP_piece didn't actually allow storing an offset.

Part of PR22495.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@228631 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Adrian Prantl
2015-02-09 23:57:15 +00:00
parent 76419c0533
commit 4f1b7f3100
18 changed files with 80 additions and 83 deletions

View File

@@ -211,10 +211,9 @@ bool DwarfExpression::AddMachineRegExpression(DIExpression Expr,
bool ValidReg = false;
switch (*I) {
case dwarf::DW_OP_piece: {
unsigned SizeOfByte = 8;
unsigned OffsetInBits = I->getArg(1) * SizeOfByte;
unsigned SizeInBits = I->getArg(2) * SizeOfByte;
case dwarf::DW_OP_bit_piece: {
unsigned OffsetInBits = I->getArg(1);
unsigned SizeInBits = I->getArg(2);
// Piece always comes at the end of the expression.
return AddMachineRegPiece(MachineReg, SizeInBits,
getOffsetOrZero(OffsetInBits, PieceOffsetInBits));
@@ -249,10 +248,9 @@ void DwarfExpression::AddExpression(DIExpression::iterator I,
unsigned PieceOffsetInBits) {
for (; I != DIExpression::iterator(); ++I) {
switch (*I) {
case dwarf::DW_OP_piece: {
unsigned SizeOfByte = 8;
unsigned OffsetInBits = I->getArg(1) * SizeOfByte;
unsigned SizeInBits = I->getArg(2) * SizeOfByte;
case dwarf::DW_OP_bit_piece: {
unsigned OffsetInBits = I->getArg(1);
unsigned SizeInBits = I->getArg(2);
AddOpPiece(SizeInBits, getOffsetOrZero(OffsetInBits, PieceOffsetInBits));
break;
}