]> git.cworth.org Git - apitrace/commitdiff
retrace: More useful warnings for object mismatches.
authorJosé Fonseca <jose.r.fonseca@gmail.com>
Thu, 8 Nov 2012 10:46:57 +0000 (10:46 +0000)
committerJosé Fonseca <jose.r.fonseca@gmail.com>
Thu, 8 Nov 2012 10:46:57 +0000 (10:46 +0000)
retrace/retrace.py
retrace/retrace_swizzle.cpp
retrace/retrace_swizzle.hpp

index 544796dbbd135dcb301fce3cc89ad03690d6bcf6..2dd8e2f12a2ae0d825c9c61f079946a91b1b4699 100644 (file)
@@ -150,7 +150,7 @@ class ValueDeserializer(stdapi.Visitor):
         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)
@@ -356,9 +356,8 @@ class Retracer:
 
     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'    }'
 
index a7e777d45cba26e8da0abe4a6bf92900a1db5162..fe0df21c9deceab0dffc8e281edc00d7b8379ce7 100644 (file)
@@ -271,9 +271,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 << " call\n";
+        }
+    } else {
+        obj = NULL;
+    }
 
     if (retrace::verbosity >= 2) {
         std::cout << std::hex << "obj 0x" << address << " <- 0x" << size_t(obj) << std::dec << "\n";
index 66c2962f87d4e05fde4b9660ebaca32704c488cc..bab6d562e077dedbdd875eb181e1dcce51fda56b 100644 (file)
@@ -94,7 +94,7 @@ void
 delObj(trace::Value &value);
 
 void *
-toObjPointer(trace::Value &value);
+toObjPointer(trace::Call &call, trace::Value &value);
 
 
 } /* namespace retrace */