X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=src%2Fvm%2Fjit%2Fsparc64%2Fpatcher.c;h=8276672543ad85ba27aff78042821c566f78d0a6;hb=9f859ad50d3d5d98c185d40b86b2179bc4dc9aeb;hp=1029642f6c7032496172f036fed46d773f7930c1;hpb=2583ca85cb63b8a31ae2d97ba6766d906231894f;p=cacao.git diff --git a/src/vm/jit/sparc64/patcher.c b/src/vm/jit/sparc64/patcher.c index 1029642f6..827667254 100644 --- a/src/vm/jit/sparc64/patcher.c +++ b/src/vm/jit/sparc64/patcher.c @@ -22,38 +22,39 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - Contact: cacao@cacaojvm.org - - Authors: Christian Thalinger - Alexander Jordan - $Id: patcher.c 5164 2006-07-19 15:54:01Z twisti $ - */ #include "config.h" #include +#include #include "vm/types.h" +#include "mm/memory.h" + +#include "vm/jit/sparc64/md-abi.h" #include "vm/jit/sparc64/codegen.h" -#include "mm/memory.h" #include "native/native.h" #include "vm/builtin.h" -#include "vm/class.h" #include "vm/exceptions.h" -#include "vm/field.h" #include "vm/initialize.h" -#include "vm/options.h" -#include "vm/resolve.h" -#include "vm/references.h" + #include "vm/jit/asmpart.h" #include "vm/jit/patcher.h" +#include "vm/jit/md.h" +#include "vm/jit/methodheader.h" +#include "vm/jit/stacktrace.h" + +#include "vmcore/class.h" +#include "vmcore/field.h" +#include "vmcore/options.h" +#include "vmcore/references.h" +#include "vm/resolve.h" -#include "vm/jit/sparc64/md-abi.h" - +#include "vm/jit/sparc64/solaris/macro_rename.h" /* patcher_wrapper ************************************************************* @@ -66,12 +67,12 @@ *******************************************************************************/ -java_objectheader *patcher_wrapper(u1 *sp, u1 *pv, u1 *ra) +java_object_t *patcher_wrapper(u1 *sp, u1 *pv, u1 *ra) { stackframeinfo sfi; u1 *xpc; u1 *javasp; - java_objectheader *o; + java_object_t *o; #if SIZEOF_VOID_P == 8 u8 mcode; #else @@ -79,7 +80,7 @@ java_objectheader *patcher_wrapper(u1 *sp, u1 *pv, u1 *ra) #endif functionptr f; bool result; - java_objectheader *e; + java_handle_t *e; /* define the patcher function */ @@ -90,7 +91,7 @@ java_objectheader *patcher_wrapper(u1 *sp, u1 *pv, u1 *ra) /* get stuff from the stack */ xpc = (u1 *) *((ptrint *) (sp + 5 * 8)); - o = (java_objectheader *) *((ptrint *) (sp + 4 * 8)); + o = (java_object_t *) *((ptrint *) (sp + 4 * 8)); f = (functionptr) *((ptrint *) (sp + 0 * 8)); /* store PV into the patcher function position */ @@ -194,7 +195,7 @@ bool patcher_get_putstatic(u1 *sp) /* patch the field value's address */ - *((ptrint *) (pv + disp)) = (ptrint) &(fi->value); + *((intptr_t *) (pv + disp)) = (intptr_t) fi->value; /* synchronize data cache */ @@ -613,12 +614,6 @@ bool patcher_checkcast_interface(u1 *sp) /* if we show disassembly, we have to skip the nop's */ - if (opt_shownops) - ra = ra + PATCHER_CALL_SIZE; - - - /* if we show disassembly, we have to skip the nop's */ - if (opt_shownops) ra = ra + PATCHER_CALL_SIZE; @@ -626,15 +621,16 @@ bool patcher_checkcast_interface(u1 *sp) *((s4 *) (ra + 2 * 4)) |= (s4) (-(c->index) & 0x00001fff); - *((s4 *) (ra + 5 * 4)) |= (s4) ((OFFSET(vftbl_t, interfacetable[0]) - - c->index * sizeof(methodptr*)) & 0x00001fff); + *((s4 *) (ra + (3 + EXCEPTION_CHECK_INSTRUCTIONS) * 4)) |= + (s4) ((OFFSET(vftbl_t, interfacetable[0]) + - c->index * sizeof(methodptr*)) & 0x00001fff); /* synchronize instruction cache */ if (opt_shownops) - md_icacheflush(ra - 2 * 4, 8 * 4); + md_icacheflush(ra - 2 * 4, (6 + EXCEPTION_CHECK_INSTRUCTIONS) * 4); else - md_icacheflush(ra, 6 * 4); + md_icacheflush(ra, (4 + EXCEPTION_CHECK_INSTRUCTIONS) * 4); return true; } @@ -659,8 +655,6 @@ bool patcher_instanceof_interface(u1 *sp) constant_classref *cr; classinfo *c; - assert(0); /* test this one !!! */ - /* get stuff from the stack */ ra = (u1 *) *((ptrint *) (sp + 5 * 8)); @@ -770,15 +764,14 @@ bool patcher_clinit(u1 *sp) bool patcher_athrow_areturn(u1 *sp) { unresolved_class *uc; - classinfo *c; /* get stuff from the stack */ uc = (unresolved_class *) *((ptrint *) (sp + 2 * 8)); - /* resolve the class */ + /* resolve the class and check subtype constraints */ - if (!resolve_class(uc, resolveEager, false, &c)) + if (!resolve_class_eager_no_access_check(uc)) return false; return true;