aboutsummaryrefslogtreecommitdiffstats
path: root/src/comp.c
diff options
context:
space:
mode:
authorAndrea Corallo2019-12-24 14:51:18 +0100
committerAndrea Corallo2020-01-01 11:38:16 +0100
commitb6d6e7feb75b792c74fe3e1d036b9edf540d771e (patch)
treed39f8115419d93153ebd94698ba9115157562599 /src/comp.c
parent15ac087712250b5ffeb4d162761b2495a5e572a3 (diff)
downloademacs-b6d6e7feb75b792c74fe3e1d036b9edf540d771e.tar.gz
emacs-b6d6e7feb75b792c74fe3e1d036b9edf540d771e.zip
add native compilation unit pdumper support
Diffstat (limited to 'src/comp.c')
-rw-r--r--src/comp.c33
1 files changed, 19 insertions, 14 deletions
diff --git a/src/comp.c b/src/comp.c
index 003d3d7ca44..43b22a86805 100644
--- a/src/comp.c
+++ b/src/comp.c
@@ -3217,7 +3217,7 @@ load_static_obj (dynlib_handle_ptr handle, const char *name)
3217} 3217}
3218 3218
3219void 3219void
3220load_comp_unit (struct Lisp_Native_Comp_Unit *comp_u) 3220load_comp_unit (struct Lisp_Native_Comp_Unit *comp_u, bool loading_dump)
3221{ 3221{
3222 dynlib_handle_ptr handle = comp_u->handle; 3222 dynlib_handle_ptr handle = comp_u->handle;
3223 struct thread_state ***current_thread_reloc = 3223 struct thread_state ***current_thread_reloc =
@@ -3237,22 +3237,26 @@ load_comp_unit (struct Lisp_Native_Comp_Unit *comp_u)
3237 *current_thread_reloc = &current_thread; 3237 *current_thread_reloc = &current_thread;
3238 *pure_reloc = (EMACS_INT **)&pure; 3238 *pure_reloc = (EMACS_INT **)&pure;
3239 3239
3240 /* Imported data. */
3241 Lisp_Object d_vec = load_static_obj (handle, TEXT_DATA_RELOC_SYM);
3242 EMACS_INT d_vec_len = XFIXNUM (Flength (d_vec));
3243
3244 for (EMACS_INT i = 0; i < d_vec_len; i++)
3245 data_relocs[i] = AREF (d_vec, i);
3246
3247 comp_u->data_vec = d_vec;
3248 /* Imported functions. */ 3240 /* Imported functions. */
3249 *freloc_link_table = freloc.link_table; 3241 *freloc_link_table = freloc.link_table;
3250 3242
3251 Lisp_Object comp_u_obj; 3243 /* Imported data. */
3252 XSETNATIVE_COMP_UNIT (comp_u_obj, comp_u); 3244 if (!loading_dump)
3245 comp_u->data_vec = load_static_obj (handle, TEXT_DATA_RELOC_SYM);
3246
3247 EMACS_INT d_vec_len = XFIXNUM (Flength (comp_u->data_vec));
3248
3249 for (EMACS_INT i = 0; i < d_vec_len; i++)
3250 data_relocs[i] = AREF (comp_u->data_vec, i);
3253 3251
3254 /* Executing this will perform all the expected environment modification. */ 3252 if (!loading_dump)
3255 top_level_run (comp_u_obj); 3253 {
3254 Lisp_Object comp_u_obj;
3255 XSETNATIVE_COMP_UNIT (comp_u_obj, comp_u);
3256 /* Executing this will perform all the expected environment
3257 modification. */
3258 top_level_run (comp_u_obj);
3259 }
3256 3260
3257 return; 3261 return;
3258} 3262}
@@ -3308,7 +3312,8 @@ DEFUN ("native-elisp-load", Fnative_elisp_load, Snative_elisp_load, 1, 1, 0,
3308 if (!comp_u->handle) 3312 if (!comp_u->handle)
3309 xsignal2 (Qnative_lisp_load_failed, file, build_string (dynlib_error ())); 3313 xsignal2 (Qnative_lisp_load_failed, file, build_string (dynlib_error ()));
3310 comp_u->file = file; 3314 comp_u->file = file;
3311 load_comp_unit (comp_u); 3315 comp_u->data_vec = Qnil;
3316 load_comp_unit (comp_u, false);
3312 3317
3313 return Qt; 3318 return Qt;
3314} 3319}