]> git.cworth.org Git - apitrace/commitdiff
retrace: More diagnostic information.
authorJosé Fonseca <jose.r.fonseca@gmail.com>
Tue, 13 Nov 2012 21:37:42 +0000 (21:37 +0000)
committerJosé Fonseca <jose.r.fonseca@gmail.com>
Tue, 13 Nov 2012 21:37:42 +0000 (21:37 +0000)
retrace/retrace.py
retrace/retrace_swizzle.cpp
retrace/retrace_swizzle.hpp

index ecad9f45615497c6657e419f2ef2cd813ab79326..5b5812faa101feb04c651608c24561bf22d9f0af 100644 (file)
@@ -242,7 +242,7 @@ class SwizzledValueRegistrator(stdapi.Visitor):
         pass
     
     def visitObjPointer(self, pointer, lvalue, rvalue):
-        print r'    retrace::addObj(%s, %s);' % (rvalue, lvalue)
+        print r'    retrace::addObj(call, %s, %s);' % (rvalue, lvalue)
     
     def visitLinearPointer(self, pointer, lvalue, rvalue):
         assert pointer.size is not None
index fe0df21c9deceab0dffc8e281edc00d7b8379ce7..b487de184a994cdd9c9bfbec01364704d13a80ef 100644 (file)
@@ -255,8 +255,18 @@ toPointer(trace::Value &value, bool bind) {
 static std::map<unsigned long long, void *> _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) {
+        assert(!obj);
+        return;
+    }
+
+    if (!obj) {
+        warning(call) << "got null for object 0x" << std::hex << address << std::dec << "\n";
+    }
+
     _obj_map[address] = obj;
     
     if (retrace::verbosity >= 2) {
@@ -278,7 +288,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;
index bab6d562e077dedbdd875eb181e1dcce51fda56b..42e5bf6484a344e31f4b80d35cf93c3759a3b23d 100644 (file)
@@ -88,7 +88,7 @@ toPointer(trace::Value &value, bool bind = false);
 
 
 void
-addObj(trace::Value &value, void *obj);
+addObj(trace::Call &call, trace::Value &value, void *obj);
 
 void
 delObj(trace::Value &value);