Move gdb-dlfcn.[ch] to gdbsupport/
authorSergio Durigan Junior <sergiodj@redhat.com>
Wed, 21 Aug 2019 20:22:45 +0000 (16:22 -0400)
committerSergio Durigan Junior <sergiodj@redhat.com>
Fri, 23 Aug 2019 17:13:18 +0000 (13:13 -0400)
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  <sergiodj@redhat.com>

* 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  <sergiodj@redhat.com>

* Makefile.in (SFILES): Add 'gdbsupport/gdb-dlfcn.c'.
(OBS): Add 'gdbsupport/gdb-dlfcn.o'.
* config.in: Regenerate.
* configure: Regenerate.

15 files changed:
gdb/ChangeLog
gdb/Makefile.in
gdb/compile/compile-c-support.c
gdb/configure
gdb/configure.ac
gdb/gdb-dlfcn.c [deleted file]
gdb/gdb-dlfcn.h [deleted file]
gdb/gdbserver/ChangeLog
gdb/gdbserver/Makefile.in
gdb/gdbserver/config.in
gdb/gdbserver/configure
gdb/gdbsupport/common.m4
gdb/gdbsupport/gdb-dlfcn.c [new file with mode: 0644]
gdb/gdbsupport/gdb-dlfcn.h [new file with mode: 0644]
gdb/jit.c

index df8488b109a88deaaa6429f24b59cea10fc1abe3..1d8524978949c575dbf356282f8461379bfd3d57 100644 (file)
@@ -1,3 +1,18 @@
+2019-08-23  Sergio Durigan Junior  <sergiodj@redhat.com>
+
+       * 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  <sandra@codesourcery.com>
 
        * nios2-tdep.c (struct reg_value): Improve comments.  Make
index d5d095aae4dc8ee6b552c6ec9013d6febec63de9..e7e26a44a0cb951c1cf16fd99743795e6f4874e8 100644 (file)
@@ -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 \
index a6727e83afa7e0b291ebdebd303de0476eb5aada..9de827a72c1979afb8fa0b806a1e5dd42a909561 100644 (file)
 #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"
 
index cb71bbf057a24e04d37f4e2d8ae2066732dc79f8..22a5f6051d47ba83d192fcc5c2644baf318cbb91 100755 (executable)
@@ -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"
index 5a18c1640572b8c067670a4a184baa2732176023..9da8818fb5ce9513c31ed8e6cb6afdc9620448f8 100644 (file)
@@ -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 <sys/param.h>
diff --git a/gdb/gdb-dlfcn.c b/gdb/gdb-dlfcn.c
deleted file mode 100644 (file)
index 4d060d4..0000000
+++ /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 <http://www.gnu.org/licenses/>.  */
-
-#include "defs.h"
-#include "gdb-dlfcn.h"
-
-#ifdef HAVE_DLFCN_H
-#include <dlfcn.h>
-#elif __MINGW32__
-#include <windows.h>
-#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 (file)
index 6a39d38..0000000
+++ /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 <http://www.gnu.org/licenses/>.  */
-
-#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.  */
-
-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 */
index adac3e8c8d74e93c67ea80e9d26e513783d248e2..faafdfd967077365997081dc097f784cbdbe2438 100644 (file)
@@ -1,3 +1,10 @@
+2019-08-23  Sergio Durigan Junior  <sergiodj@redhat.com>
+
+       * Makefile.in (SFILES): Add 'gdbsupport/gdb-dlfcn.c'.
+       (OBS): Add 'gdbsupport/gdb-dlfcn.o'.
+       * config.in: Regenerate.
+       * configure: Regenerate.
+
 2019-08-15  Tom Tromey  <tromey@adacore.com>
 
        * target.c (target_write_memory): Use gdb::byte_vector.
index ba0356b1d5bff9b1b5ce3675e2c242ed4dee50f1..ca0a4cbd10f5f3c465774474f9f28a7774e32ab8 100644 (file)
@@ -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 \
index 3991964f9bd55d608672906f633997ca7e9ba5da..f05e9be48ad7254a4964ab424616eacc65857ee6 100644 (file)
@@ -90,6 +90,9 @@
 /* Define to 1 if you have the `dladdr' function. */
 #undef HAVE_DLADDR
 
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#undef HAVE_DLFCN_H
+
 /* Define to 1 if the system has the type `Elf32_auxv_t'. */
 #undef HAVE_ELF32_AUXV_T
 
index 7e5be51cb281f960be3284d7dac6b49bc1d14206..692cb0f30828916589db3171b0d7f3e4fb8f227d 100755 (executable)
@@ -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"
index 5701dd982939e355fe47cb91dda4377a2ec57afb..903889463f10115e338bf8b18976d9d817b19ddc 100644 (file)
@@ -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 (file)
index 0000000..921f10f
--- /dev/null
@@ -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 <http://www.gnu.org/licenses/>.  */
+
+#include "common-defs.h"
+#include "gdb-dlfcn.h"
+
+#ifdef HAVE_DLFCN_H
+#include <dlfcn.h>
+#elif __MINGW32__
+#include <windows.h>
+#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 (file)
index 0000000..6a39d38
--- /dev/null
@@ -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 <http://www.gnu.org/licenses/>.  */
+
+#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.  */
+
+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 */
index 87f8d8f88597d924eb878cabaccae5cd5488b731..5fef03700c1fbe689c98091e1f4e16d2035e9bab 100644 (file)
--- 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 <sys/stat.h>
 #include "gdb_bfd.h"
 #include "readline/tilde.h"