Skip to content

Expose native_code's jl_sysimg_gvars. #58423

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
May 21, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 22 additions & 5 deletions src/aotcompile.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -108,20 +108,37 @@ jl_get_llvm_mis_impl(void *native_code, size_t *num_elements, jl_method_instance
}
}

// get the list of global variables managed by the compiler
extern "C" JL_DLLEXPORT_CODEGEN void jl_get_llvm_gvs_impl(void *native_code,
size_t *num_elements, void **data)
{
// map a memory location (jl_value_t or jl_binding_t) to a GlobalVariable
jl_native_code_desc_t *desc = (jl_native_code_desc_t *)native_code;
auto &value_map = desc->jl_value_to_llvm;
auto &gvars = desc->jl_sysimg_gvars;

if (data == NULL) {
*num_elements = value_map.size();
*num_elements = gvars.size();
return;
}

assert(*num_elements == value_map.size());
memcpy(data, value_map.data(), *num_elements * sizeof(void *));
assert(*num_elements == gvars.size());
memcpy(data, gvars.data(), *num_elements * sizeof(void *));
}

// get the initializer values (jl_value_t or jl_binding_t ptr) of managed global variables
extern "C" JL_DLLEXPORT_CODEGEN void jl_get_llvm_gv_inits_impl(void *native_code,
size_t *num_elements,
void **data)
{
jl_native_code_desc_t *desc = (jl_native_code_desc_t *)native_code;
auto &inits = desc->jl_value_to_llvm;

if (data == NULL) {
*num_elements = inits.size();
return;
}

assert(*num_elements == inits.size());
memcpy(data, inits.data(), *num_elements * sizeof(void *));
}

extern "C" JL_DLLEXPORT_CODEGEN void jl_get_llvm_external_fns_impl(void *native_code,
Expand Down
1 change: 1 addition & 0 deletions src/codegen-stubs.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ JL_DLLEXPORT void jl_dump_native_fallback(void *native_code,
const char *bc_fname, const char *unopt_bc_fname, const char *obj_fname, const char *asm_fname,
ios_t *z, ios_t *s) UNAVAILABLE
JL_DLLEXPORT void jl_get_llvm_gvs_fallback(void *native_code, arraylist_t *gvs) UNAVAILABLE
JL_DLLEXPORT void jl_get_llvm_gv_inits_fallback(void *native_code, arraylist_t *inits) UNAVAILABLE
JL_DLLEXPORT void jl_get_llvm_external_fns_fallback(void *native_code, arraylist_t *gvs) UNAVAILABLE
JL_DLLEXPORT void jl_get_llvm_mis_fallback(void *native_code, arraylist_t* MIs) UNAVAILABLE

Expand Down
1 change: 1 addition & 0 deletions src/jl_exported_funcs.inc
Original file line number Diff line number Diff line change
Expand Up @@ -514,6 +514,7 @@
YY(jl_get_LLVM_VERSION) \
YY(jl_dump_native) \
YY(jl_get_llvm_gvs) \
YY(jl_get_llvm_gv_inits) \
YY(jl_get_llvm_external_fns) \
YY(jl_get_llvm_mis) \
YY(jl_dump_function_asm) \
Expand Down
3 changes: 2 additions & 1 deletion src/julia_internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -2040,8 +2040,9 @@ JL_DLLIMPORT void jl_dump_native(void *native_code,
const char *bc_fname, const char *unopt_bc_fname, const char *obj_fname, const char *asm_fname,
ios_t *z, ios_t *s, jl_emission_params_t *params);
JL_DLLIMPORT void jl_get_llvm_gvs(void *native_code, size_t *num_els, void **gvs);
JL_DLLIMPORT void jl_get_llvm_gv_inits(void *native_code, size_t *num_els, void **inits);
JL_DLLIMPORT void jl_get_llvm_external_fns(void *native_code, size_t *num_els,
jl_code_instance_t *gvs);
jl_code_instance_t *fns);
JL_DLLIMPORT void jl_get_function_id(void *native_code, jl_code_instance_t *ncode,
int32_t *func_idx, int32_t *specfunc_idx);
JL_DLLIMPORT void jl_register_fptrs(uint64_t image_base, const struct _jl_image_fptrs_t *fptrs,
Expand Down
4 changes: 2 additions & 2 deletions src/staticdata.c
Original file line number Diff line number Diff line change
Expand Up @@ -3055,9 +3055,9 @@ static void jl_save_system_image_to_stream(ios_t *f, jl_array_t *mod_array,
int en = jl_gc_enable(0);
if (native_functions) {
size_t num_gvars, num_external_fns;
jl_get_llvm_gvs(native_functions, &num_gvars, NULL);
jl_get_llvm_gv_inits(native_functions, &num_gvars, NULL);
arraylist_grow(&gvars, num_gvars);
jl_get_llvm_gvs(native_functions, &num_gvars, gvars.items);
jl_get_llvm_gv_inits(native_functions, &num_gvars, gvars.items);
jl_get_llvm_external_fns(native_functions, &num_external_fns, NULL);
arraylist_grow(&external_fns, num_external_fns);
jl_get_llvm_external_fns(native_functions, &num_external_fns,
Expand Down