From 0e8621a0bec2d0840b853c4104614f345f0569ca Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Thu, 6 Apr 2017 20:09:42 -0600 Subject: 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 * 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. --- gdb/gdb-dlfcn.h | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) (limited to 'gdb/gdb-dlfcn.h') 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 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. */ -- cgit v1.1