#include "vm/types.h"
-#if defined(ENABLE_JIT)
-/* this is required PATCHER_CALL_SIZE */
-# include "codegen.h"
-#endif
-
+#include "codegen.h"
#include "md-abi.h"
#include "mm/memory.h"
cd->datareferences = NULL;
#endif
-/* cd->patchrefs = list_create_dump(OFFSET(patchref, linkage)); */
- cd->patchrefs = NULL;
cd->brancheslabel = list_create_dump(OFFSET(branch_label_ref_t, linkage));
cd->listcritical = list_create_dump(OFFSET(critical_section_ref_t, linkage));
cd->datareferences = NULL;
#endif
-/* cd->patchrefs = list_create_dump(OFFSET(patchref, linkage)); */
- cd->patchrefs = NULL;
cd->brancheslabel = list_create_dump(OFFSET(branch_label_ref_t, linkage));
cd->listcritical = list_create_dump(OFFSET(critical_section_ref_t, linkage));
}
-/* codegen_add_patch_ref *******************************************************
-
- Appends a new patcher reference to the list of patching positions.
-
-*******************************************************************************/
-
-void codegen_add_patch_ref(codegendata *cd, functionptr patcher, voidptr ref,
- s4 disp)
-{
- patchref *pr;
- s4 branchmpc;
-
- branchmpc = cd->mcodeptr - cd->mcodebase;
-
- pr = DNEW(patchref);
-
- pr->branchpos = branchmpc;
- pr->disp = disp;
- pr->patcher = patcher;
- pr->ref = ref;
-
-/* list_add_first(cd->patchrefs, pr); */
- pr->next = cd->patchrefs;
- cd->patchrefs = pr;
-
- /* Generate NOPs for opt_shownops. */
-
- if (opt_shownops)
- PATCHER_NOPS;
-
-#if defined(ENABLE_JIT) && (defined(__I386__) || defined(__M68K__) || defined(__MIPS__) \
- || defined(__SPARC_64__) || defined(__X86_64__))
-
- /* On some architectures the patcher stub call instruction might
- be longer than the actual instruction generated. On this
- architectures we store the last patcher call position and after
- the basic block code generation is completed, we check the
- range and maybe generate some nop's. */
- /* The nops are generated in codegen_emit in each codegen */
-
- cd->lastmcodeptr = cd->mcodeptr + PATCHER_CALL_SIZE;
-#endif
-}
-
-
/* codegen_critical_section_new ************************************************
Allocates a new critical-section reference and adds it to the
+++ /dev/null
-/* src/vm/jit/patcher.h - code patching functions
-
- Copyright (C) 1996-2005, 2006, 2007 R. Grafl, A. Krall, C. Kruegel,
- C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring,
- E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich,
- J. Wenninger, Institut f. Computersprachen - TU Wien
-
- This file is part of CACAO.
-
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This program is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- 02110-1301, USA.
-
-*/
-
-
-#ifndef _PATCHER_H
-#define _PATCHER_H
-
-#include "config.h"
-
-#include <assert.h>
-
-#include "vm/types.h"
-
-#include "threads/lock-common.h"
-
-#include "vm/global.h"
-
-
-#if defined(__ALPHA__) || defined(__ARM__) || defined(__I386__) || defined(__MIPS__) || defined(__POWERPC__) || defined(__POWERPC64__) || defined(__S390__)
-# error "you should no longer include this file"
-#else
-
-
-/* patcher macros *************************************************************/
-
-#define PATCHER_FLAG_PATCHED (vftbl_t *) 0xdeadbeef
-
-
-#if defined(ENABLE_THREADS)
-
-#define PATCHER_MONITORENTER \
- /* enter a monitor on the patching position */ \
- \
- lock_monitor_enter(o); \
- \
- /* check if the position has already been patched */ \
- \
- if (o->vftbl != NULL) { \
- assert(o->vftbl == PATCHER_FLAG_PATCHED); \
- \
- lock_monitor_exit(o); \
- \
- return NULL; \
- } \
-
-
-#define PATCHER_MONITOREXIT \
- /* leave the monitor on the patching position */ \
- \
- lock_monitor_exit(o);
-
-
-#define PATCHER_MARK_PATCHED_MONITOREXIT \
- /* mark position as patched */ \
- \
- o->vftbl = PATCHER_FLAG_PATCHED; \
- \
- PATCHER_MONITOREXIT
-
-#else
-
-#define PATCHER_MONITORENTER /* nop */
-#define PATCHER_MONITOREXIT /* nop */
-#define PATCHER_MARK_PATCHED_MONITOREXIT /* nop */
-
-#endif /* defined(ENABLE_THREADS) */
-
-
-/* function prototypes ********************************************************/
-
-java_object_t *patcher_wrapper(u1 *sp, u1 *pv, u1 *ra);
-#define PATCHER_wrapper (functionptr) patcher_wrapper
-
-bool patcher_resolve_class(u1 *sp);
-#define PATCHER_resolve_class (functionptr) patcher_resolve_class
-
-bool patcher_initialize_class(u1 *sp);
-#define PATCHER_initialize_class (functionptr) patcher_initialize_class
-
-bool patcher_resolve_classref_to_classinfo(u1 *sp);
-#define PATCHER_resolve_classref_to_classinfo (functionptr) patcher_resolve_classref_to_classinfo
-
-bool patcher_resolve_classref_to_vftbl(u1 *sp);
-#define PATCHER_resolve_classref_to_vftbl (functionptr) patcher_resolve_classref_to_vftbl
-
-bool patcher_resolve_classref_to_flags(u1 *sp);
-#define PATCHER_resolve_classref_to_flags (functionptr) patcher_resolve_classref_to_flags
-
-bool patcher_resolve_native_function(u1 *sp);
-#define PATCHER_resolve_native_function (functionptr) patcher_resolve_native_function
-
-
-bool patcher_get_putstatic(u1 *sp);
-#define PATCHER_get_putstatic (functionptr) patcher_get_putstatic
-
-#if defined(__I386__)
-
-bool patcher_getfield(u1 *sp);
-#define PATCHER_getfield (functionptr) patcher_getfield
-
-bool patcher_putfield(u1 *sp);
-#define PATCHER_putfield (functionptr) patcher_putfield
-
-#else
-
-bool patcher_get_putfield(u1 *sp);
-#define PATCHER_get_putfield (functionptr) patcher_get_putfield
-
-#endif /* defined(__I386__) */
-
-#if defined(__I386__) || defined(__X86_64__)
-
-bool patcher_putfieldconst(u1 *sp);
-#define PATCHER_putfieldconst (functionptr) patcher_putfieldconst
-
-#endif /* defined(__I386__) || defined(__X86_64__) */
-
-bool patcher_aconst(u1 *sp);
-#define PATCHER_aconst (functionptr) patcher_aconst
-
-bool patcher_builtin_multianewarray(u1 *sp);
-#define PATCHER_builtin_multianewarray (functionptr) patcher_builtin_multianewarray
-
-bool patcher_builtin_arraycheckcast(u1 *sp);
-#define PATCHER_builtin_arraycheckcast (functionptr) patcher_builtin_arraycheckcast
-
-bool patcher_invokestatic_special(u1 *sp);
-#define PATCHER_invokestatic_special (functionptr) patcher_invokestatic_special
-
-bool patcher_invokevirtual(u1 *sp);
-#define PATCHER_invokevirtual (functionptr) patcher_invokevirtual
-
-bool patcher_invokeinterface(u1 *sp);
-#define PATCHER_invokeinterface (functionptr) patcher_invokeinterface
-
-
-/* only for interpreter */
-bool patcher_checkcast_instanceof(u1 *sp);
-#define PATCHER_checkcast_instanceof (functionptr) patcher_checkcast_instanceof
-
-
-bool patcher_checkcast_instanceof_flags(u1 *sp);
-#define PATCHER_checkcast_instanceof_flags (functionptr) patcher_checkcast_instanceof_flags
-
-bool patcher_checkcast_instanceof_interface(u1 *sp);
-#define PATCHER_checkcast_instanceof_interface (functionptr) patcher_checkcast_instanceof_interface
-
-bool patcher_checkcast_interface(u1 *sp);
-#define PATCHER_checkcast_interface (functionptr) patcher_checkcast_interface
-
-bool patcher_instanceof_interface(u1 *sp);
-#define PATCHER_instanceof_interface (functionptr) patcher_instanceof_interface
-
-#if defined(__I386__) || defined(__X86_64__) || defined(__POWERPC__) || defined(__POWERPC64__)
-
-bool patcher_checkcast_class(u1 *sp);
-#define PATCHER_checkcast_class (functionptr) patcher_checkcast_class
-
-bool patcher_instanceof_class(u1 *sp);
-#define PATCHER_instanceof_class (functionptr) patcher_instanceof_class
-
-#else /* defined(__I386__) || defined(__X86_64__) || defined(__POWERPC__) || defined(__POWERPC64__)*/
-
-bool patcher_checkcast_instanceof_class(u1 *sp);
-#define PATCHER_checkcast_instanceof_class (functionptr) patcher_checkcast_instanceof_class
-
-#endif /* defined(__I386__) || defined(__X86_64__) || defined(__POWERPC__) || defined(__POWERPC64__)*/
-
-bool patcher_clinit(u1 *sp);
-#define PATCHER_clinit (functionptr) patcher_clinit
-
-bool patcher_athrow_areturn(u1 *sp);
-#define PATCHER_athrow_areturn (functionptr) patcher_athrow_areturn
-
-bool patcher_resolve_native(u1 *sp);
-#define PATCHER_resolve_native (functionptr) patcher_resolve_native
-
-
-/* stuff for the interpreter **************************************************/
-
-#if defined(ENABLE_INTRP)
-bool intrp_patcher_get_putstatic(u1 *sp);
-bool intrp_patcher_get_putstatic_clinit(u1 *sp);
-bool intrp_patcher_get_putfield(u1 *sp);
-bool intrp_patcher_aconst(u1 *sp);
-bool intrp_patcher_builtin_multianewarray(u1 *sp);
-bool intrp_patcher_builtin_arraycheckcast(u1 *sp);
-bool intrp_patcher_invokestatic_special(u1 *sp);
-bool intrp_patcher_invokevirtual(u1 *sp);
-bool intrp_patcher_invokeinterface(u1 *sp);
-bool intrp_patcher_checkcast_instanceof(u1 *sp);
-bool intrp_patcher_resolve_native(u1 *sp);
-#endif /* defined(ENABLE_INTRP) */
-
-#endif /* architecture list */
-
-#endif /* _PATCHER_H */
-
-
-/*
- * These are local overrides for various environment variables in Emacs.
- * Please do not remove this and leave it at the end of the file, where
- * Emacs will automagically detect them.
- * ---------------------------------------------------------------------
- * Local variables:
- * mode: c
- * indent-tabs-mode: t
- * c-basic-offset: 4
- * tab-width: 4
- * End:
- * vim:noexpandtab:sw=4:ts=4:
- */
-