From 6667ab0f266b12909cf0eedd025525b24d987592 Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Wed, 21 Jul 2010 21:23:45 +0200 Subject: [PATCH] Use independent hash for VM event dispatch. --- src/lib_jit.c | 5 ++++- src/lj_vmevent.h | 8 ++++---- 2 files changed, 8 insertions(+), 5 deletions(-) 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;