mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Update MJIT references
ISeq can move, so we need to tell MJIT where the new location is. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67624 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
6c4fd432d0
commit
c784da1744
3 changed files with 17 additions and 0 deletions
3
iseq.c
3
iseq.c
|
@ -262,6 +262,9 @@ rb_iseq_update_references(rb_iseq_t *iseq)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#if USE_MJIT
|
||||||
|
mjit_update_references(iseq);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
13
mjit.c
13
mjit.c
|
@ -110,6 +110,19 @@ mjit_gc_finish_hook(void)
|
||||||
CRITICAL_SECTION_FINISH(4, "mjit_gc_finish_hook");
|
CRITICAL_SECTION_FINISH(4, "mjit_gc_finish_hook");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Deal with ISeq movement from compactor
|
||||||
|
void
|
||||||
|
mjit_update_references(const rb_iseq_t *iseq)
|
||||||
|
{
|
||||||
|
if (!mjit_enabled)
|
||||||
|
return;
|
||||||
|
CRITICAL_SECTION_START(4, "mjit_free_iseq");
|
||||||
|
if (iseq->body->jit_unit) {
|
||||||
|
iseq->body->jit_unit->iseq = (rb_iseq_t *)rb_gc_new_location(iseq->body->jit_unit->iseq);
|
||||||
|
}
|
||||||
|
CRITICAL_SECTION_FINISH(4, "mjit_free_iseq");
|
||||||
|
}
|
||||||
|
|
||||||
// Iseqs can be garbage collected. This function should call when it
|
// Iseqs can be garbage collected. This function should call when it
|
||||||
// happens. It removes iseq from the unit.
|
// happens. It removes iseq from the unit.
|
||||||
void
|
void
|
||||||
|
|
1
mjit.h
1
mjit.h
|
@ -84,6 +84,7 @@ extern void mjit_postponed_job_register_finish_hook(void);
|
||||||
extern void mjit_gc_start_hook(void);
|
extern void mjit_gc_start_hook(void);
|
||||||
extern void mjit_gc_finish_hook(void);
|
extern void mjit_gc_finish_hook(void);
|
||||||
extern void mjit_free_iseq(const rb_iseq_t *iseq);
|
extern void mjit_free_iseq(const rb_iseq_t *iseq);
|
||||||
|
extern void mjit_update_references(const rb_iseq_t *iseq);
|
||||||
extern void mjit_mark(void);
|
extern void mjit_mark(void);
|
||||||
extern struct mjit_cont *mjit_cont_new(rb_execution_context_t *ec);
|
extern struct mjit_cont *mjit_cont_new(rb_execution_context_t *ec);
|
||||||
extern void mjit_cont_free(struct mjit_cont *cont);
|
extern void mjit_cont_free(struct mjit_cont *cont);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue