bool native_is_ip_stub(void* ip) { // Synchronizing access to dynamic code list LMAutoUnlock dcll(VM_Global_State::loader_env->p_dclist_lock); return (native_find_stub(ip) != NULL); }
const char* native_get_stub_name_nocpy(void* ip) { // Synchronizing access to dynamic code list LMAutoUnlock dcll(VM_Global_State::loader_env->p_dclist_lock); DynamicCode* code = native_find_stub(ip); if (!code) return NULL; return code->name; }
// Adding dynamic generated code info to global list void compile_add_dynamic_generated_code_chunk(const char* name, bool free_name, const void* address, size_t length) { DynamicCode *dc = (DynamicCode *)STD_MALLOC(sizeof(DynamicCode)); assert(dc); dc->name = name; dc->free_name = free_name; dc->address = address; dc->length = length; // Synchronizing access to dynamic code list LMAutoUnlock dcll(VM_Global_State::loader_env->p_dclist_lock); DynamicCode** pdcList = &VM_Global_State::loader_env->dcList; dc->next = *pdcList; *pdcList = dc; }
char* native_get_stub_name(void* ip, char* buf, size_t buflen) { // Synchronizing access to dynamic code list LMAutoUnlock dcll(VM_Global_State::loader_env->p_dclist_lock); if (!buf || buflen == 0) return NULL; DynamicCode* code = native_find_stub(ip); if (!code || !code->name) return NULL; strncpy(buf, code->name, buflen); buf[buflen - 1] = '\0'; return buf; }