X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=gdb%2Fgdb-dlfcn.c;h=76873cfc73c605576baa40a8bcb2b404e2228877;hb=f2023ce7e8d70b0155cc6206c901e185260918f0;hp=9d68de526a1762010c6d8f2ff254ae600fcda6c7;hpb=0b30217134add051e159a192066a1e568ebd837f;p=binutils-gdb.git diff --git a/gdb/gdb-dlfcn.c b/gdb/gdb-dlfcn.c index 9d68de526a1..76873cfc73c 100644 --- a/gdb/gdb-dlfcn.c +++ b/gdb/gdb-dlfcn.c @@ -1,6 +1,6 @@ /* Platform independent shared object routines for GDB. - Copyright (C) 2011-2012 Free Software Foundation, Inc. + Copyright (C) 2011-2018 Free Software Foundation, Inc. This file is part of GDB. @@ -18,8 +18,6 @@ along with this program. If not, see . */ #include "defs.h" -#include "gdb_assert.h" - #include "gdb-dlfcn.h" #ifdef HAVE_DLFCN_H @@ -33,27 +31,20 @@ #ifdef NO_SHARED_LIB -void * +gdb_dlhandle_up gdb_dlopen (const char *filename) { gdb_assert_not_reached ("gdb_dlopen should not be called on this platform."); } void * -gdb_dlsym (void *handle, const char *symbol) +gdb_dlsym (const gdb_dlhandle_up &handle, const char *symbol) { gdb_assert_not_reached ("gdb_dlsym should not be called on this platform."); } -struct cleanup * -make_cleanup_dlclose (void *handle) -{ - gdb_assert_not_reached ("make_cleanup_dlclose should not be called on this " - "platform."); -} - -int -gdb_dlclose (void *handle) +void +dlclose_deleter::operator() (void *handle) const { gdb_assert_not_reached ("gdb_dlclose should not be called on this platform."); } @@ -66,7 +57,7 @@ is_dl_available (void) #else /* NO_SHARED_LIB */ -void * +gdb_dlhandle_up gdb_dlopen (const char *filename) { void *result; @@ -76,7 +67,7 @@ gdb_dlopen (const char *filename) result = (void *) LoadLibrary (filename); #endif if (result != NULL) - return result; + return gdb_dlhandle_up (result); #ifdef HAVE_DLFCN_H error (_("Could not load %s: %s"), filename, dlerror()); @@ -99,37 +90,25 @@ gdb_dlopen (const char *filename) } void * -gdb_dlsym (void *handle, const char *symbol) +gdb_dlsym (const gdb_dlhandle_up &handle, const char *symbol) { #ifdef HAVE_DLFCN_H - return dlsym (handle, symbol); + return dlsym (handle.get (), symbol); #elif __MINGW32__ - return (void *) GetProcAddress (handle, symbol); + return (void *) GetProcAddress ((HMODULE) handle.get (), symbol); #endif } -int -gdb_dlclose (void *handle) +void +dlclose_deleter::operator() (void *handle) const { #ifdef HAVE_DLFCN_H - return dlclose (handle); + dlclose (handle); #elif __MINGW32__ - return !((int) FreeLibrary (handle)); + FreeLibrary ((HMODULE) handle); #endif } -static void -do_dlclose_cleanup (void *handle) -{ - gdb_dlclose (handle); -} - -struct cleanup * -make_cleanup_dlclose (void *handle) -{ - return make_cleanup (do_dlclose_cleanup, handle); -} - int is_dl_available (void) {