]> git.cworth.org Git - apitrace/commitdiff
Cleanup how pointers are handled.
authorJosé Fonseca <jose.r.fonseca@gmail.com>
Sun, 15 Apr 2012 15:13:51 +0000 (16:13 +0100)
committerJosé Fonseca <jose.r.fonseca@gmail.com>
Sun, 15 Apr 2012 15:13:51 +0000 (16:13 +0100)
In particular prevent high order bits to be lost when processing on
64bits traces on 32bits platforms.

common/trace_writer.cpp
common/trace_writer.hpp
common/trace_writer_local.hpp
common/trace_writer_model.cpp
gui/saverthread.cpp
wrappers/d3dshader.cpp
wrappers/gltrace.py
wrappers/trace.py

index 5708e50464abd097ac80dde3ef13a7a872a0a6a0..f4b82d8f300e0084eb5b6e0943afa49f4be8b2fd 100644 (file)
@@ -294,13 +294,13 @@ void Writer::writeNull(void) {
     _writeByte(trace::TYPE_NULL);
 }
 
-void Writer::writeOpaque(const void *addr) {
+void Writer::writePointer(unsigned long long addr) {
     if (!addr) {
         Writer::writeNull();
         return;
     }
     _writeByte(trace::TYPE_OPAQUE);
-    _writeUInt((size_t)addr);
+    _writeUInt(addr);
 }
 
 
index e012a9b24a0cf25787f7b95182066ad96ef0cc56..5f18f74e1b257dc80ba70c7c157a3d2ad7f54fe1 100644 (file)
@@ -91,7 +91,7 @@ namespace trace {
         void writeEnum(const EnumSig *sig, signed long long value);
         void writeBitmask(const BitmaskSig *sig, unsigned long long value);
         void writeNull(void);
-        void writeOpaque(const void *ptr);
+        void writePointer(unsigned long long addr);
 
         void writeCall(Call *call);
 
index e54142f82b816654679b149306966954b3ac4633..c00818b070c303d9eb1557232c9ac5f840fa7124 100644 (file)
@@ -31,6 +31,8 @@
 #define _TRACE_WRITER_LOCAL_HPP_
 
 
+#include <stdint.h>
+
 #include "os_thread.hpp"
 #include "trace_writer.hpp"
 
index 96544d1502f6eb24c74343866764722f05ec70b2..9bd9ae6022cbf5ec895e42455f752ec35fcec97e 100644 (file)
@@ -97,7 +97,7 @@ public:
     }
 
     void visit(Pointer *node) {
-        writer.writeOpaque((const void *) (size_t) node->value);
+        writer.writePointer(node->value);
     }
 
     void visit(Call *call) {
index 54ef5d24a82840b85d2d4bbf42e5e0f5df8304b1..fc6a023ef908ac6b5375dce2e173d98b86491000 100644 (file)
@@ -189,11 +189,7 @@ writeValue(trace::Writer &writer, const QVariant &var, unsigned &id)
             deleteStructSig(str);
         } else if (type == pointerType) {
             ApiPointer apiPtr = var.value<ApiPointer>();
-            //writer.beginArray(1);
-            //writer.beginElement();
-            writer.writeOpaque((const void*)apiPtr.value());
-            //writer.endElement();
-            //writer.endArray();
+            writer.writePointer(apiPtr.value());
         } else if (type == enumType) {
             ApiEnum apiEnum = var.value<ApiEnum>();
             trace::EnumSig *sig = createEnumSig(apiEnum, ++id);
index a2d5c1293c275fce04958e90d0258851358ca12c..ee9cd9a55d8f1516d9def454f122a3511904aa37 100644 (file)
@@ -78,7 +78,7 @@ found:
         LPD3DXBUFFER pDisassembly = NULL;
         HRESULT hr;
 
-        hr = pfnD3DXDisassembleShader( (DWORD *)tokens, FALSE, NULL, &pDisassembly);
+        hr = pfnD3DXDisassembleShader(tokens, FALSE, NULL, &pDisassembly);
         if (hr == D3D_OK) {
             writer.writeString((const char *)pDisassembly->GetBufferPointer());
         }
@@ -92,5 +92,5 @@ found:
         }
     }
 
-    writer.writeOpaque(tokens);
+    writer.writePointer((UINT_PTR)tokens);
 }
index 9f60acb9b1a21ebea851c2047f230e9e3badd134..cdf8e55098b2f2c108d29c452a6651984cb8aa5d 100644 (file)
@@ -811,7 +811,7 @@ class GlTracer(Tracer):
             print '        if (ctx->profile == gltrace::PROFILE_COMPAT)'
             print '            __glGetIntegerv(GL_PIXEL_UNPACK_BUFFER_BINDING, &__unpack_buffer);'
             print '        if (__unpack_buffer) {'
-            print '            trace::localWriter.writeOpaque(%s);' % arg.name
+            print '            trace::localWriter.writePointer((uintptr_t)%s);' % arg.name
             print '        } else {'
             Tracer.serializeArgValue(self, function, arg)
             print '        }'
index 6cb7934bfc684e4c153cca24fd3ef7b05561befe..dd9fdd7e0d4959994bd2c64f0bce78500048582d 100644 (file)
@@ -218,13 +218,13 @@ class ValueSerializer(stdapi.Visitor):
         print '    }'
 
     def visitIntPointer(self, pointer, instance):
-        print '    trace::localWriter.writeOpaque((const void *)%s);' % instance
+        print '    trace::localWriter.writePointer((uintptr_t)%s);' % instance
 
     def visitObjPointer(self, pointer, instance):
-        print '    trace::localWriter.writeOpaque((const void *)%s);' % instance
+        print '    trace::localWriter.writePointer((uintptr_t)%s);' % instance
 
     def visitLinearPointer(self, pointer, instance):
-        print '    trace::localWriter.writeOpaque((const void *)%s);' % instance
+        print '    trace::localWriter.writePointer((uintptr_t)%s);' % instance
 
     def visitReference(self, reference, instance):
         self.visit(reference.type, instance)
@@ -236,10 +236,10 @@ class ValueSerializer(stdapi.Visitor):
         self.visit(alias.type, instance)
 
     def visitOpaque(self, opaque, instance):
-        print '    trace::localWriter.writeOpaque((const void *)%s);' % instance
+        print '    trace::localWriter.writePointer((uintptr_t)%s);' % instance
 
     def visitInterface(self, interface, instance):
-        print '    trace::localWriter.writeOpaque((const void *)&%s);' % instance
+        assert False
 
     def visitPolymorphic(self, polymorphic, instance):
         print '    _write__%s(%s, %s);' % (polymorphic.tag, polymorphic.switchExpr, instance)
@@ -556,7 +556,7 @@ class Tracer:
         print '    static const trace::FunctionSig __sig = {%u, "%s", %u, __args};' % (method.id, interface.name + '::' + method.name, len(method.args) + 1)
         print '    unsigned __call = trace::localWriter.beginEnter(&__sig);'
         print '    trace::localWriter.beginArg(0);'
-        print '    trace::localWriter.writeOpaque((const void *)m_pInstance);'
+        print '    trace::localWriter.writePointer((uintptr_t)m_pInstance);'
         print '    trace::localWriter.endArg();'
         for arg in method.args:
             if not arg.output:
@@ -637,7 +637,7 @@ class Tracer:
     def emit_memcpy(self, dest, src, length):
         print '        unsigned __call = trace::localWriter.beginEnter(&trace::memcpy_sig);'
         print '        trace::localWriter.beginArg(0);'
-        print '        trace::localWriter.writeOpaque(%s);' % dest
+        print '        trace::localWriter.writePointer((uintptr_t)%s);' % dest
         print '        trace::localWriter.endArg();'
         print '        trace::localWriter.beginArg(1);'
         print '        trace::localWriter.writeBlob(%s, %s);' % (src, length)