X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=retrace%2Fretrace_swizzle.cpp;h=f1a10d5e9ea03a33249357cb3c5c830fdbd3d775;hb=a0708b02018902497da4df6c9be05cd053374afc;hp=fe0df21c9deceab0dffc8e281edc00d7b8379ce7;hpb=53e366e711876c1b7636e861069cb934716aefe0;p=apitrace diff --git a/retrace/retrace_swizzle.cpp b/retrace/retrace_swizzle.cpp index fe0df21..f1a10d5 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) { @@ -268,6 +280,9 @@ void delObj(trace::Value &value) { unsigned long long address = value.toUIntPtr(); _obj_map.erase(address); + if (retrace::verbosity >= 2) { + std::cout << std::hex << "obj 0x" << address << " del\n"; + } } void * @@ -278,7 +293,7 @@ toObjPointer(trace::Call &call, trace::Value &value) { if (address) { obj = _obj_map[address]; if (!obj) { - warning(call) << "unknown object 0x" << std::hex << address << std::dec << " call\n"; + warning(call) << "unknown object 0x" << std::hex << address << std::dec << "\n"; } } else { obj = NULL;