da6d243a079e5c0db6b0edd2bd6ff1065a2178f3vboxsync"""
c7814cf6e1240a519cbec0441e033d0e2470ed00vboxsyncCopyright (C) 2009-2012 Oracle Corporation
da6d243a079e5c0db6b0edd2bd6ff1065a2178f3vboxsync
da6d243a079e5c0db6b0edd2bd6ff1065a2178f3vboxsyncThis file is part of VirtualBox Open Source Edition (OSE), as
da6d243a079e5c0db6b0edd2bd6ff1065a2178f3vboxsyncavailable from http://www.virtualbox.org. This file is free software;
da6d243a079e5c0db6b0edd2bd6ff1065a2178f3vboxsyncyou can redistribute it and/or modify it under the terms of the GNU
da6d243a079e5c0db6b0edd2bd6ff1065a2178f3vboxsyncGeneral Public License (GPL) as published by the Free Software
da6d243a079e5c0db6b0edd2bd6ff1065a2178f3vboxsyncFoundation, in version 2 as it comes in the "COPYING" file of the
da6d243a079e5c0db6b0edd2bd6ff1065a2178f3vboxsyncVirtualBox OSE distribution. VirtualBox OSE is distributed in the
da6d243a079e5c0db6b0edd2bd6ff1065a2178f3vboxsynchope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
da6d243a079e5c0db6b0edd2bd6ff1065a2178f3vboxsync"""
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsyncimport sys
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsyncimport apiutil
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsyncdef GenerateEntrypoints():
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync #apiutil.CopyrightC()
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync # Get sorted list of dispatched functions.
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync # The order is very important - it must match cr_opcodes.h
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync # and spu_dispatch_table.h
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync print '%include "iprt/asmdefs.mac"'
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync print ""
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync print "%ifdef RT_ARCH_AMD64"
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync print "extern glim"
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync print "%else ; X86"
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync print "extern glim"
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync print "%endif"
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync print ""
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync keys = apiutil.GetDispatchedFunctions(sys.argv[1]+"/APIspec.txt")
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync for index in range(len(keys)):
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync func_name = keys[index]
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync if apiutil.Category(func_name) == "Chromium":
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync continue
bedde6455e686ec20df6dc90b068eb04705d497avboxsync if apiutil.Category(func_name) == "VBox":
bedde6455e686ec20df6dc90b068eb04705d497avboxsync continue
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync print "BEGINPROC_EXPORTED gl%s" % func_name
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync print "%ifdef RT_ARCH_AMD64"
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync print "\tjmp \t[glim+%d wrt rip wrt ..gotpcrel]" % (8*index)
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync print "%else ; X86"
a88953ac5b9988667a57d0dd230f1f7ae0d2579fvboxsync print "\tjmp \t[glim+%d wrt ..gotpc]" % (4*index)
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync print "%endif"
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync print "ENDPROC gl%s" % func_name
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync print ""
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync print ';'
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync print '; Aliases'
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync print ';'
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync # Now loop over all the functions and take care of any aliases
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync allkeys = apiutil.GetAllFunctions(sys.argv[1]+"/APIspec.txt")
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync for func_name in allkeys:
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync if "omit" in apiutil.ChromiumProps(func_name):
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync continue
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync if func_name in keys:
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync # we already processed this function earlier
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync continue
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync # alias is the function we're aliasing
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync alias = apiutil.Alias(func_name)
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync if alias:
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync # this dict lookup should never fail (raise an exception)!
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync index = keys.index(alias)
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync print "BEGINPROC_EXPORTED gl%s" % func_name
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync print "%ifdef RT_ARCH_AMD64"
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync print "\tjmp \t[glim+%d wrt rip wrt ..gotpcrel]" % (8*index)
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync print "%else ; X86"
a88953ac5b9988667a57d0dd230f1f7ae0d2579fvboxsync print "\tjmp \t[glim+%d wrt ..gotpc]" % (4*index)
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync print "%endif"
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync print "ENDPROC gl%s" % func_name
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync print ""
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync print ';'
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync print '; No-op stubs'
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync print ';'
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync # Now generate no-op stub functions
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync for func_name in allkeys:
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync if "stub" in apiutil.ChromiumProps(func_name):
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync print "BEGINPROC_EXPORTED gl%s" % func_name
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync print "\tleave"
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync print "\tret"
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync print "ENDPROC gl%s" % func_name
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync print ""
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsyncGenerateEntrypoints()
7eeca0bc9b71feb4baf8935a1ae99bcf328dedecvboxsync