Allow unimplemented registers to appear in DWARF
The presence of such a register — eg. rcx, which is actually used in CFA on a few lines of libgcc_s.so on my system — will yield an assert(0) in the produced code, but will at least not fail to compile alltogether.
This commit is contained in:
parent
31f811eca4
commit
ff0f8c90df
1 changed files with 23 additions and 18 deletions
|
@ -84,27 +84,32 @@ SimpleDwarf::DwRegister DwarfReader::read_register(
|
||||||
{
|
{
|
||||||
SimpleDwarf::DwRegister output;
|
SimpleDwarf::DwRegister output;
|
||||||
|
|
||||||
switch(reg.k) {
|
try {
|
||||||
case core::FrameSection::register_def::REGISTER:
|
switch(reg.k) {
|
||||||
output.type = SimpleDwarf::DwRegister::REG_REGISTER;
|
case core::FrameSection::register_def::REGISTER:
|
||||||
output.offset = reg.register_plus_offset_r().second;
|
output.type = SimpleDwarf::DwRegister::REG_REGISTER;
|
||||||
output.reg = from_dwarfpp_reg(
|
output.offset = reg.register_plus_offset_r().second;
|
||||||
reg.register_plus_offset_r().first);
|
output.reg = from_dwarfpp_reg(
|
||||||
break;
|
reg.register_plus_offset_r().first);
|
||||||
|
break;
|
||||||
|
|
||||||
case core::FrameSection::register_def::SAVED_AT_OFFSET_FROM_CFA:
|
case core::FrameSection::register_def::SAVED_AT_OFFSET_FROM_CFA:
|
||||||
output.type = SimpleDwarf::DwRegister::REG_CFA_OFFSET;
|
output.type = SimpleDwarf::DwRegister::REG_CFA_OFFSET;
|
||||||
output.offset = reg.saved_at_offset_from_cfa_r();
|
output.offset = reg.saved_at_offset_from_cfa_r();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case core::FrameSection::register_def::INDETERMINATE:
|
case core::FrameSection::register_def::INDETERMINATE:
|
||||||
case core::FrameSection::register_def::UNDEFINED:
|
case core::FrameSection::register_def::UNDEFINED:
|
||||||
output.type = SimpleDwarf::DwRegister::REG_UNDEFINED;
|
output.type = SimpleDwarf::DwRegister::REG_UNDEFINED;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
output.type = SimpleDwarf::DwRegister::REG_NOT_IMPLEMENTED;
|
output.type = SimpleDwarf::DwRegister::REG_NOT_IMPLEMENTED;
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch(const UnsupportedRegister& e) {
|
||||||
|
output.type = SimpleDwarf::DwRegister::REG_NOT_IMPLEMENTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
return output;
|
return output;
|
||||||
|
|
Loading…
Add table
Reference in a new issue