diff --git a/src/lib_jit.c b/src/lib_jit.c index 033ab4c4..4cabb2f7 100644 --- a/src/lib_jit.c +++ b/src/lib_jit.c @@ -114,8 +114,11 @@ LJLIB_CF(jit_attach) GCstr *s = lj_lib_optstr(L, 2); luaL_findtable(L, LUA_REGISTRYINDEX, LJ_VMEVENTS_REGKEY, LJ_VMEVENTS_HSIZE); if (s) { /* Attach to given event. */ + const uint8_t *p = (const uint8_t *)strdata(s); + uint32_t h = s->len; + while (*p) h = h ^ (lj_rol(h, 6) + *p++); lua_pushvalue(L, 1); - lua_rawseti(L, -2, VMEVENT_HASHIDX(s->hash)); + lua_rawseti(L, -2, VMEVENT_HASHIDX(h)); G(L)->vmevmask = VMEVENT_NOCACHE; /* Invalidate cache. */ } else { /* Detach if no event given. */ setnilV(L->top++); diff --git a/src/lj_vmevent.h b/src/lj_vmevent.h index ceb70f82..9d21cb1e 100644 --- a/src/lj_vmevent.h +++ b/src/lj_vmevent.h @@ -23,10 +23,10 @@ /* VM event IDs. */ typedef enum { - VMEVENT_DEF(BC, 0x0000140b), - VMEVENT_DEF(TRACE, 0x10ea574d), - VMEVENT_DEF(RECORD, 0x5698231c), - VMEVENT_DEF(TEXIT, 0x12d984a7), + VMEVENT_DEF(BC, 0x00003883), + VMEVENT_DEF(TRACE, 0xb2d91467), + VMEVENT_DEF(RECORD, 0x9284bf4f), + VMEVENT_DEF(TEXIT, 0xb29df2b0), LJ_VMEVENT__MAX } VMEvent;