diff options
author | Eugene Tarassov | 2014-09-16 20:09:54 +0000 |
---|---|---|
committer | Eugene Tarassov | 2014-09-16 20:09:54 +0000 |
commit | 52c414cd43851e7dbab66b7d985ecfbcffb65b70 (patch) | |
tree | bf5a430205d6af31e4f6a4d50ff0b22dcd7d4d4d | |
parent | fdebdd1f6c28cca3396e65e93095a7eba9a34e9c (diff) | |
download | org.eclipse.tcf.agent-52c414cd43851e7dbab66b7d985ecfbcffb65b70.tar.gz org.eclipse.tcf.agent-52c414cd43851e7dbab66b7d985ecfbcffb65b70.tar.xz org.eclipse.tcf.agent-52c414cd43851e7dbab66b7d985ecfbcffb65b70.zip |
Bug 443952 - Incomplete decode of debug frame info
-rw-r--r-- | agent/tcf/services/dwarfframe.c | 32 |
1 files changed, 6 insertions, 26 deletions
diff --git a/agent/tcf/services/dwarfframe.c b/agent/tcf/services/dwarfframe.c index bfc2781c..804968ba 100644 --- a/agent/tcf/services/dwarfframe.c +++ b/agent/tcf/services/dwarfframe.c @@ -327,45 +327,25 @@ static U8_T read_frame_data_pointer(U1_T encoding, ELF_Section ** sec, U8_T func v += dio_ReadU8LEB128(); break; case EH_PE_udata2: - v += dio_ReadU2(); + v += dio_ReadAddressX(sec, 2); break; case EH_PE_udata4: - if (rules.address_size == 4 && ((encoding >> 4) & 0x7) == EH_PB_pcrel) { - v += dio_ReadAddress(sec); - } - else { - v += dio_ReadU4(); - } + v += dio_ReadAddressX(sec, 4); break; case EH_PE_udata8: - if (rules.address_size == 8 && ((encoding >> 4) & 0x7) == EH_PB_pcrel) { - v += dio_ReadAddress(sec); - } - else { - v += dio_ReadU8(); - } + v += dio_ReadAddressX(sec, 8); break; case EH_PE_sleb128: v += dio_ReadS8LEB128(); break; case EH_PE_sdata2: - v += (I2_T)dio_ReadU2(); + v += (I2_T)dio_ReadAddressX(sec, 2); break; case EH_PE_sdata4: - if (rules.address_size == 4 && ((encoding >> 4) & 0x7) == EH_PB_pcrel) { - v += (I4_T)dio_ReadAddress(sec); - } - else { - v += (I4_T)dio_ReadU4(); - } + v += (I4_T)dio_ReadAddressX(sec, 4); break; case EH_PE_sdata8: - if (rules.address_size == 8 && ((encoding >> 4) & 0x7) == EH_PB_pcrel) { - v += (I8_T)dio_ReadAddress(sec); - } - else { - v += (I8_T)dio_ReadU8(); - } + v += (I8_T)dio_ReadAddressX(sec, 8); break; default: str_exception(ERR_INV_DWARF, "Unknown encoding of .eh_frame section pointers"); |