Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEugene Tarassov2014-09-16 20:09:54 +0000
committerEugene Tarassov2014-09-16 20:09:54 +0000
commit52c414cd43851e7dbab66b7d985ecfbcffb65b70 (patch)
treebf5a430205d6af31e4f6a4d50ff0b22dcd7d4d4d
parentfdebdd1f6c28cca3396e65e93095a7eba9a34e9c (diff)
downloadorg.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.c32
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");

Back to the top