print ' %s = static_cast<%s>((%s).toPointer());' % (lvalue, pointer, rvalue)
def visitObjPointer(self, pointer, lvalue, rvalue):
- print ' %s = static_cast<%s>(retrace::toObjPointer(%s));' % (lvalue, pointer, rvalue)
+ print ' %s = static_cast<%s>(retrace::toObjPointer(call, %s));' % (lvalue, pointer, rvalue)
def visitLinearPointer(self, pointer, lvalue, rvalue):
print ' %s = static_cast<%s>(retrace::toPointer(%s));' % (lvalue, pointer, rvalue)
def deserializeThisPointer(self, interface):
print r' %s *_this;' % (interface.name,)
- print r' _this = static_cast<%s *>(retrace::toObjPointer(call.arg(0)));' % (interface.name,)
+ print r' _this = static_cast<%s *>(retrace::toObjPointer(call, call.arg(0)));' % (interface.name,)
print r' if (!_this) {'
- print r' retrace::warning(call) << "NULL this pointer\n";'
print r' return;'
print r' }'
}
void *
-toObjPointer(trace::Value &value) {
+toObjPointer(trace::Call &call, trace::Value &value) {
unsigned long long address = value.toUIntPtr();
- void *obj = address ? _obj_map[address] : NULL;
+
+ void *obj;
+ if (address) {
+ obj = _obj_map[address];
+ if (!obj) {
+ warning(call) << "unknown object 0x" << std::hex << address << std::dec << " call\n";
+ }
+ } else {
+ obj = NULL;
+ }
if (retrace::verbosity >= 2) {
std::cout << std::hex << "obj 0x" << address << " <- 0x" << size_t(obj) << std::dec << "\n";
delObj(trace::Value &value);
void *
-toObjPointer(trace::Value &value);
+toObjPointer(trace::Call &call, trace::Value &value);
} /* namespace retrace */