Implement position independent dump.
Set the filename for every compilation unit as realtive to obtain a position independent dump. * lisp/loadup.el: Modify filename for every compilation unit as position independent. * src/pdumper.c (dump_do_dump_relocation): Update to be invocation directory relative.
This commit is contained in:
parent
d85b803b78
commit
f4156b452f
2 changed files with 17 additions and 1 deletions
|
@ -449,6 +449,21 @@ lost after dumping")))
|
|||
;; At this point, we're ready to resume undo recording for scratch.
|
||||
(buffer-enable-undo "*scratch*")
|
||||
|
||||
(when (boundp 'comp-ctxt) ; FIXME better native-comp build discriminant?
|
||||
;; Set the filename for every compilation unit as realtive
|
||||
;; to obtain a position independent dump.
|
||||
(let ((h (make-hash-table :test #'eq)))
|
||||
(mapatoms (lambda (s)
|
||||
(let ((f (symbol-function s)))
|
||||
(when (subr-native-elisp-p f)
|
||||
(puthash (subr-native-comp-unit f) nil h)))))
|
||||
(maphash (lambda (cu _)
|
||||
(native-comp-unit-set-file
|
||||
cu
|
||||
(file-relative-name (native-comp-unit-file cu)
|
||||
invocation-directory)))
|
||||
h)))
|
||||
|
||||
(when (hash-table-p purify-flag)
|
||||
(let ((strings 0)
|
||||
(vectors 0)
|
||||
|
|
|
@ -5298,7 +5298,8 @@ dump_do_dump_relocation (const uintptr_t dump_base,
|
|||
{
|
||||
struct Lisp_Native_Comp_Unit *comp_u =
|
||||
dump_ptr (dump_base, reloc_offset);
|
||||
comp_u->handle = dynlib_open (SSDATA (comp_u->file));
|
||||
comp_u->handle =
|
||||
dynlib_open (SSDATA (concat2 (Vinvocation_directory, comp_u->file)));
|
||||
if (!comp_u->handle)
|
||||
error ("%s", dynlib_error ());
|
||||
load_comp_unit (comp_u, true, false);
|
||||
|
|
Loading…
Add table
Reference in a new issue