adjustments to resolveConstant

This commit is contained in:
caheckman 2019-08-19 10:19:36 -04:00
parent 612c0d6f3e
commit 4edff2b9f0
10 changed files with 51 additions and 20 deletions

View file

@ -1135,7 +1135,7 @@ void Architecture::init(DocumentStorage &store)
fillinReadOnlyFromLoader();
}
Address SegmentedResolver::resolve(uintb val,int4 sz,const Address &point)
Address SegmentedResolver::resolve(uintb val,int4 sz,const Address &point,uintb &fullEncoding)
{
int4 innersz = segop->getInnerSize();
@ -1145,6 +1145,7 @@ Address SegmentedResolver::resolve(uintb val,int4 sz,const Address &point)
// (as with near pointers)
if (segop->getResolve().space != (AddrSpace *)0) {
uintb base = glb->context->getTrackedValue(segop->getResolve(),point);
fullEncoding = (base << 8 * innersz) + (val & calc_mask(innersz));
vector<uintb> seginput;
seginput.push_back(val);
seginput.push_back(base);
@ -1153,6 +1154,7 @@ Address SegmentedResolver::resolve(uintb val,int4 sz,const Address &point)
}
}
else { // For anything else, consider it a "far" pointer
fullEncoding = val;
int4 outersz = segop->getBaseSize();
uintb base = (val >> 8*innersz) & calc_mask(outersz);
val = val & calc_mask(innersz);