diff options
| author | Andrea Corallo | 2019-12-24 14:51:18 +0100 |
|---|---|---|
| committer | Andrea Corallo | 2020-01-01 11:38:16 +0100 |
| commit | b6d6e7feb75b792c74fe3e1d036b9edf540d771e (patch) | |
| tree | d39f8115419d93153ebd94698ba9115157562599 /src/comp.c | |
| parent | 15ac087712250b5ffeb4d162761b2495a5e572a3 (diff) | |
| download | emacs-b6d6e7feb75b792c74fe3e1d036b9edf540d771e.tar.gz emacs-b6d6e7feb75b792c74fe3e1d036b9edf540d771e.zip | |
add native compilation unit pdumper support
Diffstat (limited to 'src/comp.c')
| -rw-r--r-- | src/comp.c | 33 |
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 | ||
| 3219 | void | 3219 | void |
| 3220 | load_comp_unit (struct Lisp_Native_Comp_Unit *comp_u) | 3220 | load_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 = ¤t_thread; | 3237 | *current_thread_reloc = ¤t_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 | } |