summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPierre-Marie de Rodat <derodat@adacore.com>2017-04-25 13:10:36 (GMT)
committerPierre-Marie de Rodat <derodat@adacore.com>2018-03-23 18:02:49 (GMT)
commit96e74de0219c7d559d8f5706e88e30f37c2a2cf8 (patch)
tree2f7df5121822382c40eac29b0c8042fece630255
parent460c6dd93f5f6ba3ea20979ad9fa95a4a6f660d5 (diff)
downloadcv2pdb-96e74de0219c7d559d8f5706e88e30f37c2a2cf8.zip
cv2pdb-96e74de0219c7d559d8f5706e88e30f37c2a2cf8.tar.gz
cv2pdb-96e74de0219c7d559d8f5706e88e30f37c2a2cf8.tar.bz2
Fix handling of discontinuous address ranges on X64
-rw-r--r--src/dwarf2pdb.cpp15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/dwarf2pdb.cpp b/src/dwarf2pdb.cpp
index 65f9803..b2c5afa 100644
--- a/src/dwarf2pdb.cpp
+++ b/src/dwarf2pdb.cpp
@@ -789,10 +789,21 @@ bool CV2PDB::addDWARFProc(DWARF_InfoData& procid, DWARF_CompilationUnit* cu, DIE
// TODO: handle base address selection
byte *r = (byte *)img.debug_ranges + id.ranges;
byte *rend = (byte *)img.debug_ranges + img.debug_ranges_length;
+ bool is_= img.isX64() ? 8 : 4;
while (r < rend)
{
- uint32_t pclo = RD4(r);
- uint32_t pchi = RD4(r);
+ uint64_t pclo, pchi;
+
+ if (img.isX64())
+ {
+ pclo = RD8(r);
+ pchi = RD8(r);
+ }
+ else
+ {
+ pclo = RD4(r);
+ pchi = RD4(r);
+ }
if (pclo == 0 && pchi == 0)
break;
if (pclo >= pchi)