From 2d41fa1165c0e28d938ee3bae5c32db371dccf29 Mon Sep 17 00:00:00 2001 From: Sergio Durigan Junior Date: Wed, 21 Aug 2019 16:22:45 -0400 Subject: Move gdb-dlfcn.[ch] to gdbsupport/ I need to use 'gdb_dlopen' inside 'gdbsupport/', but it's not yet supported there. This commit moves 'gdb-dlfcn.[ch]' to 'gdbsupport/', which makes it available also on gdbserver. gdb/ChangeLog: 2019-08-23 Sergio Durigan Junior * configure.ac: Don't check for 'dlfcn.h' (moved to gdbsupport/common.m4). * Makefile.in (COMMON_SFILES): Move 'gdb-dlfcn.c' to 'gdbsupport/'. (HFILES_NO_SRCDIR): Likewise, for 'gdb-dlfcn.h'. * compile/compile-c-support.c: Include 'gdbsupport/gdb-dlfcn.h'. * gdbsupport/common.m4: Check for 'dlfcn.h'. * gdb-dlfcn.c: Move to... * gdbsupport/gdb-dlfcn.c: ... here. * gdb-dlfcn.h: Move to... * gdbsupport/gdb-dlfcn.h: ... here. gdb/gdbserver/ChangeLog: 2019-08-23 Sergio Durigan Junior * Makefile.in (SFILES): Add 'gdbsupport/gdb-dlfcn.c'. (OBS): Add 'gdbsupport/gdb-dlfcn.o'. * config.in: Regenerate. * configure: Regenerate. --- gdb/ChangeLog | 15 +++++ gdb/Makefile.in | 4 +- gdb/compile/compile-c-support.c | 2 +- gdb/configure | 5 +- gdb/configure.ac | 3 +- gdb/gdb-dlfcn.c | 118 ---------------------------------------- gdb/gdb-dlfcn.h | 51 ----------------- gdb/gdbserver/ChangeLog | 7 +++ gdb/gdbserver/Makefile.in | 2 + gdb/gdbserver/config.in | 3 + gdb/gdbserver/configure | 2 +- gdb/gdbsupport/common.m4 | 3 +- gdb/gdbsupport/gdb-dlfcn.c | 118 ++++++++++++++++++++++++++++++++++++++++ gdb/gdbsupport/gdb-dlfcn.h | 51 +++++++++++++++++ gdb/jit.c | 2 +- 15 files changed, 206 insertions(+), 180 deletions(-) delete mode 100644 gdb/gdb-dlfcn.c delete mode 100644 gdb/gdb-dlfcn.h create mode 100644 gdb/gdbsupport/gdb-dlfcn.c create mode 100644 gdb/gdbsupport/gdb-dlfcn.h (limited to 'gdb') diff --git a/gdb/ChangeLog b/gdb/ChangeLog index df8488b..1d85249 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,18 @@ +2019-08-23 Sergio Durigan Junior + + * configure.ac: Don't check for 'dlfcn.h' (moved to + gdbsupport/common.m4). + * Makefile.in (COMMON_SFILES): Move 'gdb-dlfcn.c' to + 'gdbsupport/'. + (HFILES_NO_SRCDIR): Likewise, for 'gdb-dlfcn.h'. + * compile/compile-c-support.c: Include + 'gdbsupport/gdb-dlfcn.h'. + * gdbsupport/common.m4: Check for 'dlfcn.h'. + * gdb-dlfcn.c: Move to... + * gdbsupport/gdb-dlfcn.c: ... here. + * gdb-dlfcn.h: Move to... + * gdbsupport/gdb-dlfcn.h: ... here. + 2019-08-23 Sandra Loosemore * nios2-tdep.c (struct reg_value): Improve comments. Make diff --git a/gdb/Makefile.in b/gdb/Makefile.in index d5d095a..e7e26a4 100644 --- a/gdb/Makefile.in +++ b/gdb/Makefile.in @@ -964,6 +964,7 @@ COMMON_SFILES = \ gdbsupport/filestuff.c \ gdbsupport/format.c \ gdbsupport/job-control.c \ + gdbsupport/gdb-dlfcn.c \ gdbsupport/gdb_tilde_expand.c \ gdbsupport/gdb_vecs.c \ gdbsupport/netstuff.c \ @@ -1028,7 +1029,6 @@ COMMON_SFILES = \ frame-unwind.c \ gcore.c \ gdb_bfd.c \ - gdb-dlfcn.c \ gdb_obstack.c \ gdb_regex.c \ gdb_usleep.c \ @@ -1262,7 +1262,6 @@ HFILES_NO_SRCDIR = \ gcore.h \ gdb_bfd.h \ gdb_curses.h \ - gdb-dlfcn.h \ gdb_expat.h \ gdb_obstack.h \ gdb_proc_service.h \ @@ -1460,6 +1459,7 @@ HFILES_NO_SRCDIR = \ gdbsupport/environ.h \ gdbsupport/fileio.h \ gdbsupport/format.h \ + gdbsupport/gdb-dlfcn.h \ gdbsupport/gdb_assert.h \ gdbsupport/gdb_tilde_expand.h \ gdbsupport/gdb_locale.h \ diff --git a/gdb/compile/compile-c-support.c b/gdb/compile/compile-c-support.c index a6727e8..9de827a 100644 --- a/gdb/compile/compile-c-support.c +++ b/gdb/compile/compile-c-support.c @@ -22,12 +22,12 @@ #include "compile-c.h" #include "compile-cplus.h" #include "compile.h" -#include "gdb-dlfcn.h" #include "c-lang.h" #include "macrotab.h" #include "macroscope.h" #include "regcache.h" #include "gdbsupport/function-view.h" +#include "gdbsupport/gdb-dlfcn.h" #include "gdbsupport/preprocessor.h" #include "gdbarch.h" diff --git a/gdb/configure b/gdb/configure index cb71bbf..22a5f60 100755 --- a/gdb/configure +++ b/gdb/configure @@ -12024,8 +12024,7 @@ for ac_header in nlist.h machine/reg.h poll.h sys/poll.h proc_service.h \ sys/file.h sys/filio.h sys/ioctl.h sys/param.h \ sys/resource.h sys/procfs.h sys/ptrace.h ptrace.h \ sys/reg.h sys/debugreg.h sys/select.h \ - termios.h elf_hp.h \ - dlfcn.h + termios.h elf_hp.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" @@ -13516,7 +13515,7 @@ $as_echo "#define HAVE_LANGINFO_CODESET 1" >>confdefs.h fi - for ac_header in linux/perf_event.h locale.h memory.h signal.h sys/resource.h sys/socket.h sys/un.h sys/wait.h thread_db.h wait.h termios.h + for ac_header in linux/perf_event.h locale.h memory.h signal.h sys/resource.h sys/socket.h sys/un.h sys/wait.h thread_db.h wait.h termios.h dlfcn.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" diff --git a/gdb/configure.ac b/gdb/configure.ac index 5a18c16..9da8818 100644 --- a/gdb/configure.ac +++ b/gdb/configure.ac @@ -1308,8 +1308,7 @@ AC_CHECK_HEADERS([nlist.h machine/reg.h poll.h sys/poll.h proc_service.h \ sys/file.h sys/filio.h sys/ioctl.h sys/param.h \ sys/resource.h sys/procfs.h sys/ptrace.h ptrace.h \ sys/reg.h sys/debugreg.h sys/select.h \ - termios.h elf_hp.h \ - dlfcn.h]) + termios.h elf_hp.h]) AC_CHECK_HEADERS(sys/user.h, [], [], [#if HAVE_SYS_PARAM_H # include diff --git a/gdb/gdb-dlfcn.c b/gdb/gdb-dlfcn.c deleted file mode 100644 index 4d060d4..0000000 --- a/gdb/gdb-dlfcn.c +++ /dev/null @@ -1,118 +0,0 @@ -/* Platform independent shared object routines for GDB. - - Copyright (C) 2011-2019 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -#include "defs.h" -#include "gdb-dlfcn.h" - -#ifdef HAVE_DLFCN_H -#include -#elif __MINGW32__ -#include -#else -/* Unsupported configuration. */ -#define NO_SHARED_LIB -#endif - -#ifdef NO_SHARED_LIB - -gdb_dlhandle_up -gdb_dlopen (const char *filename) -{ - gdb_assert_not_reached ("gdb_dlopen should not be called on this platform."); -} - -void * -gdb_dlsym (const gdb_dlhandle_up &handle, const char *symbol) -{ - gdb_assert_not_reached ("gdb_dlsym should not be called on this platform."); -} - -void -dlclose_deleter::operator() (void *handle) const -{ - gdb_assert_not_reached ("gdb_dlclose should not be called on this platform."); -} - -int -is_dl_available (void) -{ - return 0; -} - -#else /* NO_SHARED_LIB */ - -gdb_dlhandle_up -gdb_dlopen (const char *filename) -{ - void *result; -#ifdef HAVE_DLFCN_H - result = dlopen (filename, RTLD_NOW); -#elif __MINGW32__ - result = (void *) LoadLibrary (filename); -#endif - if (result != NULL) - return gdb_dlhandle_up (result); - -#ifdef HAVE_DLFCN_H - error (_("Could not load %s: %s"), filename, dlerror()); -#else - { - LPVOID buffer; - DWORD dw; - - dw = GetLastError(); - - FormatMessage (FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | - FORMAT_MESSAGE_IGNORE_INSERTS, - NULL, dw, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - (LPTSTR) &buffer, - 0, NULL); - - error (_("Could not load %s: %s"), filename, (char *) buffer); - } -#endif -} - -void * -gdb_dlsym (const gdb_dlhandle_up &handle, const char *symbol) -{ -#ifdef HAVE_DLFCN_H - return dlsym (handle.get (), symbol); -#elif __MINGW32__ - return (void *) GetProcAddress ((HMODULE) handle.get (), symbol); -#endif -} - -void -dlclose_deleter::operator() (void *handle) const -{ -#ifdef HAVE_DLFCN_H - dlclose (handle); -#elif __MINGW32__ - FreeLibrary ((HMODULE) handle); -#endif -} - -int -is_dl_available (void) -{ - return 1; -} - -#endif /* NO_SHARED_LIB */ diff --git a/gdb/gdb-dlfcn.h b/gdb/gdb-dlfcn.h deleted file mode 100644 index 6a39d38..0000000 --- a/gdb/gdb-dlfcn.h +++ /dev/null @@ -1,51 +0,0 @@ -/* Platform independent shared object routines for GDB. - - Copyright (C) 2011-2019 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -#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. */ - -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 (const gdb_dlhandle_up &handle, const char *symbol); - -/* Return non-zero if the dynamic library functions are available on - this platform. */ - -int is_dl_available(void); - -#endif /* GDB_DLFCN_H */ diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog index adac3e8..faafdfd 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -1,3 +1,10 @@ +2019-08-23 Sergio Durigan Junior + + * Makefile.in (SFILES): Add 'gdbsupport/gdb-dlfcn.c'. + (OBS): Add 'gdbsupport/gdb-dlfcn.o'. + * config.in: Regenerate. + * configure: Regenerate. + 2019-08-15 Tom Tromey * target.c (target_write_memory): Use gdb::byte_vector. diff --git a/gdb/gdbserver/Makefile.in b/gdb/gdbserver/Makefile.in index ba0356b..ca0a4cb 100644 --- a/gdb/gdbserver/Makefile.in +++ b/gdb/gdbserver/Makefile.in @@ -210,6 +210,7 @@ SFILES = \ $(srcdir)/gdbsupport/fileio.c \ $(srcdir)/gdbsupport/filestuff.c \ $(srcdir)/gdbsupport/job-control.c \ + $(srcdir)/gdbsupport/gdb-dlfcn.c \ $(srcdir)/gdbsupport/gdb_tilde_expand.c \ $(srcdir)/gdbsupport/gdb_vecs.c \ $(srcdir)/gdbsupport/netstuff.c \ @@ -255,6 +256,7 @@ OBS = \ gdbsupport/fileio.o \ gdbsupport/filestuff.o \ gdbsupport/format.o \ + gdbsupport/gdb-dlfcn.o \ gdbsupport/gdb_tilde_expand.o \ gdbsupport/gdb_vecs.o \ gdbsupport/netstuff.o \ diff --git a/gdb/gdbserver/config.in b/gdb/gdbserver/config.in index 3991964..f05e9be 100644 --- a/gdb/gdbserver/config.in +++ b/gdb/gdbserver/config.in @@ -90,6 +90,9 @@ /* Define to 1 if you have the `dladdr' function. */ #undef HAVE_DLADDR +/* Define to 1 if you have the header file. */ +#undef HAVE_DLFCN_H + /* Define to 1 if the system has the type `Elf32_auxv_t'. */ #undef HAVE_ELF32_AUXV_T diff --git a/gdb/gdbserver/configure b/gdb/gdbserver/configure index 7e5be51..692cb0f 100755 --- a/gdb/gdbserver/configure +++ b/gdb/gdbserver/configure @@ -6807,7 +6807,7 @@ $as_echo "#define HAVE_LANGINFO_CODESET 1" >>confdefs.h fi - for ac_header in linux/perf_event.h locale.h memory.h signal.h sys/resource.h sys/socket.h sys/un.h sys/wait.h thread_db.h wait.h termios.h + for ac_header in linux/perf_event.h locale.h memory.h signal.h sys/resource.h sys/socket.h sys/un.h sys/wait.h thread_db.h wait.h termios.h dlfcn.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" diff --git a/gdb/gdbsupport/common.m4 b/gdb/gdbsupport/common.m4 index 5701dd9..9038894 100644 --- a/gdb/gdbsupport/common.m4 +++ b/gdb/gdbsupport/common.m4 @@ -29,7 +29,8 @@ AC_DEFUN([GDB_AC_COMMON], [ sys/resource.h sys/socket.h dnl sys/un.h sys/wait.h dnl thread_db.h wait.h dnl - termios.h) + termios.h dnl + dlfcn.h) AC_CHECK_FUNCS([fdwalk getrlimit pipe pipe2 socketpair sigaction]) diff --git a/gdb/gdbsupport/gdb-dlfcn.c b/gdb/gdbsupport/gdb-dlfcn.c new file mode 100644 index 0000000..921f10f --- /dev/null +++ b/gdb/gdbsupport/gdb-dlfcn.c @@ -0,0 +1,118 @@ +/* Platform independent shared object routines for GDB. + + Copyright (C) 2011-2019 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "common-defs.h" +#include "gdb-dlfcn.h" + +#ifdef HAVE_DLFCN_H +#include +#elif __MINGW32__ +#include +#else +/* Unsupported configuration. */ +#define NO_SHARED_LIB +#endif + +#ifdef NO_SHARED_LIB + +gdb_dlhandle_up +gdb_dlopen (const char *filename) +{ + gdb_assert_not_reached ("gdb_dlopen should not be called on this platform."); +} + +void * +gdb_dlsym (const gdb_dlhandle_up &handle, const char *symbol) +{ + gdb_assert_not_reached ("gdb_dlsym should not be called on this platform."); +} + +void +dlclose_deleter::operator() (void *handle) const +{ + gdb_assert_not_reached ("gdb_dlclose should not be called on this platform."); +} + +int +is_dl_available (void) +{ + return 0; +} + +#else /* NO_SHARED_LIB */ + +gdb_dlhandle_up +gdb_dlopen (const char *filename) +{ + void *result; +#ifdef HAVE_DLFCN_H + result = dlopen (filename, RTLD_NOW); +#elif __MINGW32__ + result = (void *) LoadLibrary (filename); +#endif + if (result != NULL) + return gdb_dlhandle_up (result); + +#ifdef HAVE_DLFCN_H + error (_("Could not load %s: %s"), filename, dlerror()); +#else + { + LPVOID buffer; + DWORD dw; + + dw = GetLastError(); + + FormatMessage (FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | + FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, dw, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + (LPTSTR) &buffer, + 0, NULL); + + error (_("Could not load %s: %s"), filename, (char *) buffer); + } +#endif +} + +void * +gdb_dlsym (const gdb_dlhandle_up &handle, const char *symbol) +{ +#ifdef HAVE_DLFCN_H + return dlsym (handle.get (), symbol); +#elif __MINGW32__ + return (void *) GetProcAddress ((HMODULE) handle.get (), symbol); +#endif +} + +void +dlclose_deleter::operator() (void *handle) const +{ +#ifdef HAVE_DLFCN_H + dlclose (handle); +#elif __MINGW32__ + FreeLibrary ((HMODULE) handle); +#endif +} + +int +is_dl_available (void) +{ + return 1; +} + +#endif /* NO_SHARED_LIB */ diff --git a/gdb/gdbsupport/gdb-dlfcn.h b/gdb/gdbsupport/gdb-dlfcn.h new file mode 100644 index 0000000..6a39d38 --- /dev/null +++ b/gdb/gdbsupport/gdb-dlfcn.h @@ -0,0 +1,51 @@ +/* Platform independent shared object routines for GDB. + + Copyright (C) 2011-2019 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#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. */ + +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 (const gdb_dlhandle_up &handle, const char *symbol); + +/* Return non-zero if the dynamic library functions are available on + this platform. */ + +int is_dl_available(void); + +#endif /* GDB_DLFCN_H */ diff --git a/gdb/jit.c b/gdb/jit.c index 87f8d8f..5fef037 100644 --- a/gdb/jit.c +++ b/gdb/jit.c @@ -36,7 +36,7 @@ #include "symfile.h" #include "symtab.h" #include "target.h" -#include "gdb-dlfcn.h" +#include "gdbsupport/gdb-dlfcn.h" #include #include "gdb_bfd.h" #include "readline/tilde.h" -- cgit v1.1