aboutsummaryrefslogtreecommitdiff
path: root/gdb/gdb-dlfcn.h
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2017-04-06 20:09:42 -0600
committerTom Tromey <tom@tromey.com>2017-04-12 11:16:17 -0600
commit0e8621a0bec2d0840b853c4104614f345f0569ca (patch)
treefa5779e127946671f39a06a99e53de560ff0272b /gdb/gdb-dlfcn.h
parent67d89901506da74d00a482b7560237dce404b41c (diff)
downloadgdb-0e8621a0bec2d0840b853c4104614f345f0569ca.zip
gdb-0e8621a0bec2d0840b853c4104614f345f0569ca.tar.gz
gdb-0e8621a0bec2d0840b853c4104614f345f0569ca.tar.bz2
Introduce gdb_dlhandle_up
This introduces gdb_dlhandle_up, a unique_ptr that can close a dlopen'd library. All the functions working with dlopen handles are updated to use this new type. I did not try to build this on Windows. gdb/ChangeLog 2017-04-12 Tom Tromey <tom@tromey.com> * jit.c (struct jit_reader): Declare separately. Add constructor and destructor. Change type of "handle". (loaded_jit_reader): Define separately. (jit_reader_load): Update. New "new". (jit_reader_unload_command): Use "delete". * gdb-dlfcn.h (struct dlclose_deleter): New. (gdb_dlhandle_up): New typedef. (gdb_dlopen, gdb_dlsym): Update types. (gdb_dlclose): Remove. * gdb-dlfcn.c (gdb_dlopen): Return a gdb_dlhandle_up. (gdb_dlsym): Change type of "handle". (make_cleanup_dlclose): Remove. (dlclose_deleter::operator()): Rename from gdb_dlclose. * compile/compile-c-support.c (load_libcc): Update.
Diffstat (limited to 'gdb/gdb-dlfcn.h')
-rw-r--r--gdb/gdb-dlfcn.h24
1 files changed, 13 insertions, 11 deletions
diff --git a/gdb/gdb-dlfcn.h b/gdb/gdb-dlfcn.h
index 31709a9..021f759 100644
--- a/gdb/gdb-dlfcn.h
+++ b/gdb/gdb-dlfcn.h
@@ -20,26 +20,28 @@
#ifndef GDB_DLFCN_H
#define GDB_DLFCN_H
+/* A deleter that closes an open dynamic library. */
+
+struct dlclose_deleter
+{
+ void operator() (void *handle) const;
+};
+
+/* A unique pointer that points to a dynamic library. */
+
+typedef std::unique_ptr<void, dlclose_deleter> gdb_dlhandle_up;
+
/* Load the dynamic library file named FILENAME, and return a handle
for that dynamic library. Return NULL if the loading fails for any
reason. */
-void *gdb_dlopen (const char *filename);
+gdb_dlhandle_up gdb_dlopen (const char *filename);
/* Return the address of the symbol named SYMBOL inside the shared
library whose handle is HANDLE. Return NULL when the symbol could
not be found. */
-void *gdb_dlsym (void *handle, const char *symbol);
-
-/* Install a cleanup routine which closes the handle HANDLE. */
-
-struct cleanup *make_cleanup_dlclose (void *handle);
-
-/* Cleanup the shared object pointed to by HANDLE. Return 0 on success
- and nonzero on failure. */
-
-int gdb_dlclose (void *handle);
+void *gdb_dlsym (const gdb_dlhandle_up &handle, const char *symbol);
/* Return non-zero if the dynamic library functions are available on
this platform. */