Add some debug messages
[mesa.git] / src / mesa / glapi / gl_x86_asm.py
index e62687a7235b409cd11f7fbfb66024c311568d44..403e87261b09d3b223de9d2ff90b0d214d0adc3f 100644 (file)
@@ -25,7 +25,8 @@
 # Authors:
 #    Ian Romanick <idr@us.ibm.com>
 
-import gl_XML, license
+import license
+import gl_XML, glX_XML
 import sys, getopt
 
 class PrintGenericStubs(gl_XML.gl_print_base):
@@ -61,6 +62,7 @@ class PrintGenericStubs(gl_XML.gl_print_base):
                print '#else'
                print '# if defined(USE_MGL_NAMESPACE)'
                print '#  define GL_PREFIX(n,n2) GLNAME(CONCAT(mgl,n))'
+               print '#  define _glapi_Dispatch _mglapi_Dispatch'
                print '# else'
                print '#  define GL_PREFIX(n,n2) GLNAME(CONCAT(gl,n))'
                print '# endif'
@@ -80,12 +82,18 @@ class PrintGenericStubs(gl_XML.gl_print_base):
                print ''
                print '#ifdef GLX_USE_TLS'
                print ''
+               print '#ifdef GLX_X86_READONLY_TEXT'
+               print '# define CTX_INSNS MOV_L(GS:(EAX), EAX)'
+               print '#else'
+               print '# define CTX_INSNS NOP /* Pad for init_glapi_relocs() */'
+               print '#endif'
+               print ''
                print '#  define GL_STUB(fn,off,fn_alt)\t\t\t\\'
                print 'ALIGNTEXT16;\t\t\t\t\t\t\\'
                print 'GLOBL_FN(GL_PREFIX(fn, fn_alt));\t\t\t\\'
                print 'GL_PREFIX(fn, fn_alt):\t\t\t\t\t\\'
                print '\tCALL(_x86_get_dispatch) ;\t\t\t\\'
-               print '\tNOP ;\t\t\t\t\t\t\\'
+               print '\tCTX_INSNS ;                                    \\'
                print '\tJMP(GL_OFFSET(off))'
                print ''
                print '#elif defined(PTHREADS)'
@@ -136,7 +144,10 @@ class PrintGenericStubs(gl_XML.gl_print_base):
                print '\tHIDDEN(GLNAME(_x86_get_dispatch))'
                print 'ALIGNTEXT16'
                print 'GLNAME(_x86_get_dispatch):'
-               print '\tmovl\t%gs:_glapi_tls_Dispatch@NTPOFF, %eax'
+               print '\tcall   1f'
+               print '1:\tpopl %eax'
+               print '\taddl   $_GLOBAL_OFFSET_TABLE_+[.-1b], %eax'
+               print '\tmovl   _glapi_tls_Dispatch@GOTNTPOFF(%eax), %eax'
                print '\tret'
                print ''
                print '#elif defined(PTHREADS)'
@@ -156,7 +167,7 @@ class PrintGenericStubs(gl_XML.gl_print_base):
                print '#endif'
                print ''
 
-               print '#if defined( GLX_USE_TLS )'
+               print '#if defined( GLX_USE_TLS ) && !defined( GLX_X86_READONLY_TEXT )'
                print '\t\t.section\twtext, "awx", @progbits'
                print '#endif /* defined( GLX_USE_TLS ) */'
 
@@ -188,25 +199,42 @@ class PrintGenericStubs(gl_XML.gl_print_base):
                print ' .long   2,4,20    /* Minimum kernel version w/TLS */'
                print '3:       .p2align 2        /* pad out section */'
                print '#endif /* GLX_USE_TLS */'
+               print ''
+               print '#if defined (__ELF__) && defined (__linux__)'
+               print ' .section .note.GNU-stack,"",%progbits'
+               print '#endif'
                return
 
 
        def printBody(self, api):
                for f in api.functionIterateByOffset():
+                       name = f.dispatch_name()
                        stack = self.get_stack_size(f)
+                       alt = "%s@%u" % (name, stack)
+
+                       print '\tGL_STUB(%s, _gloffset_%s, %s)' % (name, f.name, alt)
+
+                       if not f.is_static_entry_point(f.name):
+                               print '\tHIDDEN(GL_PREFIX(%s, %s))' % (name, alt)
 
-                       alt = "%s@%u" % (f.name, stack)
-                       print '\tGL_STUB(%s, _gloffset_%s, %s)' % (f.name, f.name, alt)
 
                for f in api.functionIterateByOffset():
+                       name = f.dispatch_name()
                        stack = self.get_stack_size(f)
+                       alt = "%s@%u" % (name, stack)
 
-                       alt = "%s@%u" % (f.name, stack)
+                       if f.is_static_entry_point(f.name):
+                               for n in f.entry_points:
+                                       if n != f.name:
+                                               alt2 = "%s@%u" % (n, stack)
+                                               text = '\tGL_STUB_ALIAS(%s, _gloffset_%s, %s, %s, %s)' % (n, f.name, alt2, f.name, alt)
 
-                       for n in f.entry_points:
-                               if n != f.name:
-                                       alt2 = "%s@%u" % (n, stack)
-                                       print '\tGL_STUB_ALIAS(%s, _gloffset_%s, %s, %s, %s)' % (n, f.name, alt2, f.name, alt)
+                                               if f.has_different_protocol(n):
+                                                       print '#ifndef GLX_INDIRECT_RENDERING'
+                                                       print text
+                                                       print '#endif'
+                                               else:
+                                                       print text
 
                return
 
@@ -235,6 +263,5 @@ if __name__ == '__main__':
                print "ERROR: Invalid mode \"%s\" specified." % mode
                show_usage()
 
-       api = gl_XML.parse_GL_API( file_name )
-
-       printer.Print( api )
+       api = gl_XML.parse_GL_API(file_name, glX_XML.glx_item_factory())
+       printer.Print(api)