mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Make c_file / so_file construction consistent
convert_unit_to_func's c_func / so_func construction is unnecessarily complicated while it's not really safer than what compact_all_jit_code does. So I changed convert_unit_to_func to be consistent with compact_all_jit_code.
This commit is contained in:
parent
e0156bd396
commit
9eb34c2c9e
1 changed files with 9 additions and 23 deletions
|
@ -944,9 +944,9 @@ compact_all_jit_code(void)
|
||||||
unit = calloc(1, sizeof(struct rb_mjit_unit)); // To prevent GC, don't use ZALLOC
|
unit = calloc(1, sizeof(struct rb_mjit_unit)); // To prevent GC, don't use ZALLOC
|
||||||
if (unit == NULL) return;
|
if (unit == NULL) return;
|
||||||
unit->id = current_unit_num++;
|
unit->id = current_unit_num++;
|
||||||
|
sprint_uniq_filename(c_file, (int)sizeof(c_file), unit->id, MJIT_TMP_PREFIX, c_ext);
|
||||||
sprint_uniq_filename(so_file, (int)sizeof(so_file), unit->id, MJIT_TMP_PREFIX, so_ext);
|
sprint_uniq_filename(so_file, (int)sizeof(so_file), unit->id, MJIT_TMP_PREFIX, so_ext);
|
||||||
|
|
||||||
sprint_uniq_filename(c_file, (int)sizeof(c_file), unit->id, MJIT_TMP_PREFIX, c_ext);
|
|
||||||
CRITICAL_SECTION_START(3, "in compact_all_jit_code to guard .c files from unload_units");
|
CRITICAL_SECTION_START(3, "in compact_all_jit_code to guard .c files from unload_units");
|
||||||
in_compact = true;
|
in_compact = true;
|
||||||
CRITICAL_SECTION_FINISH(3, "in compact_all_jit_code to guard .c files from unload_units");
|
CRITICAL_SECTION_FINISH(3, "in compact_all_jit_code to guard .c files from unload_units");
|
||||||
|
@ -1076,30 +1076,16 @@ compile_prelude(FILE *f)
|
||||||
static mjit_func_t
|
static mjit_func_t
|
||||||
convert_unit_to_func(struct rb_mjit_unit *unit)
|
convert_unit_to_func(struct rb_mjit_unit *unit)
|
||||||
{
|
{
|
||||||
char c_file_buff[MAXPATHLEN], *c_file = c_file_buff, *so_file, funcname[MAXPATHLEN];
|
|
||||||
int fd;
|
|
||||||
FILE *f;
|
|
||||||
void *func;
|
|
||||||
double start_time, end_time;
|
|
||||||
int c_file_len = (int)sizeof(c_file_buff);
|
|
||||||
static const char c_ext[] = ".c";
|
static const char c_ext[] = ".c";
|
||||||
static const char so_ext[] = DLEXT;
|
static const char so_ext[] = DLEXT;
|
||||||
|
char c_file[MAXPATHLEN], so_file[MAXPATHLEN], funcname[MAXPATHLEN];
|
||||||
|
|
||||||
c_file_len = sprint_uniq_filename(c_file_buff, c_file_len, unit->id, MJIT_TMP_PREFIX, c_ext);
|
sprint_uniq_filename(c_file, (int)sizeof(c_file), unit->id, MJIT_TMP_PREFIX, c_ext);
|
||||||
if (c_file_len >= (int)sizeof(c_file_buff)) {
|
sprint_uniq_filename(so_file, (int)sizeof(so_file), unit->id, MJIT_TMP_PREFIX, so_ext);
|
||||||
++c_file_len;
|
|
||||||
c_file = alloca(c_file_len);
|
|
||||||
c_file_len = sprint_uniq_filename(c_file, c_file_len, unit->id, MJIT_TMP_PREFIX, c_ext);
|
|
||||||
}
|
|
||||||
++c_file_len;
|
|
||||||
|
|
||||||
so_file = alloca(c_file_len - sizeof(c_ext) + sizeof(so_ext));
|
|
||||||
memcpy(so_file, c_file, c_file_len - sizeof(c_ext));
|
|
||||||
memcpy(&so_file[c_file_len - sizeof(c_ext)], so_ext, sizeof(so_ext));
|
|
||||||
|
|
||||||
sprint_funcname(funcname, unit);
|
sprint_funcname(funcname, unit);
|
||||||
|
|
||||||
fd = rb_cloexec_open(c_file, c_file_access_mode, 0600);
|
FILE *f;
|
||||||
|
int fd = rb_cloexec_open(c_file, c_file_access_mode, 0600);
|
||||||
if (fd < 0 || (f = fdopen(fd, "w")) == NULL) {
|
if (fd < 0 || (f = fdopen(fd, "w")) == NULL) {
|
||||||
int e = errno;
|
int e = errno;
|
||||||
if (fd >= 0) (void)close(fd);
|
if (fd >= 0) (void)close(fd);
|
||||||
|
@ -1161,7 +1147,7 @@ convert_unit_to_func(struct rb_mjit_unit *unit)
|
||||||
return (mjit_func_t)NOT_COMPILED_JIT_ISEQ_FUNC;
|
return (mjit_func_t)NOT_COMPILED_JIT_ISEQ_FUNC;
|
||||||
}
|
}
|
||||||
|
|
||||||
start_time = real_ms_time();
|
double start_time = real_ms_time();
|
||||||
success = compile_c_to_so(c_file, so_file);
|
success = compile_c_to_so(c_file, so_file);
|
||||||
#if USE_JIT_COMPACTION
|
#if USE_JIT_COMPACTION
|
||||||
if (success) {
|
if (success) {
|
||||||
|
@ -1177,14 +1163,14 @@ convert_unit_to_func(struct rb_mjit_unit *unit)
|
||||||
if (!mjit_opts.save_temps)
|
if (!mjit_opts.save_temps)
|
||||||
remove_file(c_file);
|
remove_file(c_file);
|
||||||
#endif
|
#endif
|
||||||
end_time = real_ms_time();
|
double end_time = real_ms_time();
|
||||||
|
|
||||||
if (!success) {
|
if (!success) {
|
||||||
verbose(2, "Failed to generate so: %s", so_file);
|
verbose(2, "Failed to generate so: %s", so_file);
|
||||||
return (mjit_func_t)NOT_COMPILED_JIT_ISEQ_FUNC;
|
return (mjit_func_t)NOT_COMPILED_JIT_ISEQ_FUNC;
|
||||||
}
|
}
|
||||||
|
|
||||||
func = load_func_from_so(so_file, funcname, unit);
|
void *func = load_func_from_so(so_file, funcname, unit);
|
||||||
if (!mjit_opts.save_temps)
|
if (!mjit_opts.save_temps)
|
||||||
remove_so_file(so_file, unit);
|
remove_so_file(so_file, unit);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue