X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=retrace%2Fretrace_swizzle.cpp;h=2045f6bb7c83eafe5e71cca35141ce19080e7a1a;hb=HEAD;hp=a7e777d45cba26e8da0abe4a6bf92900a1db5162;hpb=4647f208f5a2b87391281e0f1202f66c23943bd9;p=apitrace diff --git a/retrace/retrace_swizzle.cpp b/retrace/retrace_swizzle.cpp index a7e777d..2045f6b 100644 --- a/retrace/retrace_swizzle.cpp +++ b/retrace/retrace_swizzle.cpp @@ -255,8 +255,20 @@ toPointer(trace::Value &value, bool bind) { static std::map _obj_map; void -addObj(trace::Value &value, void *obj) { +addObj(trace::Call &call, trace::Value &value, void *obj) { unsigned long long address = value.toUIntPtr(); + + if (!address) { + if (obj) { + warning(call) << "unexpected non-null object\n"; + } + return; + } + + if (!obj) { + warning(call) << "got null for object 0x" << std::hex << address << std::dec << "\n"; + } + _obj_map[address] = obj; if (retrace::verbosity >= 2) { @@ -271,9 +283,18 @@ delObj(trace::Value &value) { } 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 << "\n"; + } + } else { + obj = NULL; + } if (retrace::verbosity >= 2) { std::cout << std::hex << "obj 0x" << address << " <- 0x" << size_t(obj) << std::dec << "\n";