Skip to content

Commit 96c06a1

Browse files
committed
Expose native_code's jl_sysimg_gvars.
1 parent 2c2114c commit 96c06a1

File tree

5 files changed

+29
-8
lines changed

5 files changed

+29
-8
lines changed

src/aotcompile.cpp

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -108,20 +108,37 @@ jl_get_llvm_mis_impl(void *native_code, size_t *num_elements, jl_method_instance
108108
}
109109
}
110110

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

118118
if (data == NULL) {
119-
*num_elements = value_map.size();
119+
*num_elements = gvars.size();
120120
return;
121121
}
122122

123-
assert(*num_elements == value_map.size());
124-
memcpy(data, value_map.data(), *num_elements * sizeof(void *));
123+
assert(*num_elements == gvars.size());
124+
memcpy(data, gvars.data(), *num_elements * sizeof(void *));
125+
}
126+
127+
// get the locations (jl_value_t or jl_binding_t) of managed global variables
128+
extern "C" JL_DLLEXPORT_CODEGEN void jl_get_llvm_gv_locations_impl(void *native_code,
129+
size_t *num_elements,
130+
void **data)
131+
{
132+
jl_native_code_desc_t *desc = (jl_native_code_desc_t *)native_code;
133+
auto &locations = desc->jl_value_to_llvm;
134+
135+
if (data == NULL) {
136+
*num_elements = locations.size();
137+
return;
138+
}
139+
140+
assert(*num_elements == locations.size());
141+
memcpy(data, locations.data(), *num_elements * sizeof(void *));
125142
}
126143

127144
extern "C" JL_DLLEXPORT_CODEGEN void jl_get_llvm_external_fns_impl(void *native_code,

src/codegen-stubs.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ JL_DLLEXPORT void jl_dump_native_fallback(void *native_code,
1414
const char *bc_fname, const char *unopt_bc_fname, const char *obj_fname, const char *asm_fname,
1515
ios_t *z, ios_t *s) UNAVAILABLE
1616
JL_DLLEXPORT void jl_get_llvm_gvs_fallback(void *native_code, arraylist_t *gvs) UNAVAILABLE
17+
JL_DLLEXPORT void jl_get_llvm_gv_locations_fallback(void *native_code, arraylist_t *gvs) UNAVAILABLE
1718
JL_DLLEXPORT void jl_get_llvm_external_fns_fallback(void *native_code, arraylist_t *gvs) UNAVAILABLE
1819
JL_DLLEXPORT void jl_get_llvm_mis_fallback(void *native_code, arraylist_t* MIs) UNAVAILABLE
1920

src/jl_exported_funcs.inc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -514,6 +514,7 @@
514514
YY(jl_get_LLVM_VERSION) \
515515
YY(jl_dump_native) \
516516
YY(jl_get_llvm_gvs) \
517+
YY(jl_get_llvm_gv_locations) \
517518
YY(jl_get_llvm_external_fns) \
518519
YY(jl_get_llvm_mis) \
519520
YY(jl_dump_function_asm) \

src/julia_internal.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2040,8 +2040,10 @@ JL_DLLIMPORT void jl_dump_native(void *native_code,
20402040
const char *bc_fname, const char *unopt_bc_fname, const char *obj_fname, const char *asm_fname,
20412041
ios_t *z, ios_t *s, jl_emission_params_t *params);
20422042
JL_DLLIMPORT void jl_get_llvm_gvs(void *native_code, size_t *num_els, void **gvs);
2043+
JL_DLLIMPORT void jl_get_llvm_gv_locations(void *native_code, size_t *num_els,
2044+
void **locations);
20432045
JL_DLLIMPORT void jl_get_llvm_external_fns(void *native_code, size_t *num_els,
2044-
jl_code_instance_t *gvs);
2046+
jl_code_instance_t *fns);
20452047
JL_DLLIMPORT void jl_get_function_id(void *native_code, jl_code_instance_t *ncode,
20462048
int32_t *func_idx, int32_t *specfunc_idx);
20472049
JL_DLLIMPORT void jl_register_fptrs(uint64_t image_base, const struct _jl_image_fptrs_t *fptrs,

src/staticdata.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3055,9 +3055,9 @@ static void jl_save_system_image_to_stream(ios_t *f, jl_array_t *mod_array,
30553055
int en = jl_gc_enable(0);
30563056
if (native_functions) {
30573057
size_t num_gvars, num_external_fns;
3058-
jl_get_llvm_gvs(native_functions, &num_gvars, NULL);
3058+
jl_get_llvm_gv_locations(native_functions, &num_gvars, NULL);
30593059
arraylist_grow(&gvars, num_gvars);
3060-
jl_get_llvm_gvs(native_functions, &num_gvars, gvars.items);
3060+
jl_get_llvm_gv_locations(native_functions, &num_gvars, gvars.items);
30613061
jl_get_llvm_external_fns(native_functions, &num_external_fns, NULL);
30623062
arraylist_grow(&external_fns, num_external_fns);
30633063
jl_get_llvm_external_fns(native_functions, &num_external_fns,

0 commit comments

Comments
 (0)