emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master e6b9324: Have 'dlopen' use RTLD_GLOBAL in 'dynlib_open'


From: Andrea Corallo
Subject: master e6b9324: Have 'dlopen' use RTLD_GLOBAL in 'dynlib_open'
Date: Wed, 15 Dec 2021 10:04:34 -0500 (EST)

branch: master
commit e6b93245fe41731173854e48441614881478c9cf
Author: Andrea Corallo <akrl@sdf.org>
Commit: Andrea Corallo <akrl@sdf.org>

    Have 'dlopen' use RTLD_GLOBAL in 'dynlib_open'
    
    * src/pdumper.c (dump_do_dump_relocation): Use 'dynlib_open_for_eln'
    in place of 'dynlib_open'.
    * src/dynlib.h (dynlib_open_for_eln): Declare it.
    * src/dynlib.c (dynlib_open_for_eln): New function.
    (dynlib_open): Add RTLD_GLOBAL.
    * src/comp.c (Fnative_elisp_load): Use 'dynlib_open_for_eln' in place
    of 'dynlib_open'.
---
 src/comp.c    |  6 +++---
 src/dynlib.c  | 12 ++++++++++++
 src/dynlib.h  |  1 +
 src/pdumper.c |  2 +-
 4 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/src/comp.c b/src/comp.c
index fb9b1a5..1fb3848 100644
--- a/src/comp.c
+++ b/src/comp.c
@@ -5278,16 +5278,16 @@ LATE_LOAD has to be non-nil when loading for deferred 
compilation.  */)
        Fmake_temp_file_internal (filename, Qnil, build_string (".eln.tmp"),
                                  Qnil);
       if (NILP (Ffile_writable_p (tmp_filename)))
-       comp_u->handle = dynlib_open (SSDATA (encoded_filename));
+       comp_u->handle = dynlib_open_for_eln (SSDATA (encoded_filename));
       else
        {
          Frename_file (filename, tmp_filename, Qt);
-         comp_u->handle = dynlib_open (SSDATA (ENCODE_FILE (tmp_filename)));
+         comp_u->handle = dynlib_open_for_eln (SSDATA (ENCODE_FILE 
(tmp_filename)));
          Frename_file (tmp_filename, filename, Qnil);
        }
     }
   else
-    comp_u->handle = dynlib_open (SSDATA (encoded_filename));
+    comp_u->handle = dynlib_open_for_eln (SSDATA (encoded_filename));
 
   if (!comp_u->handle)
     xsignal2 (Qnative_lisp_load_failed, filename,
diff --git a/src/dynlib.c b/src/dynlib.c
index a8c8843..e9a775f 100644
--- a/src/dynlib.c
+++ b/src/dynlib.c
@@ -104,6 +104,12 @@ dynlib_open (const char *dll_fname)
   return (dynlib_handle_ptr) hdll;
 }
 
+dynlib_handle_ptr
+dynlib_open_for_eln (const char *dll_fname)
+{
+  return dynlib_open (dll_fname);
+}
+
 void *
 dynlib_sym (dynlib_handle_ptr h, const char *sym)
 {
@@ -270,6 +276,12 @@ dynlib_close (dynlib_handle_ptr h)
 dynlib_handle_ptr
 dynlib_open (const char *path)
 {
+  return dlopen (path, RTLD_LAZY | RTLD_GLOBAL);
+}
+
+dynlib_handle_ptr
+dynlib_open_for_eln (const char *path)
+{
   return dlopen (path, RTLD_LAZY);
 }
 
diff --git a/src/dynlib.h b/src/dynlib.h
index e20d889..05ba798 100644
--- a/src/dynlib.h
+++ b/src/dynlib.h
@@ -24,6 +24,7 @@ along with GNU Emacs.  If not, see 
<https://www.gnu.org/licenses/>.  */
 
 typedef void *dynlib_handle_ptr;
 dynlib_handle_ptr dynlib_open (const char *path);
+dynlib_handle_ptr dynlib_open_for_eln (const char *path);
 int dynlib_close (dynlib_handle_ptr h);
 const char *dynlib_error (void);
 
diff --git a/src/pdumper.c b/src/pdumper.c
index 8f03684..554b530 100644
--- a/src/pdumper.c
+++ b/src/pdumper.c
@@ -5353,7 +5353,7 @@ dump_do_dump_relocation (const uintptr_t dump_base,
           their file names through expand-file-name and
           decode-coding-string.  */
        comp_u->file = eln_fname;
-       comp_u->handle = dynlib_open (SSDATA (eln_fname));
+       comp_u->handle = dynlib_open_for_eln (SSDATA (eln_fname));
        if (!comp_u->handle)
          {
            fprintf (stderr, "Error using execdir %s:\n",



reply via email to

[Prev in Thread] Current Thread [Next in Thread]