56 *((uint16_t*) pr->
mpc) = (uint16_t) pr->
mcode;
64 assert((((uintptr_t) p) & (4-1)) == 0);
71 assert((int8_t*) addr + nbytes -
sizeof(int32_t) >= (int8_t*) check_loc);
84 uint16_t mcode = *((uint16_t*) pc);
87 return (mcode == 0x0b0f);
99 uint32_t *p = (uint32_t*) (((uintptr_t) pc) & ~3);
101 assert((((uintptr_t) pc) & 3) < 2);
102 if (((uintptr_t) pc) & 1)
103 *p = (*p & 0x000000ff) | 0x001f0f00;
105 *p = (*p & 0xff000000) | 0x00001f0f;
137 uintptr_t* datap = (uintptr_t*) pr->
datap;
146 *datap = (uintptr_t) c;
170 uintptr_t* datap = (uintptr_t*) pr->
datap;
179 *datap = (uintptr_t) c->
vftbl;
203 uint8_t*
ra = (uint8_t*) pr->
mpc;
242 uintptr_t* datap = (uintptr_t*) pr->
datap;
243 uint8_t*
ra = (uint8_t*) pr->
mpc;
259 *datap = (uintptr_t) fi->value;
285 uint8_t*
pc = (uint8_t*) pr->
mpc;
323 uint8_t*
pc = (uint8_t*) pr->
mpc;
363 uintptr_t* datap = (uintptr_t*) pr->
datap;
397 uint8_t*
pc = (uint8_t*) pr->
mpc;
436 uint8_t*
pc = (uint8_t*) pr->
mpc;
451 int disp =
PATCH_ALIGNMENT((uintptr_t) (pc + 3 + 7), 3,
sizeof(int32_t));
481 uint8_t*
pc = (uint8_t*) pr->
mpc;
496 int disp =
PATCH_ALIGNMENT((uintptr_t) (pc + 7 + 7 + 6 + 8), 3,
sizeof(int32_t));
524 uint8_t*
pc = (uint8_t*) pr->
mpc;
539 int disp =
PATCH_ALIGNMENT((uintptr_t) (pc + 7 + 7 + 6), 3,
sizeof(int32_t));
564 #ifdef ENABLE_VERIFIER
580 { NULL,
"-UNKNOWN PATCHER FUNCTION-" }
#define PATCHER_resolve_classref_to_flags
bool patcher_invokestatic_special(patchref_t *pr)
bool patcher_get_putstatic(patchref_t *pr)
#define PATCHER_invokeinterface
static void checked_icache_flush(void *addr, int nbytes, int32_t *check_loc)
bool patcher_resolve_classref_to_classinfo(patchref_t *pr)
#define PATCHER_resolve_classref_to_vftbl
bool patcher_invokeinterface(patchref_t *pr)
#define PATCHER_CALL_SIZE
#define PATCHER_get_putfield
#define PATCHER_resolve_class
#define PATCHER_putfieldconst
static void md_dcacheflush(void *addr, int nbytes)
#define PATCHER_breakpoint
patcher_function_list_t patcher_function_list[]
#define PATCHER_get_putstatic
#define PATCHER_instanceof_interface
#define PATCHER_resolve_native_function
void patcher_patch_code(patchref_t *pr)
bool patcher_invokevirtual(patchref_t *pr)
bool patcher_resolve_classref_to_flags(patchref_t *pr)
bool patcher_checkcast_interface(patchref_t *pr)
static int32_t * patch_checked_location(int32_t *p, int32_t val)
bool initialize_class(classinfo *c)
bool patcher_putfieldconst(patchref_t *pr)
#define PATCHER_checkcast_interface
bool patcher_get_putfield(patchref_t *pr)
#define PATCHER_invokestatic_special
fieldinfo * resolve_field_eager(unresolved_field *ref)
#define PATCHER_invokevirtual
methodinfo * resolve_method_eager(unresolved_method *ref)
static void patch_out_mfence(void *pc)
Overwrites the MFENCE instruction at the indicated address with a 3-byte NOP.
#define PATCHER_initialize_class
classinfo * resolve_classref_eager(constant_classref *ref)
#define PATCHER_resolve_classref_to_classinfo
static void md_icacheflush(void *addr, int nbytes)
bool patcher_is_valid_trap_instruction_at(void *pc)
Check if the trap instruction at the given PC is valid.
#define PATCH_ALIGNMENT(addr, offset, size)
bool patcher_resolve_classref_to_vftbl(patchref_t *pr)
bool patcher_instanceof_interface(patchref_t *pr)