9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync# Copyright (c) 2001, Stanford University
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync# All rights reserved.
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync#
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync# See the file LICENSE.txt for information on redistributing this software.
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsyncimport sys
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsyncimport apiutil
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsyncdef GenerateEntrypoints():
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync #apiutil.CopyrightC()
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync # Get sorted list of dispatched functions.
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync # The order is very important - it must match cr_opcodes.h
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync # and spu_dispatch_table.h
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync print '%include "iprt/asmdefs.mac"'
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync print ""
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync print "%ifdef RT_ARCH_AMD64"
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync print "extern glim"
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync print "%else ; X86"
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync print "extern glim"
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync print "%endif"
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync print ""
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync keys = apiutil.GetDispatchedFunctions(sys.argv[1]+"/APIspec.txt")
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync for index in range(len(keys)):
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync func_name = keys[index]
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync if apiutil.Category(func_name) == "Chromium":
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync continue
bedde6455e686ec20df6dc90b068eb04705d497avboxsync if apiutil.Category(func_name) == "VBox":
bedde6455e686ec20df6dc90b068eb04705d497avboxsync continue
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync print "BEGINPROC_EXPORTED cr_gl%s" % func_name
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync print "%ifdef RT_ARCH_AMD64"
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync print "\tmov \trax, qword glim+%d" % (8*index)
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync print "\tjmp \t[rax]"
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync print "%else ; X86"
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync print "\tmov \teax, dword glim+%d" % (4*index)
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync print "\tjmp \t[eax]"
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync print "%endif"
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync print "ENDPROC cr_gl%s" % func_name
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync print ""
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync print ';'
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync print '; Aliases'
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync print ';'
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync # Now loop over all the functions and take care of any aliases
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync allkeys = apiutil.GetAllFunctions(sys.argv[1]+"/APIspec.txt")
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync for func_name in allkeys:
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync if "omit" in apiutil.ChromiumProps(func_name):
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync continue
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync if func_name in keys:
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync # we already processed this function earlier
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync continue
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync # alias is the function we're aliasing
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync alias = apiutil.Alias(func_name)
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync if alias:
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync # this dict lookup should never fail (raise an exception)!
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync index = keys.index(alias)
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync print "BEGINPROC_EXPORTED cr_gl%s" % func_name
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync print "%ifdef RT_ARCH_AMD64"
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync print "\tmov \trax, qword glim+%d" % (8*index)
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync print "\tjmp \t[rax]"
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync print "%else ; X86"
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync print "\tmov \teax, dword glim+%d" % (4*index)
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync print "\tjmp \t[eax]"
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync print "%endif"
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync print "ENDPROC cr_gl%s" % func_name
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync print ""
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync print ';'
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync print '; No-op stubs'
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync print ';'
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync # Now generate no-op stub functions
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync for func_name in allkeys:
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync if "stub" in apiutil.ChromiumProps(func_name):
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync print "BEGINPROC_EXPORTED cr_gl%s" % func_name
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync print "\tleave"
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync print "\tret"
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync print "ENDPROC cr_gl%s" % func_name
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync print ""
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsyncGenerateEntrypoints()
9a4748c9b04aa33bb54066d49bd27d4c9f0cf33evboxsync