diff options
Diffstat (limited to 'src/comp.c')
| -rw-r--r-- | src/comp.c | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/src/comp.c b/src/comp.c index 80a59faa859..07c35413dde 100644 --- a/src/comp.c +++ b/src/comp.c | |||
| @@ -3175,15 +3175,22 @@ load_comp_unit (dynlib_handle_ptr handle) | |||
| 3175 | { | 3175 | { |
| 3176 | struct thread_state ***current_thread_reloc = | 3176 | struct thread_state ***current_thread_reloc = |
| 3177 | dynlib_sym (handle, CURRENT_THREAD_RELOC_SYM); | 3177 | dynlib_sym (handle, CURRENT_THREAD_RELOC_SYM); |
| 3178 | *current_thread_reloc = ¤t_thread; | 3178 | EMACS_INT ***pure_reloc = dynlib_sym (handle, PURE_RELOC_SYM); |
| 3179 | Lisp_Object *data_relocs = dynlib_sym (handle, DATA_RELOC_SYM); | ||
| 3180 | Lisp_Object (**f_relocs)(void) = dynlib_sym (handle, IMPORTED_FUNC_RELOC_SYM); | ||
| 3181 | void (*top_level_run)(void) = dynlib_sym (handle, "top_level_run"); | ||
| 3182 | |||
| 3183 | if (!(current_thread_reloc | ||
| 3184 | && pure_reloc | ||
| 3185 | && data_relocs | ||
| 3186 | && f_relocs | ||
| 3187 | && top_level_run)) | ||
| 3188 | return -1; | ||
| 3179 | 3189 | ||
| 3180 | EMACS_INT ***pure_reloc = | 3190 | *current_thread_reloc = ¤t_thread; |
| 3181 | dynlib_sym (handle, PURE_RELOC_SYM); | ||
| 3182 | *pure_reloc = (EMACS_INT **)&pure; | 3191 | *pure_reloc = (EMACS_INT **)&pure; |
| 3183 | 3192 | ||
| 3184 | /* Imported data. */ | 3193 | /* Imported data. */ |
| 3185 | Lisp_Object *data_relocs = dynlib_sym (handle, DATA_RELOC_SYM); | ||
| 3186 | |||
| 3187 | Lisp_Object d_vec = load_static_obj (handle, TEXT_DATA_RELOC_SYM); | 3194 | Lisp_Object d_vec = load_static_obj (handle, TEXT_DATA_RELOC_SYM); |
| 3188 | EMACS_UINT d_vec_len = XFIXNUM (Flength (d_vec)); | 3195 | EMACS_UINT d_vec_len = XFIXNUM (Flength (d_vec)); |
| 3189 | 3196 | ||
| @@ -3194,8 +3201,6 @@ load_comp_unit (dynlib_handle_ptr handle) | |||
| 3194 | } | 3201 | } |
| 3195 | 3202 | ||
| 3196 | /* Imported functions. */ | 3203 | /* Imported functions. */ |
| 3197 | Lisp_Object (**f_relocs)(void) = | ||
| 3198 | dynlib_sym (handle, IMPORTED_FUNC_RELOC_SYM); | ||
| 3199 | Lisp_Object f_vec = | 3204 | Lisp_Object f_vec = |
| 3200 | load_static_obj (handle, TEXT_IMPORTED_FUNC_RELOC_SYM); | 3205 | load_static_obj (handle, TEXT_IMPORTED_FUNC_RELOC_SYM); |
| 3201 | EMACS_UINT f_vec_len = XFIXNUM (Flength (f_vec)); | 3206 | EMACS_UINT f_vec_len = XFIXNUM (Flength (f_vec)); |
| @@ -3251,7 +3256,6 @@ load_comp_unit (dynlib_handle_ptr handle) | |||
| 3251 | } | 3256 | } |
| 3252 | 3257 | ||
| 3253 | /* Executing this will perform all the expected environment modification. */ | 3258 | /* Executing this will perform all the expected environment modification. */ |
| 3254 | void (*top_level_run)(void) = dynlib_sym (handle, "top_level_run"); | ||
| 3255 | top_level_run (); | 3259 | top_level_run (); |
| 3256 | 3260 | ||
| 3257 | return 0; | 3261 | return 0; |