aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog20
-rw-r--r--gdb/Makefile.in99
-rw-r--r--gdb/acinclude.m42
-rwxr-xr-xgdb/configure4
-rw-r--r--gdb/configure.ac4
-rw-r--r--gdb/defs.h9
-rw-r--r--gdb/gdbserver/ChangeLog13
-rw-r--r--gdb/gdbserver/Makefile.in64
-rw-r--r--gdb/gdbserver/acinclude.m42
-rw-r--r--gdb/gdbserver/gdbreplay.c8
-rw-r--r--gdb/gdbserver/server.h8
-rw-r--r--gdb/gdbsupport/agent.c280
-rw-r--r--gdb/gdbsupport/agent.h68
-rw-r--r--gdb/gdbsupport/alt-stack.h70
-rw-r--r--gdb/gdbsupport/array-view.h259
-rw-r--r--gdb/gdbsupport/ax.def97
-rw-r--r--gdb/gdbsupport/block-signals.h67
-rw-r--r--gdb/gdbsupport/break-common.h31
-rw-r--r--gdb/gdbsupport/btrace-common.c190
-rw-r--r--gdb/gdbsupport/btrace-common.h260
-rw-r--r--gdb/gdbsupport/buffer.c178
-rw-r--r--gdb/gdbsupport/buffer.h68
-rw-r--r--gdb/gdbsupport/byte-vector.h63
-rw-r--r--gdb/gdbsupport/cleanups.c144
-rw-r--r--gdb/gdbsupport/cleanups.h39
-rw-r--r--gdb/gdbsupport/common-debug.c37
-rw-r--r--gdb/gdbsupport/common-debug.h41
-rw-r--r--gdb/gdbsupport/common-defs.h154
-rw-r--r--gdb/gdbsupport/common-exceptions.c235
-rw-r--r--gdb/gdbsupport/common-exceptions.h304
-rw-r--r--gdb/gdbsupport/common-gdbthread.h28
-rw-r--r--gdb/gdbsupport/common-inferior.c26
-rw-r--r--gdb/gdbsupport/common-inferior.h61
-rw-r--r--gdb/gdbsupport/common-regcache.c36
-rw-r--r--gdb/gdbsupport/common-regcache.h85
-rw-r--r--gdb/gdbsupport/common-types.h66
-rw-r--r--gdb/gdbsupport/common-utils.c417
-rw-r--r--gdb/gdbsupport/common-utils.h202
-rw-r--r--gdb/gdbsupport/common.m493
-rwxr-xr-xgdb/gdbsupport/create-version.sh38
-rw-r--r--gdb/gdbsupport/def-vector.h36
-rw-r--r--gdb/gdbsupport/default-init-alloc.h67
-rw-r--r--gdb/gdbsupport/enum-flags.h221
-rw-r--r--gdb/gdbsupport/environ.c183
-rw-r--r--gdb/gdbsupport/environ.h103
-rw-r--r--gdb/gdbsupport/errors.c69
-rw-r--r--gdb/gdbsupport/errors.h90
-rw-r--r--gdb/gdbsupport/fileio.c255
-rw-r--r--gdb/gdbsupport/fileio.h73
-rw-r--r--gdb/gdbsupport/filestuff.c503
-rw-r--r--gdb/gdbsupport/filestuff.h142
-rw-r--r--gdb/gdbsupport/filtered-iterator.h87
-rw-r--r--gdb/gdbsupport/format.c412
-rw-r--r--gdb/gdbsupport/format.h101
-rw-r--r--gdb/gdbsupport/forward-scope-exit.h123
-rw-r--r--gdb/gdbsupport/function-view.h323
-rw-r--r--gdb/gdbsupport/gdb-dlfcn.c118
-rw-r--r--gdb/gdbsupport/gdb-dlfcn.h51
-rw-r--r--gdb/gdbsupport/gdb-sigmask.h45
-rw-r--r--gdb/gdbsupport/gdb_assert.h61
-rw-r--r--gdb/gdbsupport/gdb_binary_search.h59
-rw-r--r--gdb/gdbsupport/gdb_locale.h43
-rw-r--r--gdb/gdbsupport/gdb_optional.h219
-rw-r--r--gdb/gdbsupport/gdb_proc_service.h173
-rw-r--r--gdb/gdbsupport/gdb_ref_ptr.h228
-rw-r--r--gdb/gdbsupport/gdb_setjmp.h36
-rw-r--r--gdb/gdbsupport/gdb_signals.h58
-rw-r--r--gdb/gdbsupport/gdb_splay_tree.h42
-rw-r--r--gdb/gdbsupport/gdb_string_view.h563
-rw-r--r--gdb/gdbsupport/gdb_string_view.tcc219
-rw-r--r--gdb/gdbsupport/gdb_sys_time.h38
-rw-r--r--gdb/gdbsupport/gdb_tilde_expand.c95
-rw-r--r--gdb/gdbsupport/gdb_tilde_expand.h31
-rw-r--r--gdb/gdbsupport/gdb_unique_ptr.h67
-rw-r--r--gdb/gdbsupport/gdb_unlinker.h60
-rw-r--r--gdb/gdbsupport/gdb_vecs.c88
-rw-r--r--gdb/gdbsupport/gdb_vecs.h88
-rw-r--r--gdb/gdbsupport/gdb_wait.c85
-rw-r--r--gdb/gdbsupport/gdb_wait.h135
-rw-r--r--gdb/gdbsupport/hash_enum.h45
-rw-r--r--gdb/gdbsupport/host-defs.h61
-rw-r--r--gdb/gdbsupport/job-control.c86
-rw-r--r--gdb/gdbsupport/job-control.h38
-rw-r--r--gdb/gdbsupport/netstuff.c154
-rw-r--r--gdb/gdbsupport/netstuff.h76
-rw-r--r--gdb/gdbsupport/new-op.c95
-rw-r--r--gdb/gdbsupport/next-iterator.h102
-rw-r--r--gdb/gdbsupport/observable.h119
-rw-r--r--gdb/gdbsupport/offset-type.h133
-rw-r--r--gdb/gdbsupport/parallel-for.h86
-rw-r--r--gdb/gdbsupport/pathstuff.c290
-rw-r--r--gdb/gdbsupport/pathstuff.h98
-rw-r--r--gdb/gdbsupport/poison.h248
-rw-r--r--gdb/gdbsupport/preprocessor.h35
-rw-r--r--gdb/gdbsupport/print-utils.c326
-rw-r--r--gdb/gdbsupport/print-utils.h85
-rw-r--r--gdb/gdbsupport/ptid.c26
-rw-r--r--gdb/gdbsupport/ptid.h155
-rw-r--r--gdb/gdbsupport/refcounted-object.h70
-rw-r--r--gdb/gdbsupport/rsp-low.c307
-rw-r--r--gdb/gdbsupport/rsp-low.h101
-rw-r--r--gdb/gdbsupport/run-time-clock.c58
-rw-r--r--gdb/gdbsupport/run-time-clock.h75
-rw-r--r--gdb/gdbsupport/safe-iterator.h135
-rw-r--r--gdb/gdbsupport/safe-strerror.c56
-rw-r--r--gdb/gdbsupport/scope-exit.h186
-rw-r--r--gdb/gdbsupport/scoped_fd.h87
-rw-r--r--gdb/gdbsupport/scoped_mmap.c49
-rw-r--r--gdb/gdbsupport/scoped_mmap.h94
-rw-r--r--gdb/gdbsupport/scoped_restore.h118
-rw-r--r--gdb/gdbsupport/selftest.c111
-rw-r--r--gdb/gdbsupport/selftest.h73
-rw-r--r--gdb/gdbsupport/signals-state-save-restore.c114
-rw-r--r--gdb/gdbsupport/signals-state-save-restore.h40
-rw-r--r--gdb/gdbsupport/signals.c653
-rw-r--r--gdb/gdbsupport/symbol.h37
-rw-r--r--gdb/gdbsupport/tdesc.c401
-rw-r--r--gdb/gdbsupport/tdesc.h408
-rw-r--r--gdb/gdbsupport/thread-pool.c167
-rw-r--r--gdb/gdbsupport/thread-pool.h90
-rw-r--r--gdb/gdbsupport/traits.h109
-rw-r--r--gdb/gdbsupport/underlying.h32
-rw-r--r--gdb/gdbsupport/valid-expr.h108
-rw-r--r--gdb/gdbsupport/version.h31
-rw-r--r--gdb/gdbsupport/x86-xstate.h88
-rw-r--r--gdb/gdbsupport/xml-utils.c63
-rw-r--r--gdb/gdbsupport/xml-utils.h33
-rw-r--r--gdb/nat/linux-btrace.c8
-rw-r--r--gdb/nat/linux-ptrace.c8
-rw-r--r--gdb/nat/x86-linux-dregs.c8
130 files changed, 135 insertions, 15301 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 85d7de2..16b730e 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,25 @@
2020-01-14 Tom Tromey <tom@tromey.com>
+ * nat/x86-linux-dregs.c: Include configh.h.
+ * nat/linux-ptrace.c: Include configh.h.
+ * nat/linux-btrace.c: Include configh.h.
+ * defs.h: Include config.h, bfd.h.
+ * configure.ac: Don't source common.host.
+ (CONFIG_OBS, CONFIG_SRCS): Remove gdbsupport files.
+ * configure: Rebuild.
+ * acinclude.m4: Update path.
+ * Makefile.in (SUPPORT, LIBSUPPORT, INCSUPPORT): New variables.
+ (CONFIG_SRC_SUBDIR): Remove gdbsupport.
+ (INTERNAL_CFLAGS_BASE): Add INCSUPPORT.
+ (CLIBS): Add LIBSUPPORT.
+ (CDEPS): Likewise.
+ (COMMON_SFILES): Remove gdbsupport files.
+ (HFILES_NO_SRCDIR): Likewise.
+ (stamp-version): Update path to create-version.sh.
+ (ALLDEPFILES): Remove gdbsupport files.
+
+2020-01-14 Tom Tromey <tom@tromey.com>
+
* gdbsupport/common.m4 (GDB_AC_COMMON): Define WIN32APILIBS and
USE_WIN32API when needed.
* configure.ac (USE_WIN32API): Don't define.
diff --git a/gdb/Makefile.in b/gdb/Makefile.in
index 6df0f46..5f63c61 100644
--- a/gdb/Makefile.in
+++ b/gdb/Makefile.in
@@ -238,6 +238,10 @@ GNULIB_BUILDDIR = ../gnulib
LIBGNU = $(GNULIB_BUILDDIR)/import/libgnu.a
INCGNU = -I$(srcdir)/../gnulib/import -I$(GNULIB_BUILDDIR)/import
+SUPPORT = ../gdbsupport
+LIBSUPPORT = $(SUPPORT)/libgdbsupport.a
+INCSUPPORT = -I$(srcdir)/.. -I..
+
#
# CLI sub directory definitons
#
@@ -547,7 +551,7 @@ CONFIG_INSTALL = @CONFIG_INSTALL@
CONFIG_UNINSTALL = @CONFIG_UNINSTALL@
HAVE_NATIVE_GCORE_TARGET = @HAVE_NATIVE_GCORE_TARGET@
-CONFIG_SRC_SUBDIR = arch cli mi gdbsupport compile tui unittests guile python \
+CONFIG_SRC_SUBDIR = arch cli mi compile tui unittests guile python \
target nat
CONFIG_DEP_SUBDIR = $(addsuffix /$(DEPDIR),$(CONFIG_SRC_SUBDIR))
@@ -586,8 +590,8 @@ INTERNAL_CFLAGS_BASE = \
$(CXXFLAGS) $(GLOBAL_CFLAGS) $(PROFILE_CFLAGS) \
$(GDB_CFLAGS) $(OPCODES_CFLAGS) $(READLINE_CFLAGS) $(ZLIBINC) \
$(BFD_CFLAGS) $(INCLUDE_CFLAGS) $(LIBDECNUMBER_CFLAGS) \
- $(INTL_CFLAGS) $(INCGNU) $(ENABLE_CFLAGS) $(INTERNAL_CPPFLAGS) \
- $(SRCHIGH_CFLAGS) $(TOP_CFLAGS) $(PTHREAD_CFLAGS)
+ $(INTL_CFLAGS) $(INCGNU) $(INCSUPPORT) $(ENABLE_CFLAGS) \
+ $(INTERNAL_CPPFLAGS) $(SRCHIGH_CFLAGS) $(TOP_CFLAGS) $(PTHREAD_CFLAGS)
INTERNAL_WARN_CFLAGS = $(INTERNAL_CFLAGS_BASE) $(GDB_WARN_CFLAGS)
INTERNAL_CFLAGS = $(INTERNAL_WARN_CFLAGS) $(GDB_WERROR_CFLAGS)
@@ -607,14 +611,15 @@ INTERNAL_LDFLAGS = \
# XM_CLIBS, defined in *config files, have host-dependent libs.
# LIBIBERTY appears twice on purpose.
CLIBS = $(SIM) $(READLINE) $(OPCODES) $(BFD) $(LIBCTF) $(ZLIB) \
- $(INTL) $(LIBIBERTY) $(LIBDECNUMBER) \
+ $(LIBSUPPORT) $(INTL) $(LIBIBERTY) $(LIBDECNUMBER) \
$(XM_CLIBS) $(GDBTKLIBS) \
@LIBS@ @GUILE_LIBS@ @PYTHON_LIBS@ \
$(LIBEXPAT) $(LIBLZMA) $(LIBBABELTRACE) $(LIBIPT) \
- $(LIBIBERTY) $(WIN32LIBS) $(LIBGNU) $(LIBICONV) $(LIBMPFR) \
- $(SRCHIGH_LIBS) $(LIBXXHASH) $(PTHREAD_LIBS)
+ $(LIBIBERTY) $(WIN32LIBS) $(LIBGNU) $(LIBICONV) \
+ $(LIBMPFR) $(SRCHIGH_LIBS) $(LIBXXHASH) $(PTHREAD_LIBS)
CDEPS = $(NAT_CDEPS) $(SIM) $(BFD) $(READLINE_DEPS) $(LIBCTF) \
- $(OPCODES) $(INTL_DEPS) $(LIBIBERTY) $(CONFIG_DEPS) $(LIBGNU)
+ $(OPCODES) $(INTL_DEPS) $(LIBIBERTY) $(CONFIG_DEPS) $(LIBGNU) \
+ $(LIBSUPPORT)
DIST = gdb
@@ -968,39 +973,6 @@ COMMON_SFILES = \
cli-out.c \
coff-pe-read.c \
coffread.c \
- gdbsupport/agent.c \
- gdbsupport/btrace-common.c \
- gdbsupport/buffer.c \
- gdbsupport/cleanups.c \
- gdbsupport/common-debug.c \
- gdbsupport/common-exceptions.c \
- gdbsupport/common-inferior.c \
- gdbsupport/common-regcache.c \
- gdbsupport/common-utils.c \
- gdbsupport/errors.c \
- gdbsupport/environ.c \
- gdbsupport/fileio.c \
- gdbsupport/filestuff.c \
- gdbsupport/format.c \
- gdbsupport/job-control.c \
- gdbsupport/gdb-dlfcn.c \
- gdbsupport/gdb_tilde_expand.c \
- gdbsupport/gdb_vecs.c \
- gdbsupport/gdb_wait.c \
- gdbsupport/netstuff.c \
- gdbsupport/new-op.c \
- gdbsupport/pathstuff.c \
- gdbsupport/print-utils.c \
- gdbsupport/ptid.c \
- gdbsupport/rsp-low.c \
- gdbsupport/run-time-clock.c \
- gdbsupport/safe-strerror.c \
- gdbsupport/scoped_mmap.c \
- gdbsupport/signals.c \
- gdbsupport/signals-state-save-restore.c \
- gdbsupport/tdesc.c \
- gdbsupport/thread-pool.c \
- gdbsupport/xml-utils.c \
complaints.c \
completer.c \
continuations.c \
@@ -1468,49 +1440,6 @@ HFILES_NO_SRCDIR = \
cli/cli-setshow.h \
cli/cli-style.h \
cli/cli-utils.h \
- gdbsupport/buffer.h \
- gdbsupport/cleanups.h \
- gdbsupport/common-debug.h \
- gdbsupport/common-defs.h \
- gdbsupport/common-exceptions.h \
- gdbsupport/common-gdbthread.h \
- gdbsupport/common-regcache.h \
- gdbsupport/common-types.h \
- gdbsupport/common-utils.h \
- gdbsupport/job-control.h \
- gdbsupport/errors.h \
- gdbsupport/environ.h \
- gdbsupport/fileio.h \
- gdbsupport/format.h \
- gdbsupport/gdb-dlfcn.h \
- gdbsupport/gdb-sigmask.h \
- gdbsupport/gdb_assert.h \
- gdbsupport/gdb_binary_search.h \
- gdbsupport/gdb_tilde_expand.h \
- gdbsupport/gdb_locale.h \
- gdbsupport/gdb_proc_service.h \
- gdbsupport/gdb_setjmp.h \
- gdbsupport/gdb_signals.h \
- gdbsupport/gdb_sys_time.h \
- gdbsupport/gdb_vecs.h \
- gdbsupport/gdb_wait.h \
- gdbsupport/common-inferior.h \
- gdbsupport/netstuff.h \
- gdbsupport/host-defs.h \
- gdbsupport/parallel-for.h \
- gdbsupport/pathstuff.h \
- gdbsupport/print-utils.h \
- gdbsupport/ptid.h \
- gdbsupport/queue.h \
- gdbsupport/rsp-low.h \
- gdbsupport/run-time-clock.h \
- gdbsupport/signals-state-save-restore.h \
- gdbsupport/symbol.h \
- gdbsupport/tdesc.h \
- gdbsupport/thread-pool.h \
- gdbsupport/version.h \
- gdbsupport/x86-xstate.h \
- gdbsupport/xml-utils.h \
compile/compile.h \
compile/compile-c.h \
compile/compile-cplus.h \
@@ -2131,8 +2060,8 @@ $(srcdir)/copying.c: @MAINTAINER_MODE_TRUE@ $(srcdir)/../COPYING3 $(srcdir)/copy
version.c: stamp-version; @true
# Note that the obvious names for the temp file are taken by
# create-version.sh.
-stamp-version: Makefile version.in $(srcdir)/../bfd/version.h $(srcdir)/gdbsupport/create-version.sh
- $(ECHO_GEN) $(SHELL) $(srcdir)/gdbsupport/create-version.sh $(srcdir) \
+stamp-version: Makefile version.in $(srcdir)/../bfd/version.h $(srcdir)/../gdbsupport/create-version.sh
+ $(ECHO_GEN) $(SHELL) $(srcdir)/../gdbsupport/create-version.sh $(srcdir) \
$(host_alias) $(target_alias) version-t.t
@$(SHELL) $(srcdir)/../move-if-change version-t.t version.c
@echo stamp > stamp-version
diff --git a/gdb/acinclude.m4 b/gdb/acinclude.m4
index 11cc0bc..d60b2fe 100644
--- a/gdb/acinclude.m4
+++ b/gdb/acinclude.m4
@@ -63,7 +63,7 @@ m4_include([../config/iconv.m4])
m4_include([../config/zlib.m4])
-m4_include([gdbsupport/common.m4])
+m4_include([../gdbsupport/common.m4])
dnl For libiberty_INIT.
m4_include(libiberty.m4)
diff --git a/gdb/configure b/gdb/configure
index fe2d887..2b613c3 100755
--- a/gdb/configure
+++ b/gdb/configure
@@ -18984,8 +18984,8 @@ if $enable_unittests; then
$as_echo "#define GDB_SELF_TEST 1" >>confdefs.h
- CONFIG_OBS="$CONFIG_OBS \$(SUBDIR_UNITTESTS_OBS) gdbsupport/selftest.o selftest-arch.o"
- CONFIG_SRCS="$CONFIG_SRCS \$(SUBDIR_UNITTESTS_SRCS) gdbsupport/selftest.c selftest-arch.c"
+ CONFIG_OBS="$CONFIG_OBS \$(SUBDIR_UNITTESTS_OBS) selftest-arch.o"
+ CONFIG_SRCS="$CONFIG_SRCS \$(SUBDIR_UNITTESTS_SRCS) selftest-arch.c"
fi
diff --git a/gdb/configure.ac b/gdb/configure.ac
index a7b744b..ddb9530 100644
--- a/gdb/configure.ac
+++ b/gdb/configure.ac
@@ -2215,8 +2215,8 @@ AC_DEFINE(GDB_DEFAULT_HOST_CHARSET, "UTF-8",
[Define to be a string naming the default host character set.])
GDB_AC_SELFTEST([
- CONFIG_OBS="$CONFIG_OBS \$(SUBDIR_UNITTESTS_OBS) gdbsupport/selftest.o selftest-arch.o"
- CONFIG_SRCS="$CONFIG_SRCS \$(SUBDIR_UNITTESTS_SRCS) gdbsupport/selftest.c selftest-arch.c"
+ CONFIG_OBS="$CONFIG_OBS \$(SUBDIR_UNITTESTS_OBS) selftest-arch.o"
+ CONFIG_SRCS="$CONFIG_SRCS \$(SUBDIR_UNITTESTS_SRCS) selftest-arch.c"
])
GDB_AC_TRANSFORM([gdb], [GDB_TRANSFORM_NAME])
diff --git a/gdb/defs.h b/gdb/defs.h
index 567f214..1ad52fe 100644
--- a/gdb/defs.h
+++ b/gdb/defs.h
@@ -27,6 +27,15 @@
#include "gdbsupport/common-defs.h"
+#undef PACKAGE
+#undef PACKAGE_NAME
+#undef PACKAGE_VERSION
+#undef PACKAGE_STRING
+#undef PACKAGE_TARNAME
+
+#include <config.h>
+#include "bfd.h"
+
#include <sys/types.h>
#include <limits.h>
diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog
index 6d9e314..f3f2643 100644
--- a/gdb/gdbserver/ChangeLog
+++ b/gdb/gdbserver/ChangeLog
@@ -1,5 +1,18 @@
2020-01-14 Tom Tromey <tom@tromey.com>
+ * server.h: Include config.h.
+ * gdbreplay.c: Include config.h.
+ * configure: Rebuild.
+ * configure.ac: Don't source common.host.
+ * acinclude.m4: Update path.
+ * Makefile.in (INCSUPPORT): New variable.
+ (INCLUDE_CFLAGS): Add INCSUPPORT.
+ (SFILES): Update paths.
+ (version-generated.c): Update path to create-version.sh.
+ (gdbsupport/%-ipa.o, gdbsupport/%.o): Update paths.
+
+2020-01-14 Tom Tromey <tom@tromey.com>
+
* configure.ac (LIBS): Use WIN32APILIBS.
(USE_WIN32API): Don't define.
* configure: Rebuild.
diff --git a/gdb/gdbserver/Makefile.in b/gdb/gdbserver/Makefile.in
index d1af55b..38f30a0 100644
--- a/gdb/gdbserver/Makefile.in
+++ b/gdb/gdbserver/Makefile.in
@@ -109,6 +109,8 @@ INCGNU = -I$(srcdir)/../../gnulib/import -I$(GNULIB_BUILDDIR)/import
# so that they are generated before other files are compiled.
GNULIB_H = $(GNULIB_BUILDDIR)/import/string.h @GNULIB_STDINT_H@
+INCSUPPORT = -I$(srcdir)/../.. -I../..
+
# All the includes used for CFLAGS and for lint.
# -I. for config files.
# -I${srcdir} for our headers.
@@ -120,7 +122,7 @@ GNULIB_H = $(GNULIB_BUILDDIR)/import/string.h @GNULIB_STDINT_H@
#
INCLUDE_CFLAGS = -I. -I${srcdir} \
-I$(srcdir)/../regformats -I$(srcdir)/.. -I$(INCLUDE_DIR) \
- $(INCGNU)
+ $(INCGNU) $(INCSUPPORT)
# M{H,T}_CFLAGS, if defined, has host- and target-dependent CFLAGS
# from the config/ directory.
@@ -201,32 +203,32 @@ SFILES = \
$(srcdir)/arch/arm-linux.c \
$(srcdir)/arch/ppc-linux-common.c \
$(srcdir)/../alloc.c \
- $(srcdir)/gdbsupport/btrace-common.c \
- $(srcdir)/gdbsupport/buffer.c \
- $(srcdir)/gdbsupport/cleanups.c \
- $(srcdir)/gdbsupport/common-debug.c \
- $(srcdir)/gdbsupport/common-exceptions.c \
- $(srcdir)/gdbsupport/common-inferior.c \
- $(srcdir)/gdbsupport/common-regcache.c \
- $(srcdir)/gdbsupport/common-utils.c \
- $(srcdir)/gdbsupport/errors.c \
- $(srcdir)/gdbsupport/environ.c \
- $(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/gdb_wait.c \
- $(srcdir)/gdbsupport/netstuff.c \
- $(srcdir)/gdbsupport/new-op.c \
- $(srcdir)/gdbsupport/pathstuff.c \
- $(srcdir)/gdbsupport/print-utils.c \
- $(srcdir)/gdbsupport/ptid.c \
- $(srcdir)/gdbsupport/rsp-low.c \
- $(srcdir)/gdbsupport/safe-strerror.c \
- $(srcdir)/gdbsupport/tdesc.c \
- $(srcdir)/gdbsupport/xml-utils.c \
+ $(srcdir)/../../gdbsupport/btrace-common.c \
+ $(srcdir)/../../gdbsupport/buffer.c \
+ $(srcdir)/../../gdbsupport/cleanups.c \
+ $(srcdir)/../../gdbsupport/common-debug.c \
+ $(srcdir)/../../gdbsupport/common-exceptions.c \
+ $(srcdir)/../../gdbsupport/common-inferior.c \
+ $(srcdir)/../../gdbsupport/common-regcache.c \
+ $(srcdir)/../../gdbsupport/common-utils.c \
+ $(srcdir)/../../gdbsupport/errors.c \
+ $(srcdir)/../../gdbsupport/environ.c \
+ $(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/gdb_wait.c \
+ $(srcdir)/../../gdbsupport/netstuff.c \
+ $(srcdir)/../../gdbsupport/new-op.c \
+ $(srcdir)/../../gdbsupport/pathstuff.c \
+ $(srcdir)/../../gdbsupport/print-utils.c \
+ $(srcdir)/../../gdbsupport/ptid.c \
+ $(srcdir)/../../gdbsupport/rsp-low.c \
+ $(srcdir)/../../gdbsupport/safe-strerror.c \
+ $(srcdir)/../../gdbsupport/tdesc.c \
+ $(srcdir)/../../gdbsupport/xml-utils.c \
$(srcdir)/nat/aarch64-sve-linux-ptrace.c \
$(srcdir)/nat/linux-btrace.c \
$(srcdir)/nat/linux-namespaces.c \
@@ -529,8 +531,8 @@ am--refresh:
force:
-version-generated.c: Makefile $(srcdir)/../version.in $(srcdir)/../../bfd/version.h $(srcdir)/../gdbsupport/create-version.sh
- $(ECHO_GEN) $(SHELL) $(srcdir)/../gdbsupport/create-version.sh $(srcdir)/.. \
+version-generated.c: Makefile $(srcdir)/../version.in $(srcdir)/../../bfd/version.h $(srcdir)/../../gdbsupport/create-version.sh
+ $(ECHO_GEN) $(SHELL) $(srcdir)/../../gdbsupport/create-version.sh $(srcdir)/.. \
$(host_alias) $(target_alias) $@
xml-builtin-generated.c: stamp-xml; @true
@@ -588,7 +590,7 @@ arch/%-ipa.o: ../arch/%.c
$(IPAGENT_COMPILE) $<
$(POSTCOMPILE)
-gdbsupport/%-ipa.o: ../gdbsupport/%.c
+gdbsupport/%-ipa.o: ../../gdbsupport/%.c
$(IPAGENT_COMPILE) $<
$(POSTCOMPILE)
@@ -621,7 +623,7 @@ arch/%.o: ../arch/%.c
$(COMPILE) $<
$(POSTCOMPILE)
-gdbsupport/%.o: ../gdbsupport/%.c
+gdbsupport/%.o: ../../gdbsupport/%.c
$(COMPILE) $<
$(POSTCOMPILE)
diff --git a/gdb/gdbserver/acinclude.m4 b/gdb/gdbserver/acinclude.m4
index 4c18e9b..a42f2d5 100644
--- a/gdb/gdbserver/acinclude.m4
+++ b/gdb/gdbserver/acinclude.m4
@@ -18,7 +18,7 @@ m4_include(../../config/lead-dot.m4)
dnl codeset.m4 is needed for common.m4, but not for
dnl anything else in gdbserver.
m4_include(../../config/codeset.m4)
-m4_include(../gdbsupport/common.m4)
+m4_include(../../gdbsupport/common.m4)
dnl For libiberty_INIT.
m4_include(../libiberty.m4)
diff --git a/gdb/gdbserver/gdbreplay.c b/gdb/gdbserver/gdbreplay.c
index 3ed18f1..263fb0e 100644
--- a/gdb/gdbserver/gdbreplay.c
+++ b/gdb/gdbserver/gdbreplay.c
@@ -18,6 +18,14 @@
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include "gdbsupport/common-defs.h"
+
+#undef PACKAGE
+#undef PACKAGE_NAME
+#undef PACKAGE_VERSION
+#undef PACKAGE_STRING
+#undef PACKAGE_TARNAME
+
+#include <config.h>
#include "gdbsupport/version.h"
#if HAVE_SYS_FILE_H
diff --git a/gdb/gdbserver/server.h b/gdb/gdbserver/server.h
index 0c74f99..3c28686 100644
--- a/gdb/gdbserver/server.h
+++ b/gdb/gdbserver/server.h
@@ -21,6 +21,14 @@
#include "gdbsupport/common-defs.h"
+#undef PACKAGE
+#undef PACKAGE_NAME
+#undef PACKAGE_VERSION
+#undef PACKAGE_STRING
+#undef PACKAGE_TARNAME
+
+#include <config.h>
+
gdb_static_assert (sizeof (CORE_ADDR) >= sizeof (void *));
#ifdef __MINGW32CE__
diff --git a/gdb/gdbsupport/agent.c b/gdb/gdbsupport/agent.c
deleted file mode 100644
index b4127ff..0000000
--- a/gdb/gdbsupport/agent.c
+++ /dev/null
@@ -1,280 +0,0 @@
-/* Shared utility routines for GDB to interact with agent.
-
- Copyright (C) 2009-2020 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 "target/target.h"
-#include "gdbsupport/symbol.h"
-#include <unistd.h>
-#include "filestuff.h"
-
-#define IPA_SYM_STRUCT_NAME ipa_sym_addresses_common
-#include "agent.h"
-
-bool debug_agent = false;
-
-/* A stdarg wrapper for debug_vprintf. */
-
-static void ATTRIBUTE_PRINTF (1, 2)
-debug_agent_printf (const char *fmt, ...)
-{
- va_list ap;
-
- if (!debug_agent)
- return;
- va_start (ap, fmt);
- debug_vprintf (fmt, ap);
- va_end (ap);
-}
-
-#define DEBUG_AGENT debug_agent_printf
-
-/* Global flag to determine using agent or not. */
-bool use_agent = false;
-
-/* Addresses of in-process agent's symbols both GDB and GDBserver cares
- about. */
-
-struct ipa_sym_addresses_common
-{
- CORE_ADDR addr_helper_thread_id;
- CORE_ADDR addr_cmd_buf;
- CORE_ADDR addr_capability;
-};
-
-/* Cache of the helper thread id. FIXME: this global should be made
- per-process. */
-static uint32_t helper_thread_id = 0;
-
-static struct
-{
- const char *name;
- int offset;
-} symbol_list[] = {
- IPA_SYM(helper_thread_id),
- IPA_SYM(cmd_buf),
- IPA_SYM(capability),
-};
-
-static struct ipa_sym_addresses_common ipa_sym_addrs;
-
-static bool all_agent_symbols_looked_up = false;
-
-bool
-agent_loaded_p (void)
-{
- return all_agent_symbols_looked_up;
-}
-
-/* Look up all symbols needed by agent. Return 0 if all the symbols are
- found, return non-zero otherwise. */
-
-int
-agent_look_up_symbols (void *arg)
-{
- all_agent_symbols_looked_up = false;
-
- for (int i = 0; i < sizeof (symbol_list) / sizeof (symbol_list[0]); i++)
- {
- CORE_ADDR *addrp =
- (CORE_ADDR *) ((char *) &ipa_sym_addrs + symbol_list[i].offset);
- struct objfile *objfile = (struct objfile *) arg;
-
- if (find_minimal_symbol_address (symbol_list[i].name, addrp,
- objfile) != 0)
- {
- DEBUG_AGENT ("symbol `%s' not found\n", symbol_list[i].name);
- return -1;
- }
- }
-
- all_agent_symbols_looked_up = true;
- return 0;
-}
-
-static unsigned int
-agent_get_helper_thread_id (void)
-{
- if (helper_thread_id == 0)
- {
- if (target_read_uint32 (ipa_sym_addrs.addr_helper_thread_id,
- &helper_thread_id))
- warning (_("Error reading helper thread's id in lib"));
- }
-
- return helper_thread_id;
-}
-
-#ifdef HAVE_SYS_UN_H
-#include <sys/socket.h>
-#include <sys/un.h>
-#define SOCK_DIR P_tmpdir
-
-#ifndef UNIX_PATH_MAX
-#define UNIX_PATH_MAX sizeof(((struct sockaddr_un *) NULL)->sun_path)
-#endif
-
-#endif
-
-/* Connects to synchronization socket. PID is the pid of inferior, which is
- used to set up the connection socket. */
-
-static int
-gdb_connect_sync_socket (int pid)
-{
-#ifdef HAVE_SYS_UN_H
- struct sockaddr_un addr;
- int res, fd;
- char path[UNIX_PATH_MAX];
-
- res = xsnprintf (path, UNIX_PATH_MAX, "%s/gdb_ust%d", P_tmpdir, pid);
- if (res >= UNIX_PATH_MAX)
- return -1;
-
- res = fd = gdb_socket_cloexec (PF_UNIX, SOCK_STREAM, 0);
- if (res == -1)
- {
- warning (_("error opening sync socket: %s"), safe_strerror (errno));
- return -1;
- }
-
- addr.sun_family = AF_UNIX;
-
- res = xsnprintf (addr.sun_path, UNIX_PATH_MAX, "%s", path);
- if (res >= UNIX_PATH_MAX)
- {
- warning (_("string overflow allocating socket name"));
- close (fd);
- return -1;
- }
-
- res = connect (fd, (struct sockaddr *) &addr, sizeof (addr));
- if (res == -1)
- {
- warning (_("error connecting sync socket (%s): %s. "
- "Make sure the directory exists and that it is writable."),
- path, safe_strerror (errno));
- close (fd);
- return -1;
- }
-
- return fd;
-#else
- return -1;
-#endif
-}
-
-/* Execute an agent command in the inferior. PID is the value of pid of the
- inferior. CMD is the buffer for command. GDB or GDBserver will store the
- command into it and fetch the return result from CMD. The interaction
- between GDB/GDBserver and the agent is synchronized by a synchronization
- socket. Return zero if success, otherwise return non-zero. */
-
-int
-agent_run_command (int pid, const char *cmd, int len)
-{
- int fd;
- int tid = agent_get_helper_thread_id ();
- ptid_t ptid = ptid_t (pid, tid, 0);
-
- int ret = target_write_memory (ipa_sym_addrs.addr_cmd_buf,
- (gdb_byte *) cmd, len);
-
- if (ret != 0)
- {
- warning (_("unable to write"));
- return -1;
- }
-
- DEBUG_AGENT ("agent: resumed helper thread\n");
-
- /* Resume helper thread. */
- target_continue_no_signal (ptid);
-
- fd = gdb_connect_sync_socket (pid);
- if (fd >= 0)
- {
- char buf[1] = "";
-
- DEBUG_AGENT ("agent: signalling helper thread\n");
-
- do
- {
- ret = write (fd, buf, 1);
- } while (ret == -1 && errno == EINTR);
-
- DEBUG_AGENT ("agent: waiting for helper thread's response\n");
-
- do
- {
- ret = read (fd, buf, 1);
- } while (ret == -1 && errno == EINTR);
-
- close (fd);
-
- DEBUG_AGENT ("agent: helper thread's response received\n");
- }
- else
- return -1;
-
- /* Need to read response with the inferior stopped. */
- if (ptid != null_ptid)
- {
- /* Stop thread PTID. */
- DEBUG_AGENT ("agent: stop helper thread\n");
- target_stop_and_wait (ptid);
- }
-
- if (fd >= 0)
- {
- if (target_read_memory (ipa_sym_addrs.addr_cmd_buf, (gdb_byte *) cmd,
- IPA_CMD_BUF_SIZE))
- {
- warning (_("Error reading command response"));
- return -1;
- }
- }
-
- return 0;
-}
-
-/* Each bit of it stands for a capability of agent. */
-static uint32_t agent_capability = 0;
-
-/* Return true if agent has capability AGENT_CAP, otherwise return false. */
-
-bool
-agent_capability_check (enum agent_capa agent_capa)
-{
- if (agent_capability == 0)
- {
- if (target_read_uint32 (ipa_sym_addrs.addr_capability,
- &agent_capability))
- warning (_("Error reading capability of agent"));
- }
- return (agent_capability & agent_capa) != 0;
-}
-
-/* Invalidate the cache of agent capability, so we'll read it from inferior
- again. Call it when launches a new program or reconnect to remote stub. */
-
-void
-agent_capability_invalidate (void)
-{
- agent_capability = 0;
-}
diff --git a/gdb/gdbsupport/agent.h b/gdb/gdbsupport/agent.h
deleted file mode 100644
index cc52fb6..0000000
--- a/gdb/gdbsupport/agent.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/* Shared utility routines for GDB to interact with agent.
-
- Copyright (C) 2009-2020 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 COMMON_AGENT_H
-#define COMMON_AGENT_H
-
-#include "gdbsupport/preprocessor.h"
-
-int agent_run_command (int pid, const char *cmd, int len);
-
-int agent_look_up_symbols (void *);
-
-#define IPA_SYM_EXPORTED_NAME(SYM) gdb_agent_ ## SYM
-
-/* Define an entry in an IPA symbol list array. If IPA_SYM is used, the macro
- IPA_SYM_STRUCT_NAME must be defined to the structure name holding the IPA
- symbol addresses in that particular file, before including
- gdbsupport/agent.h. */
-#define IPA_SYM(SYM) \
- { \
- STRINGIFY (IPA_SYM_EXPORTED_NAME (SYM)), \
- offsetof (IPA_SYM_STRUCT_NAME, addr_ ## SYM) \
- }
-
-/* The size in bytes of the buffer used to talk to the IPA helper
- thread. */
-#define IPA_CMD_BUF_SIZE 1024
-
-bool agent_loaded_p (void);
-
-extern bool debug_agent;
-
-extern bool use_agent;
-
-/* Capability of agent. Different agents may have different capabilities,
- such as installing fast tracepoint or evaluating breakpoint conditions.
- Capabilities are represented by bit-maps, and each capability occupies one
- bit. */
-
-enum agent_capa
-{
- /* Capability to install fast tracepoint. */
- AGENT_CAPA_FAST_TRACE = 0x1,
- /* Capability to install static tracepoint. */
- AGENT_CAPA_STATIC_TRACE = (0x1 << 1),
-};
-
-bool agent_capability_check (enum agent_capa);
-
-void agent_capability_invalidate (void);
-
-#endif /* COMMON_AGENT_H */
diff --git a/gdb/gdbsupport/alt-stack.h b/gdb/gdbsupport/alt-stack.h
deleted file mode 100644
index e7c6b2f..0000000
--- a/gdb/gdbsupport/alt-stack.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/* Temporarily install an alternate signal stack
-
- Copyright (C) 2019-2020 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 GDBSUPPORT_ALT_STACK_H
-#define GDBSUPPORT_ALT_STACK_H
-
-#include <signal.h>
-
-namespace gdb
-{
-
-/* Try to set up an alternate signal stack for SIGSEGV handlers.
- This allows us to handle SIGSEGV signals generated when the
- normal process stack is exhausted. If this stack is not set
- up (sigaltstack is unavailable or fails) and a SIGSEGV is
- generated when the normal stack is exhausted then the program
- will behave as though no SIGSEGV handler was installed. */
-class alternate_signal_stack
-{
-public:
- alternate_signal_stack ()
- {
-#ifdef HAVE_SIGALTSTACK
- m_stack.reset ((char *) xmalloc (SIGSTKSZ));
-
- stack_t stack;
- stack.ss_sp = m_stack.get ();
- stack.ss_size = SIGSTKSZ;
- stack.ss_flags = 0;
-
- sigaltstack (&stack, &m_old_stack);
-#endif
- }
-
- ~alternate_signal_stack ()
- {
-#ifdef HAVE_SIGALTSTACK
- sigaltstack (&m_old_stack, nullptr);
-#endif
- }
-
- DISABLE_COPY_AND_ASSIGN (alternate_signal_stack);
-
-private:
-
-#ifdef HAVE_SIGALTSTACK
- gdb::unique_xmalloc_ptr<char> m_stack;
- stack_t m_old_stack;
-#endif
-};
-
-}
-
-#endif /* GDBSUPPORT_ALT_STACK_H */
diff --git a/gdb/gdbsupport/array-view.h b/gdb/gdbsupport/array-view.h
deleted file mode 100644
index ed5edc7..0000000
--- a/gdb/gdbsupport/array-view.h
+++ /dev/null
@@ -1,259 +0,0 @@
-/* Copyright (C) 2017-2020 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 COMMON_ARRAY_VIEW_H
-#define COMMON_ARRAY_VIEW_H
-
-#include "traits.h"
-#include <type_traits>
-
-/* An array_view is an abstraction that provides a non-owning view
- over a sequence of contiguous objects.
-
- A way to put it is that array_view is to std::vector (and
- std::array and built-in arrays with rank==1) like std::string_view
- is to std::string.
-
- The main intent of array_view is to use it as function input
- parameter type, making it possible to pass in any sequence of
- contiguous objects, irrespective of whether the objects live on the
- stack or heap and what actual container owns them. Implicit
- construction from the element type is supported too, making it easy
- to call functions that expect an array of elements when you only
- have one element (usually on the stack). For example:
-
- struct A { .... };
- void function (gdb::array_view<A> as);
-
- std::vector<A> std_vec = ...;
- std::array<A, N> std_array = ...;
- A array[] = {...};
- A elem;
-
- function (std_vec);
- function (std_array);
- function (array);
- function (elem);
-
- Views can be either mutable or const. A const view is simply
- created by specifying a const T as array_view template parameter,
- in which case operator[] of non-const array_view objects ends up
- returning const references. Making the array_view itself const is
- analogous to making a pointer itself be const. I.e., disables
- re-seating the view/pointer.
-
- Since array_view objects are small (pointer plus size), and
- designed to be trivially copyable, they should generally be passed
- around by value.
-
- You can find unit tests covering the whole API in
- unittests/array-view-selftests.c. */
-
-namespace gdb {
-
-template <typename T>
-class array_view
-{
- /* True iff decayed T is the same as decayed U. E.g., we want to
- say that 'T&' is the same as 'const T'. */
- template <typename U>
- using IsDecayedT = typename std::is_same<typename std::decay<T>::type,
- typename std::decay<U>::type>;
-
- /* True iff decayed T is the same as decayed U, and 'U *' is
- implicitly convertible to 'T *'. This is a requirement for
- several methods. */
- template <typename U>
- using DecayedConvertible = gdb::And<IsDecayedT<U>,
- std::is_convertible<U *, T *>>;
-
-public:
- using value_type = T;
- using reference = T &;
- using const_reference = const T &;
- using size_type = size_t;
-
- /* Default construction creates an empty view. */
- constexpr array_view () noexcept
- : m_array (nullptr), m_size (0)
- {}
-
- /* Create an array view over a single object of the type of an
- array_view element. The created view as size==1. This is
- templated on U to allow constructing a array_view<const T> over a
- (non-const) T. The "convertible" requirement makes sure that you
- can't create an array_view<T> over a const T. */
- template<typename U,
- typename = Requires<DecayedConvertible<U>>>
- constexpr array_view (U &elem) noexcept
- : m_array (&elem), m_size (1)
- {}
-
- /* Same as above, for rvalue references. */
- template<typename U,
- typename = Requires<DecayedConvertible<U>>>
- constexpr array_view (U &&elem) noexcept
- : m_array (&elem), m_size (1)
- {}
-
- /* Create an array view from a pointer to an array and an element
- count. */
- template<typename U,
- typename = Requires<DecayedConvertible<U>>>
- constexpr array_view (U *array, size_t size) noexcept
- : m_array (array), m_size (size)
- {}
-
- /* Create an array view from a range. This is templated on both U
- an V to allow passing in a mix of 'const T *' and 'T *'. */
- template<typename U, typename V,
- typename = Requires<DecayedConvertible<U>>,
- typename = Requires<DecayedConvertible<V>>>
- constexpr array_view (U *begin, V *end) noexcept
- : m_array (begin), m_size (end - begin)
- {}
-
- /* Create an array view from an array. */
- template<typename U, size_t Size,
- typename = Requires<DecayedConvertible<U>>>
- constexpr array_view (U (&array)[Size]) noexcept
- : m_array (array), m_size (Size)
- {}
-
- /* Create an array view from a contiguous container. E.g.,
- std::vector and std::array. */
- template<typename Container,
- typename = Requires<gdb::Not<IsDecayedT<Container>>>,
- typename
- = Requires<std::is_convertible
- <decltype (std::declval<Container> ().data ()),
- T *>>,
- typename
- = Requires<std::is_convertible
- <decltype (std::declval<Container> ().size ()),
- size_type>>>
- constexpr array_view (Container &&c) noexcept
- : m_array (c.data ()), m_size (c.size ())
- {}
-
- /* Observer methods. Some of these can't be constexpr until we
- require C++14. */
- /*constexpr14*/ T *data () noexcept { return m_array; }
- constexpr const T *data () const noexcept { return m_array; }
-
- /*constexpr14*/ T *begin () noexcept { return m_array; }
- constexpr const T *begin () const noexcept { return m_array; }
-
- /*constexpr14*/ T *end () noexcept { return m_array + m_size; }
- constexpr const T *end () const noexcept { return m_array + m_size; }
-
- /*constexpr14*/ reference operator[] (size_t index) noexcept
- { return m_array[index]; }
- constexpr const_reference operator[] (size_t index) const noexcept
- { return m_array[index]; }
-
- constexpr size_type size () const noexcept { return m_size; }
- constexpr bool empty () const noexcept { return m_size == 0; }
-
- /* Slice an array view. */
-
- /* Return a new array view over SIZE elements starting at START. */
- constexpr array_view<T> slice (size_type start, size_type size) const noexcept
- { return {m_array + start, size}; }
-
- /* Return a new array view over all the elements after START,
- inclusive. */
- constexpr array_view<T> slice (size_type start) const noexcept
- { return {m_array + start, size () - start}; }
-
-private:
- T *m_array;
- size_type m_size;
-};
-
-/* Compare LHS and RHS for (deep) equality. That is, whether LHS and
- RHS have the same sizes, and whether each pair of elements of LHS
- and RHS at the same position compares equal. */
-
-template <typename T>
-bool
-operator== (const gdb::array_view<T> &lhs, const gdb::array_view<T> &rhs)
-{
- if (lhs.size () != rhs.size ())
- return false;
-
- for (size_t i = 0; i < lhs.size (); i++)
- if (!(lhs[i] == rhs[i]))
- return false;
-
- return true;
-}
-
-/* Compare two array_views for inequality. */
-
-template <typename T>
-bool
-operator!= (const gdb::array_view<T> &lhs, const gdb::array_view<T> &rhs)
-{
- return !(lhs == rhs);
-}
-
-/* Create an array view from a pointer to an array and an element
- count.
-
- This is useful as alternative to constructing an array_view using
- brace initialization when the size variable you have handy is of
- signed type, since otherwise without an explicit cast the code
- would be ill-formed.
-
- For example, with:
-
- extern void foo (int, int, gdb::array_view<value *>);
-
- value *args[2];
- int nargs;
- foo (1, 2, {values, nargs});
-
- You'd get:
-
- source.c:10: error: narrowing conversion of ‘nargs’ from ‘int’ to
- ‘size_t {aka long unsigned int}’ inside { } [-Werror=narrowing]
-
- You could fix it by writing the somewhat distracting explicit cast:
-
- foo (1, 2, {values, (size_t) nargs});
-
- Or by instantiating an array_view explicitly:
-
- foo (1, 2, gdb::array_view<value *>(values, nargs));
-
- Or, better, using make_array_view, which has the advantage of
- inferring the arrav_view element's type:
-
- foo (1, 2, gdb::make_array_view (values, nargs));
-*/
-
-template<typename U>
-constexpr inline array_view<U>
-make_array_view (U *array, size_t size) noexcept
-{
- return {array, size};
-}
-
-} /* namespace gdb */
-
-#endif
diff --git a/gdb/gdbsupport/ax.def b/gdb/gdbsupport/ax.def
deleted file mode 100644
index 3bb6686..0000000
--- a/gdb/gdbsupport/ax.def
+++ /dev/null
@@ -1,97 +0,0 @@
-/* Definition of agent opcode values. -*- c -*-
- Copyright (C) 1998-2020 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/>. */
-
-/* The actual values of the various bytecode operations.
-
- Other independent implementations of the agent bytecode engine will
- rely on the exact values of these enums, and may not be recompiled
- when we change this table. The numeric values should remain fixed
- whenever possible. Thus, we assign them values explicitly here (to
- allow gaps to form safely), and the disassembly table in
- agentexpr.h behaves like an opcode map. If you want to see them
- grouped logically, see doc/agentexpr.texi.
-
- Each line is of the form:
-
- DEFOP (name, size, data_size, consumed, produced, opcode)
-
- NAME is the name of the operation.
- SIZE is the number of argument bytes that the operation takes from
- the bytecode stream.
- DATA_SIZE is the size of data operated on, in bits, for operations
- that care (ref and const). It is zero otherwise.
- CONSUMED is the number of stack elements consumed.
- PRODUCED is the number of stack elements produced.
- OPCODE is the operation's encoding. */
-
-DEFOP (float, 0, 0, 0, 0, 0x01)
-DEFOP (add, 0, 0, 2, 1, 0x02)
-DEFOP (sub, 0, 0, 2, 1, 0x03)
-DEFOP (mul, 0, 0, 2, 1, 0x04)
-DEFOP (div_signed, 0, 0, 2, 1, 0x05)
-DEFOP (div_unsigned, 0, 0, 2, 1, 0x06)
-DEFOP (rem_signed, 0, 0, 2, 1, 0x07)
-DEFOP (rem_unsigned, 0, 0, 2, 1, 0x08)
-DEFOP (lsh, 0, 0, 2, 1, 0x09)
-DEFOP (rsh_signed, 0, 0, 2, 1, 0x0a)
-DEFOP (rsh_unsigned, 0, 0, 2, 1, 0x0b)
-DEFOP (trace, 0, 0, 2, 0, 0x0c)
-DEFOP (trace_quick, 1, 0, 1, 1, 0x0d)
-DEFOP (log_not, 0, 0, 1, 1, 0x0e)
-DEFOP (bit_and, 0, 0, 2, 1, 0x0f)
-DEFOP (bit_or, 0, 0, 2, 1, 0x10)
-DEFOP (bit_xor, 0, 0, 2, 1, 0x11)
-DEFOP (bit_not, 0, 0, 1, 1, 0x12)
-DEFOP (equal, 0, 0, 2, 1, 0x13)
-DEFOP (less_signed, 0, 0, 2, 1, 0x14)
-DEFOP (less_unsigned, 0, 0, 2, 1, 0x15)
-DEFOP (ext, 1, 0, 1, 1, 0x16)
-DEFOP (ref8, 0, 8, 1, 1, 0x17)
-DEFOP (ref16, 0, 16, 1, 1, 0x18)
-DEFOP (ref32, 0, 32, 1, 1, 0x19)
-DEFOP (ref64, 0, 64, 1, 1, 0x1a)
-DEFOP (ref_float, 0, 0, 1, 1, 0x1b)
-DEFOP (ref_double, 0, 0, 1, 1, 0x1c)
-DEFOP (ref_long_double, 0, 0, 1, 1, 0x1d)
-DEFOP (l_to_d, 0, 0, 1, 1, 0x1e)
-DEFOP (d_to_l, 0, 0, 1, 1, 0x1f)
-DEFOP (if_goto, 2, 0, 1, 0, 0x20)
-DEFOP (goto, 2, 0, 0, 0, 0x21)
-DEFOP (const8, 1, 8, 0, 1, 0x22)
-DEFOP (const16, 2, 16, 0, 1, 0x23)
-DEFOP (const32, 4, 32, 0, 1, 0x24)
-DEFOP (const64, 8, 64, 0, 1, 0x25)
-DEFOP (reg, 2, 0, 0, 1, 0x26)
-DEFOP (end, 0, 0, 0, 0, 0x27)
-DEFOP (dup, 0, 0, 1, 2, 0x28)
-DEFOP (pop, 0, 0, 1, 0, 0x29)
-DEFOP (zero_ext, 1, 0, 1, 1, 0x2a)
-DEFOP (swap, 0, 0, 2, 2, 0x2b)
-DEFOP (getv, 2, 0, 0, 1, 0x2c)
-DEFOP (setv, 2, 0, 1, 1, 0x2d)
-DEFOP (tracev, 2, 0, 0, 1, 0x2e)
-DEFOP (tracenz, 0, 0, 2, 0, 0x2f)
-DEFOP (trace16, 2, 0, 1, 1, 0x30)
-/* We need something here just to make the tables come out ok. */
-DEFOP (invalid2, 0, 0, 0, 0, 0x31)
-/* The "consumed" number for pick is wrong, but there's no way to
- express the right thing. */
-DEFOP (pick, 1, 0, 0, 1, 0x32)
-DEFOP (rot, 0, 0, 3, 3, 0x33)
-/* Both the argument and consumed numbers are dynamic for this one. */
-DEFOP (printf, 0, 0, 0, 0, 0x34)
diff --git a/gdb/gdbsupport/block-signals.h b/gdb/gdbsupport/block-signals.h
deleted file mode 100644
index 24c971f..0000000
--- a/gdb/gdbsupport/block-signals.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/* Block signals used by gdb
-
- Copyright (C) 2019-2020 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 GDBSUPPORT_BLOCK_SIGNALS_H
-#define GDBSUPPORT_BLOCK_SIGNALS_H
-
-#include <signal.h>
-
-#include "gdbsupport/gdb-sigmask.h"
-
-namespace gdb
-{
-
-/* This is an RAII class that temporarily blocks the signals needed by
- gdb. This can be used before starting a new thread to ensure that
- this thread starts with the appropriate signals blocked. */
-class block_signals
-{
-public:
- block_signals ()
- {
-#ifdef HAVE_SIGPROCMASK
- sigset_t mask;
- sigemptyset (&mask);
- sigaddset (&mask, SIGINT);
- sigaddset (&mask, SIGCHLD);
- sigaddset (&mask, SIGALRM);
- sigaddset (&mask, SIGWINCH);
- gdb_sigmask (SIG_BLOCK, &mask, &m_old_mask);
-#endif
- }
-
- ~block_signals ()
- {
-#ifdef HAVE_SIGPROCMASK
- gdb_sigmask (SIG_SETMASK, &m_old_mask, nullptr);
-#endif
- }
-
- DISABLE_COPY_AND_ASSIGN (block_signals);
-
-private:
-
-#ifdef HAVE_SIGPROCMASK
- sigset_t m_old_mask;
-#endif
-};
-
-}
-
-#endif /* GDBSUPPORT_BLOCK_SIGNALS_H */
diff --git a/gdb/gdbsupport/break-common.h b/gdb/gdbsupport/break-common.h
deleted file mode 100644
index f62383b..0000000
--- a/gdb/gdbsupport/break-common.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/* Data structures associated with breakpoints shared in both GDB and
- GDBserver.
- Copyright (C) 1992-2020 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 COMMON_BREAK_COMMON_H
-#define COMMON_BREAK_COMMON_H
-
-enum target_hw_bp_type
- {
- hw_write = 0, /* Common HW watchpoint */
- hw_read = 1, /* Read HW watchpoint */
- hw_access = 2, /* Access HW watchpoint */
- hw_execute = 3 /* Execute HW breakpoint */
- };
-
-#endif /* COMMON_BREAK_COMMON_H */
diff --git a/gdb/gdbsupport/btrace-common.c b/gdb/gdbsupport/btrace-common.c
deleted file mode 100644
index 7d4f642..0000000
--- a/gdb/gdbsupport/btrace-common.c
+++ /dev/null
@@ -1,190 +0,0 @@
-/* Copyright (C) 2014-2020 Free Software Foundation, Inc.
-
- Contributed by Intel Corp. <markus.t.metzger@intel.com>
-
- 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 "btrace-common.h"
-
-
-/* See btrace-common.h. */
-
-const char *
-btrace_format_string (enum btrace_format format)
-{
- switch (format)
- {
- case BTRACE_FORMAT_NONE:
- return _("No or unknown format");
-
- case BTRACE_FORMAT_BTS:
- return _("Branch Trace Store");
-
- case BTRACE_FORMAT_PT:
- return _("Intel Processor Trace");
- }
-
- internal_error (__FILE__, __LINE__, _("Unknown branch trace format"));
-}
-
-/* See btrace-common.h. */
-
-const char *
-btrace_format_short_string (enum btrace_format format)
-{
- switch (format)
- {
- case BTRACE_FORMAT_NONE:
- return "unknown";
-
- case BTRACE_FORMAT_BTS:
- return "bts";
-
- case BTRACE_FORMAT_PT:
- return "pt";
- }
-
- internal_error (__FILE__, __LINE__, _("Unknown branch trace format"));
-}
-
-/* See btrace-common.h. */
-
-void
-btrace_data::fini ()
-{
- switch (format)
- {
- case BTRACE_FORMAT_NONE:
- /* Nothing to do. */
- return;
-
- case BTRACE_FORMAT_BTS:
- delete variant.bts.blocks;
- variant.bts.blocks = nullptr;
- return;
-
- case BTRACE_FORMAT_PT:
- xfree (variant.pt.data);
- return;
- }
-
- internal_error (__FILE__, __LINE__, _("Unkown branch trace format."));
-}
-
-/* See btrace-common.h. */
-
-bool
-btrace_data::empty () const
-{
- switch (format)
- {
- case BTRACE_FORMAT_NONE:
- return true;
-
- case BTRACE_FORMAT_BTS:
- return variant.bts.blocks->empty ();
-
- case BTRACE_FORMAT_PT:
- return (variant.pt.size == 0);
- }
-
- internal_error (__FILE__, __LINE__, _("Unkown branch trace format."));
-}
-
-/* See btrace-common.h. */
-
-void
-btrace_data::clear ()
-{
- fini ();
- format = BTRACE_FORMAT_NONE;
-}
-
-/* See btrace-common.h. */
-
-int
-btrace_data_append (struct btrace_data *dst,
- const struct btrace_data *src)
-{
- switch (src->format)
- {
- case BTRACE_FORMAT_NONE:
- return 0;
-
- case BTRACE_FORMAT_BTS:
- switch (dst->format)
- {
- default:
- return -1;
-
- case BTRACE_FORMAT_NONE:
- dst->format = BTRACE_FORMAT_BTS;
- dst->variant.bts.blocks = new std::vector<btrace_block>;
-
- /* Fall-through. */
- case BTRACE_FORMAT_BTS:
- {
- unsigned int blk;
-
- /* We copy blocks in reverse order to have the oldest block at
- index zero. */
- blk = src->variant.bts.blocks->size ();
- while (blk != 0)
- {
- const btrace_block &block
- = src->variant.bts.blocks->at (--blk);
- dst->variant.bts.blocks->push_back (block);
- }
- }
- }
- return 0;
-
- case BTRACE_FORMAT_PT:
- switch (dst->format)
- {
- default:
- return -1;
-
- case BTRACE_FORMAT_NONE:
- dst->format = BTRACE_FORMAT_PT;
- dst->variant.pt.data = NULL;
- dst->variant.pt.size = 0;
-
- /* fall-through. */
- case BTRACE_FORMAT_PT:
- {
- gdb_byte *data;
- size_t size;
-
- size = src->variant.pt.size + dst->variant.pt.size;
- data = (gdb_byte *) xmalloc (size);
-
- memcpy (data, dst->variant.pt.data, dst->variant.pt.size);
- memcpy (data + dst->variant.pt.size, src->variant.pt.data,
- src->variant.pt.size);
-
- xfree (dst->variant.pt.data);
-
- dst->variant.pt.data = data;
- dst->variant.pt.size = size;
- }
- }
- return 0;
- }
-
- internal_error (__FILE__, __LINE__, _("Unkown branch trace format."));
-}
diff --git a/gdb/gdbsupport/btrace-common.h b/gdb/gdbsupport/btrace-common.h
deleted file mode 100644
index c9dc683..0000000
--- a/gdb/gdbsupport/btrace-common.h
+++ /dev/null
@@ -1,260 +0,0 @@
-/* Branch trace support for GDB, the GNU debugger.
-
- Copyright (C) 2013-2020 Free Software Foundation, Inc.
-
- Contributed by Intel Corp. <markus.t.metzger@intel.com>.
-
- 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 COMMON_BTRACE_COMMON_H
-#define COMMON_BTRACE_COMMON_H
-
-/* Branch tracing (btrace) is a per-thread control-flow execution trace of the
- inferior. For presentation purposes, the branch trace is represented as a
- list of sequential control-flow blocks, one such list per thread. */
-
-/* A branch trace block.
-
- This represents a block of sequential control-flow. Adjacent blocks will be
- connected via calls, returns, or jumps. The latter can be direct or
- indirect, conditional or unconditional. Branches can further be
- asynchronous, e.g. interrupts. */
-struct btrace_block
-{
- /* The address of the first byte of the first instruction in the block.
- The address may be zero if we do not know the beginning of this block,
- such as for the first block in a delta trace. */
- CORE_ADDR begin;
-
- /* The address of the first byte of the last instruction in the block. */
- CORE_ADDR end;
-
- /* Simple constructor. */
- btrace_block (CORE_ADDR begin, CORE_ADDR end)
- : begin (begin),
- end (end)
- {
- /* Nothing. */
- }
-};
-
-/* Enumeration of btrace formats. */
-
-enum btrace_format
-{
- /* No branch trace format. */
- BTRACE_FORMAT_NONE,
-
- /* Branch trace is in Branch Trace Store (BTS) format.
- Actually, the format is a sequence of blocks derived from BTS. */
- BTRACE_FORMAT_BTS,
-
- /* Branch trace is in Intel Processor Trace format. */
- BTRACE_FORMAT_PT
-};
-
-/* An enumeration of cpu vendors. */
-
-enum btrace_cpu_vendor
-{
- /* We do not know this vendor. */
- CV_UNKNOWN,
-
- /* Intel. */
- CV_INTEL
-};
-
-/* A cpu identifier. */
-
-struct btrace_cpu
-{
- /* The processor vendor. */
- enum btrace_cpu_vendor vendor;
-
- /* The cpu family. */
- unsigned short family;
-
- /* The cpu model. */
- unsigned char model;
-
- /* The cpu stepping. */
- unsigned char stepping;
-};
-
-/* A BTS configuration. */
-
-struct btrace_config_bts
-{
- /* The size of the branch trace buffer in bytes.
-
- This is unsigned int and not size_t since it is registered as
- control variable for "set record btrace bts buffer-size". */
- unsigned int size;
-};
-
-/* An Intel Processor Trace configuration. */
-
-struct btrace_config_pt
-{
- /* The size of the branch trace buffer in bytes.
-
- This is unsigned int and not size_t since it is registered as
- control variable for "set record btrace pt buffer-size". */
- unsigned int size;
-};
-
-/* A branch tracing configuration.
-
- This describes the requested configuration as well as the actually
- obtained configuration.
- We describe the configuration for all different formats so we can
- easily switch between formats. */
-
-struct btrace_config
-{
- /* The branch tracing format. */
- enum btrace_format format;
-
- /* The BTS format configuration. */
- struct btrace_config_bts bts;
-
- /* The Intel Processor Trace format configuration. */
- struct btrace_config_pt pt;
-};
-
-/* Branch trace in BTS format. */
-struct btrace_data_bts
-{
- /* Branch trace is represented as a vector of branch trace blocks starting
- with the most recent block. This needs to be a pointer as we place
- btrace_data_bts into a union. */
- std::vector<btrace_block> *blocks;
-};
-
-/* Configuration information to go with the trace data. */
-struct btrace_data_pt_config
-{
- /* The processor on which the trace has been collected. */
- struct btrace_cpu cpu;
-};
-
-/* Branch trace in Intel Processor Trace format. */
-struct btrace_data_pt
-{
- /* Some configuration information to go with the data. */
- struct btrace_data_pt_config config;
-
- /* The trace data. */
- gdb_byte *data;
-
- /* The size of DATA in bytes. */
- size_t size;
-};
-
-/* The branch trace data. */
-struct btrace_data
-{
- btrace_data () = default;
-
- ~btrace_data ()
- {
- fini ();
- }
-
- btrace_data &operator= (btrace_data &&other)
- {
- if (this != &other)
- {
- fini ();
- format = other.format;
- variant = other.variant;
- other.format = BTRACE_FORMAT_NONE;
- }
- return *this;
- }
-
- /* Return true if this is empty; false otherwise. */
- bool empty () const;
-
- /* Clear this object. */
- void clear ();
-
- enum btrace_format format = BTRACE_FORMAT_NONE;
-
- union
- {
- /* Format == BTRACE_FORMAT_BTS. */
- struct btrace_data_bts bts;
-
- /* Format == BTRACE_FORMAT_PT. */
- struct btrace_data_pt pt;
- } variant;
-
-private:
-
- DISABLE_COPY_AND_ASSIGN (btrace_data);
-
- void fini ();
-};
-
-/* Target specific branch trace information. */
-struct btrace_target_info;
-
-/* Enumeration of btrace read types. */
-
-enum btrace_read_type
-{
- /* Send all available trace. */
- BTRACE_READ_ALL,
-
- /* Send all available trace, if it changed. */
- BTRACE_READ_NEW,
-
- /* Send the trace since the last request. This will fail if the trace
- buffer overflowed. */
- BTRACE_READ_DELTA
-};
-
-/* Enumeration of btrace errors. */
-
-enum btrace_error
-{
- /* No error. Everything is OK. */
- BTRACE_ERR_NONE,
-
- /* An unknown error. */
- BTRACE_ERR_UNKNOWN,
-
- /* Branch tracing is not supported on this system. */
- BTRACE_ERR_NOT_SUPPORTED,
-
- /* The branch trace buffer overflowed; no delta read possible. */
- BTRACE_ERR_OVERFLOW
-};
-
-/* Return a string representation of FORMAT. */
-extern const char *btrace_format_string (enum btrace_format format);
-
-/* Return an abbreviation string representation of FORMAT. */
-extern const char *btrace_format_short_string (enum btrace_format format);
-
-/* Append the branch trace data from SRC to the end of DST.
- Both SRC and DST must use the same format.
- Returns zero on success; a negative number otherwise. */
-extern int btrace_data_append (struct btrace_data *dst,
- const struct btrace_data *src);
-
-#endif /* COMMON_BTRACE_COMMON_H */
diff --git a/gdb/gdbsupport/buffer.c b/gdb/gdbsupport/buffer.c
deleted file mode 100644
index e3d0f1e..0000000
--- a/gdb/gdbsupport/buffer.c
+++ /dev/null
@@ -1,178 +0,0 @@
-/* A simple growing buffer for GDB.
-
- Copyright (C) 2009-2020 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 "xml-utils.h"
-#include "buffer.h"
-#include "inttypes.h"
-void
-buffer_grow (struct buffer *buffer, const char *data, size_t size)
-{
- char *new_buffer;
- size_t new_buffer_size;
-
- if (size == 0)
- return;
-
- new_buffer_size = buffer->buffer_size;
-
- if (new_buffer_size == 0)
- new_buffer_size = 1;
-
- while (buffer->used_size + size > new_buffer_size)
- new_buffer_size *= 2;
- new_buffer = (char *) xrealloc (buffer->buffer, new_buffer_size);
- memcpy (new_buffer + buffer->used_size, data, size);
- buffer->buffer = new_buffer;
- buffer->buffer_size = new_buffer_size;
- buffer->used_size += size;
-}
-
-void
-buffer_free (struct buffer *buffer)
-{
- if (!buffer)
- return;
-
- xfree (buffer->buffer);
- buffer->buffer = NULL;
- buffer->buffer_size = 0;
- buffer->used_size = 0;
-}
-
-void
-buffer_init (struct buffer *buffer)
-{
- memset (buffer, 0, sizeof (*buffer));
-}
-
-char*
-buffer_finish (struct buffer *buffer)
-{
- char *ret = buffer->buffer;
- buffer->buffer = NULL;
- buffer->buffer_size = 0;
- buffer->used_size = 0;
- return ret;
-}
-
-void
-buffer_xml_printf (struct buffer *buffer, const char *format, ...)
-{
- va_list ap;
- const char *f;
- const char *prev;
- int percent = 0;
-
- va_start (ap, format);
-
- prev = format;
- for (f = format; *f; f++)
- {
- if (percent)
- {
- char buf[32];
- char *str = buf;
- const char *f_old = f;
-
- switch (*f)
- {
- case 's':
- str = va_arg (ap, char *);
- break;
- case 'd':
- sprintf (str, "%d", va_arg (ap, int));
- break;
- case 'u':
- sprintf (str, "%u", va_arg (ap, unsigned int));
- break;
- case 'x':
- sprintf (str, "%x", va_arg (ap, unsigned int));
- break;
- case 'o':
- sprintf (str, "%o", va_arg (ap, unsigned int));
- break;
- case 'l':
- f++;
- switch (*f)
- {
- case 'd':
- sprintf (str, "%ld", va_arg (ap, long));
- break;
- case 'u':
- sprintf (str, "%lu", va_arg (ap, unsigned long));
- break;
- case 'x':
- sprintf (str, "%lx", va_arg (ap, unsigned long));
- break;
- case 'o':
- sprintf (str, "%lo", va_arg (ap, unsigned long));
- break;
- case 'l':
- f++;
- switch (*f)
- {
- case 'd':
- sprintf (str, "%" PRId64,
- (int64_t) va_arg (ap, long long));
- break;
- case 'u':
- sprintf (str, "%" PRIu64,
- (uint64_t) va_arg (ap, unsigned long long));
- break;
- case 'x':
- sprintf (str, "%" PRIx64,
- (uint64_t) va_arg (ap, unsigned long long));
- break;
- case 'o':
- sprintf (str, "%" PRIo64,
- (uint64_t) va_arg (ap, unsigned long long));
- break;
- default:
- str = 0;
- break;
- }
- break;
- default:
- str = 0;
- break;
- }
- break;
- default:
- str = 0;
- break;
- }
-
- if (str)
- {
- buffer_grow (buffer, prev, f_old - prev - 1);
- std::string p = xml_escape_text (str);
- buffer_grow_str (buffer, p.c_str ());
- prev = f + 1;
- }
- percent = 0;
- }
- else if (*f == '%')
- percent = 1;
- }
-
- buffer_grow_str (buffer, prev);
- va_end (ap);
-}
-
diff --git a/gdb/gdbsupport/buffer.h b/gdb/gdbsupport/buffer.h
deleted file mode 100644
index 6e4c167..0000000
--- a/gdb/gdbsupport/buffer.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/* A simple growing buffer for GDB.
-
- Copyright (C) 2009-2020 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 COMMON_BUFFER_H
-#define COMMON_BUFFER_H
-
-struct buffer
-{
- char *buffer;
- size_t buffer_size; /* allocated size */
- size_t used_size; /* actually used size */
-};
-
-/* Append DATA of size SIZE to the end of BUFFER. Grows the buffer to
- accommodate the new data. */
-void buffer_grow (struct buffer *buffer, const char *data, size_t size);
-
-/* Append C to the end of BUFFER. Grows the buffer to accommodate the
- new data. */
-
-static inline void
-buffer_grow_char (struct buffer *buffer, char c)
-{
- buffer_grow (buffer, &c, 1);
-}
-
-/* Release any memory held by BUFFER. */
-void buffer_free (struct buffer *buffer);
-
-/* Initialize BUFFER. BUFFER holds no memory afterwards. */
-void buffer_init (struct buffer *buffer);
-
-/* Return a pointer into BUFFER data, effectively transferring
- ownership of the buffer memory to the caller. Calling buffer_free
- afterwards has no effect on the returned data. */
-char* buffer_finish (struct buffer *buffer);
-
-/* Simple printf to buffer function. Current implemented formatters:
- %s - grow an xml escaped text in BUFFER.
- %d - grow an signed integer in BUFFER.
- %u - grow an unsigned integer in BUFFER.
- %x - grow an unsigned integer formatted in hexadecimal in BUFFER.
- %o - grow an unsigned integer formatted in octal in BUFFER. */
-void buffer_xml_printf (struct buffer *buffer, const char *format, ...)
- ATTRIBUTE_PRINTF (2, 3);
-
-#define buffer_grow_str(BUFFER,STRING) \
- buffer_grow (BUFFER, STRING, strlen (STRING))
-#define buffer_grow_str0(BUFFER,STRING) \
- buffer_grow (BUFFER, STRING, strlen (STRING) + 1)
-
-#endif /* COMMON_BUFFER_H */
diff --git a/gdb/gdbsupport/byte-vector.h b/gdb/gdbsupport/byte-vector.h
deleted file mode 100644
index f1fc0cf..0000000
--- a/gdb/gdbsupport/byte-vector.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* Copyright (C) 2017-2020 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 COMMON_BYTE_VECTOR_H
-#define COMMON_BYTE_VECTOR_H
-
-#include "gdbsupport/def-vector.h"
-
-namespace gdb {
-
-/* byte_vector is a gdb_byte std::vector with a custom allocator that
- unlike std::vector<gdb_byte> does not zero-initialize new elements
- by default when the vector is created/resized. This is what you
- usually want when working with byte buffers, since if you're
- creating or growing a buffer you'll most surely want to fill it in
- with data, in which case zero-initialization would be a
- pessimization. For example:
-
- gdb::byte_vector buf (some_large_size);
- fill_with_data (buf.data (), buf.size ());
-
- On the odd case you do need zero initialization, then you can still
- call the overloads that specify an explicit value, like:
-
- gdb::byte_vector buf (some_initial_size, 0);
- buf.resize (a_bigger_size, 0);
-
- (Or use std::vector<gdb_byte> instead.)
-
- Note that unlike std::vector<gdb_byte>, function local
- gdb::byte_vector objects constructed with an initial size like:
-
- gdb::byte_vector buf (some_size);
- fill_with_data (buf.data (), buf.size ());
-
- usually compile down to the exact same as:
-
- std::unique_ptr<byte[]> buf (new gdb_byte[some_size]);
- fill_with_data (buf.get (), some_size);
-
- with the former having the advantage of being a bit more readable,
- and providing the whole std::vector API, if you end up needing it.
-*/
-using byte_vector = gdb::def_vector<gdb_byte>;
-using char_vector = gdb::def_vector<char>;
-
-} /* namespace gdb */
-
-#endif /* COMMON_DEF_VECTOR_H */
diff --git a/gdb/gdbsupport/cleanups.c b/gdb/gdbsupport/cleanups.c
deleted file mode 100644
index 236bc17..0000000
--- a/gdb/gdbsupport/cleanups.c
+++ /dev/null
@@ -1,144 +0,0 @@
-/* Cleanup routines for GDB, the GNU debugger.
-
- Copyright (C) 1986-2020 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 "cleanups.h"
-
-/* The cleanup list records things that have to be undone
- if an error happens (descriptors to be closed, memory to be freed, etc.)
- Each link in the chain records a function to call and an
- argument to give it.
-
- Use make_cleanup to add an element to the cleanup chain.
- Use do_cleanups to do all cleanup actions back to a given
- point in the chain. Use discard_cleanups to remove cleanups
- from the chain back to a given point, not doing them.
-
- If the argument is pointer to allocated memory, then you need
- to additionally set the 'free_arg' member to a function that will
- free that memory. This function will be called both when the cleanup
- is executed and when it's discarded. */
-
-struct cleanup
-{
- struct cleanup *next;
- void (*function) (void *);
- void (*free_arg) (void *);
- void *arg;
-};
-
-/* Used to mark the end of a cleanup chain.
- The value is chosen so that it:
- - is non-NULL so that make_cleanup never returns NULL,
- - causes a segv if dereferenced
- [though this won't catch errors that a value of, say,
- ((struct cleanup *) -1) will]
- - displays as something useful when printed in gdb.
- This is const for a bit of extra robustness.
- It is initialized to coax gcc into putting it into .rodata.
- All fields are initialized to survive -Wextra. */
-static const struct cleanup sentinel_cleanup = { 0, 0, 0, 0 };
-
-/* Handy macro to use when referring to sentinel_cleanup. */
-#define SENTINEL_CLEANUP ((struct cleanup *) &sentinel_cleanup)
-
-/* Chain of cleanup actions established with make_final_cleanup,
- to be executed when gdb exits. */
-static struct cleanup *final_cleanup_chain = SENTINEL_CLEANUP;
-
-/* Main worker routine to create a cleanup.
- PMY_CHAIN is a pointer to either cleanup_chain or final_cleanup_chain.
- FUNCTION is the function to call to perform the cleanup.
- ARG is passed to FUNCTION when called.
- FREE_ARG, if non-NULL, is called after the cleanup is performed.
-
- The result is a pointer to the previous chain pointer
- to be passed later to do_cleanups or discard_cleanups. */
-
-static struct cleanup *
-make_my_cleanup2 (struct cleanup **pmy_chain, make_cleanup_ftype *function,
- void *arg, void (*free_arg) (void *))
-{
- struct cleanup *newobj = XNEW (struct cleanup);
- struct cleanup *old_chain = *pmy_chain;
-
- newobj->next = *pmy_chain;
- newobj->function = function;
- newobj->free_arg = free_arg;
- newobj->arg = arg;
- *pmy_chain = newobj;
-
- gdb_assert (old_chain != NULL);
- return old_chain;
-}
-
-/* Worker routine to create a cleanup without a destructor.
- PMY_CHAIN is a pointer to either cleanup_chain or final_cleanup_chain.
- FUNCTION is the function to call to perform the cleanup.
- ARG is passed to FUNCTION when called.
-
- The result is a pointer to the previous chain pointer
- to be passed later to do_cleanups or discard_cleanups. */
-
-static struct cleanup *
-make_my_cleanup (struct cleanup **pmy_chain, make_cleanup_ftype *function,
- void *arg)
-{
- return make_my_cleanup2 (pmy_chain, function, arg, NULL);
-}
-
-/* Add a new cleanup to the final cleanup_chain,
- and return the previous chain pointer
- to be passed later to do_cleanups or discard_cleanups.
- Args are FUNCTION to clean up with, and ARG to pass to it. */
-
-struct cleanup *
-make_final_cleanup (make_cleanup_ftype *function, void *arg)
-{
- return make_my_cleanup (&final_cleanup_chain, function, arg);
-}
-
-/* Worker routine to perform cleanups.
- PMY_CHAIN is a pointer to either cleanup_chain or final_cleanup_chain.
- OLD_CHAIN is the result of a "make" cleanup routine.
- Cleanups are performed until we get back to the old end of the chain. */
-
-static void
-do_my_cleanups (struct cleanup **pmy_chain,
- struct cleanup *old_chain)
-{
- struct cleanup *ptr;
-
- while ((ptr = *pmy_chain) != old_chain)
- {
- *pmy_chain = ptr->next; /* Do this first in case of recursion. */
- (*ptr->function) (ptr->arg);
- if (ptr->free_arg)
- (*ptr->free_arg) (ptr->arg);
- xfree (ptr);
- }
-}
-
-/* Discard final cleanups and do the actions they describe. */
-
-void
-do_final_cleanups ()
-{
- do_my_cleanups (&final_cleanup_chain, SENTINEL_CLEANUP);
-}
diff --git a/gdb/gdbsupport/cleanups.h b/gdb/gdbsupport/cleanups.h
deleted file mode 100644
index 6c4e388..0000000
--- a/gdb/gdbsupport/cleanups.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/* Cleanups.
- Copyright (C) 1986-2020 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 COMMON_CLEANUPS_H
-#define COMMON_CLEANUPS_H
-
-/* Outside of cleanups.c, this is an opaque type. */
-struct cleanup;
-
-/* NOTE: cagney/2000-03-04: This typedef is strictly for the
- make_cleanup function declarations below. Do not use this typedef
- as a cast when passing functions into the make_cleanup() code.
- Instead either use a bounce function or add a wrapper function.
- Calling a f(char*) function with f(void*) is non-portable. */
-typedef void (make_cleanup_ftype) (void *);
-
-/* Function type for the dtor in make_cleanup_dtor. */
-typedef void (make_cleanup_dtor_ftype) (void *);
-
-extern struct cleanup *make_final_cleanup (make_cleanup_ftype *, void *);
-
-extern void do_final_cleanups ();
-
-#endif /* COMMON_CLEANUPS_H */
diff --git a/gdb/gdbsupport/common-debug.c b/gdb/gdbsupport/common-debug.c
deleted file mode 100644
index d1131a0..0000000
--- a/gdb/gdbsupport/common-debug.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/* Debug printing functions.
-
- Copyright (C) 2014-2020 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 "common-debug.h"
-
-/* See gdbsupport/common-debug.h. */
-
-bool show_debug_regs;
-
-/* See gdbsupport/common-debug.h. */
-
-void
-debug_printf (const char *fmt, ...)
-{
- va_list ap;
-
- va_start (ap, fmt);
- debug_vprintf (fmt, ap);
- va_end (ap);
-}
diff --git a/gdb/gdbsupport/common-debug.h b/gdb/gdbsupport/common-debug.h
deleted file mode 100644
index 9934ec5..0000000
--- a/gdb/gdbsupport/common-debug.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Declarations for debug printing functions.
-
- Copyright (C) 2014-2020 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 COMMON_COMMON_DEBUG_H
-#define COMMON_COMMON_DEBUG_H
-
-/* Set to true to enable debugging of hardware breakpoint/
- watchpoint support code. */
-
-extern bool show_debug_regs;
-
-/* Print a formatted message to the appropriate channel for
- debugging output for the client. */
-
-extern void debug_printf (const char *format, ...)
- ATTRIBUTE_PRINTF (1, 2);
-
-/* Print a formatted message to the appropriate channel for
- debugging output for the client. This function must be
- provided by the client. */
-
-extern void debug_vprintf (const char *format, va_list ap)
- ATTRIBUTE_PRINTF (1, 0);
-
-#endif /* COMMON_COMMON_DEBUG_H */
diff --git a/gdb/gdbsupport/common-defs.h b/gdb/gdbsupport/common-defs.h
deleted file mode 100644
index 214bca1..0000000
--- a/gdb/gdbsupport/common-defs.h
+++ /dev/null
@@ -1,154 +0,0 @@
-/* Common definitions.
-
- Copyright (C) 1986-2020 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 COMMON_COMMON_DEFS_H
-#define COMMON_COMMON_DEFS_H
-
-#include "config.h"
-
-#undef PACKAGE_NAME
-#undef PACKAGE_VERSION
-#undef PACKAGE_STRING
-#undef PACKAGE_TARNAME
-
-#ifdef GDBSERVER
-#include "build-gnulib-gdbserver/config.h"
-#else
-#include "../../gnulib/config.h"
-#endif
-
-#undef PACKAGE_NAME
-#undef PACKAGE_VERSION
-#undef PACKAGE_STRING
-#undef PACKAGE_TARNAME
-
-/* From:
- https://www.gnu.org/software/gnulib/manual/html_node/stdint_002eh.html
-
- "On some hosts that predate C++11, when using C++ one must define
- __STDC_CONSTANT_MACROS to make visible the definitions of constant
- macros such as INTMAX_C, and one must define __STDC_LIMIT_MACROS to
- make visible the definitions of limit macros such as INTMAX_MAX.".
-
- And:
- https://www.gnu.org/software/gnulib/manual/html_node/inttypes_002eh.html
-
- "On some hosts that predate C++11, when using C++ one must define
- __STDC_FORMAT_MACROS to make visible the declarations of format
- macros such as PRIdMAX."
-
- Must do this before including any system header, since other system
- headers may include stdint.h/inttypes.h. */
-#define __STDC_CONSTANT_MACROS 1
-#define __STDC_LIMIT_MACROS 1
-#define __STDC_FORMAT_MACROS 1
-
-/* Some distros enable _FORTIFY_SOURCE by default, which on occasion
- has caused build failures with -Wunused-result when a patch is
- developed on a distro that does not enable _FORTIFY_SOURCE. We
- enable it here in order to try to catch these problems earlier;
- plus this seems like a reasonable safety measure. The check for
- optimization is required because _FORTIFY_SOURCE only works when
- optimization is enabled. If _FORTIFY_SOURCE is already defined,
- then we don't do anything. Also, on MinGW, fortify requires
- linking to -lssp, and to avoid the hassle of checking for
- that and linking to it statically, we just don't define
- _FORTIFY_SOURCE there. */
-
-#if (!defined _FORTIFY_SOURCE && defined __OPTIMIZE__ && __OPTIMIZE__ > 0 \
- && !defined(__MINGW32__))
-#define _FORTIFY_SOURCE 2
-#endif
-
-/* We don't support Windows versions before XP, so we define
- _WIN32_WINNT correspondingly to ensure the Windows API headers
- expose the required symbols. */
-#if defined (__MINGW32__) || defined (__CYGWIN__)
-# ifdef _WIN32_WINNT
-# if _WIN32_WINNT < 0x0501
-# undef _WIN32_WINNT
-# define _WIN32_WINNT 0x0501
-# endif
-# else
-# define _WIN32_WINNT 0x0501
-# endif
-#endif /* __MINGW32__ || __CYGWIN__ */
-
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <stddef.h>
-#include <stdint.h>
-#include <string.h>
-#ifdef HAVE_STRINGS_H
-#include <strings.h> /* for strcasecmp and strncasecmp */
-#endif
-#include <errno.h>
-#include <alloca.h>
-
-#include "ansidecl.h"
-/* This is defined by ansidecl.h, but we prefer gnulib's version. On
- MinGW, gnulib might enable __USE_MINGW_ANSI_STDIO, which may or not
- require use of attribute gnu_printf instead of printf. gnulib
- checks that at configure time. Since _GL_ATTRIBUTE_FORMAT_PRINTF
- is compatible with ATTRIBUTE_PRINTF, simply use it. */
-#undef ATTRIBUTE_PRINTF
-#define ATTRIBUTE_PRINTF _GL_ATTRIBUTE_FORMAT_PRINTF
-
-#if GCC_VERSION >= 3004
-#define ATTRIBUTE_UNUSED_RESULT __attribute__ ((__warn_unused_result__))
-#else
-#define ATTRIBUTE_UNUSED_RESULT
-#endif
-
-#include "libiberty.h"
-#include "pathmax.h"
-#include "gdb/signals.h"
-#include "gdb_locale.h"
-#include "ptid.h"
-#include "common-types.h"
-#include "common-utils.h"
-#include "gdb_assert.h"
-#include "errors.h"
-#include "print-utils.h"
-#include "common-debug.h"
-#include "cleanups.h"
-#include "common-exceptions.h"
-#include "gdbsupport/poison.h"
-
-#define EXTERN_C extern "C"
-#define EXTERN_C_PUSH extern "C" {
-#define EXTERN_C_POP }
-
-/* Pull in gdb::unique_xmalloc_ptr. */
-#include "gdbsupport/gdb_unique_ptr.h"
-
-/* String containing the current directory (what getwd would return). */
-extern char *current_directory;
-
-/* sbrk on macOS is not useful for our purposes, since sbrk(0) always
- returns the same value. brk/sbrk on macOS is just an emulation
- that always returns a pointer to a 4MB section reserved for
- that. */
-
-#if defined (HAVE_SBRK) && !__APPLE__
-#define HAVE_USEFUL_SBRK 1
-#endif
-
-#endif /* COMMON_COMMON_DEFS_H */
diff --git a/gdb/gdbsupport/common-exceptions.c b/gdb/gdbsupport/common-exceptions.c
deleted file mode 100644
index 0cc515b..0000000
--- a/gdb/gdbsupport/common-exceptions.c
+++ /dev/null
@@ -1,235 +0,0 @@
-/* Exception (throw catch) mechanism, for GDB, the GNU debugger.
-
- Copyright (C) 1986-2020 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 "common-exceptions.h"
-#include <forward_list>
-
-/* Possible catcher states. */
-enum catcher_state {
- /* Initial state, a new catcher has just been created. */
- CATCHER_CREATED,
- /* The catch code is running. */
- CATCHER_RUNNING,
- CATCHER_RUNNING_1,
- /* The catch code threw an exception. */
- CATCHER_ABORTING
-};
-
-/* Possible catcher actions. */
-enum catcher_action {
- CATCH_ITER,
- CATCH_ITER_1,
- CATCH_THROWING
-};
-
-struct catcher
-{
- enum catcher_state state = CATCHER_CREATED;
- /* Jump buffer pointing back at the exception handler. */
- jmp_buf buf;
- /* Status buffer belonging to the exception handler. */
- struct gdb_exception exception;
-};
-
-/* Where to go for throw_exception(). */
-static std::forward_list<struct catcher> catchers;
-
-jmp_buf *
-exceptions_state_mc_init ()
-{
- catchers.emplace_front ();
- return &catchers.front ().buf;
-}
-
-/* Catcher state machine. Returns non-zero if the m/c should be run
- again, zero if it should abort. */
-
-static int
-exceptions_state_mc (enum catcher_action action)
-{
- switch (catchers.front ().state)
- {
- case CATCHER_CREATED:
- switch (action)
- {
- case CATCH_ITER:
- /* Allow the code to run the catcher. */
- catchers.front ().state = CATCHER_RUNNING;
- return 1;
- default:
- internal_error (__FILE__, __LINE__, _("bad state"));
- }
- case CATCHER_RUNNING:
- switch (action)
- {
- case CATCH_ITER:
- /* No error/quit has occured. */
- return 0;
- case CATCH_ITER_1:
- catchers.front ().state = CATCHER_RUNNING_1;
- return 1;
- case CATCH_THROWING:
- catchers.front ().state = CATCHER_ABORTING;
- /* See also throw_exception. */
- return 1;
- default:
- internal_error (__FILE__, __LINE__, _("bad switch"));
- }
- case CATCHER_RUNNING_1:
- switch (action)
- {
- case CATCH_ITER:
- /* The did a "break" from the inner while loop. */
- return 0;
- case CATCH_ITER_1:
- catchers.front ().state = CATCHER_RUNNING;
- return 0;
- case CATCH_THROWING:
- catchers.front ().state = CATCHER_ABORTING;
- /* See also throw_exception. */
- return 1;
- default:
- internal_error (__FILE__, __LINE__, _("bad switch"));
- }
- case CATCHER_ABORTING:
- switch (action)
- {
- case CATCH_ITER:
- {
- /* Exit normally if this catcher can handle this
- exception. The caller analyses the func return
- values. */
- return 0;
- }
- default:
- internal_error (__FILE__, __LINE__, _("bad state"));
- }
- default:
- internal_error (__FILE__, __LINE__, _("bad switch"));
- }
-}
-
-int
-exceptions_state_mc_catch (struct gdb_exception *exception,
- int mask)
-{
- *exception = std::move (catchers.front ().exception);
- catchers.pop_front ();
-
- if (exception->reason < 0)
- {
- if (mask & RETURN_MASK (exception->reason))
- {
- /* Exit normally and let the caller handle the
- exception. */
- return 1;
- }
-
- /* The caller didn't request that the event be caught, relay the
- event to the next exception_catch/CATCH_SJLJ. */
- throw_exception_sjlj (*exception);
- }
-
- /* No exception was thrown. */
- return 0;
-}
-
-int
-exceptions_state_mc_action_iter (void)
-{
- return exceptions_state_mc (CATCH_ITER);
-}
-
-int
-exceptions_state_mc_action_iter_1 (void)
-{
- return exceptions_state_mc (CATCH_ITER_1);
-}
-
-/* Return EXCEPTION to the nearest containing CATCH_SJLJ block. */
-
-void
-throw_exception_sjlj (const struct gdb_exception &exception)
-{
- /* Jump to the nearest CATCH_SJLJ block, communicating REASON to
- that call via setjmp's return value. Note that REASON can't be
- zero, by definition in common-exceptions.h. */
- exceptions_state_mc (CATCH_THROWING);
- enum return_reason reason = exception.reason;
- catchers.front ().exception = exception;
- longjmp (catchers.front ().buf, reason);
-}
-
-/* Implementation of throw_exception that uses C++ try/catch. */
-
-void
-throw_exception (gdb_exception &&exception)
-{
- if (exception.reason == RETURN_QUIT)
- throw gdb_exception_quit (std::move (exception));
- else if (exception.reason == RETURN_ERROR)
- throw gdb_exception_error (std::move (exception));
- else
- gdb_assert_not_reached ("invalid return reason");
-}
-
-static void ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (3, 0)
-throw_it (enum return_reason reason, enum errors error, const char *fmt,
- va_list ap)
-{
- if (reason == RETURN_QUIT)
- throw gdb_exception_quit (fmt, ap);
- else if (reason == RETURN_ERROR)
- throw gdb_exception_error (error, fmt, ap);
- else
- gdb_assert_not_reached ("invalid return reason");
-}
-
-void
-throw_verror (enum errors error, const char *fmt, va_list ap)
-{
- throw_it (RETURN_ERROR, error, fmt, ap);
-}
-
-void
-throw_vquit (const char *fmt, va_list ap)
-{
- throw_it (RETURN_QUIT, GDB_NO_ERROR, fmt, ap);
-}
-
-void
-throw_error (enum errors error, const char *fmt, ...)
-{
- va_list args;
-
- va_start (args, fmt);
- throw_verror (error, fmt, args);
- va_end (args);
-}
-
-void
-throw_quit (const char *fmt, ...)
-{
- va_list args;
-
- va_start (args, fmt);
- throw_vquit (fmt, args);
- va_end (args);
-}
diff --git a/gdb/gdbsupport/common-exceptions.h b/gdb/gdbsupport/common-exceptions.h
deleted file mode 100644
index 76d916f..0000000
--- a/gdb/gdbsupport/common-exceptions.h
+++ /dev/null
@@ -1,304 +0,0 @@
-/* Exception (throw catch) mechanism, for GDB, the GNU debugger.
-
- Copyright (C) 1986-2020 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 COMMON_COMMON_EXCEPTIONS_H
-#define COMMON_COMMON_EXCEPTIONS_H
-
-#include <setjmp.h>
-#include <new>
-#include <memory>
-#include <string>
-
-/* Reasons for calling throw_exceptions(). NOTE: all reason values
- must be different from zero. enum value 0 is reserved for internal
- use as the return value from an initial setjmp(). */
-
-enum return_reason
- {
- /* User interrupt. */
- RETURN_QUIT = -2,
- /* Any other error. */
- RETURN_ERROR
- };
-
-#define RETURN_MASK(reason) (1 << (int)(-reason))
-
-typedef enum
-{
- RETURN_MASK_QUIT = RETURN_MASK (RETURN_QUIT),
- RETURN_MASK_ERROR = RETURN_MASK (RETURN_ERROR),
- RETURN_MASK_ALL = (RETURN_MASK_QUIT | RETURN_MASK_ERROR)
-} return_mask;
-
-/* Describe all exceptions. */
-
-enum errors {
- GDB_NO_ERROR,
-
- /* Any generic error, the corresponding text is in
- exception.message. */
- GENERIC_ERROR,
-
- /* Something requested was not found. */
- NOT_FOUND_ERROR,
-
- /* Thread library lacks support necessary for finding thread local
- storage. */
- TLS_NO_LIBRARY_SUPPORT_ERROR,
-
- /* Load module not found while attempting to find thread local storage. */
- TLS_LOAD_MODULE_NOT_FOUND_ERROR,
-
- /* Thread local storage has not been allocated yet. */
- TLS_NOT_ALLOCATED_YET_ERROR,
-
- /* Something else went wrong while attempting to find thread local
- storage. The ``struct gdb_exception'' message field provides
- more detail. */
- TLS_GENERIC_ERROR,
-
- /* Problem parsing an XML document. */
- XML_PARSE_ERROR,
-
- /* Error accessing memory. */
- MEMORY_ERROR,
-
- /* Value not available. E.g., a register was not collected in a
- traceframe. */
- NOT_AVAILABLE_ERROR,
-
- /* Value was optimized out. Note: if the value was a register, this
- means the register was not saved in the frame. */
- OPTIMIZED_OUT_ERROR,
-
- /* DW_OP_entry_value resolving failed. */
- NO_ENTRY_VALUE_ERROR,
-
- /* Target throwing an error has been closed. Current command should be
- aborted as the inferior state is no longer valid. */
- TARGET_CLOSE_ERROR,
-
- /* An undefined command was executed. */
- UNDEFINED_COMMAND_ERROR,
-
- /* Requested feature, method, mechanism, etc. is not supported. */
- NOT_SUPPORTED_ERROR,
-
- /* The number of candidates generated during line completion has
- reached the user's specified limit. This isn't an error, this exception
- is used to halt searching for more completions, but for consistency
- "_ERROR" is appended to the name. */
- MAX_COMPLETIONS_REACHED_ERROR,
-
- /* Add more errors here. */
- NR_ERRORS
-};
-
-struct gdb_exception
-{
- gdb_exception ()
- : reason ((enum return_reason) 0),
- error (GDB_NO_ERROR)
- {
- }
-
- gdb_exception (enum return_reason r, enum errors e)
- : reason (r),
- error (e)
- {
- }
-
- gdb_exception (enum return_reason r, enum errors e,
- const char *fmt, va_list ap)
- ATTRIBUTE_PRINTF (4, 0)
- : reason (r),
- error (e),
- message (std::make_shared<std::string> (string_vprintf (fmt, ap)))
- {
- }
-
- /* The move constructor exists so that we can mark it "noexcept",
- which is a good practice for any sort of exception object. */
- explicit gdb_exception (gdb_exception &&other) noexcept = default;
-
- /* The copy constructor exists so that we can mark it "noexcept",
- which is a good practice for any sort of exception object. */
- gdb_exception (const gdb_exception &other) noexcept
- : reason (other.reason),
- error (other.error),
- message (other.message)
- {
- }
-
- /* The assignment operator exists so that we can mark it "noexcept",
- which is a good practice for any sort of exception object. */
- gdb_exception &operator= (const gdb_exception &other) noexcept
- {
- reason = other.reason;
- error = other.error;
- message = other.message;
- return *this;
- }
-
- gdb_exception &operator= (gdb_exception &&other) noexcept = default;
-
- /* Return the contents of the exception message, as a C string. The
- string remains owned by the exception object. */
- const char *what () const noexcept
- {
- return message->c_str ();
- }
-
- enum return_reason reason;
- enum errors error;
- std::shared_ptr<std::string> message;
-};
-
-/* Functions to drive the sjlj-based exceptions state machine. Though
- declared here by necessity, these functions should be considered
- internal to the exceptions subsystem and not used other than via
- the TRY/CATCH (or TRY_SJLJ/CATCH_SJLJ) macros defined below. */
-
-extern jmp_buf *exceptions_state_mc_init (void);
-extern int exceptions_state_mc_action_iter (void);
-extern int exceptions_state_mc_action_iter_1 (void);
-extern int exceptions_state_mc_catch (struct gdb_exception *, int);
-
-/* Macro to wrap up standard try/catch behavior.
-
- The double loop lets us correctly handle code "break"ing out of the
- try catch block. (It works as the "break" only exits the inner
- "while" loop, the outer for loop detects this handling it
- correctly.) Of course "return" and "goto" are not so lucky.
-
- For instance:
-
- *INDENT-OFF*
-
- TRY_SJLJ
- {
- }
- CATCH_SJLJ (e, RETURN_MASK_ERROR)
- {
- switch (e.reason)
- {
- case RETURN_ERROR: ...
- }
- }
- END_CATCH_SJLJ
-
- The SJLJ variants are needed in some cases where gdb exceptions
- need to cross third-party library code compiled without exceptions
- support (e.g., readline). */
-
-#define TRY_SJLJ \
- { \
- jmp_buf *buf = \
- exceptions_state_mc_init (); \
- setjmp (*buf); \
- } \
- while (exceptions_state_mc_action_iter ()) \
- while (exceptions_state_mc_action_iter_1 ())
-
-#define CATCH_SJLJ(EXCEPTION, MASK) \
- { \
- struct gdb_exception EXCEPTION; \
- if (exceptions_state_mc_catch (&(EXCEPTION), MASK))
-
-#define END_CATCH_SJLJ \
- }
-
-/* The exception types client code may catch. They're just shims
- around gdb_exception that add nothing but type info. Which is used
- is selected depending on the MASK argument passed to CATCH. */
-
-struct gdb_exception_error : public gdb_exception
-{
- gdb_exception_error (enum errors e, const char *fmt, va_list ap)
- ATTRIBUTE_PRINTF (3, 0)
- : gdb_exception (RETURN_ERROR, e, fmt, ap)
- {
- }
-
- explicit gdb_exception_error (gdb_exception &&ex) noexcept
- : gdb_exception (std::move (ex))
- {
- gdb_assert (ex.reason == RETURN_ERROR);
- }
-};
-
-struct gdb_exception_quit : public gdb_exception
-{
- gdb_exception_quit (const char *fmt, va_list ap)
- ATTRIBUTE_PRINTF (2, 0)
- : gdb_exception (RETURN_QUIT, GDB_NO_ERROR, fmt, ap)
- {
- }
-
- explicit gdb_exception_quit (gdb_exception &&ex) noexcept
- : gdb_exception (std::move (ex))
- {
- gdb_assert (ex.reason == RETURN_QUIT);
- }
-};
-
-/* An exception type that inherits from both std::bad_alloc and a gdb
- exception. This is necessary because operator new can only throw
- std::bad_alloc, and OTOH, we want exceptions thrown due to memory
- allocation error to be caught by all the CATCH/RETURN_MASK_ALL
- spread around the codebase. */
-
-struct gdb_quit_bad_alloc
- : public gdb_exception_quit,
- public std::bad_alloc
-{
- explicit gdb_quit_bad_alloc (gdb_exception &&ex) noexcept
- : gdb_exception_quit (std::move (ex)),
- std::bad_alloc ()
- {
- }
-};
-
-/* *INDENT-ON* */
-
-/* Throw an exception (as described by "struct gdb_exception"),
- landing in the inner most containing exception handler established
- using TRY/CATCH. */
-extern void throw_exception (gdb_exception &&exception)
- ATTRIBUTE_NORETURN;
-
-/* Throw an exception by executing a LONG JUMP to the inner most
- containing exception handler established using TRY_SJLJ. Necessary
- in some cases where we need to throw GDB exceptions across
- third-party library code (e.g., readline). */
-extern void throw_exception_sjlj (const struct gdb_exception &exception)
- ATTRIBUTE_NORETURN;
-
-/* Convenience wrappers around throw_exception that throw GDB
- errors. */
-extern void throw_verror (enum errors, const char *fmt, va_list ap)
- ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (2, 0);
-extern void throw_vquit (const char *fmt, va_list ap)
- ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (1, 0);
-extern void throw_error (enum errors error, const char *fmt, ...)
- ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (2, 3);
-extern void throw_quit (const char *fmt, ...)
- ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (1, 2);
-
-#endif /* COMMON_COMMON_EXCEPTIONS_H */
diff --git a/gdb/gdbsupport/common-gdbthread.h b/gdb/gdbsupport/common-gdbthread.h
deleted file mode 100644
index 050ad80..0000000
--- a/gdb/gdbsupport/common-gdbthread.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/* Common multi-process/thread control defs for GDB and gdbserver.
- Copyright (C) 1987-2020 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 COMMON_COMMON_GDBTHREAD_H
-#define COMMON_COMMON_GDBTHREAD_H
-
-struct process_stratum_target;
-
-/* Switch from one thread to another. */
-extern void switch_to_thread (process_stratum_target *proc_target,
- ptid_t ptid);
-
-#endif /* COMMON_COMMON_GDBTHREAD_H */
diff --git a/gdb/gdbsupport/common-inferior.c b/gdb/gdbsupport/common-inferior.c
deleted file mode 100644
index ed16e89..0000000
--- a/gdb/gdbsupport/common-inferior.c
+++ /dev/null
@@ -1,26 +0,0 @@
-/* Functions to deal with the inferior being executed on GDB or
- GDBserver.
-
- Copyright (C) 2019-2020 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 "gdbsupport/common-defs.h"
-#include "gdbsupport/common-inferior.h"
-
-/* See common-inferior.h. */
-
-bool startup_with_shell = true;
diff --git a/gdb/gdbsupport/common-inferior.h b/gdb/gdbsupport/common-inferior.h
deleted file mode 100644
index 3c8e87a..0000000
--- a/gdb/gdbsupport/common-inferior.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/* Functions to deal with the inferior being executed on GDB or
- GDBserver.
-
- Copyright (C) 1986-2020 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 COMMON_COMMON_INFERIOR_H
-#define COMMON_COMMON_INFERIOR_H
-
-/* Return the exec wrapper to be used when starting the inferior, or NULL
- otherwise. */
-extern const char *get_exec_wrapper ();
-
-/* Return the name of the executable file as a string.
- ERR nonzero means get error if there is none specified;
- otherwise return 0 in that case. */
-extern const char *get_exec_file (int err);
-
-/* Return the inferior's current working directory. If nothing has
- been set, then return NULL. */
-extern const char *get_inferior_cwd ();
-
-/* Set the inferior current working directory. If CWD is NULL, unset
- the directory. */
-extern void set_inferior_cwd (const char *cwd);
-
-/* Whether to start up the debuggee under a shell.
-
- If startup-with-shell is set, GDB's "run" will attempt to start up
- the debuggee under a shell. This also happens when using GDBserver
- under extended remote mode.
-
- This is in order for argument-expansion to occur. E.g.,
-
- (gdb) run *
-
- The "*" gets expanded by the shell into a list of files.
-
- While this is a nice feature, it may be handy to bypass the shell
- in some cases. To disable this feature, do "set startup-with-shell
- false".
-
- The catch-exec traps expected during start-up will be one more if
- the target is started up with a shell. */
-extern bool startup_with_shell;
-
-#endif /* COMMON_COMMON_INFERIOR_H */
diff --git a/gdb/gdbsupport/common-regcache.c b/gdb/gdbsupport/common-regcache.c
deleted file mode 100644
index 86b3a36..0000000
--- a/gdb/gdbsupport/common-regcache.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/* Cache and manage the values of registers for GDB, the GNU debugger.
-
- Copyright (C) 2015-2020 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 "common-regcache.h"
-
-/* Return the register's value or throw if it's not available. */
-
-ULONGEST
-regcache_raw_get_unsigned (struct regcache *regcache, int regnum)
-{
- ULONGEST value;
- enum register_status status;
-
- status = regcache_raw_read_unsigned (regcache, regnum, &value);
- if (status == REG_UNAVAILABLE)
- throw_error (NOT_AVAILABLE_ERROR,
- _("Register %d is not available"), regnum);
- return value;
-}
diff --git a/gdb/gdbsupport/common-regcache.h b/gdb/gdbsupport/common-regcache.h
deleted file mode 100644
index 18446ff..0000000
--- a/gdb/gdbsupport/common-regcache.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/* Cache and manage the values of registers
-
- Copyright (C) 2014-2020 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 COMMON_COMMON_REGCACHE_H
-#define COMMON_COMMON_REGCACHE_H
-
-/* This header is a stopgap until we have an independent regcache. */
-
-enum register_status : signed char
- {
- /* The register value is not in the cache, and we don't know yet
- whether it's available in the target (or traceframe). */
- REG_UNKNOWN = 0,
-
- /* The register value is valid and cached. */
- REG_VALID = 1,
-
- /* The register value is unavailable. E.g., we're inspecting a
- traceframe, and this register wasn't collected. Note that this
- is different a different "unavailable" from saying the register
- does not exist in the target's architecture --- in that case,
- the target should have given us a target description that does
- not include the register in the first place. */
- REG_UNAVAILABLE = -1
- };
-
-/* Return a pointer to the register cache associated with the
- thread specified by PTID. This function must be provided by
- the client. */
-
-extern struct regcache *get_thread_regcache_for_ptid (ptid_t ptid);
-
-/* Return the size of register numbered N in REGCACHE. This function
- must be provided by the client. */
-
-extern int regcache_register_size (const struct regcache *regcache, int n);
-
-/* Read the PC register. This function must be provided by the
- client. */
-
-extern CORE_ADDR regcache_read_pc (struct regcache *regcache);
-
-/* Read a raw register into a unsigned integer. */
-extern enum register_status regcache_raw_read_unsigned
- (struct regcache *regcache, int regnum, ULONGEST *val);
-
-ULONGEST regcache_raw_get_unsigned (struct regcache *regcache, int regnum);
-
-struct reg_buffer_common
-{
- virtual ~reg_buffer_common () = default;
-
- /* Get the availability status of the value of register REGNUM in this
- buffer. */
- virtual register_status get_register_status (int regnum) const = 0;
-
- /* Supply register REGNUM, whose contents are stored in BUF, to REGCACHE. */
- virtual void raw_supply (int regnum, const void *buf) = 0;
-
- /* Collect register REGNUM from REGCACHE and store its contents in BUF. */
- virtual void raw_collect (int regnum, void *buf) const = 0;
-
- /* Compare the contents of the register stored in the regcache (ignoring the
- first OFFSET bytes) to the contents of BUF (without any offset). Returns
- true if the same. */
- virtual bool raw_compare (int regnum, const void *buf, int offset) const = 0;
-};
-
-#endif /* COMMON_COMMON_REGCACHE_H */
diff --git a/gdb/gdbsupport/common-types.h b/gdb/gdbsupport/common-types.h
deleted file mode 100644
index 61099b4..0000000
--- a/gdb/gdbsupport/common-types.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/* Declarations for common types.
-
- Copyright (C) 1986-2020 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 COMMON_COMMON_TYPES_H
-#define COMMON_COMMON_TYPES_H
-
-#ifdef GDBSERVER
-
-/* * A byte from the program being debugged. */
-typedef unsigned char gdb_byte;
-
-typedef unsigned long long CORE_ADDR;
-
-typedef long long LONGEST;
-typedef unsigned long long ULONGEST;
-
-#else /* GDBSERVER */
-
-#include "bfd.h"
-
-/* * A byte from the program being debugged. */
-typedef bfd_byte gdb_byte;
-
-/* * An address in the program being debugged. Host byte order. */
-typedef bfd_vma CORE_ADDR;
-
-/* This is to make sure that LONGEST is at least as big as CORE_ADDR. */
-
-#ifdef BFD64
-
-typedef BFD_HOST_64_BIT LONGEST;
-typedef BFD_HOST_U_64_BIT ULONGEST;
-
-#else /* No BFD64 */
-
-typedef long long LONGEST;
-typedef unsigned long long ULONGEST;
-
-#endif /* No BFD64 */
-#endif /* GDBSERVER */
-
-/* * The largest CORE_ADDR value. */
-#define CORE_ADDR_MAX (~(CORE_ADDR) 0)
-
-/* * The largest ULONGEST value. */
-#define ULONGEST_MAX (~(ULONGEST) 0)
-
-enum tribool { TRIBOOL_UNKNOWN = -1, TRIBOOL_FALSE = 0, TRIBOOL_TRUE = 1 };
-
-#endif /* COMMON_COMMON_TYPES_H */
diff --git a/gdb/gdbsupport/common-utils.c b/gdb/gdbsupport/common-utils.c
deleted file mode 100644
index ed05d61..0000000
--- a/gdb/gdbsupport/common-utils.c
+++ /dev/null
@@ -1,417 +0,0 @@
-/* Shared general utility routines for GDB, the GNU debugger.
-
- Copyright (C) 1986-2020 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 "common-utils.h"
-#include "host-defs.h"
-#include <ctype.h>
-
-void *
-xzalloc (size_t size)
-{
- return xcalloc (1, size);
-}
-
-/* Like asprintf/vasprintf but get an internal_error if the call
- fails. */
-
-char *
-xstrprintf (const char *format, ...)
-{
- char *ret;
- va_list args;
-
- va_start (args, format);
- ret = xstrvprintf (format, args);
- va_end (args);
- return ret;
-}
-
-char *
-xstrvprintf (const char *format, va_list ap)
-{
- char *ret = NULL;
- int status = vasprintf (&ret, format, ap);
-
- /* NULL is returned when there was a memory allocation problem, or
- any other error (for instance, a bad format string). A negative
- status (the printed length) with a non-NULL buffer should never
- happen, but just to be sure. */
- if (ret == NULL || status < 0)
- internal_error (__FILE__, __LINE__, _("vasprintf call failed"));
- return ret;
-}
-
-int
-xsnprintf (char *str, size_t size, const char *format, ...)
-{
- va_list args;
- int ret;
-
- va_start (args, format);
- ret = vsnprintf (str, size, format, args);
- gdb_assert (ret < size);
- va_end (args);
-
- return ret;
-}
-
-/* See documentation in common-utils.h. */
-
-std::string
-string_printf (const char* fmt, ...)
-{
- va_list vp;
- int size;
-
- va_start (vp, fmt);
- size = vsnprintf (NULL, 0, fmt, vp);
- va_end (vp);
-
- std::string str (size, '\0');
-
- /* C++11 and later guarantee std::string uses contiguous memory and
- always includes the terminating '\0'. */
- va_start (vp, fmt);
- vsprintf (&str[0], fmt, vp); /* ARI: vsprintf */
- va_end (vp);
-
- return str;
-}
-
-/* See documentation in common-utils.h. */
-
-std::string
-string_vprintf (const char* fmt, va_list args)
-{
- va_list vp;
- size_t size;
-
- va_copy (vp, args);
- size = vsnprintf (NULL, 0, fmt, vp);
- va_end (vp);
-
- std::string str (size, '\0');
-
- /* C++11 and later guarantee std::string uses contiguous memory and
- always includes the terminating '\0'. */
- vsprintf (&str[0], fmt, args); /* ARI: vsprintf */
-
- return str;
-}
-
-
-/* See documentation in common-utils.h. */
-
-void
-string_appendf (std::string &str, const char *fmt, ...)
-{
- va_list vp;
-
- va_start (vp, fmt);
- string_vappendf (str, fmt, vp);
- va_end (vp);
-}
-
-
-/* See documentation in common-utils.h. */
-
-void
-string_vappendf (std::string &str, const char *fmt, va_list args)
-{
- va_list vp;
- int grow_size;
-
- va_copy (vp, args);
- grow_size = vsnprintf (NULL, 0, fmt, vp);
- va_end (vp);
-
- size_t curr_size = str.size ();
- str.resize (curr_size + grow_size);
-
- /* C++11 and later guarantee std::string uses contiguous memory and
- always includes the terminating '\0'. */
- vsprintf (&str[curr_size], fmt, args); /* ARI: vsprintf */
-}
-
-char *
-savestring (const char *ptr, size_t len)
-{
- char *p = (char *) xmalloc (len + 1);
-
- memcpy (p, ptr, len);
- p[len] = 0;
- return p;
-}
-
-/* See documentation in common-utils.h. */
-
-std::string
-extract_string_maybe_quoted (const char **arg)
-{
- bool squote = false;
- bool dquote = false;
- bool bsquote = false;
- std::string result;
- const char *p = *arg;
-
- /* Find the start of the argument. */
- p = skip_spaces (p);
-
- /* Parse p similarly to gdb_argv buildargv function. */
- while (*p != '\0')
- {
- if (isspace (*p) && !squote && !dquote && !bsquote)
- break;
- else
- {
- if (bsquote)
- {
- bsquote = false;
- result += *p;
- }
- else if (*p == '\\')
- bsquote = true;
- else if (squote)
- {
- if (*p == '\'')
- squote = false;
- else
- result += *p;
- }
- else if (dquote)
- {
- if (*p == '"')
- dquote = false;
- else
- result += *p;
- }
- else
- {
- if (*p == '\'')
- squote = true;
- else if (*p == '"')
- dquote = true;
- else
- result += *p;
- }
- p++;
- }
- }
-
- *arg = p;
- return result;
-}
-
-/* The bit offset of the highest byte in a ULONGEST, for overflow
- checking. */
-
-#define HIGH_BYTE_POSN ((sizeof (ULONGEST) - 1) * HOST_CHAR_BIT)
-
-/* True (non-zero) iff DIGIT is a valid digit in radix BASE,
- where 2 <= BASE <= 36. */
-
-static int
-is_digit_in_base (unsigned char digit, int base)
-{
- if (!isalnum (digit))
- return 0;
- if (base <= 10)
- return (isdigit (digit) && digit < base + '0');
- else
- return (isdigit (digit) || tolower (digit) < base - 10 + 'a');
-}
-
-static int
-digit_to_int (unsigned char c)
-{
- if (isdigit (c))
- return c - '0';
- else
- return tolower (c) - 'a' + 10;
-}
-
-/* As for strtoul, but for ULONGEST results. */
-
-ULONGEST
-strtoulst (const char *num, const char **trailer, int base)
-{
- unsigned int high_part;
- ULONGEST result;
- int minus = 0;
- int i = 0;
-
- /* Skip leading whitespace. */
- while (isspace (num[i]))
- i++;
-
- /* Handle prefixes. */
- if (num[i] == '+')
- i++;
- else if (num[i] == '-')
- {
- minus = 1;
- i++;
- }
-
- if (base == 0 || base == 16)
- {
- if (num[i] == '0' && (num[i + 1] == 'x' || num[i + 1] == 'X'))
- {
- i += 2;
- if (base == 0)
- base = 16;
- }
- }
-
- if (base == 0 && num[i] == '0')
- base = 8;
-
- if (base == 0)
- base = 10;
-
- if (base < 2 || base > 36)
- {
- errno = EINVAL;
- return 0;
- }
-
- result = high_part = 0;
- for (; is_digit_in_base (num[i], base); i += 1)
- {
- result = result * base + digit_to_int (num[i]);
- high_part = high_part * base + (unsigned int) (result >> HIGH_BYTE_POSN);
- result &= ((ULONGEST) 1 << HIGH_BYTE_POSN) - 1;
- if (high_part > 0xff)
- {
- errno = ERANGE;
- result = ~ (ULONGEST) 0;
- high_part = 0;
- minus = 0;
- break;
- }
- }
-
- if (trailer != NULL)
- *trailer = &num[i];
-
- result = result + ((ULONGEST) high_part << HIGH_BYTE_POSN);
- if (minus)
- return -result;
- else
- return result;
-}
-
-/* See documentation in common-utils.h. */
-
-char *
-skip_spaces (char *chp)
-{
- if (chp == NULL)
- return NULL;
- while (*chp && isspace (*chp))
- chp++;
- return chp;
-}
-
-/* A const-correct version of the above. */
-
-const char *
-skip_spaces (const char *chp)
-{
- if (chp == NULL)
- return NULL;
- while (*chp && isspace (*chp))
- chp++;
- return chp;
-}
-
-/* See documentation in common-utils.h. */
-
-const char *
-skip_to_space (const char *chp)
-{
- if (chp == NULL)
- return NULL;
- while (*chp && !isspace (*chp))
- chp++;
- return chp;
-}
-
-/* See documentation in common-utils.h. */
-
-char *
-skip_to_space (char *chp)
-{
- return (char *) skip_to_space ((const char *) chp);
-}
-
-/* See gdbsupport/common-utils.h. */
-
-void
-free_vector_argv (std::vector<char *> &v)
-{
- for (char *el : v)
- xfree (el);
-
- v.clear ();
-}
-
-/* See gdbsupport/common-utils.h. */
-
-std::string
-stringify_argv (const std::vector<char *> &args)
-{
- std::string ret;
-
- if (!args.empty () && args[0] != NULL)
- {
- for (auto s : args)
- if (s != NULL)
- {
- ret += s;
- ret += ' ';
- }
-
- /* Erase the last whitespace. */
- ret.erase (ret.end () - 1);
- }
-
- return ret;
-}
-
-/* See gdbsupport/common-utils.h. */
-
-ULONGEST
-align_up (ULONGEST v, int n)
-{
- /* Check that N is really a power of two. */
- gdb_assert (n && (n & (n-1)) == 0);
- return (v + n - 1) & -n;
-}
-
-/* See gdbsupport/common-utils.h. */
-
-ULONGEST
-align_down (ULONGEST v, int n)
-{
- /* Check that N is really a power of two. */
- gdb_assert (n && (n & (n-1)) == 0);
- return (v & -n);
-}
diff --git a/gdb/gdbsupport/common-utils.h b/gdb/gdbsupport/common-utils.h
deleted file mode 100644
index ba03427..0000000
--- a/gdb/gdbsupport/common-utils.h
+++ /dev/null
@@ -1,202 +0,0 @@
-/* Shared general utility routines for GDB, the GNU debugger.
-
- Copyright (C) 1986-2020 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 COMMON_COMMON_UTILS_H
-#define COMMON_COMMON_UTILS_H
-
-#include <string>
-#include <vector>
-
-#include "poison.h"
-
-/* If possible, define FUNCTION_NAME, a macro containing the name of
- the function being defined. Since this macro may not always be
- defined, all uses must be protected by appropriate macro definition
- checks (Eg: "#ifdef FUNCTION_NAME").
-
- Version 2.4 and later of GCC define a magical variable `__PRETTY_FUNCTION__'
- which contains the name of the function currently being defined.
- This is broken in G++ before version 2.6.
- C9x has a similar variable called __func__, but prefer the GCC one since
- it demangles C++ function names. */
-#if (GCC_VERSION >= 2004)
-#define FUNCTION_NAME __PRETTY_FUNCTION__
-#else
-#if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
-#define FUNCTION_NAME __func__ /* ARI: func */
-#endif
-#endif
-
-#include "gdb_string_view.h"
-
-/* xmalloc(), xrealloc() and xcalloc() have already been declared in
- "libiberty.h". */
-
-/* Like xmalloc, but zero the memory. */
-void *xzalloc (size_t);
-
-template <typename T>
-static void
-xfree (T *ptr)
-{
- static_assert (IsFreeable<T>::value, "Trying to use xfree with a non-POD \
-data type. Use operator delete instead.");
-
- if (ptr != NULL)
- free (ptr); /* ARI: free */
-}
-
-
-/* Like asprintf and vasprintf, but return the string, throw an error
- if no memory. */
-char *xstrprintf (const char *format, ...) ATTRIBUTE_PRINTF (1, 2);
-char *xstrvprintf (const char *format, va_list ap)
- ATTRIBUTE_PRINTF (1, 0);
-
-/* Like snprintf, but throw an error if the output buffer is too small. */
-int xsnprintf (char *str, size_t size, const char *format, ...)
- ATTRIBUTE_PRINTF (3, 4);
-
-/* Returns a std::string built from a printf-style format string. */
-std::string string_printf (const char* fmt, ...)
- ATTRIBUTE_PRINTF (1, 2);
-
-/* Like string_printf, but takes a va_list. */
-std::string string_vprintf (const char* fmt, va_list args)
- ATTRIBUTE_PRINTF (1, 0);
-
-/* Like string_printf, but appends to DEST instead of returning a new
- std::string. */
-void string_appendf (std::string &dest, const char* fmt, ...)
- ATTRIBUTE_PRINTF (2, 3);
-
-/* Like string_appendf, but takes a va_list. */
-void string_vappendf (std::string &dest, const char* fmt, va_list args)
- ATTRIBUTE_PRINTF (2, 0);
-
-/* Make a copy of the string at PTR with LEN characters
- (and add a null character at the end in the copy).
- Uses malloc to get the space. Returns the address of the copy. */
-
-char *savestring (const char *ptr, size_t len);
-
-/* Extract the next word from ARG. The next word is defined as either,
- everything up to the next space, or, if the next word starts with either
- a single or double quote, then everything up to the closing quote. The
- enclosing quotes are not returned in the result string. The pointer in
- ARG is updated to point to the first character after the end of the
- word, or, for quoted words, the first character after the closing
- quote. */
-
-std::string extract_string_maybe_quoted (const char **arg);
-
-/* The strerror() function can return NULL for errno values that are
- out of range. Provide a "safe" version that always returns a
- printable string. This version is also thread-safe. */
-
-extern const char *safe_strerror (int);
-
-/* Return true if the start of STRING matches PATTERN, false otherwise. */
-
-static inline bool
-startswith (const char *string, const char *pattern)
-{
- return strncmp (string, pattern, strlen (pattern)) == 0;
-}
-
-/* Version of startswith that takes string_view arguments. See comment
- above. */
-
-static inline bool
-startswith (gdb::string_view string, gdb::string_view pattern)
-{
- return (string.length () >= pattern.length ()
- && strncmp (string.data (), pattern.data (), pattern.length ()) == 0);
-}
-
-ULONGEST strtoulst (const char *num, const char **trailer, int base);
-
-/* Skip leading whitespace characters in INP, returning an updated
- pointer. If INP is NULL, return NULL. */
-
-extern char *skip_spaces (char *inp);
-
-/* A const-correct version of the above. */
-
-extern const char *skip_spaces (const char *inp);
-
-/* Skip leading non-whitespace characters in INP, returning an updated
- pointer. If INP is NULL, return NULL. */
-
-extern char *skip_to_space (char *inp);
-
-/* A const-correct version of the above. */
-
-extern const char *skip_to_space (const char *inp);
-
-/* Assumes that V is an argv for a program, and iterates through
- freeing all the elements. */
-extern void free_vector_argv (std::vector<char *> &v);
-
-/* Given a vector of arguments ARGV, return a string equivalent to
- joining all the arguments with a whitespace separating them. */
-extern std::string stringify_argv (const std::vector<char *> &argv);
-
-/* Return true if VALUE is in [LOW, HIGH]. */
-
-template <typename T>
-static bool
-in_inclusive_range (T value, T low, T high)
-{
- return value >= low && value <= high;
-}
-
-/* Ensure that V is aligned to an N byte boundary (B's assumed to be a
- power of 2). Round up/down when necessary. Examples of correct
- use include:
-
- addr = align_up (addr, 8); -- VALUE needs 8 byte alignment
- write_memory (addr, value, len);
- addr += len;
-
- and:
-
- sp = align_down (sp - len, 16); -- Keep SP 16 byte aligned
- write_memory (sp, value, len);
-
- Note that uses such as:
-
- write_memory (addr, value, len);
- addr += align_up (len, 8);
-
- and:
-
- sp -= align_up (len, 8);
- write_memory (sp, value, len);
-
- are typically not correct as they don't ensure that the address (SP
- or ADDR) is correctly aligned (relying on previous alignment to
- keep things right). This is also why the methods are called
- "align_..." instead of "round_..." as the latter reads better with
- this incorrect coding style. */
-
-extern ULONGEST align_up (ULONGEST v, int n);
-extern ULONGEST align_down (ULONGEST v, int n);
-
-#endif /* COMMON_COMMON_UTILS_H */
diff --git a/gdb/gdbsupport/common.m4 b/gdb/gdbsupport/common.m4
deleted file mode 100644
index 9e15940..0000000
--- a/gdb/gdbsupport/common.m4
+++ /dev/null
@@ -1,93 +0,0 @@
-dnl Autoconf configure snippets for common.
-dnl Copyright (C) 1995-2020 Free Software Foundation, Inc.
-dnl
-dnl This file is part of GDB.
-dnl
-dnl This program is free software; you can redistribute it and/or modify
-dnl it under the terms of the GNU General Public License as published by
-dnl the Free Software Foundation; either version 3 of the License, or
-dnl (at your option) any later version.
-dnl
-dnl This program is distributed in the hope that it will be useful,
-dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
-dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-dnl GNU General Public License for more details.
-dnl
-dnl You should have received a copy of the GNU General Public License
-dnl along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-dnl Invoke configury needed by the files in 'common'.
-AC_DEFUN([GDB_AC_COMMON], [
- AC_HEADER_STDC
- AC_FUNC_ALLOCA
-
- WIN32APILIBS=
- case ${host} in
- *mingw32*)
- AC_DEFINE(USE_WIN32API, 1,
- [Define if we should use the Windows API, instead of the
- POSIX API. On Windows, we use the Windows API when
- building for MinGW, but the POSIX API when building
- for Cygwin.])
- WIN32APILIBS="-lws2_32"
- ;;
- esac
-
- dnl Note that this requires codeset.m4, which is included
- dnl by the users of common.m4.
- AM_LANGINFO_CODESET
-
- AC_CHECK_HEADERS(linux/perf_event.h locale.h memory.h signal.h dnl
- sys/resource.h sys/socket.h dnl
- sys/un.h sys/wait.h dnl
- thread_db.h wait.h dnl
- termios.h dnl
- dlfcn.h)
-
- AC_CHECK_FUNCS([fdwalk getrlimit pipe pipe2 socketpair sigaction \
- sigprocmask])
-
- AC_CHECK_DECLS([strstr])
-
- # Check for std::thread. This does not work on some platforms, like
- # mingw and DJGPP.
- AC_LANG_PUSH([C++])
- AX_PTHREAD([threads=yes], [threads=no])
- if test "$threads" = "yes"; then
- save_LIBS="$LIBS"
- LIBS="$PTHREAD_LIBS $LIBS"
- save_CXXFLAGS="$CXXFLAGS"
- CXXFLAGS="$PTHREAD_CFLAGS $save_CXXFLAGS"
- AC_CACHE_CHECK([for std::thread],
- gdb_cv_cxx_std_thread,
- [AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
- [[#include <thread>
- void callback() { }]],
- [[std::thread t(callback);]])],
- gdb_cv_cxx_std_thread=yes,
- gdb_cv_cxx_std_thread=no)])
-
- # This check must be here, while LIBS includes any necessary
- # threading library.
- AC_CHECK_FUNCS([pthread_sigmask pthread_setname_np])
-
- LIBS="$save_LIBS"
- CXXFLAGS="$save_CXXFLAGS"
- fi
- if test "$gdb_cv_cxx_std_thread" = "yes"; then
- AC_DEFINE(CXX_STD_THREAD, 1,
- [Define to 1 if std::thread works.])
- fi
- AC_LANG_POP
-
- dnl Check if sigsetjmp is available. Using AC_CHECK_FUNCS won't
- dnl do since sigsetjmp might only be defined as a macro.
- AC_CACHE_CHECK([for sigsetjmp], gdb_cv_func_sigsetjmp,
- [AC_TRY_COMPILE([
- #include <setjmp.h>
- ], [sigjmp_buf env; while (! sigsetjmp (env, 1)) siglongjmp (env, 1);],
- gdb_cv_func_sigsetjmp=yes, gdb_cv_func_sigsetjmp=no)])
- if test "$gdb_cv_func_sigsetjmp" = "yes"; then
- AC_DEFINE(HAVE_SIGSETJMP, 1, [Define if sigsetjmp is available. ])
- fi
-])
diff --git a/gdb/gdbsupport/create-version.sh b/gdb/gdbsupport/create-version.sh
deleted file mode 100755
index 81d6dbf..0000000
--- a/gdb/gdbsupport/create-version.sh
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/bin/sh
-
-# Copyright (C) 1989-2020 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/>.
-
-# Create version.c from version.in.
-# Usage:
-# create-version.sh PATH-TO-GDB-SRCDIR HOST_ALIAS \
-# TARGET_ALIAS OUTPUT-FILE-NAME
-
-srcdir="$1"
-host_alias="$2"
-target_alias="$3"
-output="$4"
-
-rm -f version.c-tmp $output version.tmp
-date=`sed -n -e 's/^.* BFD_VERSION_DATE \(.*\)$/\1/p' $srcdir/../bfd/version.h`
-sed -e "s/DATE/$date/" < $srcdir/version.in > version.tmp
-echo '#include "gdbsupport/version.h"' >> version.c-tmp
-echo 'const char version[] = "'"`sed q version.tmp`"'";' >> version.c-tmp
-echo 'const char host_name[] = "'"$host_alias"'";' >> version.c-tmp
-echo 'const char target_name[] = "'"$target_alias"'";' >> version.c-tmp
-mv version.c-tmp $output
-rm -f version.tmp
diff --git a/gdb/gdbsupport/def-vector.h b/gdb/gdbsupport/def-vector.h
deleted file mode 100644
index 8a4ff6b..0000000
--- a/gdb/gdbsupport/def-vector.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/* Copyright (C) 2017-2020 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 COMMON_DEF_VECTOR_H
-#define COMMON_DEF_VECTOR_H
-
-#include <vector>
-#include "gdbsupport/default-init-alloc.h"
-
-namespace gdb {
-
-/* A vector that uses an allocator that default constructs using
- default-initialization rather than value-initialization. The idea
- is to use this when you don't want zero-initialization of elements
- of vectors of trivial types. E.g., byte buffers. */
-
-template<typename T> using def_vector
- = std::vector<T, gdb::default_init_allocator<T>>;
-
-} /* namespace gdb */
-
-#endif /* COMMON_DEF_VECTOR_H */
diff --git a/gdb/gdbsupport/default-init-alloc.h b/gdb/gdbsupport/default-init-alloc.h
deleted file mode 100644
index 6299aa6..0000000
--- a/gdb/gdbsupport/default-init-alloc.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/* Copyright (C) 2017-2020 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 COMMON_DEFAULT_INIT_ALLOC_H
-#define COMMON_DEFAULT_INIT_ALLOC_H
-
-namespace gdb {
-
-/* An allocator that default constructs using default-initialization
- rather than value-initialization. The idea is to use this when you
- don't want to default construct elements of containers of trivial
- types using zero-initialization. */
-
-/* Mostly as implementation convenience, this is implemented as an
- adapter that given an allocator A, overrides 'A::construct()'. 'A'
- defaults to std::allocator<T>. */
-
-template<typename T, typename A = std::allocator<T>>
-class default_init_allocator : public A
-{
-public:
- /* Pull in A's ctors. */
- using A::A;
-
- /* Override rebind. */
- template<typename U>
- struct rebind
- {
- /* A couple helpers just to make it a bit more readable. */
- typedef std::allocator_traits<A> traits_;
- typedef typename traits_::template rebind_alloc<U> alloc_;
-
- /* This is what we're after. */
- typedef default_init_allocator<U, alloc_> other;
- };
-
- /* Make the base allocator's construct method(s) visible. */
- using A::construct;
-
- /* .. and provide an override/overload for the case of default
- construction (i.e., no arguments). This is where we construct
- with default-init. */
- template <typename U>
- void construct (U *ptr)
- noexcept (std::is_nothrow_default_constructible<U>::value)
- {
- ::new ((void *) ptr) U; /* default-init */
- }
-};
-
-} /* namespace gdb */
-
-#endif /* COMMON_DEFAULT_INIT_ALLOC_H */
diff --git a/gdb/gdbsupport/enum-flags.h b/gdb/gdbsupport/enum-flags.h
deleted file mode 100644
index 825ff4f..0000000
--- a/gdb/gdbsupport/enum-flags.h
+++ /dev/null
@@ -1,221 +0,0 @@
-/* Copyright (C) 2015-2020 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 COMMON_ENUM_FLAGS_H
-#define COMMON_ENUM_FLAGS_H
-
-/* Type-safe wrapper for enum flags. enum flags are enums where the
- values are bits that are meant to be ORed together.
-
- This allows writing code like the below, while with raw enums this
- would fail to compile without casts to enum type at the assignments
- to 'f':
-
- enum some_flag
- {
- flag_val1 = 1 << 1,
- flag_val2 = 1 << 2,
- flag_val3 = 1 << 3,
- flag_val4 = 1 << 4,
- };
- DEF_ENUM_FLAGS_TYPE(enum some_flag, some_flags);
-
- some_flags f = flag_val1 | flag_val2;
- f |= flag_val3;
-
- It's also possible to assign literal zero to an enum flags variable
- (meaning, no flags), dispensing adding an awkward explicit "no
- value" value to the enumeration. For example:
-
- some_flags f = 0;
- f |= flag_val3 | flag_val4;
-
- Note that literal integers other than zero fail to compile:
-
- some_flags f = 1; // error
-*/
-
-#ifdef __cplusplus
-
-/* Traits type used to prevent the global operator overloads from
- instantiating for non-flag enums. */
-template<typename T> struct enum_flags_type {};
-
-/* Use this to mark an enum as flags enum. It defines FLAGS as
- enum_flags wrapper class for ENUM, and enables the global operator
- overloads for ENUM. */
-#define DEF_ENUM_FLAGS_TYPE(enum_type, flags_type) \
- typedef enum_flags<enum_type> flags_type; \
- template<> \
- struct enum_flags_type<enum_type> \
- { \
- typedef enum_flags<enum_type> type; \
- }
-
-/* Until we can rely on std::underlying type being universally
- available (C++11), roll our own for enums. */
-template<int size, bool sign> class integer_for_size { typedef void type; };
-template<> struct integer_for_size<1, 0> { typedef uint8_t type; };
-template<> struct integer_for_size<2, 0> { typedef uint16_t type; };
-template<> struct integer_for_size<4, 0> { typedef uint32_t type; };
-template<> struct integer_for_size<8, 0> { typedef uint64_t type; };
-template<> struct integer_for_size<1, 1> { typedef int8_t type; };
-template<> struct integer_for_size<2, 1> { typedef int16_t type; };
-template<> struct integer_for_size<4, 1> { typedef int32_t type; };
-template<> struct integer_for_size<8, 1> { typedef int64_t type; };
-
-template<typename T>
-struct enum_underlying_type
-{
- typedef typename
- integer_for_size<sizeof (T), static_cast<bool>(T (-1) < T (0))>::type
- type;
-};
-
-template <typename E>
-class enum_flags
-{
-public:
- typedef E enum_type;
- typedef typename enum_underlying_type<enum_type>::type underlying_type;
-
-private:
- /* Private type used to support initializing flag types with zero:
-
- foo_flags f = 0;
-
- but not other integers:
-
- foo_flags f = 1;
-
- The way this works is that we define an implicit constructor that
- takes a pointer to this private type. Since nothing can
- instantiate an object of this type, the only possible pointer to
- pass to the constructor is the NULL pointer, or, zero. */
- struct zero_type;
-
- underlying_type
- underlying_value () const
- {
- return m_enum_value;
- }
-
-public:
- /* Allow default construction. */
- enum_flags ()
- : m_enum_value ((enum_type) 0)
- {}
-
- /* If you get an error saying these two overloads are ambiguous,
- then you tried to mix values of different enum types. */
- enum_flags (enum_type e)
- : m_enum_value (e)
- {}
- enum_flags (struct enum_flags::zero_type *zero)
- : m_enum_value ((enum_type) 0)
- {}
-
- enum_flags &operator&= (enum_type e)
- {
- m_enum_value = (enum_type) (underlying_value () & e);
- return *this;
- }
- enum_flags &operator|= (enum_type e)
- {
- m_enum_value = (enum_type) (underlying_value () | e);
- return *this;
- }
- enum_flags &operator^= (enum_type e)
- {
- m_enum_value = (enum_type) (underlying_value () ^ e);
- return *this;
- }
-
- operator enum_type () const
- {
- return m_enum_value;
- }
-
- enum_flags operator& (enum_type e) const
- {
- return (enum_type) (underlying_value () & e);
- }
- enum_flags operator| (enum_type e) const
- {
- return (enum_type) (underlying_value () | e);
- }
- enum_flags operator^ (enum_type e) const
- {
- return (enum_type) (underlying_value () ^ e);
- }
- enum_flags operator~ () const
- {
- // We only the underlying type to be unsigned when actually using
- // operator~ -- if it were not unsigned, undefined behavior could
- // result. However, asserting this in the class itself would
- // require too many unnecessary changes to otherwise ok enum
- // types.
- gdb_static_assert (std::is_unsigned<underlying_type>::value);
- return (enum_type) ~underlying_value ();
- }
-
-private:
- /* Stored as enum_type because GDB knows to print the bit flags
- neatly if the enum values look like bit flags. */
- enum_type m_enum_value;
-};
-
-/* Global operator overloads. */
-
-template <typename enum_type>
-typename enum_flags_type<enum_type>::type
-operator& (enum_type e1, enum_type e2)
-{
- return enum_flags<enum_type> (e1) & e2;
-}
-
-template <typename enum_type>
-typename enum_flags_type<enum_type>::type
-operator| (enum_type e1, enum_type e2)
-{
- return enum_flags<enum_type> (e1) | e2;
-}
-
-template <typename enum_type>
-typename enum_flags_type<enum_type>::type
-operator^ (enum_type e1, enum_type e2)
-{
- return enum_flags<enum_type> (e1) ^ e2;
-}
-
-template <typename enum_type>
-typename enum_flags_type<enum_type>::type
-operator~ (enum_type e)
-{
- return ~enum_flags<enum_type> (e);
-}
-
-#else /* __cplusplus */
-
-/* In C, the flags type is just a typedef for the enum type. */
-
-#define DEF_ENUM_FLAGS_TYPE(enum_type, flags_type) \
- typedef enum_type flags_type
-
-#endif /* __cplusplus */
-
-#endif /* COMMON_ENUM_FLAGS_H */
diff --git a/gdb/gdbsupport/environ.c b/gdb/gdbsupport/environ.c
deleted file mode 100644
index 55d0a74..0000000
--- a/gdb/gdbsupport/environ.c
+++ /dev/null
@@ -1,183 +0,0 @@
-/* environ.c -- library for manipulating environments for GNU.
-
- Copyright (C) 1986-2020 Free Software Foundation, Inc.
-
- 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 "environ.h"
-#include <algorithm>
-#include <utility>
-
-/* See gdbsupport/environ.h. */
-
-gdb_environ &
-gdb_environ::operator= (gdb_environ &&e)
-{
- /* Are we self-moving? */
- if (&e == this)
- return *this;
-
- m_environ_vector = std::move (e.m_environ_vector);
- m_user_set_env = std::move (e.m_user_set_env);
- m_user_unset_env = std::move (e.m_user_unset_env);
- e.m_environ_vector.clear ();
- e.m_environ_vector.push_back (NULL);
- e.m_user_set_env.clear ();
- e.m_user_unset_env.clear ();
- return *this;
-}
-
-/* See gdbsupport/environ.h. */
-
-gdb_environ gdb_environ::from_host_environ ()
-{
- extern char **environ;
- gdb_environ e;
-
- if (environ == NULL)
- return e;
-
- for (int i = 0; environ[i] != NULL; ++i)
- {
- /* Make sure we add the element before the last (NULL). */
- e.m_environ_vector.insert (e.m_environ_vector.end () - 1,
- xstrdup (environ[i]));
- }
-
- return e;
-}
-
-/* See gdbsupport/environ.h. */
-
-void
-gdb_environ::clear ()
-{
- for (char *v : m_environ_vector)
- xfree (v);
- m_environ_vector.clear ();
- /* Always add the NULL element. */
- m_environ_vector.push_back (NULL);
- m_user_set_env.clear ();
- m_user_unset_env.clear ();
-}
-
-/* Helper function to check if STRING contains an environment variable
- assignment of VAR, i.e., if STRING starts with 'VAR='. Return true
- if it contains, false otherwise. */
-
-static bool
-match_var_in_string (const char *string, const char *var, size_t var_len)
-{
- if (strncmp (string, var, var_len) == 0 && string[var_len] == '=')
- return true;
-
- return false;
-}
-
-/* See gdbsupport/environ.h. */
-
-const char *
-gdb_environ::get (const char *var) const
-{
- size_t len = strlen (var);
-
- for (char *el : m_environ_vector)
- if (el != NULL && match_var_in_string (el, var, len))
- return &el[len + 1];
-
- return NULL;
-}
-
-/* See gdbsupport/environ.h. */
-
-void
-gdb_environ::set (const char *var, const char *value)
-{
- char *fullvar = concat (var, "=", value, NULL);
-
- /* We have to unset the variable in the vector if it exists. */
- unset (var, false);
-
- /* Insert the element before the last one, which is always NULL. */
- m_environ_vector.insert (m_environ_vector.end () - 1, fullvar);
-
- /* Mark this environment variable as having been set by the user.
- This will be useful when we deal with setting environment
- variables on the remote target. */
- m_user_set_env.insert (std::string (fullvar));
-
- /* If this environment variable is marked as unset by the user, then
- remove it from the list, because now the user wants to set
- it. */
- m_user_unset_env.erase (std::string (var));
-}
-
-/* See gdbsupport/environ.h. */
-
-void
-gdb_environ::unset (const char *var, bool update_unset_list)
-{
- size_t len = strlen (var);
- std::vector<char *>::iterator it_env;
-
- /* We iterate until '.end () - 1' because the last element is
- always NULL. */
- for (it_env = m_environ_vector.begin ();
- it_env != m_environ_vector.end () - 1;
- ++it_env)
- if (match_var_in_string (*it_env, var, len))
- break;
-
- if (it_env != m_environ_vector.end () - 1)
- {
- m_user_set_env.erase (std::string (*it_env));
- xfree (*it_env);
-
- m_environ_vector.erase (it_env);
- }
-
- if (update_unset_list)
- m_user_unset_env.insert (std::string (var));
-}
-
-/* See gdbsupport/environ.h. */
-
-void
-gdb_environ::unset (const char *var)
-{
- unset (var, true);
-}
-
-/* See gdbsupport/environ.h. */
-
-char **
-gdb_environ::envp () const
-{
- return const_cast<char **> (&m_environ_vector[0]);
-}
-
-/* See gdbsupport/environ.h. */
-
-const std::set<std::string> &
-gdb_environ::user_set_env () const
-{
- return m_user_set_env;
-}
-
-const std::set<std::string> &
-gdb_environ::user_unset_env () const
-{
- return m_user_unset_env;
-}
diff --git a/gdb/gdbsupport/environ.h b/gdb/gdbsupport/environ.h
deleted file mode 100644
index 8794a2a..0000000
--- a/gdb/gdbsupport/environ.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/* Header for environment manipulation library.
- Copyright (C) 1989-2020 Free Software Foundation, Inc.
-
- 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 COMMON_ENVIRON_H
-#define COMMON_ENVIRON_H
-
-#include <vector>
-#include <set>
-
-/* Class that represents the environment variables as seen by the
- inferior. */
-
-class gdb_environ
-{
-public:
- /* Regular constructor and destructor. */
- gdb_environ ()
- {
- /* Make sure that the vector contains at least a NULL element.
- If/when we add more variables to it, NULL will always be the
- last element. */
- m_environ_vector.push_back (NULL);
- }
-
- ~gdb_environ ()
- {
- clear ();
- }
-
- /* Move constructor. */
- gdb_environ (gdb_environ &&e)
- : m_environ_vector (std::move (e.m_environ_vector)),
- m_user_set_env (std::move (e.m_user_set_env)),
- m_user_unset_env (std::move (e.m_user_unset_env))
- {
- /* Make sure that the moved-from vector is left at a valid
- state (only one NULL element). */
- e.m_environ_vector.clear ();
- e.m_environ_vector.push_back (NULL);
- e.m_user_set_env.clear ();
- e.m_user_unset_env.clear ();
- }
-
- /* Move assignment. */
- gdb_environ &operator= (gdb_environ &&e);
-
- /* Create a gdb_environ object using the host's environment
- variables. */
- static gdb_environ from_host_environ ();
-
- /* Clear the environment variables stored in the object. */
- void clear ();
-
- /* Return the value in the environment for the variable VAR. The
- returned pointer is only valid as long as the gdb_environ object
- is not modified. */
- const char *get (const char *var) const;
-
- /* Store VAR=VALUE in the environment. */
- void set (const char *var, const char *value);
-
- /* Unset VAR in environment. */
- void unset (const char *var);
-
- /* Return the environment vector represented as a 'char **'. */
- char **envp () const;
-
- /* Return the user-set environment vector. */
- const std::set<std::string> &user_set_env () const;
-
- /* Return the user-unset environment vector. */
- const std::set<std::string> &user_unset_env () const;
-
-private:
- /* Unset VAR in environment. If UPDATE_UNSET_LIST is true, then
- also update M_USER_UNSET_ENV to reflect the unsetting of the
- environment variable. */
- void unset (const char *var, bool update_unset_list);
-
- /* A vector containing the environment variables. */
- std::vector<char *> m_environ_vector;
-
- /* The environment variables explicitly set by the user. */
- std::set<std::string> m_user_set_env;
-
- /* The environment variables explicitly unset by the user. */
- std::set<std::string> m_user_unset_env;
-};
-
-#endif /* COMMON_ENVIRON_H */
diff --git a/gdb/gdbsupport/errors.c b/gdb/gdbsupport/errors.c
deleted file mode 100644
index 3fcac79..0000000
--- a/gdb/gdbsupport/errors.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/* Error reporting facilities.
-
- Copyright (C) 1986-2020 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 "errors.h"
-
-/* See gdbsupport/errors.h. */
-
-void
-warning (const char *fmt, ...)
-{
- va_list ap;
-
- va_start (ap, fmt);
- vwarning (fmt, ap);
- va_end (ap);
-}
-
-/* See gdbsupport/errors.h. */
-
-void
-error (const char *fmt, ...)
-{
- va_list ap;
-
- va_start (ap, fmt);
- verror (fmt, ap);
- va_end (ap);
-}
-
-/* See gdbsupport/errors.h. */
-
-void
-internal_error (const char *file, int line, const char *fmt, ...)
-{
- va_list ap;
-
- va_start (ap, fmt);
- internal_verror (file, line, fmt, ap);
- va_end (ap);
-}
-
-/* See gdbsupport/errors.h. */
-
-void
-internal_warning (const char *file, int line, const char *fmt, ...)
-{
- va_list ap;
-
- va_start (ap, fmt);
- internal_vwarning (file, line, fmt, ap);
- va_end (ap);
-}
diff --git a/gdb/gdbsupport/errors.h b/gdb/gdbsupport/errors.h
deleted file mode 100644
index da13482..0000000
--- a/gdb/gdbsupport/errors.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/* Declarations for error-reporting facilities.
-
- Copyright (C) 1986-2020 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 COMMON_ERRORS_H
-#define COMMON_ERRORS_H
-
-/* A problem was detected, but the requested operation can still
- proceed. A warning message is constructed using a printf- or
- vprintf-style argument list. The function "vwarning" must be
- provided by the client. */
-
-extern void warning (const char *fmt, ...)
- ATTRIBUTE_PRINTF (1, 2);
-
-extern void vwarning (const char *fmt, va_list args)
- ATTRIBUTE_PRINTF (1, 0);
-
-/* A non-predictable, non-fatal error was detected. The requested
- operation cannot proceed. An error message is constructed using
- a printf- or vprintf-style argument list. These functions do not
- return. The function "verror" must be provided by the client. */
-
-extern void error (const char *fmt, ...)
- ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (1, 2);
-
-extern void verror (const char *fmt, va_list args)
- ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (1, 0);
-
-/* An internal error was detected. Internal errors indicate
- programming errors such as assertion failures, as opposed to
- more general errors beyond the application's control. These
- functions do not return. An error message is constructed using
- a printf- or vprintf-style argument list. FILE and LINE
- indicate the file and line number where the programming error
- was detected. The function "internal_verror" must be provided
- by the client. */
-
-extern void internal_error (const char *file, int line,
- const char *fmt, ...)
- ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (3, 4);
-
-extern void internal_verror (const char *file, int line,
- const char *fmt, va_list args)
- ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (3, 0);
-
-/* An internal problem was detected, but the requested operation can
- still proceed. Internal warnings indicate programming errors as
- opposed to more general issues beyond the application's control.
- A warning message is constructed using a printf- or vprintf-style
- argument list. The function "internal_vwarning" must be provided
- by the client. */
-
-extern void internal_warning (const char *file, int line,
- const char *fmt, ...)
- ATTRIBUTE_PRINTF (3, 4);
-
-extern void internal_vwarning (const char *file, int line,
- const char *fmt, va_list args)
- ATTRIBUTE_PRINTF (3, 0);
-
-
-/* Like "error", but the error message is constructed by combining
- STRING with the system error message for errno. This function does
- not return. This function must be provided by the client. */
-
-extern void perror_with_name (const char *string) ATTRIBUTE_NORETURN;
-
-/* Call this function to handle memory allocation failures. This
- function does not return. This function must be provided by the
- client. */
-
-extern void malloc_failure (long size) ATTRIBUTE_NORETURN;
-
-#endif /* COMMON_ERRORS_H */
diff --git a/gdb/gdbsupport/fileio.c b/gdb/gdbsupport/fileio.c
deleted file mode 100644
index 69ed426..0000000
--- a/gdb/gdbsupport/fileio.c
+++ /dev/null
@@ -1,255 +0,0 @@
-/* File-I/O functions for GDB, the GNU debugger.
-
- Copyright (C) 2003-2020 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 "fileio.h"
-#include <sys/stat.h>
-#include <fcntl.h>
-
-/* See fileio.h. */
-
-int
-host_to_fileio_error (int error)
-{
- switch (error)
- {
- case EPERM:
- return FILEIO_EPERM;
- case ENOENT:
- return FILEIO_ENOENT;
- case EINTR:
- return FILEIO_EINTR;
- case EIO:
- return FILEIO_EIO;
- case EBADF:
- return FILEIO_EBADF;
- case EACCES:
- return FILEIO_EACCES;
- case EFAULT:
- return FILEIO_EFAULT;
- case EBUSY:
- return FILEIO_EBUSY;
- case EEXIST:
- return FILEIO_EEXIST;
- case ENODEV:
- return FILEIO_ENODEV;
- case ENOTDIR:
- return FILEIO_ENOTDIR;
- case EISDIR:
- return FILEIO_EISDIR;
- case EINVAL:
- return FILEIO_EINVAL;
- case ENFILE:
- return FILEIO_ENFILE;
- case EMFILE:
- return FILEIO_EMFILE;
- case EFBIG:
- return FILEIO_EFBIG;
- case ENOSPC:
- return FILEIO_ENOSPC;
- case ESPIPE:
- return FILEIO_ESPIPE;
- case EROFS:
- return FILEIO_EROFS;
- case ENOSYS:
- return FILEIO_ENOSYS;
- case ENAMETOOLONG:
- return FILEIO_ENAMETOOLONG;
- }
- return FILEIO_EUNKNOWN;
-}
-
-/* See fileio.h. */
-
-int
-fileio_to_host_openflags (int fileio_open_flags, int *open_flags_p)
-{
- int open_flags = 0;
-
- if (fileio_open_flags & ~FILEIO_O_SUPPORTED)
- return -1;
-
- if (fileio_open_flags & FILEIO_O_CREAT)
- open_flags |= O_CREAT;
- if (fileio_open_flags & FILEIO_O_EXCL)
- open_flags |= O_EXCL;
- if (fileio_open_flags & FILEIO_O_TRUNC)
- open_flags |= O_TRUNC;
- if (fileio_open_flags & FILEIO_O_APPEND)
- open_flags |= O_APPEND;
- if (fileio_open_flags & FILEIO_O_RDONLY)
- open_flags |= O_RDONLY;
- if (fileio_open_flags & FILEIO_O_WRONLY)
- open_flags |= O_WRONLY;
- if (fileio_open_flags & FILEIO_O_RDWR)
- open_flags |= O_RDWR;
- /* On systems supporting binary and text mode, always open files
- in binary mode. */
-#ifdef O_BINARY
- open_flags |= O_BINARY;
-#endif
-
- *open_flags_p = open_flags;
- return 0;
-}
-
-/* See fileio.h. */
-
-int
-fileio_to_host_mode (int fileio_mode, mode_t *mode_p)
-{
- mode_t mode = 0;
-
- if (fileio_mode & ~FILEIO_S_SUPPORTED)
- return -1;
-
- if (fileio_mode & FILEIO_S_IFREG)
- mode |= S_IFREG;
- if (fileio_mode & FILEIO_S_IFDIR)
- mode |= S_IFDIR;
- if (fileio_mode & FILEIO_S_IFCHR)
- mode |= S_IFCHR;
- if (fileio_mode & FILEIO_S_IRUSR)
- mode |= S_IRUSR;
- if (fileio_mode & FILEIO_S_IWUSR)
- mode |= S_IWUSR;
- if (fileio_mode & FILEIO_S_IXUSR)
- mode |= S_IXUSR;
-#ifdef S_IRGRP
- if (fileio_mode & FILEIO_S_IRGRP)
- mode |= S_IRGRP;
-#endif
-#ifdef S_IWGRP
- if (fileio_mode & FILEIO_S_IWGRP)
- mode |= S_IWGRP;
-#endif
-#ifdef S_IXGRP
- if (fileio_mode & FILEIO_S_IXGRP)
- mode |= S_IXGRP;
-#endif
- if (fileio_mode & FILEIO_S_IROTH)
- mode |= S_IROTH;
-#ifdef S_IWOTH
- if (fileio_mode & FILEIO_S_IWOTH)
- mode |= S_IWOTH;
-#endif
-#ifdef S_IXOTH
- if (fileio_mode & FILEIO_S_IXOTH)
- mode |= S_IXOTH;
-#endif
-
- *mode_p = mode;
- return 0;
-}
-
-/* Convert a host-format mode_t into a bitmask of File-I/O flags. */
-
-static LONGEST
-fileio_mode_pack (mode_t mode)
-{
- mode_t tmode = 0;
-
- if (S_ISREG (mode))
- tmode |= FILEIO_S_IFREG;
- if (S_ISDIR (mode))
- tmode |= FILEIO_S_IFDIR;
- if (S_ISCHR (mode))
- tmode |= FILEIO_S_IFCHR;
- if (mode & S_IRUSR)
- tmode |= FILEIO_S_IRUSR;
- if (mode & S_IWUSR)
- tmode |= FILEIO_S_IWUSR;
- if (mode & S_IXUSR)
- tmode |= FILEIO_S_IXUSR;
-#ifdef S_IRGRP
- if (mode & S_IRGRP)
- tmode |= FILEIO_S_IRGRP;
-#endif
-#ifdef S_IWGRP
- if (mode & S_IWGRP)
- tmode |= FILEIO_S_IWGRP;
-#endif
-#ifdef S_IXGRP
- if (mode & S_IXGRP)
- tmode |= FILEIO_S_IXGRP;
-#endif
- if (mode & S_IROTH)
- tmode |= FILEIO_S_IROTH;
-#ifdef S_IWOTH
- if (mode & S_IWOTH)
- tmode |= FILEIO_S_IWOTH;
-#endif
-#ifdef S_IXOTH
- if (mode & S_IXOTH)
- tmode |= FILEIO_S_IXOTH;
-#endif
- return tmode;
-}
-
-/* Pack a host-format mode_t into an fio_mode_t. */
-
-static void
-host_to_fileio_mode (mode_t num, fio_mode_t fnum)
-{
- host_to_bigendian (fileio_mode_pack (num), (char *) fnum, 4);
-}
-
-/* Pack a host-format integer into an fio_ulong_t. */
-
-static void
-host_to_fileio_ulong (LONGEST num, fio_ulong_t fnum)
-{
- host_to_bigendian (num, (char *) fnum, 8);
-}
-
-/* See fileio.h. */
-
-void
-host_to_fileio_stat (struct stat *st, struct fio_stat *fst)
-{
- LONGEST blksize;
-
- host_to_fileio_uint ((long) st->st_dev, fst->fst_dev);
- host_to_fileio_uint ((long) st->st_ino, fst->fst_ino);
- host_to_fileio_mode (st->st_mode, fst->fst_mode);
- host_to_fileio_uint ((long) st->st_nlink, fst->fst_nlink);
- host_to_fileio_uint ((long) st->st_uid, fst->fst_uid);
- host_to_fileio_uint ((long) st->st_gid, fst->fst_gid);
- host_to_fileio_uint ((long) st->st_rdev, fst->fst_rdev);
- host_to_fileio_ulong ((LONGEST) st->st_size, fst->fst_size);
-#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE
- blksize = st->st_blksize;
-#else
- blksize = 512;
-#endif
- host_to_fileio_ulong (blksize, fst->fst_blksize);
-#if HAVE_STRUCT_STAT_ST_BLOCKS
- host_to_fileio_ulong ((LONGEST) st->st_blocks, fst->fst_blocks);
-#else
- /* FIXME: This is correct for DJGPP, but other systems that don't
- have st_blocks, if any, might prefer 512 instead of st_blksize.
- (eliz, 30-12-2003) */
- host_to_fileio_ulong (((LONGEST) st->st_size + blksize - 1)
- / blksize,
- fst->fst_blocks);
-#endif
- host_to_fileio_time (st->st_atime, fst->fst_atime);
- host_to_fileio_time (st->st_mtime, fst->fst_mtime);
- host_to_fileio_time (st->st_ctime, fst->fst_ctime);
-}
diff --git a/gdb/gdbsupport/fileio.h b/gdb/gdbsupport/fileio.h
deleted file mode 100644
index 9d33e46..0000000
--- a/gdb/gdbsupport/fileio.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/* File-I/O functions for GDB, the GNU debugger.
-
- Copyright (C) 2003-2020 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 COMMON_FILEIO_H
-#define COMMON_FILEIO_H
-
-#include "gdb/fileio.h"
-#include <sys/stat.h>
-
-/* Convert a host-format errno value to a File-I/O error number. */
-
-extern int host_to_fileio_error (int error);
-
-/* Convert File-I/O open flags FFLAGS to host format, storing
- the result in *FLAGS. Return 0 on success, -1 on error. */
-
-extern int fileio_to_host_openflags (int fflags, int *flags);
-
-/* Convert File-I/O mode FMODE to host format, storing
- the result in *MODE. Return 0 on success, -1 on error. */
-
-extern int fileio_to_host_mode (int fmode, mode_t *mode);
-
-/* Pack a host-format integer into a byte buffer in big-endian
- format. BYTES specifies the size of the integer to pack in
- bytes. */
-
-static inline void
-host_to_bigendian (LONGEST num, char *buf, int bytes)
-{
- int i;
-
- for (i = 0; i < bytes; ++i)
- buf[i] = (num >> (8 * (bytes - i - 1))) & 0xff;
-}
-
-/* Pack a host-format integer into an fio_uint_t. */
-
-static inline void
-host_to_fileio_uint (long num, fio_uint_t fnum)
-{
- host_to_bigendian ((LONGEST) num, (char *) fnum, 4);
-}
-
-/* Pack a host-format time_t into an fio_time_t. */
-
-static inline void
-host_to_fileio_time (time_t num, fio_time_t fnum)
-{
- host_to_bigendian ((LONGEST) num, (char *) fnum, 4);
-}
-
-/* Pack a host-format struct stat into a struct fio_stat. */
-
-extern void host_to_fileio_stat (struct stat *st, struct fio_stat *fst);
-
-#endif /* COMMON_FILEIO_H */
diff --git a/gdb/gdbsupport/filestuff.c b/gdb/gdbsupport/filestuff.c
deleted file mode 100644
index 179c425..0000000
--- a/gdb/gdbsupport/filestuff.c
+++ /dev/null
@@ -1,503 +0,0 @@
-/* Low-level file-handling.
- Copyright (C) 2012-2020 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 "filestuff.h"
-#include "gdb_vecs.h"
-#include <fcntl.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <algorithm>
-
-#ifdef USE_WIN32API
-#include <winsock2.h>
-#include <windows.h>
-#define HAVE_SOCKETS 1
-#elif defined HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-/* Define HAVE_F_GETFD if we plan to use F_GETFD. */
-#define HAVE_F_GETFD F_GETFD
-#define HAVE_SOCKETS 1
-#endif
-
-#ifdef HAVE_KINFO_GETFILE
-#include <sys/user.h>
-#include <libutil.h>
-#endif
-
-#ifdef HAVE_SYS_RESOURCE_H
-#include <sys/resource.h>
-#endif /* HAVE_SYS_RESOURCE_H */
-
-#ifndef O_CLOEXEC
-#define O_CLOEXEC 0
-#endif
-
-#ifndef O_NOINHERIT
-#define O_NOINHERIT 0
-#endif
-
-#ifndef SOCK_CLOEXEC
-#define SOCK_CLOEXEC 0
-#endif
-
-
-
-#ifndef HAVE_FDWALK
-
-#include <dirent.h>
-
-/* Replacement for fdwalk, if the system doesn't define it. Walks all
- open file descriptors (though this implementation may walk closed
- ones as well, depending on the host platform's capabilities) and
- call FUNC with ARG. If FUNC returns non-zero, stops immediately
- and returns the same value. Otherwise, returns zero when
- finished. */
-
-static int
-fdwalk (int (*func) (void *, int), void *arg)
-{
- /* Checking __linux__ isn't great but it isn't clear what would be
- better. There doesn't seem to be a good way to check for this in
- configure. */
-#ifdef __linux__
- DIR *dir;
-
- dir = opendir ("/proc/self/fd");
- if (dir != NULL)
- {
- struct dirent *entry;
- int result = 0;
-
- for (entry = readdir (dir); entry != NULL; entry = readdir (dir))
- {
- long fd;
- char *tail;
-
- errno = 0;
- fd = strtol (entry->d_name, &tail, 10);
- if (*tail != '\0' || errno != 0)
- continue;
- if ((int) fd != fd)
- {
- /* What can we do here really? */
- continue;
- }
-
- if (fd == dirfd (dir))
- continue;
-
- result = func (arg, fd);
- if (result != 0)
- break;
- }
-
- closedir (dir);
- return result;
- }
- /* We may fall through to the next case. */
-#endif
-#ifdef HAVE_KINFO_GETFILE
- int nfd;
- gdb::unique_xmalloc_ptr<struct kinfo_file[]> fdtbl
- (kinfo_getfile (getpid (), &nfd));
- if (fdtbl != NULL)
- {
- for (int i = 0; i < nfd; i++)
- {
- if (fdtbl[i].kf_fd >= 0)
- {
- int result = func (arg, fdtbl[i].kf_fd);
- if (result != 0)
- return result;
- }
- }
- return 0;
- }
- /* We may fall through to the next case. */
-#endif
-
- {
- int max, fd;
-
-#if defined(HAVE_GETRLIMIT) && defined(RLIMIT_NOFILE)
- struct rlimit rlim;
-
- if (getrlimit (RLIMIT_NOFILE, &rlim) == 0 && rlim.rlim_max != RLIM_INFINITY)
- max = rlim.rlim_max;
- else
-#endif
- {
-#ifdef _SC_OPEN_MAX
- max = sysconf (_SC_OPEN_MAX);
-#else
- /* Whoops. */
- return 0;
-#endif /* _SC_OPEN_MAX */
- }
-
- for (fd = 0; fd < max; ++fd)
- {
- struct stat sb;
- int result;
-
- /* Only call FUNC for open fds. */
- if (fstat (fd, &sb) == -1)
- continue;
-
- result = func (arg, fd);
- if (result != 0)
- return result;
- }
-
- return 0;
- }
-}
-
-#endif /* HAVE_FDWALK */
-
-
-
-/* A vector holding all the fds open when notice_open_fds was called. We
- don't use a hashtab because we don't expect there to be many open fds. */
-
-static std::vector<int> open_fds;
-
-/* An fdwalk callback function used by notice_open_fds. It puts the
- given file descriptor into the vec. */
-
-static int
-do_mark_open_fd (void *ignore, int fd)
-{
- open_fds.push_back (fd);
- return 0;
-}
-
-/* See filestuff.h. */
-
-void
-notice_open_fds (void)
-{
- fdwalk (do_mark_open_fd, NULL);
-}
-
-/* See filestuff.h. */
-
-void
-mark_fd_no_cloexec (int fd)
-{
- do_mark_open_fd (NULL, fd);
-}
-
-/* See filestuff.h. */
-
-void
-unmark_fd_no_cloexec (int fd)
-{
- auto it = std::remove (open_fds.begin (), open_fds.end (), fd);
-
- if (it != open_fds.end ())
- open_fds.erase (it);
- else
- gdb_assert_not_reached (_("fd not found in open_fds"));
-}
-
-/* Helper function for close_most_fds that closes the file descriptor
- if appropriate. */
-
-static int
-do_close (void *ignore, int fd)
-{
- for (int val : open_fds)
- {
- if (fd == val)
- {
- /* Keep this one open. */
- return 0;
- }
- }
-
- close (fd);
- return 0;
-}
-
-/* See filestuff.h. */
-
-void
-close_most_fds (void)
-{
- fdwalk (do_close, NULL);
-}
-
-
-
-/* This is a tri-state flag. When zero it means we haven't yet tried
- O_CLOEXEC. When positive it means that O_CLOEXEC works on this
- host. When negative, it means that O_CLOEXEC doesn't work. We
- track this state because, while gdb might have been compiled
- against a libc that supplies O_CLOEXEC, there is no guarantee that
- the kernel supports it. */
-
-static int trust_o_cloexec;
-
-/* Mark FD as close-on-exec, ignoring errors. Update
- TRUST_O_CLOEXEC. */
-
-static void
-mark_cloexec (int fd)
-{
-#ifdef HAVE_F_GETFD
- int old = fcntl (fd, F_GETFD, 0);
-
- if (old != -1)
- {
- fcntl (fd, F_SETFD, old | FD_CLOEXEC);
-
- if (trust_o_cloexec == 0)
- {
- if ((old & FD_CLOEXEC) != 0)
- trust_o_cloexec = 1;
- else
- trust_o_cloexec = -1;
- }
- }
-#endif /* HAVE_F_GETFD */
-}
-
-/* Depending on TRUST_O_CLOEXEC, mark FD as close-on-exec. */
-
-static void
-maybe_mark_cloexec (int fd)
-{
- if (trust_o_cloexec <= 0)
- mark_cloexec (fd);
-}
-
-#ifdef HAVE_SOCKETS
-
-/* Like maybe_mark_cloexec, but for callers that use SOCK_CLOEXEC. */
-
-static void
-socket_mark_cloexec (int fd)
-{
- if (SOCK_CLOEXEC == 0 || trust_o_cloexec <= 0)
- mark_cloexec (fd);
-}
-
-#endif
-
-
-
-/* See filestuff.h. */
-
-int
-gdb_open_cloexec (const char *filename, int flags, unsigned long mode)
-{
- int fd = open (filename, flags | O_CLOEXEC, mode);
-
- if (fd >= 0)
- maybe_mark_cloexec (fd);
-
- return fd;
-}
-
-/* See filestuff.h. */
-
-gdb_file_up
-gdb_fopen_cloexec (const char *filename, const char *opentype)
-{
- FILE *result;
- /* Probe for "e" support once. But, if we can tell the operating
- system doesn't know about close on exec mode "e" without probing,
- skip it. E.g., the Windows runtime issues an "Invalid parameter
- passed to C runtime function" OutputDebugString warning for
- unknown modes. Assume that if O_CLOEXEC is zero, then "e" isn't
- supported. On MinGW, O_CLOEXEC is an alias of O_NOINHERIT, and
- "e" isn't supported. */
- static int fopen_e_ever_failed_einval =
- O_CLOEXEC == 0 || O_CLOEXEC == O_NOINHERIT;
-
- if (!fopen_e_ever_failed_einval)
- {
- char *copy;
-
- copy = (char *) alloca (strlen (opentype) + 2);
- strcpy (copy, opentype);
- /* This is a glibc extension but we try it unconditionally on
- this path. */
- strcat (copy, "e");
- result = fopen (filename, copy);
-
- if (result == NULL && errno == EINVAL)
- {
- result = fopen (filename, opentype);
- if (result != NULL)
- fopen_e_ever_failed_einval = 1;
- }
- }
- else
- result = fopen (filename, opentype);
-
- if (result != NULL)
- maybe_mark_cloexec (fileno (result));
-
- return gdb_file_up (result);
-}
-
-#ifdef HAVE_SOCKETS
-/* See filestuff.h. */
-
-int
-gdb_socketpair_cloexec (int domain, int style, int protocol,
- int filedes[2])
-{
-#ifdef HAVE_SOCKETPAIR
- int result = socketpair (domain, style | SOCK_CLOEXEC, protocol, filedes);
-
- if (result != -1)
- {
- socket_mark_cloexec (filedes[0]);
- socket_mark_cloexec (filedes[1]);
- }
-
- return result;
-#else
- gdb_assert_not_reached (_("socketpair not available on this host"));
-#endif
-}
-
-/* See filestuff.h. */
-
-int
-gdb_socket_cloexec (int domain, int style, int protocol)
-{
- int result = socket (domain, style | SOCK_CLOEXEC, protocol);
-
- if (result != -1)
- socket_mark_cloexec (result);
-
- return result;
-}
-#endif
-
-/* See filestuff.h. */
-
-int
-gdb_pipe_cloexec (int filedes[2])
-{
- int result;
-
-#ifdef HAVE_PIPE2
- result = pipe2 (filedes, O_CLOEXEC);
- if (result != -1)
- {
- maybe_mark_cloexec (filedes[0]);
- maybe_mark_cloexec (filedes[1]);
- }
-#else
-#ifdef HAVE_PIPE
- result = pipe (filedes);
- if (result != -1)
- {
- mark_cloexec (filedes[0]);
- mark_cloexec (filedes[1]);
- }
-#else /* HAVE_PIPE */
- gdb_assert_not_reached (_("pipe not available on this host"));
-#endif /* HAVE_PIPE */
-#endif /* HAVE_PIPE2 */
-
- return result;
-}
-
-/* See gdbsupport/filestuff.h. */
-
-bool
-is_regular_file (const char *name, int *errno_ptr)
-{
- struct stat st;
- const int status = stat (name, &st);
-
- /* Stat should never fail except when the file does not exist.
- If stat fails, analyze the source of error and return true
- unless the file does not exist, to avoid returning false results
- on obscure systems where stat does not work as expected. */
-
- if (status != 0)
- {
- if (errno != ENOENT)
- return true;
- *errno_ptr = ENOENT;
- return false;
- }
-
- if (S_ISREG (st.st_mode))
- return true;
-
- if (S_ISDIR (st.st_mode))
- *errno_ptr = EISDIR;
- else
- *errno_ptr = EINVAL;
- return false;
-}
-
-/* See gdbsupport/filestuff.h. */
-
-bool
-mkdir_recursive (const char *dir)
-{
- auto holder = make_unique_xstrdup (dir);
- char * const start = holder.get ();
- char *component_start = start;
- char *component_end = start;
-
- while (1)
- {
- /* Find the beginning of the next component. */
- while (*component_start == '/')
- component_start++;
-
- /* Are we done? */
- if (*component_start == '\0')
- return true;
-
- /* Find the slash or null-terminator after this component. */
- component_end = component_start;
- while (*component_end != '/' && *component_end != '\0')
- component_end++;
-
- /* Temporarily replace the slash with a null terminator, so we can create
- the directory up to this component. */
- char saved_char = *component_end;
- *component_end = '\0';
-
- /* If we get EEXIST and the existing path is a directory, then we're
- happy. If it exists, but it's a regular file and this is not the last
- component, we'll fail at the next component. If this is the last
- component, the caller will fail with ENOTDIR when trying to
- open/create a file under that path. */
- if (mkdir (start, 0700) != 0)
- if (errno != EEXIST)
- return false;
-
- /* Restore the overwritten char. */
- *component_end = saved_char;
- component_start = component_end;
- }
-}
diff --git a/gdb/gdbsupport/filestuff.h b/gdb/gdbsupport/filestuff.h
deleted file mode 100644
index e36936a..0000000
--- a/gdb/gdbsupport/filestuff.h
+++ /dev/null
@@ -1,142 +0,0 @@
-/* Low-level file-handling.
- Copyright (C) 2012-2020 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 COMMON_FILESTUFF_H
-#define COMMON_FILESTUFF_H
-
-#include <dirent.h>
-#include <fcntl.h>
-
-/* Note all the file descriptors which are open when this is called.
- These file descriptors will not be closed by close_most_fds. */
-
-extern void notice_open_fds (void);
-
-/* Mark a file descriptor as inheritable across an exec. */
-
-extern void mark_fd_no_cloexec (int fd);
-
-/* Mark a file descriptor as no longer being inheritable across an
- exec. This is only meaningful when FD was previously passed to
- mark_fd_no_cloexec. */
-
-extern void unmark_fd_no_cloexec (int fd);
-
-/* Close all open file descriptors other than those marked by
- 'notice_open_fds', and stdin, stdout, and stderr. Errors that
- occur while closing are ignored. */
-
-extern void close_most_fds (void);
-
-/* Like 'open', but ensures that the returned file descriptor has the
- close-on-exec flag set. */
-
-extern int gdb_open_cloexec (const char *filename, int flags,
- /* mode_t */ unsigned long mode);
-
-/* Like mkstemp, but ensures that the file descriptor is
- close-on-exec. */
-
-static inline int
-gdb_mkostemp_cloexec (char *name_template, int flags = 0)
-{
- /* gnulib provides a mkostemp replacement if needed. */
- return mkostemp (name_template, flags | O_CLOEXEC);
-}
-
-/* Convenience wrapper for the above, which takes the filename as an
- std::string. */
-
-static inline int
-gdb_open_cloexec (const std::string &filename, int flags,
- /* mode_t */ unsigned long mode)
-{
- return gdb_open_cloexec (filename.c_str (), flags, mode);
-}
-
-struct gdb_file_deleter
-{
- void operator() (FILE *file) const
- {
- fclose (file);
- }
-};
-
-/* A unique pointer to a FILE. */
-
-typedef std::unique_ptr<FILE, gdb_file_deleter> gdb_file_up;
-
-/* Like 'fopen', but ensures that the returned file descriptor has the
- close-on-exec flag set. */
-
-extern gdb_file_up gdb_fopen_cloexec (const char *filename,
- const char *opentype);
-
-/* Convenience wrapper for the above, which takes the filename as an
- std::string. */
-
-static inline gdb_file_up
-gdb_fopen_cloexec (const std::string &filename, const char *opentype)
-{
- return gdb_fopen_cloexec (filename.c_str (), opentype);
-}
-
-/* Like 'socketpair', but ensures that the returned file descriptors
- have the close-on-exec flag set. */
-
-extern int gdb_socketpair_cloexec (int domain, int style, int protocol,
- int filedes[2]);
-
-/* Like 'socket', but ensures that the returned file descriptor has
- the close-on-exec flag set. */
-
-extern int gdb_socket_cloexec (int domain, int style, int protocol);
-
-/* Like 'pipe', but ensures that the returned file descriptors have
- the close-on-exec flag set. */
-
-extern int gdb_pipe_cloexec (int filedes[2]);
-
-struct gdb_dir_deleter
-{
- void operator() (DIR *dir) const
- {
- closedir (dir);
- }
-};
-
-/* A unique pointer to a DIR. */
-
-typedef std::unique_ptr<DIR, gdb_dir_deleter> gdb_dir_up;
-
-/* Return true if the file NAME exists and is a regular file.
- If the result is false then *ERRNO_PTR is set to a useful value assuming
- we're expecting a regular file. */
-extern bool is_regular_file (const char *name, int *errno_ptr);
-
-
-/* A cheap (as in low-quality) recursive mkdir. Try to create all the
- parents directories up to DIR and DIR itself. Stop if we hit an
- error along the way. There is no attempt to remove created
- directories in case of failure.
-
- Returns false on failure and sets errno. */
-
-extern bool mkdir_recursive (const char *dir);
-
-#endif /* COMMON_FILESTUFF_H */
diff --git a/gdb/gdbsupport/filtered-iterator.h b/gdb/gdbsupport/filtered-iterator.h
deleted file mode 100644
index c3aeb44..0000000
--- a/gdb/gdbsupport/filtered-iterator.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/* A forward filtered iterator for GDB, the GNU debugger.
- Copyright (C) 2018-2020 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 COMMON_FILTERED_ITERATOR_H
-#define COMMON_FILTERED_ITERATOR_H
-
-/* A filtered iterator. This wraps BaseIterator and automatically
- skips elements that FilterFunc filters out. Requires that
- default-constructing a BaseIterator creates a valid one-past-end
- iterator. */
-
-template<typename BaseIterator, typename FilterFunc>
-class filtered_iterator
-{
-public:
- typedef filtered_iterator self_type;
- typedef typename BaseIterator::value_type value_type;
- typedef typename BaseIterator::reference reference;
- typedef typename BaseIterator::pointer pointer;
- typedef typename BaseIterator::iterator_category iterator_category;
- typedef typename BaseIterator::difference_type difference_type;
-
- /* Construct by forwarding all arguments to the underlying
- iterator. */
- template<typename... Args>
- explicit filtered_iterator (Args &&...args)
- : m_it (std::forward<Args> (args)...)
- { skip_filtered (); }
-
- /* Create a one-past-end iterator. */
- filtered_iterator () = default;
-
- /* Need these as the variadic constructor would be a better match
- otherwise. */
- filtered_iterator (filtered_iterator &) = default;
- filtered_iterator (const filtered_iterator &) = default;
- filtered_iterator (filtered_iterator &&) = default;
- filtered_iterator (const filtered_iterator &&other)
- : filtered_iterator (static_cast<const filtered_iterator &> (other))
- {}
-
- value_type operator* () const { return *m_it; }
-
- self_type &operator++ ()
- {
- ++m_it;
- skip_filtered ();
- return *this;
- }
-
- bool operator== (const self_type &other) const
- { return m_it == other.m_it; }
-
- bool operator!= (const self_type &other) const
- { return m_it != other.m_it; }
-
-private:
-
- void skip_filtered ()
- {
- for (; m_it != m_end; ++m_it)
- if (m_filter (*m_it))
- break;
- }
-
-private:
- FilterFunc m_filter {};
- BaseIterator m_it {};
- BaseIterator m_end {};
-};
-
-#endif /* COMMON_FILTERED_ITERATOR_H */
diff --git a/gdb/gdbsupport/format.c b/gdb/gdbsupport/format.c
deleted file mode 100644
index b05ccf6..0000000
--- a/gdb/gdbsupport/format.c
+++ /dev/null
@@ -1,412 +0,0 @@
-/* Parse a printf-style format string.
-
- Copyright (C) 1986-2020 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 "format.h"
-
-format_pieces::format_pieces (const char **arg, bool gdb_extensions)
-{
- const char *s;
- const char *string;
- const char *prev_start;
- const char *percent_loc;
- char *sub_start, *current_substring;
- enum argclass this_argclass;
-
- s = *arg;
-
- if (gdb_extensions)
- {
- string = *arg;
- *arg += strlen (*arg);
- }
- else
- {
- /* Parse the format-control string and copy it into the string STRING,
- processing some kinds of escape sequence. */
-
- char *f = (char *) alloca (strlen (s) + 1);
- string = f;
-
- while ((gdb_extensions || *s != '"') && *s != '\0')
- {
- int c = *s++;
- switch (c)
- {
- case '\0':
- continue;
-
- case '\\':
- switch (c = *s++)
- {
- case '\\':
- *f++ = '\\';
- break;
- case 'a':
- *f++ = '\a';
- break;
- case 'b':
- *f++ = '\b';
- break;
- case 'e':
- *f++ = '\e';
- break;
- case 'f':
- *f++ = '\f';
- break;
- case 'n':
- *f++ = '\n';
- break;
- case 'r':
- *f++ = '\r';
- break;
- case 't':
- *f++ = '\t';
- break;
- case 'v':
- *f++ = '\v';
- break;
- case '"':
- *f++ = '"';
- break;
- default:
- /* ??? TODO: handle other escape sequences. */
- error (_("Unrecognized escape character \\%c in format string."),
- c);
- }
- break;
-
- default:
- *f++ = c;
- }
- }
-
- /* Terminate our escape-processed copy. */
- *f++ = '\0';
-
- /* Whether the format string ended with double-quote or zero, we're
- done with it; it's up to callers to complain about syntax. */
- *arg = s;
- }
-
- /* Need extra space for the '\0's. Doubling the size is sufficient. */
-
- current_substring = (char *) xmalloc (strlen (string) * 2 + 1000);
- m_storage.reset (current_substring);
-
- /* Now scan the string for %-specs and see what kinds of args they want.
- argclass classifies the %-specs so we can give printf-type functions
- something of the right size. */
-
- const char *f = string;
- prev_start = string;
- while (*f)
- if (*f++ == '%')
- {
- int seen_hash = 0, seen_zero = 0, lcount = 0, seen_prec = 0;
- int seen_space = 0, seen_plus = 0;
- int seen_big_l = 0, seen_h = 0, seen_big_h = 0;
- int seen_big_d = 0, seen_double_big_d = 0;
- int seen_size_t = 0;
- int bad = 0;
- int n_int_args = 0;
- bool seen_i64 = false;
-
- /* Skip over "%%", it will become part of a literal piece. */
- if (*f == '%')
- {
- f++;
- continue;
- }
-
- sub_start = current_substring;
-
- strncpy (current_substring, prev_start, f - 1 - prev_start);
- current_substring += f - 1 - prev_start;
- *current_substring++ = '\0';
-
- if (*sub_start != '\0')
- m_pieces.emplace_back (sub_start, literal_piece, 0);
-
- percent_loc = f - 1;
-
- /* Check the validity of the format specifier, and work
- out what argument it expects. We only accept C89
- format strings, with the exception of long long (which
- we autoconf for). */
-
- /* The first part of a format specifier is a set of flag
- characters. */
- while (*f != '\0' && strchr ("0-+ #", *f))
- {
- if (*f == '#')
- seen_hash = 1;
- else if (*f == '0')
- seen_zero = 1;
- else if (*f == ' ')
- seen_space = 1;
- else if (*f == '+')
- seen_plus = 1;
- f++;
- }
-
- /* The next part of a format specifier is a width. */
- if (gdb_extensions && *f == '*')
- {
- ++f;
- ++n_int_args;
- }
- else
- {
- while (*f != '\0' && strchr ("0123456789", *f))
- f++;
- }
-
- /* The next part of a format specifier is a precision. */
- if (*f == '.')
- {
- seen_prec = 1;
- f++;
- if (gdb_extensions && *f == '*')
- {
- ++f;
- ++n_int_args;
- }
- else
- {
- while (*f != '\0' && strchr ("0123456789", *f))
- f++;
- }
- }
-
- /* The next part of a format specifier is a length modifier. */
- switch (*f)
- {
- case 'h':
- seen_h = 1;
- f++;
- break;
- case 'l':
- f++;
- lcount++;
- if (*f == 'l')
- {
- f++;
- lcount++;
- }
- break;
- case 'L':
- seen_big_l = 1;
- f++;
- break;
- case 'H':
- /* Decimal32 modifier. */
- seen_big_h = 1;
- f++;
- break;
- case 'D':
- /* Decimal64 and Decimal128 modifiers. */
- f++;
-
- /* Check for a Decimal128. */
- if (*f == 'D')
- {
- f++;
- seen_double_big_d = 1;
- }
- else
- seen_big_d = 1;
- break;
- case 'z':
- /* For size_t or ssize_t. */
- seen_size_t = 1;
- f++;
- break;
- case 'I':
- /* Support the Windows '%I64' extension, because an
- earlier call to format_pieces might have converted %lld
- to %I64d. */
- if (f[1] == '6' && f[2] == '4')
- {
- f += 3;
- lcount = 2;
- seen_i64 = true;
- }
- break;
- }
-
- switch (*f)
- {
- case 'u':
- if (seen_hash)
- bad = 1;
- /* FALLTHROUGH */
-
- case 'o':
- case 'x':
- case 'X':
- if (seen_space || seen_plus)
- bad = 1;
- /* FALLTHROUGH */
-
- case 'd':
- case 'i':
- if (seen_size_t)
- this_argclass = size_t_arg;
- else if (lcount == 0)
- this_argclass = int_arg;
- else if (lcount == 1)
- this_argclass = long_arg;
- else
- this_argclass = long_long_arg;
-
- if (seen_big_l)
- bad = 1;
- break;
-
- case 'c':
- this_argclass = lcount == 0 ? int_arg : wide_char_arg;
- if (lcount > 1 || seen_h || seen_big_l)
- bad = 1;
- if (seen_prec || seen_zero || seen_space || seen_plus)
- bad = 1;
- break;
-
- case 'p':
- this_argclass = ptr_arg;
- if (lcount || seen_h || seen_big_l)
- bad = 1;
- if (seen_prec)
- bad = 1;
- if (seen_hash || seen_zero || seen_space || seen_plus)
- bad = 1;
-
- if (gdb_extensions)
- {
- switch (f[1])
- {
- case 's':
- case 'F':
- case '[':
- case ']':
- f++;
- break;
- }
- }
-
- break;
-
- case 's':
- this_argclass = lcount == 0 ? string_arg : wide_string_arg;
- if (lcount > 1 || seen_h || seen_big_l)
- bad = 1;
- if (seen_zero || seen_space || seen_plus)
- bad = 1;
- break;
-
- case 'e':
- case 'f':
- case 'g':
- case 'E':
- case 'G':
- if (seen_double_big_d)
- this_argclass = dec128float_arg;
- else if (seen_big_d)
- this_argclass = dec64float_arg;
- else if (seen_big_h)
- this_argclass = dec32float_arg;
- else if (seen_big_l)
- this_argclass = long_double_arg;
- else
- this_argclass = double_arg;
-
- if (lcount || seen_h)
- bad = 1;
- break;
-
- case '*':
- error (_("`*' not supported for precision or width in printf"));
-
- case 'n':
- error (_("Format specifier `n' not supported in printf"));
-
- case '\0':
- error (_("Incomplete format specifier at end of format string"));
-
- default:
- error (_("Unrecognized format specifier '%c' in printf"), *f);
- }
-
- if (bad)
- error (_("Inappropriate modifiers to "
- "format specifier '%c' in printf"),
- *f);
-
- f++;
-
- sub_start = current_substring;
-
- if (lcount > 1 && !seen_i64 && USE_PRINTF_I64)
- {
- /* Windows' printf does support long long, but not the usual way.
- Convert %lld to %I64d. */
- int length_before_ll = f - percent_loc - 1 - lcount;
-
- strncpy (current_substring, percent_loc, length_before_ll);
- strcpy (current_substring + length_before_ll, "I64");
- current_substring[length_before_ll + 3] =
- percent_loc[length_before_ll + lcount];
- current_substring += length_before_ll + 4;
- }
- else if (this_argclass == wide_string_arg
- || this_argclass == wide_char_arg)
- {
- /* Convert %ls or %lc to %s. */
- int length_before_ls = f - percent_loc - 2;
-
- strncpy (current_substring, percent_loc, length_before_ls);
- strcpy (current_substring + length_before_ls, "s");
- current_substring += length_before_ls + 2;
- }
- else
- {
- strncpy (current_substring, percent_loc, f - percent_loc);
- current_substring += f - percent_loc;
- }
-
- *current_substring++ = '\0';
-
- prev_start = f;
-
- m_pieces.emplace_back (sub_start, this_argclass, n_int_args);
- }
-
- /* Record the remainder of the string. */
-
- if (f > prev_start)
- {
- sub_start = current_substring;
-
- strncpy (current_substring, prev_start, f - prev_start);
- current_substring += f - prev_start;
- *current_substring++ = '\0';
-
- m_pieces.emplace_back (sub_start, literal_piece, 0);
- }
-}
diff --git a/gdb/gdbsupport/format.h b/gdb/gdbsupport/format.h
deleted file mode 100644
index 80f012a..0000000
--- a/gdb/gdbsupport/format.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/* Parse a printf-style format string.
-
- Copyright (C) 1986-2020 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 COMMON_FORMAT_H
-#define COMMON_FORMAT_H
-
-#include "gdbsupport/gdb_string_view.h"
-
-#if defined(__MINGW32__) && !defined(PRINTF_HAS_LONG_LONG)
-# define USE_PRINTF_I64 1
-# define PRINTF_HAS_LONG_LONG
-#else
-# define USE_PRINTF_I64 0
-#endif
-
-/* The argclass represents the general type of data that goes with a
- format directive; int_arg for %d, long_arg for %l, and so forth.
- Note that these primarily distinguish types by size and need for
- special handling, so for instance %u and %x are (at present) also
- classed as int_arg. */
-
-enum argclass
- {
- literal_piece,
- int_arg, long_arg, long_long_arg, size_t_arg, ptr_arg,
- string_arg, wide_string_arg, wide_char_arg,
- double_arg, long_double_arg,
- dec32float_arg, dec64float_arg, dec128float_arg
- };
-
-/* A format piece is a section of the format string that may include a
- single print directive somewhere in it, and the associated class
- for the argument. */
-
-struct format_piece
-{
- format_piece (const char *str, enum argclass argc, int n)
- : string (str),
- argclass (argc),
- n_int_args (n)
- {
- }
-
- bool operator== (const format_piece &other) const
- {
- return (this->argclass == other.argclass
- && gdb::string_view (this->string) == other.string);
- }
-
- const char *string;
- enum argclass argclass;
- /* Count the number of preceding 'int' arguments that must be passed
- along. This is used for a width or precision of '*'. Note that
- this feature is only available in "gdb_extensions" mode. */
- int n_int_args;
-};
-
-class format_pieces
-{
-public:
-
- format_pieces (const char **arg, bool gdb_extensions = false);
- ~format_pieces () = default;
-
- DISABLE_COPY_AND_ASSIGN (format_pieces);
-
- typedef std::vector<format_piece>::iterator iterator;
-
- iterator begin ()
- {
- return m_pieces.begin ();
- }
-
- iterator end ()
- {
- return m_pieces.end ();
- }
-
-private:
-
- std::vector<format_piece> m_pieces;
- gdb::unique_xmalloc_ptr<char> m_storage;
-};
-
-#endif /* COMMON_FORMAT_H */
diff --git a/gdb/gdbsupport/forward-scope-exit.h b/gdb/gdbsupport/forward-scope-exit.h
deleted file mode 100644
index 5ecea380..0000000
--- a/gdb/gdbsupport/forward-scope-exit.h
+++ /dev/null
@@ -1,123 +0,0 @@
-/* Copyright (C) 2019-2020 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 COMMON_FORWARD_SCOPE_EXIT_H
-#define COMMON_FORWARD_SCOPE_EXIT_H
-
-#include "gdbsupport/scope-exit.h"
-#include <functional>
-
-/* A forward_scope_exit is like scope_exit, but instead of giving it a
- callable, you instead specialize it for a given cleanup function,
- and the generated class automatically has a constructor with the
- same interface as the cleanup function. forward_scope_exit
- captures the arguments passed to the ctor, and in turn passes those
- as arguments to the wrapped cleanup function, when it is called at
- scope exit time, from within the forward_scope_exit dtor. The
- forward_scope_exit class can take any number of arguments, and is
- cancelable if needed.
-
- This allows usage like this:
-
- void
- delete_longjmp_breakpoint (int arg)
- {
- // Blah, blah, blah...
- }
-
- using longjmp_breakpoint_cleanup
- = FORWARD_SCOPE_EXIT (delete_longjmp_breakpoint);
-
- This above created a new cleanup class `longjmp_breakpoint_cleanup`
- than can then be used like this:
-
- longjmp_breakpoint_cleanup obj (thread);
-
- // Blah, blah, blah...
-
- obj.release (); // Optional cancel if needed.
-
- forward_scope_exit is also handy when you would need to wrap a
- scope_exit in a gdb::optional:
-
- gdb::optional<longjmp_breakpoint_cleanup> cleanup;
- if (some condition)
- cleanup.emplace (thread);
- ...
- if (cleanup)
- cleanup->release ();
-
- since with scope exit, you would have to know the scope_exit's
- callable template type when you create the gdb::optional:
-
- gdb:optional<scope_exit<what goes here?>>
-
- The "forward" naming fits both purposes shown above -- the class
- "forwards" ctor arguments to the wrapped cleanup function at scope
- exit time, and can also be used to "forward declare"
- scope_exit-like objects. */
-
-namespace detail
-{
-
-/* Function and Signature are passed in the same type, in order to
- extract Function's arguments' types in the specialization below.
- Those are used to generate the constructor. */
-
-template<typename Function, Function *function, typename Signature>
-struct forward_scope_exit;
-
-template<typename Function, Function *function,
- typename Res, typename... Args>
-class forward_scope_exit<Function, function, Res (Args...)>
- : public scope_exit_base<forward_scope_exit<Function,
- function,
- Res (Args...)>>
-{
- /* For access to on_exit(). */
- friend scope_exit_base<forward_scope_exit<Function,
- function,
- Res (Args...)>>;
-
-public:
- explicit forward_scope_exit (Args ...args)
- : m_bind_function (function, args...)
- {
- /* Nothing. */
- }
-
-private:
- void on_exit ()
- {
- m_bind_function ();
- }
-
- /* The function and the arguments passed to the ctor, all packed in
- a std::bind. */
- decltype (std::bind (function, std::declval<Args> ()...))
- m_bind_function;
-};
-
-} /* namespace detail */
-
-/* This is the "public" entry point. It's a macro to avoid having to
- name FUNC more than once. */
-
-#define FORWARD_SCOPE_EXIT(FUNC) \
- detail::forward_scope_exit<decltype (FUNC), FUNC, decltype (FUNC)>
-
-#endif /* COMMON_FORWARD_SCOPE_EXIT_H */
diff --git a/gdb/gdbsupport/function-view.h b/gdb/gdbsupport/function-view.h
deleted file mode 100644
index 4e205b8..0000000
--- a/gdb/gdbsupport/function-view.h
+++ /dev/null
@@ -1,323 +0,0 @@
-/* Copyright (C) 2017-2020 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 COMMON_FUNCTION_VIEW_H
-#define COMMON_FUNCTION_VIEW_H
-
-/* function_view is a polymorphic type-erasing wrapper class that
- encapsulates a non-owning reference to arbitrary callable objects.
-
- A way to put it is that function_view is to std::function like
- std::string_view is to std::string. While std::function stores a
- type-erased callable object internally, function_view holds a
- type-erased reference to an external callable object.
-
- This is meant to be used as callback type of a function that:
-
- #1 - Takes a callback as parameter.
-
- #2 - Wants to support arbitrary callable objects as callback type
- (e.g., stateful function objects, lambda closures, free
- functions).
-
- #3 - Does not store the callback anywhere; instead the function
- just calls the callback directly or forwards it to some
- other function that calls it.
-
- #4 - Can't be, or we don't want it to be, a template function
- with the callable type as template parameter. For example,
- when the callback is a parameter of a virtual member
- function, or when putting the function template in a header
- would expose too much implementation detail.
-
- Note that the C-style "function pointer" + "void *data" callback
- parameter idiom fails requirement #2 above. Please don't add new
- uses of that idiom. I.e., something like this wouldn't work;
-
- typedef bool (iterate_over_foos_cb) (foo *f, void *user_data),
- void iterate_over_foos (iterate_over_foos_cb *callback, void *user_data);
-
- foo *find_foo_by_type (int type)
- {
- foo *found = nullptr;
-
- iterate_over_foos ([&] (foo *f, void *data)
- {
- if (foo->type == type)
- {
- found = foo;
- return true; // stop iterating
- }
- return false; // continue iterating
- }, NULL);
-
- return found;
- }
-
- The above wouldn't compile, because lambdas with captures can't be
- implicitly converted to a function pointer (because a capture means
- some context data must be passed to the lambda somehow).
-
- C++11 gave us std::function as type-erased wrapper around arbitrary
- callables, however, std::function is not an ideal fit for transient
- callbacks such as the use case above. For this use case, which is
- quite pervasive, a function_view is a better choice, because while
- function_view is light and does not require any heap allocation,
- std::function is a heavy-weight object with value semantics that
- generally requires a heap allocation on construction/assignment of
- the target callable. In addition, while it is possible to use
- std::function in such a way that avoids most of the overhead by
- making sure to only construct it with callables of types that fit
- std::function's small object optimization, such as function
- pointers and std::reference_wrapper callables, that is quite
- inconvenient in practice, because restricting to free-function
- callables would imply no state/capture/closure, which we need in
- most cases, and std::reference_wrapper implies remembering to use
- std::ref/std::cref where the callable is constructed, with the
- added inconvenience that std::ref/std::cref have deleted rvalue-ref
- overloads, meaning you can't use unnamed/temporary lambdas with
- them.
-
- Note that because function_view is a non-owning view of a callable,
- care must be taken to ensure that the callable outlives the
- function_view that calls it. This is not really a problem for the
- use case function_view is intended for, such as passing a temporary
- function object / lambda to a function that accepts a callback,
- because in those cases, the temporary is guaranteed to be live
- until the called function returns.
-
- Calling a function_view with no associated target is undefined,
- unlike with std::function, which throws std::bad_function_call.
- This is by design, to avoid the otherwise necessary NULL check in
- function_view::operator().
-
- Since function_view objects are small (a pair of pointers), they
- should generally be passed around by value.
-
- Usage:
-
- Given this function that accepts a callback:
-
- void
- iterate_over_foos (gdb::function_view<void (foo *)> callback)
- {
- for (auto &foo : foos)
- callback (&foo);
- }
-
- you can call it like this, passing a lambda as callback:
-
- iterate_over_foos ([&] (foo *f)
- {
- process_one_foo (f);
- });
-
- or like this, passing a function object as callback:
-
- struct function_object
- {
- void operator() (foo *f)
- {
- if (s->check ())
- process_one_foo (f);
- }
-
- // some state
- state *s;
- };
-
- state mystate;
- function_object matcher {&mystate};
- iterate_over_foos (matcher);
-
- or like this, passing a function pointer as callback:
-
- iterate_over_foos (process_one_foo);
-
- You can find unit tests covering the whole API in
- unittests/function-view-selftests.c. */
-
-namespace gdb {
-
-namespace fv_detail {
-/* Bits shared by all function_view instantiations that do not depend
- on the template parameters. */
-
-/* Storage for the erased callable. This is a union in order to be
- able to save both a function object (data) pointer or a function
- pointer without triggering undefined behavior. */
-union erased_callable
-{
- /* For function objects. */
- void *data;
-
- /* For function pointers. */
- void (*fn) ();
-};
-
-} /* namespace fv_detail */
-
-/* Use partial specialization to get access to the callable's
- signature. */
-template<class Signature>
-struct function_view;
-
-template<typename Res, typename... Args>
-class function_view<Res (Args...)>
-{
- template<typename From, typename To>
- using CompatibleReturnType
- = Or<std::is_void<To>,
- std::is_same<From, To>,
- std::is_convertible<From, To>>;
-
- /* True if Func can be called with Args, and either the result is
- Res, convertible to Res or Res is void. */
- template<typename Callable,
- typename Res2 = typename std::result_of<Callable &(Args...)>::type>
- struct IsCompatibleCallable : CompatibleReturnType<Res2, Res>
- {};
-
- /* True if Callable is a function_view. Used to avoid hijacking the
- copy ctor. */
- template <typename Callable>
- struct IsFunctionView
- : std::is_same<function_view, typename std::decay<Callable>::type>
- {};
-
- public:
-
- /* NULL by default. */
- constexpr function_view () noexcept
- : m_erased_callable {},
- m_invoker {}
- {}
-
- /* Default copy/assignment is fine. */
- function_view (const function_view &) = default;
- function_view &operator= (const function_view &) = default;
-
- /* This is the main entry point. Use SFINAE to avoid hijacking the
- copy constructor and to ensure that the target type is
- compatible. */
- template
- <typename Callable,
- typename = Requires<Not<IsFunctionView<Callable>>>,
- typename = Requires<IsCompatibleCallable<Callable>>>
- function_view (Callable &&callable) noexcept
- {
- bind (callable);
- }
-
- /* Construct a NULL function_view. */
- constexpr function_view (std::nullptr_t) noexcept
- : m_erased_callable {},
- m_invoker {}
- {}
-
- /* Clear a function_view. */
- function_view &operator= (std::nullptr_t) noexcept
- {
- m_invoker = nullptr;
- return *this;
- }
-
- /* Return true if the wrapper has a target, false otherwise. Note
- we check M_INVOKER instead of M_ERASED_CALLABLE because we don't
- know which member of the union is active right now. */
- constexpr explicit operator bool () const noexcept
- { return m_invoker != nullptr; }
-
- /* Call the callable. */
- Res operator () (Args... args) const
- { return m_invoker (m_erased_callable, std::forward<Args> (args)...); }
-
- private:
-
- /* Bind this function_view to a compatible function object
- reference. */
- template <typename Callable>
- void bind (Callable &callable) noexcept
- {
- m_erased_callable.data = (void *) std::addressof (callable);
- m_invoker = [] (fv_detail::erased_callable ecall, Args... args)
- noexcept (noexcept (callable (std::forward<Args> (args)...))) -> Res
- {
- auto &restored_callable = *static_cast<Callable *> (ecall.data);
- /* The explicit cast to Res avoids a compile error when Res is
- void and the callable returns non-void. */
- return (Res) restored_callable (std::forward<Args> (args)...);
- };
- }
-
- /* Bind this function_view to a compatible function pointer.
-
- Making this a separate function allows avoiding one indirection,
- by storing the function pointer directly in the storage, instead
- of a pointer to pointer. erased_callable is then a union in
- order to avoid storing a function pointer as a data pointer here,
- which would be undefined. */
- template<class Res2, typename... Args2>
- void bind (Res2 (*fn) (Args2...)) noexcept
- {
- m_erased_callable.fn = reinterpret_cast<void (*) ()> (fn);
- m_invoker = [] (fv_detail::erased_callable ecall, Args... args)
- noexcept (noexcept (fn (std::forward<Args> (args)...))) -> Res
- {
- auto restored_fn = reinterpret_cast<Res2 (*) (Args2...)> (ecall.fn);
- /* The explicit cast to Res avoids a compile error when Res is
- void and the callable returns non-void. */
- return (Res) restored_fn (std::forward<Args> (args)...);
- };
- }
-
- /* Storage for the erased callable. */
- fv_detail::erased_callable m_erased_callable;
-
- /* The invoker. This is set to a capture-less lambda by one of the
- 'bind' overloads. The lambda restores the right type of the
- callable (which is passed as first argument), and forwards the
- args. */
- Res (*m_invoker) (fv_detail::erased_callable, Args...);
-};
-
-/* Allow comparison with NULL. Defer the work to the in-class
- operator bool implementation. */
-
-template<typename Res, typename... Args>
-constexpr inline bool
-operator== (const function_view<Res (Args...)> &f, std::nullptr_t) noexcept
-{ return !static_cast<bool> (f); }
-
-template<typename Res, typename... Args>
-constexpr inline bool
-operator== (std::nullptr_t, const function_view<Res (Args...)> &f) noexcept
-{ return !static_cast<bool> (f); }
-
-template<typename Res, typename... Args>
-constexpr inline bool
-operator!= (const function_view<Res (Args...)> &f, std::nullptr_t) noexcept
-{ return static_cast<bool> (f); }
-
-template<typename Res, typename... Args>
-constexpr inline bool
-operator!= (std::nullptr_t, const function_view<Res (Args...)> &f) noexcept
-{ return static_cast<bool> (f); }
-
-} /* namespace gdb */
-
-#endif
diff --git a/gdb/gdbsupport/gdb-dlfcn.c b/gdb/gdbsupport/gdb-dlfcn.c
deleted file mode 100644
index 1a755bd..0000000
--- a/gdb/gdbsupport/gdb-dlfcn.c
+++ /dev/null
@@ -1,118 +0,0 @@
-/* Platform independent shared object routines for GDB.
-
- Copyright (C) 2011-2020 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
deleted file mode 100644
index 258cfeb..0000000
--- a/gdb/gdbsupport/gdb-dlfcn.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/* Platform independent shared object routines for GDB.
-
- Copyright (C) 2011-2020 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 */
diff --git a/gdb/gdbsupport/gdb-sigmask.h b/gdb/gdbsupport/gdb-sigmask.h
deleted file mode 100644
index cd58c54..0000000
--- a/gdb/gdbsupport/gdb-sigmask.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/* sigprocmask wrapper for gdb
-
- Copyright (C) 2019-2020 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 GDBSUPPORT_GDB_SIGMASK_H
-#define GDBSUPPORT_GDB_SIGMASK_H
-
-#include <signal.h>
-
-#ifdef HAVE_SIGPROCMASK
-
-#ifdef HAVE_PTHREAD_SIGMASK
-#define gdb_sigmask pthread_sigmask
-#else
-#define gdb_sigmask sigprocmask
-#endif
-
-#else /* HAVE_SIGPROCMASK */
-
-/* Other code checks HAVE_SIGPROCMASK, but if there happened to be a
- system that only had pthread_sigmask, we could still use it with
- some extra changes. */
-#ifdef HAVE_PTHREAD_SIGMASK
-#error pthead_sigmask available without sigprocmask - please report
-#endif
-
-#endif /* HAVE_SIGPROCMASK */
-
-
-#endif /* GDBSUPPORT_GDB_SIGMASK_H */
diff --git a/gdb/gdbsupport/gdb_assert.h b/gdb/gdbsupport/gdb_assert.h
deleted file mode 100644
index 3936003..0000000
--- a/gdb/gdbsupport/gdb_assert.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/* GDB-friendly replacement for <assert.h>.
- Copyright (C) 2000-2020 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 COMMON_GDB_ASSERT_H
-#define COMMON_GDB_ASSERT_H
-
-#include "errors.h"
-
-/* A static assertion. This will cause a compile-time error if EXPR,
- which must be a compile-time constant, is false. */
-
-#define gdb_static_assert(expr) static_assert (expr, "")
-
-/* PRAGMATICS: "gdb_assert.h":gdb_assert() is a lower case (rather
- than upper case) macro since that provides the closest fit to the
- existing lower case macro <assert.h>:assert() that it is
- replacing. */
-
-#define gdb_assert(expr) \
- ((void) ((expr) ? 0 : \
- (gdb_assert_fail (#expr, __FILE__, __LINE__, FUNCTION_NAME), 0)))
-
-/* This prints an "Assertion failed" message, asking the user if they
- want to continue, dump core, or just exit. */
-#if defined (FUNCTION_NAME)
-#define gdb_assert_fail(assertion, file, line, function) \
- internal_error (file, line, _("%s: Assertion `%s' failed."), \
- function, assertion)
-#else
-#define gdb_assert_fail(assertion, file, line, function) \
- internal_error (file, line, _("Assertion `%s' failed."), \
- assertion)
-#endif
-
-/* The canonical form of gdb_assert (0).
- MESSAGE is a string to include in the error message. */
-
-#if defined (FUNCTION_NAME)
-#define gdb_assert_not_reached(message) \
- internal_error (__FILE__, __LINE__, "%s: %s", FUNCTION_NAME, _(message))
-#else
-#define gdb_assert_not_reached(message) \
- internal_error (__FILE__, __LINE__, _(message))
-#endif
-
-#endif /* COMMON_GDB_ASSERT_H */
diff --git a/gdb/gdbsupport/gdb_binary_search.h b/gdb/gdbsupport/gdb_binary_search.h
deleted file mode 100644
index a456015..0000000
--- a/gdb/gdbsupport/gdb_binary_search.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/* C++ implementation of a binary search.
-
- Copyright (C) 2019-2020 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 GDBSUPPORT_GDB_BINARY_SEARCH_H
-#define GDBSUPPORT_GDB_BINARY_SEARCH_H
-
-#include <algorithm>
-
-namespace gdb {
-
-/* Implements a binary search using C++ iterators.
- This differs from std::binary_search in that it returns an interator for
- the found element and in that the type of EL can be different from the
- type of the elements in the countainer.
-
- COMP is a C-style comparison function with signature:
- int comp(const value_type& a, const T& b);
- It should return -1, 0 or 1 if a is less than, equal to, or greater than
- b, respectively.
- [first, last) must be sorted.
-
- The return value is an iterator pointing to the found element, or LAST if
- no element was found. */
-template<typename It, typename T, typename Comp>
-It binary_search (It first, It last, T el, Comp comp)
-{
- auto lt = [&] (const typename std::iterator_traits<It>::value_type &a,
- const T &b)
- { return comp (a, b) < 0; };
-
- auto lb = std::lower_bound (first, last, el, lt);
- if (lb != last)
- {
- if (comp (*lb, el) == 0)
- return lb;
- }
- return last;
-}
-
-} /* namespace gdb */
-
-#endif /* GDBSUPPORT_GDB_BINARY_SEARCH_H */
diff --git a/gdb/gdbsupport/gdb_locale.h b/gdb/gdbsupport/gdb_locale.h
deleted file mode 100644
index a1d0b67..0000000
--- a/gdb/gdbsupport/gdb_locale.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/* GDB-friendly replacement for <locale.h>.
- Copyright (C) 2002-2020 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 COMMON_GDB_LOCALE_H
-#define COMMON_GDB_LOCALE_H
-
-#ifdef HAVE_LOCALE_H
-# include <locale.h>
-#endif
-
-#ifdef ENABLE_NLS
-# include <libintl.h>
-# define _(String) gettext (String)
-# ifdef gettext_noop
-# define N_(String) gettext_noop (String)
-# else
-# define N_(String) (String)
-# endif
-#else
-# define _(String) (String)
-# define N_(String) (String)
-#endif
-
-#ifdef HAVE_LANGINFO_CODESET
-#include <langinfo.h>
-#endif
-
-#endif /* COMMON_GDB_LOCALE_H */
diff --git a/gdb/gdbsupport/gdb_optional.h b/gdb/gdbsupport/gdb_optional.h
deleted file mode 100644
index 02a87f6..0000000
--- a/gdb/gdbsupport/gdb_optional.h
+++ /dev/null
@@ -1,219 +0,0 @@
-/* An optional object.
-
- Copyright (C) 2017-2020 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 COMMON_GDB_OPTIONAL_H
-#define COMMON_GDB_OPTIONAL_H
-
-#include "gdbsupport/traits.h"
-
-namespace gdb
-{
-
-struct in_place_t
-{
- explicit in_place_t () = default;
-};
-
-constexpr gdb::in_place_t in_place {};
-
-/* This class attempts to be a compatible subset of std::optional,
- which is slated to be available in C++17. This class optionally
- holds an object of some type -- by default it is constructed not
- holding an object, but later the object can be "emplaced". This is
- similar to using std::unique_ptr, but in-object allocation is
- guaranteed.
-
- Unlike std::optional, we currently only support copy/move
- construction/assignment of an optional<T> from either exactly
- optional<T> or T. I.e., we don't support copy/move
- construction/assignment from optional<U> or U, when U is a type
- convertible to T. Making that work depending on the definitions of
- T and U is somewhat complicated, and currently the users of this
- class don't need it. */
-
-template<typename T>
-class optional
-{
-public:
-
- constexpr optional ()
- : m_dummy ()
- {}
-
- template<typename... Args>
- constexpr optional (in_place_t, Args &&... args)
- : m_item (std::forward<Args> (args)...),
- m_instantiated (true)
- {}
-
- ~optional ()
- { this->reset (); }
-
- /* Copy and move constructors. */
-
- optional (const optional &other)
- {
- if (other.m_instantiated)
- this->emplace (other.get ());
- }
-
- optional (optional &&other)
- noexcept(std::is_nothrow_move_constructible<T> ())
- {
- if (other.m_instantiated)
- this->emplace (std::move (other.get ()));
- }
-
- constexpr optional (const T &other)
- : m_item (other),
- m_instantiated (true)
- {}
-
- constexpr optional (T &&other)
- noexcept (std::is_nothrow_move_constructible<T> ())
- : m_item (std::move (other)),
- m_instantiated (true)
- {}
-
- /* Assignment operators. */
-
- optional &
- operator= (const optional &other)
- {
- if (m_instantiated && other.m_instantiated)
- this->get () = other.get ();
- else
- {
- if (other.m_instantiated)
- this->emplace (other.get ());
- else
- this->reset ();
- }
-
- return *this;
- }
-
- optional &
- operator= (optional &&other)
- noexcept (And<std::is_nothrow_move_constructible<T>,
- std::is_nothrow_move_assignable<T>> ())
- {
- if (m_instantiated && other.m_instantiated)
- this->get () = std::move (other.get ());
- else
- {
- if (other.m_instantiated)
- this->emplace (std::move (other.get ()));
- else
- this->reset ();
- }
- return *this;
- }
-
- optional &
- operator= (const T &other)
- {
- if (m_instantiated)
- this->get () = other;
- else
- this->emplace (other);
- return *this;
- }
-
- optional &
- operator= (T &&other)
- noexcept (And<std::is_nothrow_move_constructible<T>,
- std::is_nothrow_move_assignable<T>> ())
- {
- if (m_instantiated)
- this->get () = std::move (other);
- else
- this->emplace (std::move (other));
- return *this;
- }
-
- template<typename... Args>
- T &emplace (Args &&... args)
- {
- this->reset ();
- new (&m_item) T (std::forward<Args>(args)...);
- m_instantiated = true;
- return this->get ();
- }
-
- /* Observers. */
- constexpr const T *operator-> () const
- { return std::addressof (this->get ()); }
-
- T *operator-> ()
- { return std::addressof (this->get ()); }
-
- constexpr const T &operator* () const &
- { return this->get (); }
-
- T &operator* () &
- { return this->get (); }
-
- T &&operator* () &&
- { return std::move (this->get ()); }
-
- constexpr const T &&operator* () const &&
- { return std::move (this->get ()); }
-
- constexpr explicit operator bool () const noexcept
- { return m_instantiated; }
-
- constexpr bool has_value () const noexcept
- { return m_instantiated; }
-
- /* 'reset' is a 'safe' operation with no precondition. */
- void reset () noexcept
- {
- if (m_instantiated)
- this->destroy ();
- }
-
-private:
-
- /* Destroy the object. */
- void destroy ()
- {
- gdb_assert (m_instantiated);
- m_instantiated = false;
- m_item.~T ();
- }
-
- /* The get operations have m_instantiated as a precondition. */
- T &get () noexcept { return m_item; }
- constexpr const T &get () const noexcept { return m_item; }
-
- /* The object. */
- union
- {
- struct { } m_dummy;
- T m_item;
- };
-
- /* True if the object was ever emplaced. */
- bool m_instantiated = false;
-};
-
-}
-
-#endif /* COMMON_GDB_OPTIONAL_H */
diff --git a/gdb/gdbsupport/gdb_proc_service.h b/gdb/gdbsupport/gdb_proc_service.h
deleted file mode 100644
index 3ce2ee8..0000000
--- a/gdb/gdbsupport/gdb_proc_service.h
+++ /dev/null
@@ -1,173 +0,0 @@
-/* <proc_service.h> replacement for systems that don't have it.
- Copyright (C) 2000-2020 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 COMMON_GDB_PROC_SERVICE_H
-#define COMMON_GDB_PROC_SERVICE_H
-
-#include <sys/types.h>
-
-#ifdef HAVE_PROC_SERVICE_H
-
-/* glibc's proc_service.h doesn't wrap itself with extern "C". Need
- to do it ourselves. */
-EXTERN_C_PUSH
-
-#include <proc_service.h>
-
-EXTERN_C_POP
-
-#else /* HAVE_PROC_SERVICE_H */
-
-/* The following fallback definitions have been imported and adjusted
- from glibc's proc_service.h */
-
-/* Callback interface for libthread_db, functions users must define.
- Copyright (C) 1999,2002,2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library 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
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-/* The definitions in this file must correspond to those in the debugger. */
-
-#ifdef HAVE_SYS_PROCFS_H
-#include <sys/procfs.h>
-#endif
-
-/* Not all platforms bring in <linux/elf.h> via <sys/procfs.h>. If
- <sys/procfs.h> wasn't enough to find elf_fpregset_t, try the kernel
- headers also (but don't if we don't need to). */
-#ifndef HAVE_ELF_FPREGSET_T
-# ifdef HAVE_LINUX_ELF_H
-# include <linux/elf.h>
-# endif
-#endif
-
-EXTERN_C_PUSH
-
-/* Functions in this interface return one of these status codes. */
-typedef enum
-{
- PS_OK, /* Generic "call succeeded". */
- PS_ERR, /* Generic error. */
- PS_BADPID, /* Bad process handle. */
- PS_BADLID, /* Bad LWP identifier. */
- PS_BADADDR, /* Bad address. */
- PS_NOSYM, /* Could not find given symbol. */
- PS_NOFREGS /* FPU register set not available for given LWP. */
-} ps_err_e;
-
-#ifndef HAVE_LWPID_T
-typedef unsigned int lwpid_t;
-#endif
-
-#ifndef HAVE_PSADDR_T
-typedef void *psaddr_t;
-#endif
-
-#ifndef HAVE_PRGREGSET_T
-typedef elf_gregset_t prgregset_t;
-#endif
-
-#ifndef HAVE_PRFPREGSET_T
-typedef elf_fpregset_t prfpregset_t;
-#endif
-
-/* This type is opaque in this interface. It's defined by the user of
- libthread_db. GDB's version is defined below. */
-struct ps_prochandle;
-
-
-/* Read or write process memory at the given address. */
-extern ps_err_e ps_pdread (struct ps_prochandle *,
- psaddr_t, void *, size_t);
-extern ps_err_e ps_pdwrite (struct ps_prochandle *,
- psaddr_t, const void *, size_t);
-extern ps_err_e ps_ptread (struct ps_prochandle *,
- psaddr_t, void *, size_t);
-extern ps_err_e ps_ptwrite (struct ps_prochandle *,
- psaddr_t, const void *, size_t);
-
-
-/* Get and set the given LWP's general or FPU register set. */
-extern ps_err_e ps_lgetregs (struct ps_prochandle *,
- lwpid_t, prgregset_t);
-extern ps_err_e ps_lsetregs (struct ps_prochandle *,
- lwpid_t, const prgregset_t);
-extern ps_err_e ps_lgetfpregs (struct ps_prochandle *,
- lwpid_t, prfpregset_t *);
-extern ps_err_e ps_lsetfpregs (struct ps_prochandle *,
- lwpid_t, const prfpregset_t *);
-
-/* Return the PID of the process. */
-extern pid_t ps_getpid (struct ps_prochandle *);
-
-/* Fetch the special per-thread address associated with the given LWP.
- This call is only used on a few platforms (most use a normal register).
- The meaning of the `int' parameter is machine-dependent. */
-extern ps_err_e ps_get_thread_area (struct ps_prochandle *,
- lwpid_t, int, psaddr_t *);
-
-
-/* Look up the named symbol in the named DSO in the symbol tables
- associated with the process being debugged, filling in *SYM_ADDR
- with the corresponding run-time address. */
-extern ps_err_e ps_pglobal_lookup (struct ps_prochandle *,
- const char *object_name,
- const char *sym_name,
- psaddr_t *sym_addr);
-
-
-/* Stop or continue the entire process. */
-extern ps_err_e ps_pstop (struct ps_prochandle *);
-extern ps_err_e ps_pcontinue (struct ps_prochandle *);
-
-/* Stop or continue the given LWP alone. */
-extern ps_err_e ps_lstop (struct ps_prochandle *, lwpid_t);
-extern ps_err_e ps_lcontinue (struct ps_prochandle *, lwpid_t);
-
-/* The following are only defined in/called by Solaris. */
-
-/* Get size of extra register set. */
-extern ps_err_e ps_lgetxregsize (struct ps_prochandle *ph,
- lwpid_t lwpid, int *xregsize);
-/* Get extra register set. */
-extern ps_err_e ps_lgetxregs (struct ps_prochandle *ph, lwpid_t lwpid,
- caddr_t xregset);
-extern ps_err_e ps_lsetxregs (struct ps_prochandle *ph, lwpid_t lwpid,
- caddr_t xregset);
-
-/* Log a message (sends to gdb_stderr). */
-extern void ps_plog (const char *fmt, ...);
-
-EXTERN_C_POP
-
-#endif /* HAVE_PROC_SERVICE_H */
-
-#endif /* COMMON_GDB_PROC_SERVICE_H */
diff --git a/gdb/gdbsupport/gdb_ref_ptr.h b/gdb/gdbsupport/gdb_ref_ptr.h
deleted file mode 100644
index c5ef13f..0000000
--- a/gdb/gdbsupport/gdb_ref_ptr.h
+++ /dev/null
@@ -1,228 +0,0 @@
-/* Reference-counted smart pointer class
-
- Copyright (C) 2016-2020 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 COMMON_GDB_REF_PTR_H
-#define COMMON_GDB_REF_PTR_H
-
-#include <cstddef>
-
-namespace gdb
-{
-
-/* An instance of this class either holds a reference to a
- reference-counted object or is "NULL". Reference counting is
- handled externally by a policy class. If the object holds a
- reference, then when the object is destroyed, the reference is
- decref'd.
-
- Normally an instance is constructed using a pointer. This sort of
- initialization lets this class manage the lifetime of that
- reference.
-
- Assignment and copy construction will make a new reference as
- appropriate. Assignment from a plain pointer is disallowed to
- avoid confusion about whether this acquires a new reference;
- instead use the "reset" method -- which, like the pointer
- constructor, transfers ownership.
-
- The policy class must provide two static methods:
- void incref (T *);
- void decref (T *);
-*/
-template<typename T, typename Policy>
-class ref_ptr
-{
- public:
-
- /* Create a new NULL instance. */
- ref_ptr ()
- : m_obj (NULL)
- {
- }
-
- /* Create a new NULL instance. Note that this is not explicit. */
- ref_ptr (const std::nullptr_t)
- : m_obj (NULL)
- {
- }
-
- /* Create a new instance. OBJ is a reference, management of which
- is now transferred to this class. */
- explicit ref_ptr (T *obj)
- : m_obj (obj)
- {
- }
-
- /* Copy another instance. */
- ref_ptr (const ref_ptr &other)
- : m_obj (other.m_obj)
- {
- if (m_obj != NULL)
- Policy::incref (m_obj);
- }
-
- /* Transfer ownership from OTHER. */
- ref_ptr (ref_ptr &&other)
- : m_obj (other.m_obj)
- {
- other.m_obj = NULL;
- }
-
- /* Destroy this instance. */
- ~ref_ptr ()
- {
- if (m_obj != NULL)
- Policy::decref (m_obj);
- }
-
- /* Copy another instance. */
- ref_ptr &operator= (const ref_ptr &other)
- {
- /* Do nothing on self-assignment. */
- if (this != &other)
- {
- reset (other.m_obj);
- if (m_obj != NULL)
- Policy::incref (m_obj);
- }
- return *this;
- }
-
- /* Transfer ownership from OTHER. */
- ref_ptr &operator= (ref_ptr &&other)
- {
- /* Do nothing on self-assignment. */
- if (this != &other)
- {
- reset (other.m_obj);
- other.m_obj = NULL;
- }
- return *this;
- }
-
- /* Change this instance's referent. OBJ is a reference, management
- of which is now transferred to this class. */
- void reset (T *obj)
- {
- if (m_obj != NULL)
- Policy::decref (m_obj);
- m_obj = obj;
- }
-
- /* Return this instance's referent without changing the state of
- this class. */
- T *get () const
- {
- return m_obj;
- }
-
- /* Return this instance's referent, and stop managing this
- reference. The caller is now responsible for the ownership of
- the reference. */
- ATTRIBUTE_UNUSED_RESULT T *release ()
- {
- T *result = m_obj;
-
- m_obj = NULL;
- return result;
- }
-
- /* Let users refer to members of the underlying pointer. */
- T *operator-> () const
- {
- return m_obj;
- }
-
- /* Acquire a new reference and return a ref_ptr that owns it. */
- static ref_ptr<T, Policy> new_reference (T *obj)
- {
- Policy::incref (obj);
- return ref_ptr<T, Policy> (obj);
- }
-
- private:
-
- T *m_obj;
-};
-
-template<typename T, typename Policy>
-inline bool operator== (const ref_ptr<T, Policy> &lhs,
- const ref_ptr<T, Policy> &rhs)
-{
- return lhs.get () == rhs.get ();
-}
-
-template<typename T, typename Policy>
-inline bool operator== (const ref_ptr<T, Policy> &lhs, const T *rhs)
-{
- return lhs.get () == rhs;
-}
-
-template<typename T, typename Policy>
-inline bool operator== (const ref_ptr<T, Policy> &lhs, const std::nullptr_t)
-{
- return lhs.get () == nullptr;
-}
-
-template<typename T, typename Policy>
-inline bool operator== (const T *lhs, const ref_ptr<T, Policy> &rhs)
-{
- return lhs == rhs.get ();
-}
-
-template<typename T, typename Policy>
-inline bool operator== (const std::nullptr_t, const ref_ptr<T, Policy> &rhs)
-{
- return nullptr == rhs.get ();
-}
-
-template<typename T, typename Policy>
-inline bool operator!= (const ref_ptr<T, Policy> &lhs,
- const ref_ptr<T, Policy> &rhs)
-{
- return lhs.get () != rhs.get ();
-}
-
-template<typename T, typename Policy>
-inline bool operator!= (const ref_ptr<T, Policy> &lhs, const T *rhs)
-{
- return lhs.get () != rhs;
-}
-
-template<typename T, typename Policy>
-inline bool operator!= (const ref_ptr<T, Policy> &lhs, const std::nullptr_t)
-{
- return lhs.get () != nullptr;
-}
-
-template<typename T, typename Policy>
-inline bool operator!= (const T *lhs, const ref_ptr<T, Policy> &rhs)
-{
- return lhs != rhs.get ();
-}
-
-template<typename T, typename Policy>
-inline bool operator!= (const std::nullptr_t, const ref_ptr<T, Policy> &rhs)
-{
- return nullptr != rhs.get ();
-}
-
-}
-
-#endif /* COMMON_GDB_REF_PTR_H */
diff --git a/gdb/gdbsupport/gdb_setjmp.h b/gdb/gdbsupport/gdb_setjmp.h
deleted file mode 100644
index 168833a..0000000
--- a/gdb/gdbsupport/gdb_setjmp.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/* Portability wrappers for setjmp and longjmp.
- Copyright (C) 1986-2020 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 COMMON_GDB_SETJMP_H
-#define COMMON_GDB_SETJMP_H
-
-#include <setjmp.h>
-
-#ifdef HAVE_SIGSETJMP
-#define SIGJMP_BUF sigjmp_buf
-#define SIGSETJMP(buf,val) sigsetjmp((buf), val)
-#define SIGLONGJMP(buf,val) siglongjmp((buf), (val))
-#else
-#define SIGJMP_BUF jmp_buf
-/* We ignore val here because that's safer and avoids having to check
- whether _setjmp exists. */
-#define SIGSETJMP(buf,val) setjmp(buf)
-#define SIGLONGJMP(buf,val) longjmp((buf), (val))
-#endif
-
-#endif /* COMMON_GDB_SETJMP_H */
diff --git a/gdb/gdbsupport/gdb_signals.h b/gdb/gdbsupport/gdb_signals.h
deleted file mode 100644
index fbbb7be..0000000
--- a/gdb/gdbsupport/gdb_signals.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/* Target signal translation functions for GDB.
- Copyright (C) 1990-2020 Free Software Foundation, Inc.
- Contributed by Cygnus Support.
-
- 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 COMMON_GDB_SIGNALS_H
-#define COMMON_GDB_SIGNALS_H
-
-#include "gdb/signals.h"
-
-/* Predicate to gdb_signal_to_host(). Return non-zero if the enum
- targ_signal SIGNO has an equivalent ``host'' representation. */
-/* FIXME: cagney/1999-11-22: The name below was chosen in preference
- to the shorter gdb_signal_p() because it is far less ambigious.
- In this context ``gdb_signal'' refers to GDB's internal
- representation of the target's set of signals while ``host signal''
- refers to the target operating system's signal. Confused? */
-extern int gdb_signal_to_host_p (enum gdb_signal signo);
-
-/* Convert between host signal numbers and enum gdb_signal's.
- gdb_signal_to_host() returns 0 and prints a warning() on GDB's
- console if SIGNO has no equivalent host representation. */
-/* FIXME: cagney/1999-11-22: Here ``host'' is used incorrectly, it is
- refering to the target operating system's signal numbering.
- Similarly, ``enum gdb_signal'' is named incorrectly, ``enum
- gdb_signal'' would probably be better as it is refering to GDB's
- internal representation of a target operating system's signal. */
-extern enum gdb_signal gdb_signal_from_host (int);
-extern int gdb_signal_to_host (enum gdb_signal);
-
-/* Return the enum symbol name of SIG as a string, to use in debug
- output. */
-extern const char *gdb_signal_to_symbol_string (enum gdb_signal sig);
-
-/* Return the string for a signal. */
-extern const char *gdb_signal_to_string (enum gdb_signal);
-
-/* Return the name (SIGHUP, etc.) for a signal. */
-extern const char *gdb_signal_to_name (enum gdb_signal);
-
-/* Given a name (SIGHUP, etc.), return its signal. */
-enum gdb_signal gdb_signal_from_name (const char *);
-
-#endif /* COMMON_GDB_SIGNALS_H */
diff --git a/gdb/gdbsupport/gdb_splay_tree.h b/gdb/gdbsupport/gdb_splay_tree.h
deleted file mode 100644
index b0f533e..0000000
--- a/gdb/gdbsupport/gdb_splay_tree.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/* GDB wrapper for splay trees.
-
- Copyright (C) 2017-2020 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 COMMON_GDB_SPLAY_TREE_H
-#define COMMON_GDB_SPLAY_TREE_H
-
-#include "splay-tree.h"
-
-namespace gdb {
-
-struct splay_tree_deleter
-{
- void operator() (splay_tree tree) const
- {
- splay_tree_delete (tree);
- }
-};
-
-} /* namespace gdb */
-
-/* A unique pointer to a splay tree. */
-
-typedef std::unique_ptr<splay_tree_s, gdb::splay_tree_deleter>
- gdb_splay_tree_up;
-
-#endif /* COMMON_GDB_SPLAY_TREE_H */
diff --git a/gdb/gdbsupport/gdb_string_view.h b/gdb/gdbsupport/gdb_string_view.h
deleted file mode 100644
index c0ae7a8..0000000
--- a/gdb/gdbsupport/gdb_string_view.h
+++ /dev/null
@@ -1,563 +0,0 @@
-// Components for manipulating non-owning sequences of characters -*- C++ -*-
-
-
-#ifndef COMMON_GDB_STRING_VIEW_H
-#define COMMON_GDB_STRING_VIEW_H
-
-// Note: This file has been stolen from the gcc repo
-// (libstdc++-v3/include/experimental/string_view) and has local modifications.
-
-// Copyright (C) 2013-2020 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library 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, or (at your option)
-// any later version.
-
-// This library 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.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-//
-// N3762 basic_string_view library
-//
-
-
-#if __cplusplus >= 201703L
-
-#include <string_view>
-
-namespace gdb {
- using string_view = std::string_view;
-} /* namespace gdb */
-
-#else /* __cplusplus < 201703L */
-
-#include <string>
-#include <limits>
-#include "gdb_assert.h"
-
-namespace gdb {
-
- /**
- * @class basic_string_view <experimental/string_view>
- * @brief A non-owning reference to a string.
- *
- * @ingroup strings
- * @ingroup sequences
- * @ingroup experimental
- *
- * @tparam _CharT Type of character
- * @tparam _Traits Traits for character type, defaults to
- * char_traits<_CharT>.
- *
- * A basic_string_view looks like this:
- *
- * @code
- * _CharT* _M_str
- * size_t _M_len
- * @endcode
- */
- template<typename _CharT, typename _Traits = std::char_traits<_CharT>>
- class basic_string_view
- {
- public:
-
- // types
- using traits_type = _Traits;
- using value_type = _CharT;
- using pointer = const _CharT*;
- using const_pointer = const _CharT*;
- using reference = const _CharT&;
- using const_reference = const _CharT&;
- using const_iterator = const _CharT*;
- using iterator = const_iterator;
- using const_reverse_iterator = std::reverse_iterator<const_iterator>;
- using reverse_iterator = const_reverse_iterator;
- using size_type = size_t;
- using difference_type = ptrdiff_t;
- static constexpr size_type npos = size_type(-1);
-
- // [string.view.cons], construct/copy
-
- constexpr
- basic_string_view() noexcept
- : _M_len{0}, _M_str{nullptr}
- { }
-
- constexpr basic_string_view(const basic_string_view&) noexcept = default;
-
- template<typename _Allocator>
- basic_string_view(const std::basic_string<_CharT, _Traits,
- _Allocator>& __str) noexcept
- : _M_len{__str.length()}, _M_str{__str.data()}
- { }
-
- /*constexpr*/ basic_string_view(const _CharT* __str)
- : _M_len{__str == nullptr ? 0 : traits_type::length(__str)},
- _M_str{__str}
- { }
-
- constexpr basic_string_view(const _CharT* __str, size_type __len)
- : _M_len{__len},
- _M_str{__str}
- { }
-
- basic_string_view&
- operator=(const basic_string_view&) noexcept = default;
-
- // [string.view.iterators], iterators
-
- constexpr const_iterator
- begin() const noexcept
- { return this->_M_str; }
-
- constexpr const_iterator
- end() const noexcept
- { return this->_M_str + this->_M_len; }
-
- constexpr const_iterator
- cbegin() const noexcept
- { return this->_M_str; }
-
- constexpr const_iterator
- cend() const noexcept
- { return this->_M_str + this->_M_len; }
-
- const_reverse_iterator
- rbegin() const noexcept
- { return const_reverse_iterator(this->end()); }
-
- const_reverse_iterator
- rend() const noexcept
- { return const_reverse_iterator(this->begin()); }
-
- const_reverse_iterator
- crbegin() const noexcept
- { return const_reverse_iterator(this->end()); }
-
- const_reverse_iterator
- crend() const noexcept
- { return const_reverse_iterator(this->begin()); }
-
- // [string.view.capacity], capacity
-
- constexpr size_type
- size() const noexcept
- { return this->_M_len; }
-
- constexpr size_type
- length() const noexcept
- { return _M_len; }
-
- constexpr size_type
- max_size() const noexcept
- {
- return (npos - sizeof(size_type) - sizeof(void*))
- / sizeof(value_type) / 4;
- }
-
- constexpr bool
- empty() const noexcept
- { return this->_M_len == 0; }
-
- // [string.view.access], element access
-
- constexpr const _CharT&
- operator[](size_type __pos) const
- {
- // TODO: Assert to restore in a way compatible with the constexpr.
- // __glibcxx_assert(__pos < this->_M_len);
- return *(this->_M_str + __pos);
- }
-
- constexpr const _CharT&
- at(size_type __pos) const
- {
- return __pos < this->_M_len
- ? *(this->_M_str + __pos)
- : (error (_("basic_string_view::at: __pos "
- "(which is %zu) >= this->size() "
- "(which is %zu)"),
- __pos, this->size()),
- *this->_M_str);
- }
-
- constexpr const _CharT&
- front() const
- {
- // TODO: Assert to restore in a way compatible with the constexpr.
- // __glibcxx_assert(this->_M_len > 0);
- return *this->_M_str;
- }
-
- constexpr const _CharT&
- back() const
- {
- // TODO: Assert to restore in a way compatible with the constexpr.
- // __glibcxx_assert(this->_M_len > 0);
- return *(this->_M_str + this->_M_len - 1);
- }
-
- constexpr const _CharT*
- data() const noexcept
- { return this->_M_str; }
-
- // [string.view.modifiers], modifiers:
-
- /*constexpr*/ void
- remove_prefix(size_type __n)
- {
- gdb_assert (this->_M_len >= __n);
- this->_M_str += __n;
- this->_M_len -= __n;
- }
-
- /*constexpr*/ void
- remove_suffix(size_type __n)
- { this->_M_len -= __n; }
-
- /*constexpr*/ void
- swap(basic_string_view& __sv) noexcept
- {
- auto __tmp = *this;
- *this = __sv;
- __sv = __tmp;
- }
-
-
- // [string.view.ops], string operations:
-
- template<typename _Allocator>
- explicit operator std::basic_string<_CharT, _Traits, _Allocator>() const
- {
- return { this->_M_str, this->_M_len };
- }
-
- template<typename _Allocator = std::allocator<_CharT>>
- std::basic_string<_CharT, _Traits, _Allocator>
- to_string(const _Allocator& __alloc = _Allocator()) const
- {
- return { this->_M_str, this->_M_len, __alloc };
- }
-
- size_type
- copy(_CharT* __str, size_type __n, size_type __pos = 0) const
- {
- gdb_assert (__str != nullptr || __n == 0);
- if (__pos > this->_M_len)
- error (_("basic_string_view::copy: __pos "
- "(which is %zu) > this->size() "
- "(which is %zu)"),
- __pos, this->size());
- size_type __rlen{std::min(__n, size_type{this->_M_len - __pos})};
- for (auto __begin = this->_M_str + __pos,
- __end = __begin + __rlen; __begin != __end;)
- *__str++ = *__begin++;
- return __rlen;
- }
-
-
- // [string.view.ops], string operations:
-
- /*constexpr*/ basic_string_view
- substr(size_type __pos, size_type __n=npos) const
- {
- return __pos <= this->_M_len
- ? basic_string_view{this->_M_str + __pos,
- std::min(__n, size_type{this->_M_len - __pos})}
- : (error (_("basic_string_view::substr: __pos "
- "(which is %zu) > this->size() "
- "(which is %zu)"),
- __pos, this->size()), basic_string_view{});
- }
-
- /*constexpr*/ int
- compare(basic_string_view __str) const noexcept
- {
- int __ret = traits_type::compare(this->_M_str, __str._M_str,
- std::min(this->_M_len, __str._M_len));
- if (__ret == 0)
- __ret = _S_compare(this->_M_len, __str._M_len);
- return __ret;
- }
-
- /*constexpr*/ int
- compare(size_type __pos1, size_type __n1, basic_string_view __str) const
- { return this->substr(__pos1, __n1).compare(__str); }
-
- /*constexpr*/ int
- compare(size_type __pos1, size_type __n1,
- basic_string_view __str, size_type __pos2, size_type __n2) const
- { return this->substr(__pos1, __n1).compare(__str.substr(__pos2, __n2)); }
-
- /*constexpr*/ int
- compare(const _CharT* __str) const noexcept
- { return this->compare(basic_string_view{__str}); }
-
- /*constexpr*/ int
- compare(size_type __pos1, size_type __n1, const _CharT* __str) const
- { return this->substr(__pos1, __n1).compare(basic_string_view{__str}); }
-
- /*constexpr*/ int
- compare(size_type __pos1, size_type __n1,
- const _CharT* __str, size_type __n2) const
- {
- return this->substr(__pos1, __n1)
- .compare(basic_string_view(__str, __n2));
- }
-
- /*constexpr*/ size_type
- find(basic_string_view __str, size_type __pos = 0) const noexcept
- { return this->find(__str._M_str, __pos, __str._M_len); }
-
- /*constexpr*/ size_type
- find(_CharT __c, size_type __pos=0) const noexcept;
-
- /*constexpr*/ size_type
- find(const _CharT* __str, size_type __pos, size_type __n) const noexcept;
-
- /*constexpr*/ size_type
- find(const _CharT* __str, size_type __pos=0) const noexcept
- { return this->find(__str, __pos, traits_type::length(__str)); }
-
- /*constexpr*/ size_type
- rfind(basic_string_view __str, size_type __pos = npos) const noexcept
- { return this->rfind(__str._M_str, __pos, __str._M_len); }
-
- /*constexpr*/ size_type
- rfind(_CharT __c, size_type __pos = npos) const noexcept;
-
- /*constexpr*/ size_type
- rfind(const _CharT* __str, size_type __pos, size_type __n) const noexcept;
-
- /*constexpr*/ size_type
- rfind(const _CharT* __str, size_type __pos = npos) const noexcept
- { return this->rfind(__str, __pos, traits_type::length(__str)); }
-
- /*constexpr*/ size_type
- find_first_of(basic_string_view __str, size_type __pos = 0) const noexcept
- { return this->find_first_of(__str._M_str, __pos, __str._M_len); }
-
- /*constexpr*/ size_type
- find_first_of(_CharT __c, size_type __pos = 0) const noexcept
- { return this->find(__c, __pos); }
-
- /*constexpr*/ size_type
- find_first_of(const _CharT* __str, size_type __pos, size_type __n) const;
-
- /*constexpr*/ size_type
- find_first_of(const _CharT* __str, size_type __pos = 0) const noexcept
- { return this->find_first_of(__str, __pos, traits_type::length(__str)); }
-
- /*constexpr*/ size_type
- find_last_of(basic_string_view __str,
- size_type __pos = npos) const noexcept
- { return this->find_last_of(__str._M_str, __pos, __str._M_len); }
-
- size_type
- find_last_of(_CharT __c, size_type __pos=npos) const noexcept
- { return this->rfind(__c, __pos); }
-
- /*constexpr*/ size_type
- find_last_of(const _CharT* __str, size_type __pos, size_type __n) const;
-
- /*constexpr*/ size_type
- find_last_of(const _CharT* __str, size_type __pos = npos) const noexcept
- { return this->find_last_of(__str, __pos, traits_type::length(__str)); }
-
- /*constexpr*/ size_type
- find_first_not_of(basic_string_view __str,
- size_type __pos = 0) const noexcept
- { return this->find_first_not_of(__str._M_str, __pos, __str._M_len); }
-
- /*constexpr*/ size_type
- find_first_not_of(_CharT __c, size_type __pos = 0) const noexcept;
-
- /*constexpr*/ size_type
- find_first_not_of(const _CharT* __str,
- size_type __pos, size_type __n) const;
-
- /*constexpr*/ size_type
- find_first_not_of(const _CharT* __str, size_type __pos = 0) const noexcept
- {
- return this->find_first_not_of(__str, __pos,
- traits_type::length(__str));
- }
-
- /*constexpr*/ size_type
- find_last_not_of(basic_string_view __str,
- size_type __pos = npos) const noexcept
- { return this->find_last_not_of(__str._M_str, __pos, __str._M_len); }
-
- /*constexpr*/ size_type
- find_last_not_of(_CharT __c, size_type __pos = npos) const noexcept;
-
- /*constexpr*/ size_type
- find_last_not_of(const _CharT* __str,
- size_type __pos, size_type __n) const;
-
- /*constexpr*/ size_type
- find_last_not_of(const _CharT* __str,
- size_type __pos = npos) const noexcept
- {
- return this->find_last_not_of(__str, __pos,
- traits_type::length(__str));
- }
-
- private:
-
- static constexpr int
- _S_compare(size_type __n1, size_type __n2) noexcept
- {
- return difference_type(__n1 - __n2) > std::numeric_limits<int>::max()
- ? std::numeric_limits<int>::max()
- : difference_type(__n1 - __n2) < std::numeric_limits<int>::min()
- ? std::numeric_limits<int>::min()
- : static_cast<int>(difference_type(__n1 - __n2));
- }
-
- size_t _M_len;
- const _CharT* _M_str;
- };
-
- // [string.view.comparison], non-member basic_string_view comparison functions
-
- namespace __detail
- {
- // Identity transform to create a non-deduced context, so that only one
- // argument participates in template argument deduction and the other
- // argument gets implicitly converted to the deduced type. See n3766.html.
- template<typename _Tp>
- using __idt = typename std::common_type<_Tp>::type;
- }
-
- template<typename _CharT, typename _Traits>
- /*constexpr*/ bool
- operator==(basic_string_view<_CharT, _Traits> __x,
- basic_string_view<_CharT, _Traits> __y) noexcept
- { return __x.size() == __y.size() && __x.compare(__y) == 0; }
-
- template<typename _CharT, typename _Traits>
- /*constexpr*/ bool
- operator==(basic_string_view<_CharT, _Traits> __x,
- __detail::__idt<basic_string_view<_CharT, _Traits>> __y) noexcept
- { return __x.size() == __y.size() && __x.compare(__y) == 0; }
-
- template<typename _CharT, typename _Traits>
- /*constexpr*/ bool
- operator==(__detail::__idt<basic_string_view<_CharT, _Traits>> __x,
- basic_string_view<_CharT, _Traits> __y) noexcept
- { return __x.size() == __y.size() && __x.compare(__y) == 0; }
-
- template<typename _CharT, typename _Traits>
- /*constexpr*/ bool
- operator!=(basic_string_view<_CharT, _Traits> __x,
- basic_string_view<_CharT, _Traits> __y) noexcept
- { return !(__x == __y); }
-
- template<typename _CharT, typename _Traits>
- /*constexpr*/ bool
- operator!=(basic_string_view<_CharT, _Traits> __x,
- __detail::__idt<basic_string_view<_CharT, _Traits>> __y) noexcept
- { return !(__x == __y); }
-
- template<typename _CharT, typename _Traits>
- /*constexpr*/ bool
- operator!=(__detail::__idt<basic_string_view<_CharT, _Traits>> __x,
- basic_string_view<_CharT, _Traits> __y) noexcept
- { return !(__x == __y); }
-
- template<typename _CharT, typename _Traits>
- /*constexpr*/ bool
- operator< (basic_string_view<_CharT, _Traits> __x,
- basic_string_view<_CharT, _Traits> __y) noexcept
- { return __x.compare(__y) < 0; }
-
- template<typename _CharT, typename _Traits>
- /*constexpr*/ bool
- operator< (basic_string_view<_CharT, _Traits> __x,
- __detail::__idt<basic_string_view<_CharT, _Traits>> __y) noexcept
- { return __x.compare(__y) < 0; }
-
- template<typename _CharT, typename _Traits>
- /*constexpr*/ bool
- operator< (__detail::__idt<basic_string_view<_CharT, _Traits>> __x,
- basic_string_view<_CharT, _Traits> __y) noexcept
- { return __x.compare(__y) < 0; }
-
- template<typename _CharT, typename _Traits>
- /*constexpr*/ bool
- operator> (basic_string_view<_CharT, _Traits> __x,
- basic_string_view<_CharT, _Traits> __y) noexcept
- { return __x.compare(__y) > 0; }
-
- template<typename _CharT, typename _Traits>
- /*constexpr*/ bool
- operator> (basic_string_view<_CharT, _Traits> __x,
- __detail::__idt<basic_string_view<_CharT, _Traits>> __y) noexcept
- { return __x.compare(__y) > 0; }
-
- template<typename _CharT, typename _Traits>
- /*constexpr*/ bool
- operator> (__detail::__idt<basic_string_view<_CharT, _Traits>> __x,
- basic_string_view<_CharT, _Traits> __y) noexcept
- { return __x.compare(__y) > 0; }
-
- template<typename _CharT, typename _Traits>
- /*constexpr*/ bool
- operator<=(basic_string_view<_CharT, _Traits> __x,
- basic_string_view<_CharT, _Traits> __y) noexcept
- { return __x.compare(__y) <= 0; }
-
- template<typename _CharT, typename _Traits>
- /*constexpr*/ bool
- operator<=(basic_string_view<_CharT, _Traits> __x,
- __detail::__idt<basic_string_view<_CharT, _Traits>> __y) noexcept
- { return __x.compare(__y) <= 0; }
-
- template<typename _CharT, typename _Traits>
- /*constexpr*/ bool
- operator<=(__detail::__idt<basic_string_view<_CharT, _Traits>> __x,
- basic_string_view<_CharT, _Traits> __y) noexcept
- { return __x.compare(__y) <= 0; }
-
- template<typename _CharT, typename _Traits>
- /*constexpr*/ bool
- operator>=(basic_string_view<_CharT, _Traits> __x,
- basic_string_view<_CharT, _Traits> __y) noexcept
- { return __x.compare(__y) >= 0; }
-
- template<typename _CharT, typename _Traits>
- /*constexpr*/ bool
- operator>=(basic_string_view<_CharT, _Traits> __x,
- __detail::__idt<basic_string_view<_CharT, _Traits>> __y) noexcept
- { return __x.compare(__y) >= 0; }
-
- template<typename _CharT, typename _Traits>
- /*constexpr*/ bool
- operator>=(__detail::__idt<basic_string_view<_CharT, _Traits>> __x,
- basic_string_view<_CharT, _Traits> __y) noexcept
- { return __x.compare(__y) >= 0; }
-
- // basic_string_view typedef names
-
- using string_view = basic_string_view<char>;
-} /* namespace gdb */
-
-#include "gdb_string_view.tcc"
-
-#endif // __cplusplus < 201703L
-
-#endif /* COMMON_GDB_STRING_VIEW_H */
diff --git a/gdb/gdbsupport/gdb_string_view.tcc b/gdb/gdbsupport/gdb_string_view.tcc
deleted file mode 100644
index ebf5907..0000000
--- a/gdb/gdbsupport/gdb_string_view.tcc
+++ /dev/null
@@ -1,219 +0,0 @@
-// Components for manipulating non-owning sequences of characters -*- C++ -*-
-
-// Note: This file has been stolen from the gcc repo
-// (libstdc++-v3/include/experimental/bits/string_view.tcc) and has local
-// modifications.
-
-// Copyright (C) 2013-2020 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library 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, or (at your option)
-// any later version.
-
-// This library 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.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-// <http://www.gnu.org/licenses/>.
-
-/** @file experimental/bits/string_view.tcc
- * This is an internal header file, included by other library headers.
- * Do not attempt to use it directly. @headername{experimental/string_view}
- */
-
-//
-// N3762 basic_string_view library
-//
-
-#ifndef GDB_STRING_VIEW_TCC
-#define GDB_STRING_VIEW_TCC 1
-
-namespace gdb
-{
- template<typename _CharT, typename _Traits>
- /*constexpr*/ typename basic_string_view<_CharT, _Traits>::size_type
- basic_string_view<_CharT, _Traits>::
- find(const _CharT* __str, size_type __pos, size_type __n) const noexcept
- {
- gdb_assert (__str != nullptr || __n == 0);
-
- if (__n == 0)
- return __pos <= this->_M_len ? __pos : npos;
-
- if (__n <= this->_M_len)
- {
- for (; __pos <= this->_M_len - __n; ++__pos)
- if (traits_type::eq(this->_M_str[__pos], __str[0])
- && traits_type::compare(this->_M_str + __pos + 1,
- __str + 1, __n - 1) == 0)
- return __pos;
- }
- return npos;
- }
-
- template<typename _CharT, typename _Traits>
- /*constexpr*/ typename basic_string_view<_CharT, _Traits>::size_type
- basic_string_view<_CharT, _Traits>::
- find(_CharT __c, size_type __pos) const noexcept
- {
- size_type __ret = npos;
- if (__pos < this->_M_len)
- {
- const size_type __n = this->_M_len - __pos;
- const _CharT* __p = traits_type::find(this->_M_str + __pos, __n, __c);
- if (__p)
- __ret = __p - this->_M_str;
- }
- return __ret;
- }
-
- template<typename _CharT, typename _Traits>
- /*constexpr*/ typename basic_string_view<_CharT, _Traits>::size_type
- basic_string_view<_CharT, _Traits>::
- rfind(const _CharT* __str, size_type __pos, size_type __n) const noexcept
- {
- gdb_assert (__str != nullptr || __n == 0);
-
- if (__n <= this->_M_len)
- {
- __pos = std::min(size_type(this->_M_len - __n), __pos);
- do
- {
- if (traits_type::compare(this->_M_str + __pos, __str, __n) == 0)
- return __pos;
- }
- while (__pos-- > 0);
- }
- return npos;
- }
-
- template<typename _CharT, typename _Traits>
- /*constexpr*/ typename basic_string_view<_CharT, _Traits>::size_type
- basic_string_view<_CharT, _Traits>::
- rfind(_CharT __c, size_type __pos) const noexcept
- {
- size_type __size = this->_M_len;
- if (__size > 0)
- {
- if (--__size > __pos)
- __size = __pos;
- for (++__size; __size-- > 0; )
- if (traits_type::eq(this->_M_str[__size], __c))
- return __size;
- }
- return npos;
- }
-
- template<typename _CharT, typename _Traits>
- /*constexpr*/ typename basic_string_view<_CharT, _Traits>::size_type
- basic_string_view<_CharT, _Traits>::
- find_first_of(const _CharT* __str, size_type __pos, size_type __n) const
- {
- gdb_assert (__str != nullptr || __n == 0);
- for (; __n && __pos < this->_M_len; ++__pos)
- {
- const _CharT* __p = traits_type::find(__str, __n,
- this->_M_str[__pos]);
- if (__p)
- return __pos;
- }
- return npos;
- }
-
- template<typename _CharT, typename _Traits>
- /*constexpr*/ typename basic_string_view<_CharT, _Traits>::size_type
- basic_string_view<_CharT, _Traits>::
- find_last_of(const _CharT* __str, size_type __pos, size_type __n) const
- {
- gdb_assert (__str != nullptr || __n == 0);
- size_type __size = this->size();
- if (__size && __n)
- {
- if (--__size > __pos)
- __size = __pos;
- do
- {
- if (traits_type::find(__str, __n, this->_M_str[__size]))
- return __size;
- }
- while (__size-- != 0);
- }
- return npos;
- }
-
- template<typename _CharT, typename _Traits>
- /*constexpr*/ typename basic_string_view<_CharT, _Traits>::size_type
- basic_string_view<_CharT, _Traits>::
- find_first_not_of(const _CharT* __str, size_type __pos, size_type __n) const
- {
- gdb_assert (__str != nullptr || __n == 0);
- for (; __pos < this->_M_len; ++__pos)
- if (!traits_type::find(__str, __n, this->_M_str[__pos]))
- return __pos;
- return npos;
- }
-
- template<typename _CharT, typename _Traits>
- /*constexpr*/ typename basic_string_view<_CharT, _Traits>::size_type
- basic_string_view<_CharT, _Traits>::
- find_first_not_of(_CharT __c, size_type __pos) const noexcept
- {
- for (; __pos < this->_M_len; ++__pos)
- if (!traits_type::eq(this->_M_str[__pos], __c))
- return __pos;
- return npos;
- }
-
- template<typename _CharT, typename _Traits>
- /*constexpr*/ typename basic_string_view<_CharT, _Traits>::size_type
- basic_string_view<_CharT, _Traits>::
- find_last_not_of(const _CharT* __str, size_type __pos, size_type __n) const
- {
- gdb_assert (__str != nullptr || __n == 0);
- size_type __size = this->_M_len;
- if (__size)
- {
- if (--__size > __pos)
- __size = __pos;
- do
- {
- if (!traits_type::find(__str, __n, this->_M_str[__size]))
- return __size;
- }
- while (__size--);
- }
- return npos;
- }
-
- template<typename _CharT, typename _Traits>
- /*constexpr*/ typename basic_string_view<_CharT, _Traits>::size_type
- basic_string_view<_CharT, _Traits>::
- find_last_not_of(_CharT __c, size_type __pos) const noexcept
- {
- size_type __size = this->_M_len;
- if (__size)
- {
- if (--__size > __pos)
- __size = __pos;
- do
- {
- if (!traits_type::eq(this->_M_str[__size], __c))
- return __size;
- }
- while (__size--);
- }
- return npos;
- }
-} // namespace gdb
-
-#endif // GDB_STRING_VIEW_TCC
diff --git a/gdb/gdbsupport/gdb_sys_time.h b/gdb/gdbsupport/gdb_sys_time.h
deleted file mode 100644
index b3b0cbe..0000000
--- a/gdb/gdbsupport/gdb_sys_time.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Copyright (C) 2015-2020 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 COMMON_GDB_SYS_TIME_H
-#define COMMON_GDB_SYS_TIME_H
-
-#include <sys/time.h>
-
-/* On MinGW-w64, gnulib's sys/time.h replaces 'struct timeval' and
- gettimeofday with versions that support 64-bit time_t, for POSIX
- compliance. However, the gettimeofday replacement does not ever
- return time_t values larger than 31-bit, as it simply returns the
- system's gettimeofday's (signed) 32-bit result as (signed) 64-bit.
- Because we don't really need the POSIX compliance, and it ends up
- causing conflicts with other libraries we use that don't use gnulib
- and thus work with the native struct timeval, such as Winsock2's
- native 'select' and libiberty, simply undefine away gnulib's
- replacements. */
-#if GNULIB_defined_struct_timeval
-# undef timeval
-# undef gettimeofday
-#endif
-
-#endif /* COMMON_GDB_SYS_TIME_H */
diff --git a/gdb/gdbsupport/gdb_tilde_expand.c b/gdb/gdbsupport/gdb_tilde_expand.c
deleted file mode 100644
index 6671629..0000000
--- a/gdb/gdbsupport/gdb_tilde_expand.c
+++ /dev/null
@@ -1,95 +0,0 @@
-/* Perform tilde expansion on paths for GDB and gdbserver.
-
- Copyright (C) 2017-2020 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_tilde_expand.h"
-#include <glob.h>
-
-/* RAII-style class wrapping "glob". */
-
-class gdb_glob
-{
-public:
- /* Construct a "gdb_glob" object by calling "glob" with the provided
- parameters. This function can throw if "glob" fails. */
- gdb_glob (const char *pattern, int flags,
- int (*errfunc) (const char *epath, int eerrno))
- {
- int ret = glob (pattern, flags, errfunc, &m_glob);
-
- if (ret != 0)
- {
- if (ret == GLOB_NOMATCH)
- error (_("Could not find a match for '%s'."), pattern);
- else
- error (_("glob could not process pattern '%s'."),
- pattern);
- }
- }
-
- /* Destroy the object and free M_GLOB. */
- ~gdb_glob ()
- {
- globfree (&m_glob);
- }
-
- /* Return the GL_PATHC component of M_GLOB. */
- int pathc () const
- {
- return m_glob.gl_pathc;
- }
-
- /* Return the GL_PATHV component of M_GLOB. */
- char **pathv () const
- {
- return m_glob.gl_pathv;
- }
-
-private:
- /* The actual glob object we're dealing with. */
- glob_t m_glob;
-};
-
-/* See gdbsupport/gdb_tilde_expand.h. */
-
-std::string
-gdb_tilde_expand (const char *dir)
-{
- gdb_glob glob (dir, GLOB_TILDE_CHECK, NULL);
-
- gdb_assert (glob.pathc () > 0);
- /* "glob" may return more than one match to the path provided by the
- user, but we are only interested in the first match. */
- std::string expanded_dir = glob.pathv ()[0];
-
- return expanded_dir;
-}
-
-/* See gdbsupport/gdb_tilde_expand.h. */
-
-gdb::unique_xmalloc_ptr<char>
-gdb_tilde_expand_up (const char *dir)
-{
- gdb_glob glob (dir, GLOB_TILDE_CHECK, NULL);
-
- gdb_assert (glob.pathc () > 0);
- /* "glob" may return more than one match to the path provided by the
- user, but we are only interested in the first match. */
- return make_unique_xstrdup (glob.pathv ()[0]);
-}
diff --git a/gdb/gdbsupport/gdb_tilde_expand.h b/gdb/gdbsupport/gdb_tilde_expand.h
deleted file mode 100644
index 5f4ef60..0000000
--- a/gdb/gdbsupport/gdb_tilde_expand.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/* Perform tilde expansion on paths for GDB and gdbserver.
-
- Copyright (C) 2017-2020 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 COMMON_GDB_TILDE_EXPAND_H
-#define COMMON_GDB_TILDE_EXPAND_H
-
-/* Perform path expansion (i.e., tilde expansion) on DIR, and return
- the full path. */
-extern std::string gdb_tilde_expand (const char *dir);
-
-/* Same as GDB_TILDE_EXPAND, but return the full path as a
- gdb::unique_xmalloc_ptr<char>. */
-extern gdb::unique_xmalloc_ptr<char> gdb_tilde_expand_up (const char *dir);
-
-#endif /* COMMON_GDB_TILDE_EXPAND_H */
diff --git a/gdb/gdbsupport/gdb_unique_ptr.h b/gdb/gdbsupport/gdb_unique_ptr.h
deleted file mode 100644
index 5e383b9..0000000
--- a/gdb/gdbsupport/gdb_unique_ptr.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/* std::unique_ptr specializations for GDB.
-
- Copyright (C) 2016-2020 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 COMMON_GDB_UNIQUE_PTR_H
-#define COMMON_GDB_UNIQUE_PTR_H
-
-#include <memory>
-
-namespace gdb
-{
-/* Define gdb::unique_xmalloc_ptr, a std::unique_ptr that manages
- xmalloc'ed memory. */
-
-/* The deleter for std::unique_xmalloc_ptr. Uses xfree. */
-template <typename T>
-struct xfree_deleter
-{
- void operator() (T *ptr) const { xfree (ptr); }
-};
-
-/* Same, for arrays. */
-template <typename T>
-struct xfree_deleter<T[]>
-{
- void operator() (T *ptr) const { xfree (ptr); }
-};
-
-/* Import the standard unique_ptr to our namespace with a custom
- deleter. */
-
-template<typename T> using unique_xmalloc_ptr
- = std::unique_ptr<T, xfree_deleter<T>>;
-
-/* A no-op deleter. */
-template<typename T>
-struct noop_deleter
-{
- void operator() (T *ptr) const { }
-};
-
-} /* namespace gdb */
-
-/* Dup STR and return a unique_xmalloc_ptr for the result. */
-
-static inline gdb::unique_xmalloc_ptr<char>
-make_unique_xstrdup (const char *str)
-{
- return gdb::unique_xmalloc_ptr<char> (xstrdup (str));
-}
-
-#endif /* COMMON_GDB_UNIQUE_PTR_H */
diff --git a/gdb/gdbsupport/gdb_unlinker.h b/gdb/gdbsupport/gdb_unlinker.h
deleted file mode 100644
index 9d64cca..0000000
--- a/gdb/gdbsupport/gdb_unlinker.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/* Unlinking class
-
- Copyright (C) 2016-2020 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 COMMON_GDB_UNLINKER_H
-#define COMMON_GDB_UNLINKER_H
-
-namespace gdb
-{
-
-/* An object of this class holds a filename and, when the object goes
- of scope, the file is removed using unlink.
-
- A user of this class can request that the file be preserved using
- the "keep" method. */
-class unlinker
-{
- public:
-
- unlinker (const char *filename) ATTRIBUTE_NONNULL (2)
- : m_filename (filename)
- {
- gdb_assert (filename != NULL);
- }
-
- ~unlinker ()
- {
- if (m_filename != NULL)
- unlink (m_filename);
- }
-
- /* Keep the file, rather than unlink it. */
- void keep ()
- {
- m_filename = NULL;
- }
-
- private:
-
- const char *m_filename;
-};
-
-}
-
-#endif /* COMMON_GDB_UNLINKER_H */
diff --git a/gdb/gdbsupport/gdb_vecs.c b/gdb/gdbsupport/gdb_vecs.c
deleted file mode 100644
index bb81396..0000000
--- a/gdb/gdbsupport/gdb_vecs.c
+++ /dev/null
@@ -1,88 +0,0 @@
-/* Some commonly-used VEC types.
-
- Copyright (C) 2012-2020 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_vecs.h"
-#include "host-defs.h"
-
-/* Worker function to split character delimiter separated string of fields
- STR into a char pointer vector. */
-
-static void
-delim_string_to_char_ptr_vec_append
- (std::vector<gdb::unique_xmalloc_ptr<char>> *vecp, const char *str,
- char delimiter)
-{
- do
- {
- size_t this_len;
- const char *next_field;
- char *this_field;
-
- next_field = strchr (str, delimiter);
- if (next_field == NULL)
- this_len = strlen (str);
- else
- {
- this_len = next_field - str;
- next_field++;
- }
-
- this_field = (char *) xmalloc (this_len + 1);
- memcpy (this_field, str, this_len);
- this_field[this_len] = '\0';
- vecp->emplace_back (this_field);
-
- str = next_field;
- }
- while (str != NULL);
-}
-
-/* See gdb_vecs.h. */
-
-std::vector<gdb::unique_xmalloc_ptr<char>>
-delim_string_to_char_ptr_vec (const char *str, char delimiter)
-{
- std::vector<gdb::unique_xmalloc_ptr<char>> retval;
-
- delim_string_to_char_ptr_vec_append (&retval, str, delimiter);
-
- return retval;
-}
-
-/* See gdb_vecs.h. */
-
-void
-dirnames_to_char_ptr_vec_append
- (std::vector<gdb::unique_xmalloc_ptr<char>> *vecp, const char *dirnames)
-{
- delim_string_to_char_ptr_vec_append (vecp, dirnames, DIRNAME_SEPARATOR);
-}
-
-/* See gdb_vecs.h. */
-
-std::vector<gdb::unique_xmalloc_ptr<char>>
-dirnames_to_char_ptr_vec (const char *dirnames)
-{
- std::vector<gdb::unique_xmalloc_ptr<char>> retval;
-
- dirnames_to_char_ptr_vec_append (&retval, dirnames);
-
- return retval;
-}
diff --git a/gdb/gdbsupport/gdb_vecs.h b/gdb/gdbsupport/gdb_vecs.h
deleted file mode 100644
index ca7097a..0000000
--- a/gdb/gdbsupport/gdb_vecs.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/* Some commonly-used VEC types.
-
- Copyright (C) 2012-2020 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 COMMON_GDB_VECS_H
-#define COMMON_GDB_VECS_H
-
-/* Split STR, a list of DELIMITER-separated fields, into a char pointer vector.
-
- You may modify the returned strings. */
-
-extern std::vector<gdb::unique_xmalloc_ptr<char>>
- delim_string_to_char_ptr_vec (const char *str, char delimiter);
-
-/* Like dirnames_to_char_ptr_vec, but append the directories to *VECP. */
-
-extern void dirnames_to_char_ptr_vec_append
- (std::vector<gdb::unique_xmalloc_ptr<char>> *vecp, const char *dirnames);
-
-/* Split DIRNAMES by DIRNAME_SEPARATOR delimiter and return a list of all the
- elements in their original order. For empty string ("") DIRNAMES return
- list of one empty string ("") element.
-
- You may modify the returned strings. */
-
-extern std::vector<gdb::unique_xmalloc_ptr<char>>
- dirnames_to_char_ptr_vec (const char *dirnames);
-
-/* Remove the element pointed by iterator IT from VEC, not preserving the order
- of the remaining elements. Return the removed element. */
-
-template <typename T>
-T
-unordered_remove (std::vector<T> &vec, typename std::vector<T>::iterator it)
-{
- gdb_assert (it >= vec.begin () && it < vec.end ());
-
- T removed = std::move (*it);
- if (it != vec.end () - 1)
- *it = std::move (vec.back ());
- vec.pop_back ();
-
- return removed;
-}
-
-/* Remove the element at position IX from VEC, not preserving the order of the
- remaining elements. Return the removed element. */
-
-template <typename T>
-T
-unordered_remove (std::vector<T> &vec, typename std::vector<T>::size_type ix)
-{
- gdb_assert (ix < vec.size ());
-
- return unordered_remove (vec, vec.begin () + ix);
-}
-
-/* Remove the element at position IX from VEC, preserving the order the
- remaining elements. Return the removed element. */
-
-template <typename T>
-T
-ordered_remove (std::vector<T> &vec, typename std::vector<T>::size_type ix)
-{
- gdb_assert (ix < vec.size ());
-
- T removed = std::move (vec[ix]);
- vec.erase (vec.begin () + ix);
-
- return removed;
-}
-
-#endif /* COMMON_GDB_VECS_H */
diff --git a/gdb/gdbsupport/gdb_wait.c b/gdb/gdbsupport/gdb_wait.c
deleted file mode 100644
index 3213994..0000000
--- a/gdb/gdbsupport/gdb_wait.c
+++ /dev/null
@@ -1,85 +0,0 @@
-/* Support code for standard wait macros in gdb_wait.h.
-
- Copyright (C) 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_wait.h"
-
-#ifdef __MINGW32__
-
-/* The underlying idea is that when a Windows program is terminated by
- a fatal exception, its exit code is the value of that exception, as
- defined by the various EXCEPTION_* symbols in the Windows API
- headers. We thus emulate WTERMSIG etc. by translating the fatal
- exception codes to more-or-less equivalent Posix signals.
-
- The translation below is not perfect, because a program could
- legitimately exit normally with a status whose value happens to
- have the high bits set, but that's extremely rare, to say the
- least, and it is deemed such a negligibly small probability of
- false positives is justified by the utility of reporting the
- terminating signal in the "normal" cases. */
-
-# include <signal.h>
-
-# define WIN32_LEAN_AND_MEAN
-# include <windows.h> /* for EXCEPTION_* constants */
-
-struct xlate_status
-{
- /* The exit status (actually, fatal exception code). */
- DWORD status;
-
- /* The corresponding signal value. */
- int sig;
-};
-
-int
-windows_status_to_termsig (unsigned long status)
-{
- static const xlate_status status_xlate_tbl[] =
- {
- {EXCEPTION_ACCESS_VIOLATION, SIGSEGV},
- {EXCEPTION_IN_PAGE_ERROR, SIGSEGV},
- {EXCEPTION_INVALID_HANDLE, SIGSEGV},
- {EXCEPTION_ILLEGAL_INSTRUCTION, SIGILL},
- {EXCEPTION_NONCONTINUABLE_EXCEPTION, SIGILL},
- {EXCEPTION_ARRAY_BOUNDS_EXCEEDED, SIGSEGV},
- {EXCEPTION_FLT_DENORMAL_OPERAND, SIGFPE},
- {EXCEPTION_FLT_DIVIDE_BY_ZERO, SIGFPE},
- {EXCEPTION_FLT_INEXACT_RESULT, SIGFPE},
- {EXCEPTION_FLT_INVALID_OPERATION, SIGFPE},
- {EXCEPTION_FLT_OVERFLOW, SIGFPE},
- {EXCEPTION_FLT_STACK_CHECK, SIGFPE},
- {EXCEPTION_FLT_UNDERFLOW, SIGFPE},
- {EXCEPTION_INT_DIVIDE_BY_ZERO, SIGFPE},
- {EXCEPTION_INT_OVERFLOW, SIGFPE},
- {EXCEPTION_PRIV_INSTRUCTION, SIGILL},
- {EXCEPTION_STACK_OVERFLOW, SIGSEGV},
- {CONTROL_C_EXIT, SIGTERM}
- };
-
- for (const xlate_status &x : status_xlate_tbl)
- if (x.status == status)
- return x.sig;
-
- return -1;
-}
-
-#endif /* __MINGW32__ */
diff --git a/gdb/gdbsupport/gdb_wait.h b/gdb/gdbsupport/gdb_wait.h
deleted file mode 100644
index 3563b9c..0000000
--- a/gdb/gdbsupport/gdb_wait.h
+++ /dev/null
@@ -1,135 +0,0 @@
-/* Standard wait macros.
- Copyright (C) 2000-2020 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 COMMON_GDB_WAIT_H
-#define COMMON_GDB_WAIT_H
-
-#ifdef HAVE_SYS_WAIT_H
-#include <sys/wait.h> /* POSIX */
-#else
-#ifdef HAVE_WAIT_H
-#include <wait.h> /* legacy */
-#endif
-#endif
-
-/* Define how to access the int that the wait system call stores.
- This has been compatible in all Unix systems since time immemorial,
- but various well-meaning people have defined various different
- words for the same old bits in the same old int (sometimes claimed
- to be a struct). We just know it's an int and we use these macros
- to access the bits. */
-
-/* The following macros are defined equivalently to their definitions
- in POSIX.1. We fail to define WNOHANG and WUNTRACED, which POSIX.1
- <sys/wait.h> defines, since our code does not use waitpid() (but
- NOTE exception for GNU/Linux below). We also fail to declare
- wait() and waitpid().
-
- For MinGW, we use the fact that when a Windows program is
- terminated by a fatal exception, its exit code is the value of that
- exception, as defined by the various EXCEPTION_* symbols in the
- Windows API headers. See also gdb_wait.c. */
-
-#ifndef WIFEXITED
-# ifdef __MINGW32__
-# define WIFEXITED(w) (((w) & 0xC0000000) == 0)
-# else
-# define WIFEXITED(w) (((w)&0377) == 0)
-# endif
-#endif
-
-#ifndef WIFSIGNALED
-# ifdef __MINGW32__
-# define WIFSIGNALED(w) (((w) & 0xC0000000) == 0xC0000000)
-# else
-# define WIFSIGNALED(w) (((w)&0377) != 0177 && ((w)&~0377) == 0)
-# endif
-#endif
-
-#ifndef WIFSTOPPED
-#ifdef IBM6000
-
-/* Unfortunately, the above comment (about being compatible in all Unix
- systems) is not quite correct for AIX, sigh. And AIX 3.2 can generate
- status words like 0x57c (sigtrap received after load), and gdb would
- choke on it. */
-
-#define WIFSTOPPED(w) ((w)&0x40)
-
-#else
-#define WIFSTOPPED(w) (((w)&0377) == 0177)
-#endif
-#endif
-
-#ifndef WEXITSTATUS
-# ifdef __MINGW32__
-# define WEXITSTATUS(w) ((w) & ~0xC0000000)
-# else
-# define WEXITSTATUS(w) (((w) >> 8) & 0377) /* same as WRETCODE */
-# endif
-#endif
-
-#ifndef WTERMSIG
-# ifdef __MINGW32__
-extern int windows_status_to_termsig (unsigned long);
-# define WTERMSIG(w) windows_status_to_termsig (w)
-# else
-# define WTERMSIG(w) ((w) & 0177)
-# endif
-#endif
-
-#ifndef WSTOPSIG
-#define WSTOPSIG WEXITSTATUS
-#endif
-
-/* These are not defined in POSIX, but are used by our programs. */
-
-#ifndef WSETEXIT
-# ifdef W_EXITCODE
-#define WSETEXIT(w,status) ((w) = W_EXITCODE(status,0))
-# else
-#define WSETEXIT(w,status) ((w) = (0 | ((status) << 8)))
-# endif
-#endif
-
-#ifndef W_STOPCODE
-#define W_STOPCODE(sig) ((sig) << 8 | 0x7f)
-#endif
-
-#ifndef WSETSTOP
-#define WSETSTOP(w,sig) ((w) = W_STOPCODE(sig))
-#endif
-
-/* For native GNU/Linux we may use waitpid and the __WCLONE option.
- <GRIPE> It is of course dangerous not to use the REAL header file...
- </GRIPE>. */
-
-/* Bits in the third argument to `waitpid'. */
-#ifndef WNOHANG
-#define WNOHANG 1 /* Don't block waiting. */
-#endif
-
-#ifndef WUNTRACED
-#define WUNTRACED 2 /* Report status of stopped children. */
-#endif
-
-#ifndef __WCLONE
-#define __WCLONE 0x80000000 /* Wait for cloned process. */
-#endif
-
-#endif /* COMMON_GDB_WAIT_H */
diff --git a/gdb/gdbsupport/hash_enum.h b/gdb/gdbsupport/hash_enum.h
deleted file mode 100644
index a6c519a..0000000
--- a/gdb/gdbsupport/hash_enum.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/* A hasher for enums.
-
- Copyright (C) 2017-2020 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 COMMON_HASH_ENUM_H
-#define COMMON_HASH_ENUM_H
-
-/* A hasher for enums, which was missing in C++11:
- http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2148
-*/
-
-namespace gdb {
-
-/* Helper struct for hashing enum types. */
-template<typename T>
-struct hash_enum
-{
- typedef size_t result_type;
- typedef T argument_type;
-
- size_t operator() (T val) const noexcept
- {
- using underlying = typename std::underlying_type<T>::type;
- return std::hash<underlying> () (static_cast<underlying> (val));
- }
-};
-
-} /* namespace gdb */
-
-#endif /* COMMON_HASH_ENUM_H */
diff --git a/gdb/gdbsupport/host-defs.h b/gdb/gdbsupport/host-defs.h
deleted file mode 100644
index 925a497..0000000
--- a/gdb/gdbsupport/host-defs.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/* Basic host-specific definitions for GDB.
- Copyright (C) 1986-2020 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 COMMON_HOST_DEFS_H
-#define COMMON_HOST_DEFS_H
-
-#include <limits.h>
-
-/* Static host-system-dependent parameters for GDB. */
-
-/* * Number of bits in a char or unsigned char for the target machine.
- Just like CHAR_BIT in <limits.h> but describes the target machine. */
-#if !defined (TARGET_CHAR_BIT)
-#define TARGET_CHAR_BIT 8
-#endif
-
-/* * If we picked up a copy of CHAR_BIT from a configuration file
- (which may get it by including <limits.h>) then use it to set
- the number of bits in a host char. If not, use the same size
- as the target. */
-
-#if defined (CHAR_BIT)
-#define HOST_CHAR_BIT CHAR_BIT
-#else
-#define HOST_CHAR_BIT TARGET_CHAR_BIT
-#endif
-
-#ifdef __MSDOS__
-# define CANT_FORK
-# define GLOBAL_CURDIR
-# define DIRNAME_SEPARATOR ';'
-#endif
-
-#if !defined (__CYGWIN__) && defined (_WIN32)
-# define DIRNAME_SEPARATOR ';'
-#endif
-
-#ifndef DIRNAME_SEPARATOR
-#define DIRNAME_SEPARATOR ':'
-#endif
-
-#ifndef SLASH_STRING
-#define SLASH_STRING "/"
-#endif
-
-#endif /* COMMON_HOST_DEFS_H */
diff --git a/gdb/gdbsupport/job-control.c b/gdb/gdbsupport/job-control.c
deleted file mode 100644
index 381c5f0..0000000
--- a/gdb/gdbsupport/job-control.c
+++ /dev/null
@@ -1,86 +0,0 @@
-/* Job control and terminal related functions, for GDB and gdbserver
- when running under Unix.
-
- Copyright (C) 1986-2020 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 "job-control.h"
-#ifdef HAVE_TERMIOS_H
-#include <termios.h>
-#endif
-#include <unistd.h>
-
-/* Nonzero if we have job control. */
-int job_control;
-
-/* Set the process group ID of the inferior.
-
- Just using job_control only does part of it because setpgid or
- setpgrp might not exist on a system without job control.
-
- For a more clean implementation, in libiberty, put a setpgid which merely
- calls setpgrp and a setpgrp which does nothing (any system with job control
- will have one or the other). */
-
-int
-gdb_setpgid ()
-{
- int retval = 0;
-
- if (job_control)
- {
-#ifdef HAVE_SETPGID
- /* The call setpgid (0, 0) is supposed to work and mean the same
- thing as this, but on Ultrix 4.2A it fails with EPERM (and
- setpgid (getpid (), getpid ()) succeeds). */
- retval = setpgid (getpid (), getpid ());
-#else
-#ifdef HAVE_SETPGRP
-#ifdef SETPGRP_VOID
- retval = setpgrp ();
-#else
- retval = setpgrp (getpid (), getpid ());
-#endif
-#endif /* HAVE_SETPGRP */
-#endif /* HAVE_SETPGID */
- }
-
- return retval;
-}
-
-/* See gdbsupport/common-terminal.h. */
-
-void
-have_job_control ()
-{
- /* OK, figure out whether we have job control. If termios is not
- available, leave job_control 0. */
-#if defined (HAVE_TERMIOS_H)
- /* Do all systems with termios have the POSIX way of identifying job
- control? I hope so. */
-#ifdef _POSIX_JOB_CONTROL
- job_control = 1;
-#else
-#ifdef _SC_JOB_CONTROL
- job_control = sysconf (_SC_JOB_CONTROL);
-#else
- job_control = 0; /* Have to assume the worst. */
-#endif /* _SC_JOB_CONTROL */
-#endif /* _POSIX_JOB_CONTROL */
-#endif /* HAVE_TERMIOS_H */
-}
diff --git a/gdb/gdbsupport/job-control.h b/gdb/gdbsupport/job-control.h
deleted file mode 100644
index 23e503d..0000000
--- a/gdb/gdbsupport/job-control.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Job control and terminal related functions, for GDB and gdbserver
- when running under Unix.
-
- Copyright (C) 1986-2020 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 COMMON_JOB_CONTROL_H
-#define COMMON_JOB_CONTROL_H
-
-/* Do we have job control? Can be assumed to always be the same
- within a given run of GDB. Use in gdb/inflow.c and
- gdbsupport/common-inflow.c. */
-extern int job_control;
-
-/* Set the process group of the caller to its own pid, or do nothing
- if we lack job control. */
-extern int gdb_setpgid ();
-
-/* Determine whether we have job control, and set variable JOB_CONTROL
- accordingly. This function must be called before any use of
- JOB_CONTROL. */
-extern void have_job_control ();
-
-#endif /* COMMON_JOB_CONTROL_H */
diff --git a/gdb/gdbsupport/netstuff.c b/gdb/gdbsupport/netstuff.c
deleted file mode 100644
index 1bf8f4b..0000000
--- a/gdb/gdbsupport/netstuff.c
+++ /dev/null
@@ -1,154 +0,0 @@
-/* Operations on network stuff.
- Copyright (C) 2018-2020 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 "netstuff.h"
-#include <algorithm>
-
-#ifdef USE_WIN32API
-#include <ws2tcpip.h>
-#else
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <netdb.h>
-#include <sys/socket.h>
-#include <netinet/tcp.h>
-#endif
-
-/* See gdbsupport/netstuff.h. */
-
-scoped_free_addrinfo::~scoped_free_addrinfo ()
-{
- freeaddrinfo (m_res);
-}
-
-/* See gdbsupport/netstuff.h. */
-
-parsed_connection_spec
-parse_connection_spec_without_prefix (std::string spec, struct addrinfo *hint)
-{
- parsed_connection_spec ret;
- size_t last_colon_pos = 0;
- /* We're dealing with IPv6 if:
-
- - ai_family is AF_INET6, or
- - ai_family is not AF_INET, and
- - spec[0] is '[', or
- - the number of ':' on spec is greater than 1. */
- bool is_ipv6 = (hint->ai_family == AF_INET6
- || (hint->ai_family != AF_INET
- && (spec[0] == '['
- || std::count (spec.begin (),
- spec.end (), ':') > 1)));
-
- if (is_ipv6)
- {
- if (spec[0] == '[')
- {
- /* IPv6 addresses can be written as '[ADDR]:PORT', and we
- support this notation. */
- size_t close_bracket_pos = spec.find_first_of (']');
-
- if (close_bracket_pos == std::string::npos)
- error (_("Missing close bracket in hostname '%s'"),
- spec.c_str ());
-
- hint->ai_family = AF_INET6;
-
- const char c = spec[close_bracket_pos + 1];
-
- if (c == '\0')
- last_colon_pos = std::string::npos;
- else if (c != ':')
- error (_("Invalid cruft after close bracket in '%s'"),
- spec.c_str ());
-
- /* Erase both '[' and ']'. */
- spec.erase (0, 1);
- spec.erase (close_bracket_pos - 1, 1);
- }
- else if (spec.find_first_of (']') != std::string::npos)
- error (_("Missing open bracket in hostname '%s'"),
- spec.c_str ());
- }
-
- if (last_colon_pos == 0)
- last_colon_pos = spec.find_last_of (':');
-
- /* The length of the hostname part. */
- size_t host_len;
-
- if (last_colon_pos != std::string::npos)
- {
- /* The user has provided a port. */
- host_len = last_colon_pos;
- ret.port_str = spec.substr (last_colon_pos + 1);
- }
- else
- host_len = spec.size ();
-
- ret.host_str = spec.substr (0, host_len);
-
- /* Default hostname is localhost. */
- if (ret.host_str.empty ())
- ret.host_str = "localhost";
-
- return ret;
-}
-
-/* See gdbsupport/netstuff.h. */
-
-parsed_connection_spec
-parse_connection_spec (const char *spec, struct addrinfo *hint)
-{
- /* Struct to hold the association between valid prefixes, their
- family and socktype. */
- struct host_prefix
- {
- /* The prefix. */
- const char *prefix;
-
- /* The 'ai_family'. */
- int family;
-
- /* The 'ai_socktype'. */
- int socktype;
- };
- static const struct host_prefix prefixes[] =
- {
- { "udp:", AF_UNSPEC, SOCK_DGRAM },
- { "tcp:", AF_UNSPEC, SOCK_STREAM },
- { "udp4:", AF_INET, SOCK_DGRAM },
- { "tcp4:", AF_INET, SOCK_STREAM },
- { "udp6:", AF_INET6, SOCK_DGRAM },
- { "tcp6:", AF_INET6, SOCK_STREAM },
- };
-
- for (const host_prefix prefix : prefixes)
- if (startswith (spec, prefix.prefix))
- {
- spec += strlen (prefix.prefix);
- hint->ai_family = prefix.family;
- hint->ai_socktype = prefix.socktype;
- hint->ai_protocol
- = hint->ai_socktype == SOCK_DGRAM ? IPPROTO_UDP : IPPROTO_TCP;
- break;
- }
-
- return parse_connection_spec_without_prefix (spec, hint);
-}
diff --git a/gdb/gdbsupport/netstuff.h b/gdb/gdbsupport/netstuff.h
deleted file mode 100644
index a987d7f..0000000
--- a/gdb/gdbsupport/netstuff.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/* Operations on network stuff.
- Copyright (C) 2018-2020 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 COMMON_NETSTUFF_H
-#define COMMON_NETSTUFF_H
-
-#include <string>
-
-/* Like NI_MAXHOST/NI_MAXSERV, but enough for numeric forms. */
-#define GDB_NI_MAX_ADDR 64
-#define GDB_NI_MAX_PORT 16
-
-/* Helper class to guarantee that we always call 'freeaddrinfo'. */
-
-class scoped_free_addrinfo
-{
-public:
- /* Default constructor. */
- explicit scoped_free_addrinfo (struct addrinfo *ainfo)
- : m_res (ainfo)
- {
- }
-
- /* Destructor responsible for free'ing M_RES by calling
- 'freeaddrinfo'. */
- ~scoped_free_addrinfo ();
-
- DISABLE_COPY_AND_ASSIGN (scoped_free_addrinfo);
-
-private:
- /* The addrinfo resource. */
- struct addrinfo *m_res;
-};
-
-/* The struct we return after parsing the connection spec. */
-
-struct parsed_connection_spec
-{
- /* The hostname. */
- std::string host_str;
-
- /* The port, if any. */
- std::string port_str;
-};
-
-
-/* Parse SPEC (which is a string in the form of "ADDR:PORT") and
- return a 'parsed_connection_spec' structure with the proper fields
- filled in. Also adjust HINT accordingly. */
-extern parsed_connection_spec
- parse_connection_spec_without_prefix (std::string spec,
- struct addrinfo *hint);
-
-/* Parse SPEC (which is a string in the form of
- "[tcp[6]:|udp[6]:]ADDR:PORT") and return a 'parsed_connection_spec'
- structure with the proper fields filled in. Also adjust HINT
- accordingly. */
-extern parsed_connection_spec parse_connection_spec (const char *spec,
- struct addrinfo *hint);
-
-#endif /* COMMON_NETSTUFF_H */
diff --git a/gdb/gdbsupport/new-op.c b/gdb/gdbsupport/new-op.c
deleted file mode 100644
index cf2525c..0000000
--- a/gdb/gdbsupport/new-op.c
+++ /dev/null
@@ -1,95 +0,0 @@
-/* Replace operator new/new[], for GDB, the GNU debugger.
-
- Copyright (C) 2016-2020 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/>. */
-
-/* GCC does not understand __has_feature. */
-#if !defined(__has_feature)
-# define __has_feature(x) 0
-#endif
-
-#if !__has_feature(address_sanitizer) && !defined(__SANITIZE_ADDRESS__)
-#include "common-defs.h"
-#include "host-defs.h"
-#include <new>
-
-/* Override operator new / operator new[], in order to internal_error
- on allocation failure and thus query the user for abort/core
- dump/continue, just like xmalloc does. We don't do this from a
- new-handler function instead (std::set_new_handler) because we want
- to catch allocation errors from within global constructors too.
-
- Skip overriding if building with -fsanitize=address though.
- Address sanitizer wants to override operator new/delete too in
- order to detect malloc+delete and new+free mismatches. Our
- versions would mask out ASan's, with the result of losing that
- useful mismatch detection.
-
- Note that C++ implementations could either have their throw
- versions call the nothrow versions (libstdc++), or the other way
- around (clang/libc++). For that reason, we replace both throw and
- nothrow variants and call malloc directly. */
-
-void *
-operator new (std::size_t sz)
-{
- /* malloc (0) is unpredictable; avoid it. */
- if (sz == 0)
- sz = 1;
-
- void *p = malloc (sz); /* ARI: malloc */
- if (p == NULL)
- {
- /* If the user decides to continue debugging, throw a
- gdb_quit_bad_alloc exception instead of a regular QUIT
- gdb_exception. The former extends both std::bad_alloc and a
- QUIT gdb_exception. This is necessary because operator new
- can only ever throw std::bad_alloc, or something that extends
- it. */
- try
- {
- malloc_failure (sz);
- }
- catch (gdb_exception &ex)
- {
- throw gdb_quit_bad_alloc (std::move (ex));
- }
- }
- return p;
-}
-
-void *
-operator new (std::size_t sz, const std::nothrow_t&) noexcept
-{
- /* malloc (0) is unpredictable; avoid it. */
- if (sz == 0)
- sz = 1;
- return malloc (sz); /* ARI: malloc */
-}
-
-void *
-operator new[] (std::size_t sz)
-{
- return ::operator new (sz);
-}
-
-void*
-operator new[] (std::size_t sz, const std::nothrow_t&) noexcept
-{
- return ::operator new (sz, std::nothrow);
-}
-#endif
diff --git a/gdb/gdbsupport/next-iterator.h b/gdb/gdbsupport/next-iterator.h
deleted file mode 100644
index ad37412..0000000
--- a/gdb/gdbsupport/next-iterator.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/* A "next" iterator for GDB, the GNU debugger.
- Copyright (C) 2019-2020 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 COMMON_NEXT_ITERATOR_H
-#define COMMON_NEXT_ITERATOR_H
-
-/* An iterator that uses the 'next' field of a type to iterate. This
- can be used with various GDB types that are stored as linked
- lists. */
-
-template<typename T>
-struct next_iterator
-{
- typedef next_iterator self_type;
- typedef T *value_type;
- typedef T *&reference;
- typedef T **pointer;
- typedef std::forward_iterator_tag iterator_category;
- typedef int difference_type;
-
- explicit next_iterator (T *item)
- : m_item (item)
- {
- }
-
- /* Create a one-past-the-end iterator. */
- next_iterator ()
- : m_item (nullptr)
- {
- }
-
- value_type operator* () const
- {
- return m_item;
- }
-
- bool operator== (const self_type &other) const
- {
- return m_item == other.m_item;
- }
-
- bool operator!= (const self_type &other) const
- {
- return m_item != other.m_item;
- }
-
- self_type &operator++ ()
- {
- m_item = m_item->next;
- return *this;
- }
-
-private:
-
- T *m_item;
-};
-
-/* A range adapter that allows iterating over a linked list. */
-
-template<typename T, typename Iterator = next_iterator<T>>
-class next_adapter
-{
-public:
-
- explicit next_adapter (T *item)
- : m_item (item)
- {
- }
-
- using iterator = Iterator;
-
- iterator begin () const
- {
- return iterator (m_item);
- }
-
- iterator end () const
- {
- return iterator ();
- }
-
-private:
-
- T *m_item;
-};
-
-#endif /* COMMON_NEXT_ITERATOR_H */
diff --git a/gdb/gdbsupport/observable.h b/gdb/gdbsupport/observable.h
deleted file mode 100644
index 0468eba..0000000
--- a/gdb/gdbsupport/observable.h
+++ /dev/null
@@ -1,119 +0,0 @@
-/* Observers
-
- Copyright (C) 2016-2020 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 COMMON_OBSERVABLE_H
-#define COMMON_OBSERVABLE_H
-
-#include <algorithm>
-#include <functional>
-#include <vector>
-
-namespace gdb
-{
-
-namespace observers
-{
-
-extern unsigned int observer_debug;
-
-/* An observer is an entity which is interested in being notified
- when GDB reaches certain states, or certain events occur in GDB.
- The entity being observed is called the observable. To receive
- notifications, the observer attaches a callback to the observable.
- One observable can have several observers.
-
- The observer implementation is also currently not reentrant. In
- particular, it is therefore not possible to call the attach or
- detach routines during a notification. */
-
-/* The type of a key that can be passed to attach, which can be passed
- to detach to remove associated observers. Tokens have address
- identity, and are thus usually const globals. */
-struct token
-{
- token () = default;
-
- DISABLE_COPY_AND_ASSIGN (token);
-};
-
-template<typename... T>
-class observable
-{
-public:
-
- typedef std::function<void (T...)> func_type;
-
- explicit observable (const char *name)
- : m_name (name)
- {
- }
-
- DISABLE_COPY_AND_ASSIGN (observable);
-
- /* Attach F as an observer to this observable. F cannot be
- detached. */
- void attach (const func_type &f)
- {
- m_observers.emplace_back (nullptr, f);
- }
-
- /* Attach F as an observer to this observable. T is a reference to
- a token that can be used to later remove F. */
- void attach (const func_type &f, const token &t)
- {
- m_observers.emplace_back (&t, f);
- }
-
- /* Remove observers associated with T from this observable. T is
- the token that was previously passed to any number of "attach"
- calls. */
- void detach (const token &t)
- {
- auto iter = std::remove_if (m_observers.begin (),
- m_observers.end (),
- [&] (const std::pair<const token *,
- func_type> &e)
- {
- return e.first == &t;
- });
-
- m_observers.erase (iter, m_observers.end ());
- }
-
- /* Notify all observers that are attached to this observable. */
- void notify (T... args) const
- {
- if (observer_debug)
- fprintf_unfiltered (gdb_stdlog, "observable %s notify() called\n",
- m_name);
- for (auto &&e : m_observers)
- e.second (args...);
- }
-
-private:
-
- std::vector<std::pair<const token *, func_type>> m_observers;
- const char *m_name;
-};
-
-} /* namespace observers */
-
-} /* namespace gdb */
-
-#endif /* COMMON_OBSERVABLE_H */
diff --git a/gdb/gdbsupport/offset-type.h b/gdb/gdbsupport/offset-type.h
deleted file mode 100644
index b68cb45..0000000
--- a/gdb/gdbsupport/offset-type.h
+++ /dev/null
@@ -1,133 +0,0 @@
-/* Offset types for GDB.
-
- Copyright (C) 2017-2020 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/>. */
-
-/* Define an "offset" type. Offset types are distinct integer types
- that are used to represent an offset into anything that is
- addressable. For example, an offset into a DWARF debug section.
- The idea is catch mixing unrelated offset types at compile time, in
- code that needs to manipulate multiple different kinds of offsets
- that are easily confused. They're safer to use than native
- integers, because they have no implicit conversion to anything.
- And also, since they're implemented as "enum class" strong
- typedefs, they're still integers ABI-wise, making them a bit more
- efficient than wrapper structs on some ABIs.
-
- Some properties of offset types, loosely modeled on pointers:
-
- - You can compare offsets of the same type for equality and order.
- You can't compare an offset with an unrelated type.
-
- - You can add/substract an integer to/from an offset, which gives
- you back a shifted offset.
-
- - You can subtract two offsets of the same type, which gives you
- back the delta as an integer (of the enum class's underlying
- type), not as an offset type.
-
- - You can't add two offsets of the same type, as that would not
- make sense.
-
- However, unlike pointers, you can't deference offset types. */
-
-#ifndef COMMON_OFFSET_TYPE_H
-#define COMMON_OFFSET_TYPE_H
-
-/* Declare TYPE as being an offset type. This declares the type and
- enables the operators defined below. */
-#define DEFINE_OFFSET_TYPE(TYPE, UNDERLYING) \
- enum class TYPE : UNDERLYING {}; \
- void is_offset_type (TYPE)
-
-/* The macro macro is all you need to know use offset types. The rest
- below is all implementation detail. */
-
-/* For each enum class type that you want to support arithmetic
- operators, declare an "is_offset_type" overload that has exactly
- one parameter, of type that enum class. E.g.,:
-
- void is_offset_type (sect_offset);
-
- The function does not need to be defined, only declared.
- DEFINE_OFFSET_TYPE declares this.
-
- A function declaration is preferred over a traits type, because the
- former allows calling the DEFINE_OFFSET_TYPE macro inside a
- namespace to define the corresponding offset type in that
- namespace. The compiler finds the corresponding is_offset_type
- function via ADL.
-*/
-
-/* Adding or subtracting an integer to an offset type shifts the
- offset. This is like "PTR = PTR + INT" and "PTR += INT". */
-
-#define DEFINE_OFFSET_ARITHM_OP(OP) \
- template<typename E, \
- typename = decltype (is_offset_type (std::declval<E> ()))> \
- constexpr E \
- operator OP (E lhs, typename std::underlying_type<E>::type rhs) \
- { \
- using underlying = typename std::underlying_type<E>::type; \
- return (E) (static_cast<underlying> (lhs) OP rhs); \
- } \
- \
- template<typename E, \
- typename = decltype (is_offset_type (std::declval<E> ()))> \
- constexpr E \
- operator OP (typename std::underlying_type<E>::type lhs, E rhs) \
- { \
- using underlying = typename std::underlying_type<E>::type; \
- return (E) (lhs OP static_cast<underlying> (rhs)); \
- } \
- \
- template<typename E, \
- typename = decltype (is_offset_type (std::declval<E> ()))> \
- E & \
- operator OP ## = (E &lhs, typename std::underlying_type<E>::type rhs) \
- { \
- using underlying = typename std::underlying_type<E>::type; \
- lhs = (E) (static_cast<underlying> (lhs) OP rhs); \
- return lhs; \
- }
-
-DEFINE_OFFSET_ARITHM_OP(+)
-DEFINE_OFFSET_ARITHM_OP(-)
-
-/* Adding two offset types doesn't make sense, just like "PTR + PTR"
- doesn't make sense. This is defined as a deleted function so that
- a compile error easily brings you to this comment. */
-
-template<typename E,
- typename = decltype (is_offset_type (std::declval<E> ()))>
-constexpr typename std::underlying_type<E>::type
-operator+ (E lhs, E rhs) = delete;
-
-/* Subtracting two offset types, however, gives you back the
- difference between the offsets, as an underlying type. Similar to
- how "PTR2 - PTR1" returns a ptrdiff_t. */
-
-template<typename E,
- typename = decltype (is_offset_type (std::declval<E> ()))>
-constexpr typename std::underlying_type<E>::type
-operator- (E lhs, E rhs)
-{
- using underlying = typename std::underlying_type<E>::type;
- return static_cast<underlying> (lhs) - static_cast<underlying> (rhs);
-}
-
-#endif /* COMMON_OFFSET_TYPE_H */
diff --git a/gdb/gdbsupport/parallel-for.h b/gdb/gdbsupport/parallel-for.h
deleted file mode 100644
index 2545152..0000000
--- a/gdb/gdbsupport/parallel-for.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/* Parallel for loops
-
- Copyright (C) 2019-2020 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 GDBSUPPORT_PARALLEL_FOR_H
-#define GDBSUPPORT_PARALLEL_FOR_H
-
-#include <algorithm>
-#if CXX_STD_THREAD
-#include <thread>
-#include "gdbsupport/thread-pool.h"
-#endif
-
-namespace gdb
-{
-
-/* A very simple "parallel for". This splits the range of iterators
- into subranges, and then passes each subrange to the callback. The
- work may or may not be done in separate threads.
-
- This approach was chosen over having the callback work on single
- items because it makes it simple for the caller to do
- once-per-subrange initialization and destruction. */
-
-template<class RandomIt, class RangeFunction>
-void
-parallel_for_each (RandomIt first, RandomIt last, RangeFunction callback)
-{
-#if CXX_STD_THREAD
- /* So we can use a local array below. */
- const size_t local_max = 16;
- size_t n_threads = std::min (thread_pool::g_thread_pool->thread_count (),
- local_max);
- size_t n_actual_threads = 0;
- std::future<void> futures[local_max];
-
- size_t n_elements = last - first;
- if (n_threads > 1)
- {
- /* Arbitrarily require that there should be at least 10 elements
- in a thread. */
- if (n_elements / n_threads < 10)
- n_threads = std::max (n_elements / 10, (size_t) 1);
- size_t elts_per_thread = n_elements / n_threads;
- n_actual_threads = n_threads - 1;
- for (int i = 0; i < n_actual_threads; ++i)
- {
- RandomIt end = first + elts_per_thread;
- auto task = [=] ()
- {
- callback (first, end);
- };
-
- futures[i] = gdb::thread_pool::g_thread_pool->post_task (task);
- first = end;
- }
- }
-#endif /* CXX_STD_THREAD */
-
- /* Process all the remaining elements in the main thread. */
- callback (first, last);
-
-#if CXX_STD_THREAD
- for (int i = 0; i < n_actual_threads; ++i)
- futures[i].wait ();
-#endif /* CXX_STD_THREAD */
-}
-
-}
-
-#endif /* GDBSUPPORT_PARALLEL_FOR_H */
diff --git a/gdb/gdbsupport/pathstuff.c b/gdb/gdbsupport/pathstuff.c
deleted file mode 100644
index 1f60fd0..0000000
--- a/gdb/gdbsupport/pathstuff.c
+++ /dev/null
@@ -1,290 +0,0 @@
-/* Path manipulation routines for GDB and gdbserver.
-
- Copyright (C) 1986-2020 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 "pathstuff.h"
-#include "host-defs.h"
-#include "filenames.h"
-#include "gdb_tilde_expand.h"
-
-#ifdef USE_WIN32API
-#include <windows.h>
-#endif
-
-/* See gdbsupport/pathstuff.h. */
-
-gdb::unique_xmalloc_ptr<char>
-gdb_realpath (const char *filename)
-{
-/* On most hosts, we rely on canonicalize_file_name to compute
- the FILENAME's realpath.
-
- But the situation is slightly more complex on Windows, due to some
- versions of GCC which were reported to generate paths where
- backlashes (the directory separator) were doubled. For instance:
- c:\\some\\double\\slashes\\dir
- ... instead of ...
- c:\some\double\slashes\dir
- Those double-slashes were getting in the way when comparing paths,
- for instance when trying to insert a breakpoint as follow:
- (gdb) b c:/some/double/slashes/dir/foo.c:4
- No source file named c:/some/double/slashes/dir/foo.c:4.
- (gdb) b c:\some\double\slashes\dir\foo.c:4
- No source file named c:\some\double\slashes\dir\foo.c:4.
- To prevent this from happening, we need this function to always
- strip those extra backslashes. While canonicalize_file_name does
- perform this simplification, it only works when the path is valid.
- Since the simplification would be useful even if the path is not
- valid (one can always set a breakpoint on a file, even if the file
- does not exist locally), we rely instead on GetFullPathName to
- perform the canonicalization. */
-
-#if defined (_WIN32)
- {
- char buf[MAX_PATH];
- DWORD len = GetFullPathName (filename, MAX_PATH, buf, NULL);
-
- /* The file system is case-insensitive but case-preserving.
- So it is important we do not lowercase the path. Otherwise,
- we might not be able to display the original casing in a given
- path. */
- if (len > 0 && len < MAX_PATH)
- return make_unique_xstrdup (buf);
- }
-#else
- {
- char *rp = canonicalize_file_name (filename);
-
- if (rp != NULL)
- return gdb::unique_xmalloc_ptr<char> (rp);
- }
-#endif
-
- /* This system is a lost cause, just dup the buffer. */
- return make_unique_xstrdup (filename);
-}
-
-/* See gdbsupport/pathstuff.h. */
-
-gdb::unique_xmalloc_ptr<char>
-gdb_realpath_keepfile (const char *filename)
-{
- const char *base_name = lbasename (filename);
- char *dir_name;
- char *result;
-
- /* Extract the basename of filename, and return immediately
- a copy of filename if it does not contain any directory prefix. */
- if (base_name == filename)
- return make_unique_xstrdup (filename);
-
- dir_name = (char *) alloca ((size_t) (base_name - filename + 2));
- /* Allocate enough space to store the dir_name + plus one extra
- character sometimes needed under Windows (see below), and
- then the closing \000 character. */
- strncpy (dir_name, filename, base_name - filename);
- dir_name[base_name - filename] = '\000';
-
-#ifdef HAVE_DOS_BASED_FILE_SYSTEM
- /* We need to be careful when filename is of the form 'd:foo', which
- is equivalent of d:./foo, which is totally different from d:/foo. */
- if (strlen (dir_name) == 2 && isalpha (dir_name[0]) && dir_name[1] == ':')
- {
- dir_name[2] = '.';
- dir_name[3] = '\000';
- }
-#endif
-
- /* Canonicalize the directory prefix, and build the resulting
- filename. If the dirname realpath already contains an ending
- directory separator, avoid doubling it. */
- gdb::unique_xmalloc_ptr<char> path_storage = gdb_realpath (dir_name);
- const char *real_path = path_storage.get ();
- if (IS_DIR_SEPARATOR (real_path[strlen (real_path) - 1]))
- result = concat (real_path, base_name, (char *) NULL);
- else
- result = concat (real_path, SLASH_STRING, base_name, (char *) NULL);
-
- return gdb::unique_xmalloc_ptr<char> (result);
-}
-
-/* See gdbsupport/pathstuff.h. */
-
-gdb::unique_xmalloc_ptr<char>
-gdb_abspath (const char *path)
-{
- gdb_assert (path != NULL && path[0] != '\0');
-
- if (path[0] == '~')
- return gdb_tilde_expand_up (path);
-
- if (IS_ABSOLUTE_PATH (path) || current_directory == NULL)
- return make_unique_xstrdup (path);
-
- /* Beware the // my son, the Emacs barfs, the botch that catch... */
- return gdb::unique_xmalloc_ptr<char>
- (concat (current_directory,
- IS_DIR_SEPARATOR (current_directory[strlen (current_directory) - 1])
- ? "" : SLASH_STRING,
- path, (char *) NULL));
-}
-
-/* See gdbsupport/pathstuff.h. */
-
-const char *
-child_path (const char *parent, const char *child)
-{
- /* The child path must start with the parent path. */
- size_t parent_len = strlen (parent);
- if (filename_ncmp (parent, child, parent_len) != 0)
- return NULL;
-
- /* The parent path must be a directory and the child must contain at
- least one component underneath the parent. */
- const char *child_component;
- if (parent_len > 0 && IS_DIR_SEPARATOR (parent[parent_len - 1]))
- {
- /* The parent path ends in a directory separator, so it is a
- directory. The first child component starts after the common
- prefix. */
- child_component = child + parent_len;
- }
- else
- {
- /* The parent path does not end in a directory separator. The
- first character in the child after the common prefix must be
- a directory separator.
-
- Note that CHILD must hold at least parent_len characters for
- filename_ncmp to return zero. If the character at parent_len
- is nul due to CHILD containing the same path as PARENT, the
- IS_DIR_SEPARATOR check will fail here. */
- if (!IS_DIR_SEPARATOR (child[parent_len]))
- return NULL;
-
- /* The first child component starts after the separator after the
- common prefix. */
- child_component = child + parent_len + 1;
- }
-
- /* The child must contain at least one non-separator character after
- the parent. */
- while (*child_component != '\0')
- {
- if (!IS_DIR_SEPARATOR (*child_component))
- return child_component;
-
- child_component++;
- }
- return NULL;
-}
-
-/* See gdbsupport/pathstuff.h. */
-
-bool
-contains_dir_separator (const char *path)
-{
- for (; *path != '\0'; path++)
- {
- if (IS_DIR_SEPARATOR (*path))
- return true;
- }
-
- return false;
-}
-
-/* See gdbsupport/pathstuff.h. */
-
-std::string
-get_standard_cache_dir ()
-{
-#ifdef __APPLE__
-#define HOME_CACHE_DIR "Library/Caches"
-#else
-#define HOME_CACHE_DIR ".cache"
-#endif
-
-#ifndef __APPLE__
- const char *xdg_cache_home = getenv ("XDG_CACHE_HOME");
- if (xdg_cache_home != NULL)
- {
- /* Make sure the path is absolute and tilde-expanded. */
- gdb::unique_xmalloc_ptr<char> abs (gdb_abspath (xdg_cache_home));
- return string_printf ("%s/gdb", abs.get ());
- }
-#endif
-
- const char *home = getenv ("HOME");
- if (home != NULL)
- {
- /* Make sure the path is absolute and tilde-expanded. */
- gdb::unique_xmalloc_ptr<char> abs (gdb_abspath (home));
- return string_printf ("%s/" HOME_CACHE_DIR "/gdb", abs.get ());
- }
-
- return {};
-}
-
-/* See gdbsupport/pathstuff.h. */
-
-std::string
-get_standard_temp_dir ()
-{
-#ifdef WIN32
- const char *tmp = getenv ("TMP");
- if (tmp != nullptr)
- return tmp;
-
- tmp = getenv ("TEMP");
- if (tmp != nullptr)
- return tmp;
-
- error (_("Couldn't find temp dir path, both TMP and TEMP are unset."));
-
-#else
- const char *tmp = getenv ("TMPDIR");
- if (tmp != nullptr)
- return tmp;
-
- return "/tmp";
-#endif
-}
-
-/* See gdbsupport/pathstuff.h. */
-
-const char *
-get_shell ()
-{
- const char *ret = getenv ("SHELL");
- if (ret == NULL)
- ret = "/bin/sh";
-
- return ret;
-}
-
-/* See gdbsupport/pathstuff.h. */
-
-gdb::char_vector
-make_temp_filename (const std::string &f)
-{
- gdb::char_vector filename_temp (f.length () + 8);
- strcpy (filename_temp.data (), f.c_str ());
- strcat (filename_temp.data () + f.size (), "-XXXXXX");
- return filename_temp;
-}
diff --git a/gdb/gdbsupport/pathstuff.h b/gdb/gdbsupport/pathstuff.h
deleted file mode 100644
index 4bc0d89..0000000
--- a/gdb/gdbsupport/pathstuff.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/* Path manipulation routines for GDB and gdbserver.
-
- Copyright (C) 1986-2020 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 COMMON_PATHSTUFF_H
-#define COMMON_PATHSTUFF_H
-
-#include "gdbsupport/byte-vector.h"
-
-/* Path utilities. */
-
-/* Return the real path of FILENAME, expanding all the symbolic links.
-
- Contrary to "gdb_abspath", this function does not use
- CURRENT_DIRECTORY for path expansion. Instead, it relies on the
- current working directory (CWD) of GDB or gdbserver. */
-
-extern gdb::unique_xmalloc_ptr<char> gdb_realpath (const char *filename);
-
-/* Return a copy of FILENAME, with its directory prefix canonicalized
- by gdb_realpath. */
-
-extern gdb::unique_xmalloc_ptr<char>
- gdb_realpath_keepfile (const char *filename);
-
-/* Return PATH in absolute form, performing tilde-expansion if necessary.
- PATH cannot be NULL or the empty string.
- This does not resolve symlinks however, use gdb_realpath for that.
-
- Contrary to "gdb_realpath", this function uses CURRENT_DIRECTORY
- for the path expansion. This may lead to scenarios the current
- working directory (CWD) is different than CURRENT_DIRECTORY.
-
- If CURRENT_DIRECTORY is NULL, this function returns a copy of
- PATH. */
-
-extern gdb::unique_xmalloc_ptr<char> gdb_abspath (const char *path);
-
-/* If the path in CHILD is a child of the path in PARENT, return a
- pointer to the first component in the CHILD's pathname below the
- PARENT. Otherwise, return NULL. */
-
-extern const char *child_path (const char *parent, const char *child);
-
-/* Return whether PATH contains a directory separator character. */
-
-extern bool contains_dir_separator (const char *path);
-
-/* Get the usual user cache directory for the current platform.
-
- On Linux, it follows the XDG Base Directory specification: use
- $XDG_CACHE_HOME/gdb if the XDG_CACHE_HOME environment variable is
- defined, otherwise $HOME/.cache.
-
- On macOS, it follows the local convention and uses
- ~/Library/Caches/gdb.
-
- The return value is absolute and tilde-expanded. Return an empty
- string if neither XDG_CACHE_HOME (on Linux) or HOME are defined. */
-
-extern std::string get_standard_cache_dir ();
-
-/* Get the usual temporary directory for the current platform.
-
- On Windows, this is the TMP or TEMP environment variable.
-
- On the rest, this is the TMPDIR environment variable, if defined, else /tmp.
-
- Throw an exception on error. */
-
-extern std::string get_standard_temp_dir ();
-
-/* Return the file name of the user's shell. Normally this comes from
- the SHELL environment variable. */
-
-extern const char *get_shell ();
-
-/* Make a filename suitable to pass to mkstemp based on F (e.g.
- /tmp/foo -> /tmp/foo-XXXXXX). */
-
-extern gdb::char_vector make_temp_filename (const std::string &f);
-
-#endif /* COMMON_PATHSTUFF_H */
diff --git a/gdb/gdbsupport/poison.h b/gdb/gdbsupport/poison.h
deleted file mode 100644
index 5e1b2cc..0000000
--- a/gdb/gdbsupport/poison.h
+++ /dev/null
@@ -1,248 +0,0 @@
-/* Poison symbols at compile time.
-
- Copyright (C) 2017-2020 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 COMMON_POISON_H
-#define COMMON_POISON_H
-
-#include "traits.h"
-#include "obstack.h"
-
-/* Poison memset of non-POD types. The idea is catching invalid
- initialization of non-POD structs that is easy to be introduced as
- side effect of refactoring. For example, say this:
-
- struct S { VEC(foo_s) *m_data; };
-
-is converted to this at some point:
-
- struct S {
- S() { m_data.reserve (10); }
- std::vector<foo> m_data;
- };
-
-and old code was initializing S objects like this:
-
- struct S s;
- memset (&s, 0, sizeof (S)); // whoops, now wipes vector.
-
-Declaring memset as deleted for non-POD types makes the memset above
-be a compile-time error. */
-
-/* Helper for SFINAE. True if "T *" is memsettable. I.e., if T is
- either void, or POD. */
-template<typename T>
-struct IsMemsettable
- : gdb::Or<std::is_void<T>,
- std::is_pod<T>>
-{};
-
-template <typename T,
- typename = gdb::Requires<gdb::Not<IsMemsettable<T>>>>
-void *memset (T *s, int c, size_t n) = delete;
-
-#if HAVE_IS_TRIVIALLY_COPYABLE
-
-/* Similarly, poison memcpy and memmove of non trivially-copyable
- types, which is undefined. */
-
-/* True if "T *" is relocatable. I.e., copyable with memcpy/memmove.
- I.e., T is either trivially copyable, or void. */
-template<typename T>
-struct IsRelocatable
- : gdb::Or<std::is_void<T>,
- std::is_trivially_copyable<T>>
-{};
-
-/* True if both source and destination are relocatable. */
-
-template <typename D, typename S>
-using BothAreRelocatable
- = gdb::And<IsRelocatable<D>, IsRelocatable<S>>;
-
-template <typename D, typename S,
- typename = gdb::Requires<gdb::Not<BothAreRelocatable<D, S>>>>
-void *memcpy (D *dest, const S *src, size_t n) = delete;
-
-template <typename D, typename S,
- typename = gdb::Requires<gdb::Not<BothAreRelocatable<D, S>>>>
-void *memmove (D *dest, const S *src, size_t n) = delete;
-
-#endif /* HAVE_IS_TRIVIALLY_COPYABLE */
-
-/* Poison XNEW and friends to catch usages of malloc-style allocations on
- objects that require new/delete. */
-
-template<typename T>
-#if HAVE_IS_TRIVIALLY_CONSTRUCTIBLE
-using IsMallocable = std::is_trivially_constructible<T>;
-#else
-using IsMallocable = std::true_type;
-#endif
-
-template<typename T>
-using IsFreeable = gdb::Or<std::is_trivially_destructible<T>, std::is_void<T>>;
-
-template <typename T, typename = gdb::Requires<gdb::Not<IsFreeable<T>>>>
-void free (T *ptr) = delete;
-
-template<typename T>
-static T *
-xnew ()
-{
- static_assert (IsMallocable<T>::value, "Trying to use XNEW with a non-POD \
-data type. Use operator new instead.");
- return XNEW (T);
-}
-
-#undef XNEW
-#define XNEW(T) xnew<T>()
-
-template<typename T>
-static T *
-xcnew ()
-{
- static_assert (IsMallocable<T>::value, "Trying to use XCNEW with a non-POD \
-data type. Use operator new instead.");
- return XCNEW (T);
-}
-
-#undef XCNEW
-#define XCNEW(T) xcnew<T>()
-
-template<typename T>
-static void
-xdelete (T *p)
-{
- static_assert (IsFreeable<T>::value, "Trying to use XDELETE with a non-POD \
-data type. Use operator delete instead.");
- XDELETE (p);
-}
-
-#undef XDELETE
-#define XDELETE(P) xdelete (P)
-
-template<typename T>
-static T *
-xnewvec (size_t n)
-{
- static_assert (IsMallocable<T>::value, "Trying to use XNEWVEC with a \
-non-POD data type. Use operator new[] (or std::vector) instead.");
- return XNEWVEC (T, n);
-}
-
-#undef XNEWVEC
-#define XNEWVEC(T, N) xnewvec<T> (N)
-
-template<typename T>
-static T *
-xcnewvec (size_t n)
-{
- static_assert (IsMallocable<T>::value, "Trying to use XCNEWVEC with a \
-non-POD data type. Use operator new[] (or std::vector) instead.");
- return XCNEWVEC (T, n);
-}
-
-#undef XCNEWVEC
-#define XCNEWVEC(T, N) xcnewvec<T> (N)
-
-template<typename T>
-static T *
-xresizevec (T *p, size_t n)
-{
- static_assert (IsMallocable<T>::value, "Trying to use XRESIZEVEC with a \
-non-POD data type.");
- return XRESIZEVEC (T, p, n);
-}
-
-#undef XRESIZEVEC
-#define XRESIZEVEC(T, P, N) xresizevec<T> (P, N)
-
-template<typename T>
-static void
-xdeletevec (T *p)
-{
- static_assert (IsFreeable<T>::value, "Trying to use XDELETEVEC with a \
-non-POD data type. Use operator delete[] (or std::vector) instead.");
- XDELETEVEC (p);
-}
-
-#undef XDELETEVEC
-#define XDELETEVEC(P) xdeletevec (P)
-
-template<typename T>
-static T *
-xnewvar (size_t s)
-{
- static_assert (IsMallocable<T>::value, "Trying to use XNEWVAR with a \
-non-POD data type.");
- return XNEWVAR (T, s);;
-}
-
-#undef XNEWVAR
-#define XNEWVAR(T, S) xnewvar<T> (S)
-
-template<typename T>
-static T *
-xcnewvar (size_t s)
-{
- static_assert (IsMallocable<T>::value, "Trying to use XCNEWVAR with a \
-non-POD data type.");
- return XCNEWVAR (T, s);
-}
-
-#undef XCNEWVAR
-#define XCNEWVAR(T, S) xcnewvar<T> (S)
-
-template<typename T>
-static T *
-xresizevar (T *p, size_t s)
-{
- static_assert (IsMallocable<T>::value, "Trying to use XRESIZEVAR with a \
-non-POD data type.");
- return XRESIZEVAR (T, p, s);
-}
-
-#undef XRESIZEVAR
-#define XRESIZEVAR(T, P, S) xresizevar<T> (P, S)
-
-template<typename T>
-static T *
-xobnew (obstack *ob)
-{
- static_assert (IsMallocable<T>::value, "Trying to use XOBNEW with a \
-non-POD data type.");
- return XOBNEW (ob, T);
-}
-
-#undef XOBNEW
-#define XOBNEW(O, T) xobnew<T> (O)
-
-template<typename T>
-static T *
-xobnewvec (obstack *ob, size_t n)
-{
- static_assert (IsMallocable<T>::value, "Trying to use XOBNEWVEC with a \
-non-POD data type.");
- return XOBNEWVEC (ob, T, n);
-}
-
-#undef XOBNEWVEC
-#define XOBNEWVEC(O, T, N) xobnewvec<T> (O, N)
-
-#endif /* COMMON_POISON_H */
diff --git a/gdb/gdbsupport/preprocessor.h b/gdb/gdbsupport/preprocessor.h
deleted file mode 100644
index 6130280..0000000
--- a/gdb/gdbsupport/preprocessor.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Copyright (C) 2017-2020 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 COMMON_PREPROCESSOR_H
-#define COMMON_PREPROCESSOR_H
-
-/* Generally useful preprocessor bits. */
-
-/* Concatenate two tokens. */
-#define CONCAT_1(a, b) a ## b
-#define CONCAT(a, b) CONCAT_1 (a, b)
-
-/* Stringification. */
-#define STRINGIFY_1(x) #x
-#define STRINGIFY(x) STRINGIFY_1 (x)
-
-/* Escape parens out. Useful if you need to pass an argument that
- includes commas to another macro. */
-#define ESC_PARENS(...) __VA_ARGS__
-
-#endif /* COMMON_PREPROCESSOR_H */
diff --git a/gdb/gdbsupport/print-utils.c b/gdb/gdbsupport/print-utils.c
deleted file mode 100644
index a8d8681..0000000
--- a/gdb/gdbsupport/print-utils.c
+++ /dev/null
@@ -1,326 +0,0 @@
-/* Cell-based print utility routines for GDB, the GNU debugger.
-
- Copyright (C) 1986-2020 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 "print-utils.h"
-/* Temporary storage using circular buffer. */
-
-/* Number of cells in the circular buffer. */
-#define NUMCELLS 16
-
-/* Return the next entry in the circular buffer. */
-
-char *
-get_print_cell (void)
-{
- static char buf[NUMCELLS][PRINT_CELL_SIZE];
- static int cell = 0;
-
- if (++cell >= NUMCELLS)
- cell = 0;
- return buf[cell];
-}
-
-static char *
-decimal2str (const char *sign, ULONGEST addr, int width)
-{
- /* Steal code from valprint.c:print_decimal(). Should this worry
- about the real size of addr as the above does? */
- unsigned long temp[3];
- char *str = get_print_cell ();
- int i = 0;
-
- do
- {
- temp[i] = addr % (1000 * 1000 * 1000);
- addr /= (1000 * 1000 * 1000);
- i++;
- width -= 9;
- }
- while (addr != 0 && i < (sizeof (temp) / sizeof (temp[0])));
-
- width += 9;
- if (width < 0)
- width = 0;
-
- switch (i)
- {
- case 1:
- xsnprintf (str, PRINT_CELL_SIZE, "%s%0*lu", sign, width, temp[0]);
- break;
- case 2:
- xsnprintf (str, PRINT_CELL_SIZE, "%s%0*lu%09lu", sign, width,
- temp[1], temp[0]);
- break;
- case 3:
- xsnprintf (str, PRINT_CELL_SIZE, "%s%0*lu%09lu%09lu", sign, width,
- temp[2], temp[1], temp[0]);
- break;
- default:
- internal_error (__FILE__, __LINE__,
- _("failed internal consistency check"));
- }
-
- return str;
-}
-
-static char *
-octal2str (ULONGEST addr, int width)
-{
- unsigned long temp[3];
- char *str = get_print_cell ();
- int i = 0;
-
- do
- {
- temp[i] = addr % (0100000 * 0100000);
- addr /= (0100000 * 0100000);
- i++;
- width -= 10;
- }
- while (addr != 0 && i < (sizeof (temp) / sizeof (temp[0])));
-
- width += 10;
- if (width < 0)
- width = 0;
-
- switch (i)
- {
- case 1:
- if (temp[0] == 0)
- xsnprintf (str, PRINT_CELL_SIZE, "%*o", width, 0);
- else
- xsnprintf (str, PRINT_CELL_SIZE, "0%0*lo", width, temp[0]);
- break;
- case 2:
- xsnprintf (str, PRINT_CELL_SIZE, "0%0*lo%010lo", width, temp[1], temp[0]);
- break;
- case 3:
- xsnprintf (str, PRINT_CELL_SIZE, "0%0*lo%010lo%010lo", width,
- temp[2], temp[1], temp[0]);
- break;
- default:
- internal_error (__FILE__, __LINE__,
- _("failed internal consistency check"));
- }
-
- return str;
-}
-
-/* See print-utils.h. */
-
-char *
-pulongest (ULONGEST u)
-{
- return decimal2str ("", u, 0);
-}
-
-/* See print-utils.h. */
-
-char *
-plongest (LONGEST l)
-{
- if (l < 0)
- return decimal2str ("-", -l, 0);
- else
- return decimal2str ("", l, 0);
-}
-
-/* Eliminate warning from compiler on 32-bit systems. */
-static int thirty_two = 32;
-
-/* See print-utils.h. */
-
-char *
-phex (ULONGEST l, int sizeof_l)
-{
- char *str;
-
- switch (sizeof_l)
- {
- case 8:
- str = get_print_cell ();
- xsnprintf (str, PRINT_CELL_SIZE, "%08lx%08lx",
- (unsigned long) (l >> thirty_two),
- (unsigned long) (l & 0xffffffff));
- break;
- case 4:
- str = get_print_cell ();
- xsnprintf (str, PRINT_CELL_SIZE, "%08lx", (unsigned long) l);
- break;
- case 2:
- str = get_print_cell ();
- xsnprintf (str, PRINT_CELL_SIZE, "%04x", (unsigned short) (l & 0xffff));
- break;
- default:
- str = phex (l, sizeof (l));
- break;
- }
-
- return str;
-}
-
-/* See print-utils.h. */
-
-char *
-phex_nz (ULONGEST l, int sizeof_l)
-{
- char *str;
-
- switch (sizeof_l)
- {
- case 8:
- {
- unsigned long high = (unsigned long) (l >> thirty_two);
-
- str = get_print_cell ();
- if (high == 0)
- xsnprintf (str, PRINT_CELL_SIZE, "%lx",
- (unsigned long) (l & 0xffffffff));
- else
- xsnprintf (str, PRINT_CELL_SIZE, "%lx%08lx", high,
- (unsigned long) (l & 0xffffffff));
- break;
- }
- case 4:
- str = get_print_cell ();
- xsnprintf (str, PRINT_CELL_SIZE, "%lx", (unsigned long) l);
- break;
- case 2:
- str = get_print_cell ();
- xsnprintf (str, PRINT_CELL_SIZE, "%x", (unsigned short) (l & 0xffff));
- break;
- default:
- str = phex_nz (l, sizeof (l));
- break;
- }
-
- return str;
-}
-
-/* See print-utils.h. */
-
-char *
-hex_string (LONGEST num)
-{
- char *result = get_print_cell ();
-
- xsnprintf (result, PRINT_CELL_SIZE, "0x%s", phex_nz (num, sizeof (num)));
- return result;
-}
-
-/* See print-utils.h. */
-
-char *
-hex_string_custom (LONGEST num, int width)
-{
- char *result = get_print_cell ();
- char *result_end = result + PRINT_CELL_SIZE - 1;
- const char *hex = phex_nz (num, sizeof (num));
- int hex_len = strlen (hex);
-
- if (hex_len > width)
- width = hex_len;
- if (width + 2 >= PRINT_CELL_SIZE)
- internal_error (__FILE__, __LINE__, _("\
-hex_string_custom: insufficient space to store result"));
-
- strcpy (result_end - width - 2, "0x");
- memset (result_end - width, '0', width);
- strcpy (result_end - hex_len, hex);
- return result_end - width - 2;
-}
-
-/* See print-utils.h. */
-
-char *
-int_string (LONGEST val, int radix, int is_signed, int width,
- int use_c_format)
-{
- switch (radix)
- {
- case 16:
- {
- char *result;
-
- if (width == 0)
- result = hex_string (val);
- else
- result = hex_string_custom (val, width);
- if (! use_c_format)
- result += 2;
- return result;
- }
- case 10:
- {
- if (is_signed && val < 0)
- return decimal2str ("-", -val, width);
- else
- return decimal2str ("", val, width);
- }
- case 8:
- {
- char *result = octal2str (val, width);
-
- if (use_c_format || val == 0)
- return result;
- else
- return result + 1;
- }
- default:
- internal_error (__FILE__, __LINE__,
- _("failed internal consistency check"));
- }
-}
-
-/* See print-utils.h. */
-
-const char *
-core_addr_to_string (const CORE_ADDR addr)
-{
- char *str = get_print_cell ();
-
- strcpy (str, "0x");
- strcat (str, phex (addr, sizeof (addr)));
- return str;
-}
-
-/* See print-utils.h. */
-
-const char *
-core_addr_to_string_nz (const CORE_ADDR addr)
-{
- char *str = get_print_cell ();
-
- strcpy (str, "0x");
- strcat (str, phex_nz (addr, sizeof (addr)));
- return str;
-}
-
-/* See print-utils.h. */
-
-const char *
-host_address_to_string_1 (const void *addr)
-{
- char *str = get_print_cell ();
-
- xsnprintf (str, PRINT_CELL_SIZE, "0x%s",
- phex_nz ((uintptr_t) addr, sizeof (addr)));
- return str;
-}
diff --git a/gdb/gdbsupport/print-utils.h b/gdb/gdbsupport/print-utils.h
deleted file mode 100644
index 7541791..0000000
--- a/gdb/gdbsupport/print-utils.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/* Cell-based print utility routines for GDB, the GNU debugger.
-
- Copyright (C) 1986-2020 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 COMMON_PRINT_UTILS_H
-#define COMMON_PRINT_UTILS_H
-
-/* How many characters (including the terminating null byte) fit in a
- cell. */
-#define PRINT_CELL_SIZE 50
-
-/* %u for ULONGEST. The result is stored in a circular static buffer,
- NUMCELLS deep. */
-
-extern char *pulongest (ULONGEST u);
-
-/* %d for LONGEST. The result is stored in a circular static buffer,
- NUMCELLS deep. */
-
-extern char *plongest (LONGEST l);
-
-/* Convert a ULONGEST into a HEX string, like %lx, with leading zeros.
- The result is stored in a circular static buffer, NUMCELLS deep. */
-
-extern char *phex (ULONGEST l, int sizeof_l);
-
-/* Convert a ULONGEST into a HEX string, like %lx, without leading zeros.
- The result is stored in a circular static buffer, NUMCELLS deep. */
-
-extern char *phex_nz (ULONGEST l, int sizeof_l);
-
-/* Converts a LONGEST to a C-format hexadecimal literal and stores it
- in a static string. Returns a pointer to this string. */
-
-extern char *hex_string (LONGEST num);
-
-/* Converts a LONGEST number to a C-format hexadecimal literal and
- stores it in a static string. Returns a pointer to this string
- that is valid until the next call. The number is padded on the
- left with 0s to at least WIDTH characters. */
-
-extern char *hex_string_custom (LONGEST num, int width);
-
-/* Convert VAL to a numeral in the given radix. For
- * radix 10, IS_SIGNED may be true, indicating a signed quantity;
- * otherwise VAL is interpreted as unsigned. If WIDTH is supplied,
- * it is the minimum width (0-padded if needed). USE_C_FORMAT means
- * to use C format in all cases. If it is false, then 'x'
- * and 'o' formats do not include a prefix (0x or leading 0). */
-
-extern char *int_string (LONGEST val, int radix, int is_signed, int width,
- int use_c_format);
-
-/* Convert a CORE_ADDR into a string. */
-
-extern const char *core_addr_to_string (const CORE_ADDR addr);
-
-extern const char *core_addr_to_string_nz (const CORE_ADDR addr);
-
-extern const char *host_address_to_string_1 (const void *addr);
-
-/* Wrapper that avoids adding a pointless cast to all callers. */
-#define host_address_to_string(ADDR) \
- host_address_to_string_1 ((const void *) (ADDR))
-
-/* Return the next entry in the circular print buffer. */
-
-extern char *get_print_cell (void);
-
-#endif /* COMMON_PRINT_UTILS_H */
diff --git a/gdb/gdbsupport/ptid.c b/gdb/gdbsupport/ptid.c
deleted file mode 100644
index 9638943..0000000
--- a/gdb/gdbsupport/ptid.c
+++ /dev/null
@@ -1,26 +0,0 @@
-/* The ptid_t type and common functions operating on it.
-
- Copyright (C) 1986-2020 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 "ptid.h"
-
-/* See ptid.h for these. */
-
-ptid_t const null_ptid = ptid_t::make_null ();
-ptid_t const minus_one_ptid = ptid_t::make_minus_one ();
diff --git a/gdb/gdbsupport/ptid.h b/gdb/gdbsupport/ptid.h
deleted file mode 100644
index ef52d55..0000000
--- a/gdb/gdbsupport/ptid.h
+++ /dev/null
@@ -1,155 +0,0 @@
-/* The ptid_t type and common functions operating on it.
-
- Copyright (C) 1986-2020 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 COMMON_PTID_H
-#define COMMON_PTID_H
-
-/* The ptid struct is a collection of the various "ids" necessary for
- identifying the inferior process/thread being debugged. This
- consists of the process id (pid), lightweight process id (lwp) and
- thread id (tid). When manipulating ptids, the constructors,
- accessors, and predicates declared in this file should be used. Do
- NOT access the struct ptid members directly.
-
- process_stratum targets that handle threading themselves should
- prefer using the ptid.lwp field, leaving the ptid.tid field for any
- thread_stratum target that might want to sit on top.
-*/
-
-class ptid_t
-{
-public:
- /* Must have a trivial defaulted default constructor so that the
- type remains POD. */
- ptid_t () noexcept = default;
-
- /* Make a ptid given the necessary PID, LWP, and TID components.
-
- A ptid with only a PID (LWP and TID equal to zero) is usually used to
- represent a whole process, including all its lwps/threads. */
-
- explicit constexpr ptid_t (int pid, long lwp = 0, long tid = 0)
- : m_pid (pid), m_lwp (lwp), m_tid (tid)
- {}
-
- /* Fetch the pid (process id) component from the ptid. */
-
- constexpr int pid () const
- { return m_pid; }
-
- /* Return true if the ptid's lwp member is non-zero. */
-
- constexpr bool lwp_p () const
- { return m_lwp != 0; }
-
- /* Fetch the lwp (lightweight process) component from the ptid. */
-
- constexpr long lwp () const
- { return m_lwp; }
-
- /* Return true if the ptid's tid member is non-zero. */
-
- constexpr bool tid_p () const
- { return m_tid != 0; }
-
- /* Fetch the tid (thread id) component from a ptid. */
-
- constexpr long tid () const
- { return m_tid; }
-
- /* Return true if the ptid represents a whole process, including all its
- lwps/threads. Such ptids have the form of (pid, 0, 0), with
- pid != -1. */
-
- constexpr bool is_pid () const
- {
- return (*this != make_null ()
- && *this != make_minus_one ()
- && m_lwp == 0
- && m_tid == 0);
- }
-
- /* Compare two ptids to see if they are equal. */
-
- constexpr bool operator== (const ptid_t &other) const
- {
- return (m_pid == other.m_pid
- && m_lwp == other.m_lwp
- && m_tid == other.m_tid);
- }
-
- /* Compare two ptids to see if they are different. */
-
- constexpr bool operator!= (const ptid_t &other) const
- {
- return !(*this == other);
- }
-
- /* Return true if the ptid matches FILTER. FILTER can be the wild
- card MINUS_ONE_PTID (all ptids match it); can be a ptid representing
- a process (ptid.is_pid () returns true), in which case, all lwps and
- threads of that given process match, lwps and threads of other
- processes do not; or, it can represent a specific thread, in which
- case, only that thread will match true. The ptid must represent a
- specific LWP or THREAD, it can never be a wild card. */
-
- constexpr bool matches (const ptid_t &filter) const
- {
- return (/* If filter represents any ptid, it's always a match. */
- filter == make_minus_one ()
- /* If filter is only a pid, any ptid with that pid
- matches. */
- || (filter.is_pid () && m_pid == filter.pid ())
-
- /* Otherwise, this ptid only matches if it's exactly equal
- to filter. */
- || *this == filter);
- }
-
- /* Make a null ptid. */
-
- static constexpr ptid_t make_null ()
- { return ptid_t (0, 0, 0); }
-
- /* Make a minus one ptid. */
-
- static constexpr ptid_t make_minus_one ()
- { return ptid_t (-1, 0, 0); }
-
-private:
- /* Process id. */
- int m_pid;
-
- /* Lightweight process id. */
- long m_lwp;
-
- /* Thread id. */
- long m_tid;
-};
-
-/* The null or zero ptid, often used to indicate no process. */
-
-extern const ptid_t null_ptid;
-
-/* The (-1,0,0) ptid, often used to indicate either an error condition
- or a "don't care" condition, i.e, "run all threads." */
-
-extern const ptid_t minus_one_ptid;
-
-#endif /* COMMON_PTID_H */
diff --git a/gdb/gdbsupport/refcounted-object.h b/gdb/gdbsupport/refcounted-object.h
deleted file mode 100644
index 95a3127..0000000
--- a/gdb/gdbsupport/refcounted-object.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/* Base class of intrusively reference-counted objects.
- Copyright (C) 2017-2020 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 COMMON_REFCOUNTED_OBJECT_H
-#define COMMON_REFCOUNTED_OBJECT_H
-
-/* Base class of intrusively reference-countable objects.
- Incrementing and decrementing the reference count is an external
- responsibility. */
-
-class refcounted_object
-{
-public:
- refcounted_object () = default;
-
- /* Increase the refcount. */
- void incref ()
- {
- gdb_assert (m_refcount >= 0);
- m_refcount++;
- }
-
- /* Decrease the refcount. */
- void decref ()
- {
- m_refcount--;
- gdb_assert (m_refcount >= 0);
- }
-
- int refcount () const { return m_refcount; }
-
-private:
- DISABLE_COPY_AND_ASSIGN (refcounted_object);
-
- /* The reference count. */
- int m_refcount = 0;
-};
-
-/* A policy class to interface gdb::ref_ptr with a
- refcounted_object. */
-
-struct refcounted_object_ref_policy
-{
- static void incref (refcounted_object *ptr)
- {
- ptr->incref ();
- }
-
- static void decref (refcounted_object *ptr)
- {
- ptr->decref ();
- }
-};
-
-#endif /* COMMON_REFCOUNTED_OBJECT_H */
diff --git a/gdb/gdbsupport/rsp-low.c b/gdb/gdbsupport/rsp-low.c
deleted file mode 100644
index 9bb1660..0000000
--- a/gdb/gdbsupport/rsp-low.c
+++ /dev/null
@@ -1,307 +0,0 @@
-/* Low-level RSP routines for GDB, the GNU debugger.
-
- Copyright (C) 1988-2020 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 "rsp-low.h"
-
-/* See rsp-low.h. */
-
-int
-fromhex (int a)
-{
- if (a >= '0' && a <= '9')
- return a - '0';
- else if (a >= 'a' && a <= 'f')
- return a - 'a' + 10;
- else if (a >= 'A' && a <= 'F')
- return a - 'A' + 10;
- else
- error (_("Reply contains invalid hex digit %d"), a);
-}
-
-/* See rsp-low.h. */
-
-int
-tohex (int nib)
-{
- if (nib < 10)
- return '0' + nib;
- else
- return 'a' + nib - 10;
-}
-
-/* Encode 64 bits in 16 chars of hex. */
-
-static const char hexchars[] = "0123456789abcdef";
-
-static int
-ishex (int ch, int *val)
-{
- if ((ch >= 'a') && (ch <= 'f'))
- {
- *val = ch - 'a' + 10;
- return 1;
- }
- if ((ch >= 'A') && (ch <= 'F'))
- {
- *val = ch - 'A' + 10;
- return 1;
- }
- if ((ch >= '0') && (ch <= '9'))
- {
- *val = ch - '0';
- return 1;
- }
- return 0;
-}
-
-/* See rsp-low.h. */
-
-char *
-pack_nibble (char *buf, int nibble)
-{
- *buf++ = hexchars[(nibble & 0x0f)];
- return buf;
-}
-
-/* See rsp-low.h. */
-
-char *
-pack_hex_byte (char *pkt, int byte)
-{
- *pkt++ = hexchars[(byte >> 4) & 0xf];
- *pkt++ = hexchars[(byte & 0xf)];
- return pkt;
-}
-
-/* See rsp-low.h. */
-
-const char *
-unpack_varlen_hex (const char *buff, /* packet to parse */
- ULONGEST *result)
-{
- int nibble;
- ULONGEST retval = 0;
-
- while (ishex (*buff, &nibble))
- {
- buff++;
- retval = retval << 4;
- retval |= nibble & 0x0f;
- }
- *result = retval;
- return buff;
-}
-
-/* See rsp-low.h. */
-
-int
-hex2bin (const char *hex, gdb_byte *bin, int count)
-{
- int i;
-
- for (i = 0; i < count; i++)
- {
- if (hex[0] == 0 || hex[1] == 0)
- {
- /* Hex string is short, or of uneven length.
- Return the count that has been converted so far. */
- return i;
- }
- *bin++ = fromhex (hex[0]) * 16 + fromhex (hex[1]);
- hex += 2;
- }
- return i;
-}
-
-/* See rsp-low.h. */
-
-gdb::byte_vector
-hex2bin (const char *hex)
-{
- size_t bin_len = strlen (hex) / 2;
- gdb::byte_vector bin (bin_len);
-
- hex2bin (hex, bin.data (), bin_len);
-
- return bin;
-}
-
-/* See rsp-low.h. */
-
-std::string
-hex2str (const char *hex)
-{
- return hex2str (hex, strlen (hex));
-}
-
-/* See rsp-low.h. */
-
-std::string
-hex2str (const char *hex, int count)
-{
- std::string ret;
-
- ret.reserve (count);
- for (size_t i = 0; i < count; ++i)
- {
- if (hex[0] == '\0' || hex[1] == '\0')
- {
- /* Hex string is short, or of uneven length. Return what we
- have so far. */
- return ret;
- }
- ret += fromhex (hex[0]) * 16 + fromhex (hex[1]);
- hex += 2;
- }
-
- return ret;
-}
-
-/* See rsp-low.h. */
-
-int
-bin2hex (const gdb_byte *bin, char *hex, int count)
-{
- int i;
-
- for (i = 0; i < count; i++)
- {
- *hex++ = tohex ((*bin >> 4) & 0xf);
- *hex++ = tohex (*bin++ & 0xf);
- }
- *hex = 0;
- return i;
-}
-
-/* See rsp-low.h. */
-
-std::string
-bin2hex (const gdb_byte *bin, int count)
-{
- std::string ret;
-
- ret.reserve (count * 2);
- for (int i = 0; i < count; ++i)
- {
- ret += tohex ((*bin >> 4) & 0xf);
- ret += tohex (*bin++ & 0xf);
- }
-
- return ret;
-}
-
-/* Return whether byte B needs escaping when sent as part of binary data. */
-
-static int
-needs_escaping (gdb_byte b)
-{
- return b == '$' || b == '#' || b == '}' || b == '*';
-}
-
-/* See rsp-low.h. */
-
-int
-remote_escape_output (const gdb_byte *buffer, int len_units, int unit_size,
- gdb_byte *out_buf, int *out_len_units,
- int out_maxlen_bytes)
-{
- int input_unit_index, output_byte_index = 0, byte_index_in_unit;
- int number_escape_bytes_needed;
-
- /* Try to copy integral addressable memory units until
- (1) we run out of space or
- (2) we copied all of them. */
- for (input_unit_index = 0;
- input_unit_index < len_units;
- input_unit_index++)
- {
- /* Find out how many escape bytes we need for this unit. */
- number_escape_bytes_needed = 0;
- for (byte_index_in_unit = 0;
- byte_index_in_unit < unit_size;
- byte_index_in_unit++)
- {
- int idx = input_unit_index * unit_size + byte_index_in_unit;
- gdb_byte b = buffer[idx];
- if (needs_escaping (b))
- number_escape_bytes_needed++;
- }
-
- /* Check if we have room to fit this escaped unit. */
- if (output_byte_index + unit_size + number_escape_bytes_needed >
- out_maxlen_bytes)
- break;
-
- /* Copy the unit byte per byte, adding escapes. */
- for (byte_index_in_unit = 0;
- byte_index_in_unit < unit_size;
- byte_index_in_unit++)
- {
- int idx = input_unit_index * unit_size + byte_index_in_unit;
- gdb_byte b = buffer[idx];
- if (needs_escaping (b))
- {
- out_buf[output_byte_index++] = '}';
- out_buf[output_byte_index++] = b ^ 0x20;
- }
- else
- out_buf[output_byte_index++] = b;
- }
- }
-
- *out_len_units = input_unit_index;
- return output_byte_index;
-}
-
-/* See rsp-low.h. */
-
-int
-remote_unescape_input (const gdb_byte *buffer, int len,
- gdb_byte *out_buf, int out_maxlen)
-{
- int input_index, output_index;
- int escaped;
-
- output_index = 0;
- escaped = 0;
- for (input_index = 0; input_index < len; input_index++)
- {
- gdb_byte b = buffer[input_index];
-
- if (output_index + 1 > out_maxlen)
- error (_("Received too much data from the target."));
-
- if (escaped)
- {
- out_buf[output_index++] = b ^ 0x20;
- escaped = 0;
- }
- else if (b == '}')
- escaped = 1;
- else
- out_buf[output_index++] = b;
- }
-
- if (escaped)
- error (_("Unmatched escape character in target response."));
-
- return output_index;
-}
-
diff --git a/gdb/gdbsupport/rsp-low.h b/gdb/gdbsupport/rsp-low.h
deleted file mode 100644
index 84eb839..0000000
--- a/gdb/gdbsupport/rsp-low.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/* Low-level RSP routines for GDB, the GNU debugger.
-
- Copyright (C) 1988-2020 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 COMMON_RSP_LOW_H
-#define COMMON_RSP_LOW_H
-
-#include "gdbsupport/byte-vector.h"
-
-/* Convert hex digit A to a number, or throw an exception. */
-
-extern int fromhex (int a);
-
-/* Convert number NIB to a hex digit. */
-
-extern int tohex (int nib);
-
-/* Write a character representing the low order four bits of NIBBLE in
- hex to *BUF. Returns BUF+1. */
-
-extern char *pack_nibble (char *buf, int nibble);
-
-/* Write the low byte of BYTE in hex to *BUF. Returns BUF+2. */
-
-extern char *pack_hex_byte (char *pkt, int byte);
-
-/* Read hex digits from BUFF and convert to a number, which is stored
- in RESULT. Reads until a non-hex digit is seen. Returns a pointer
- to the terminating character. */
-
-extern const char *unpack_varlen_hex (const char *buff, ULONGEST *result);
-
-/* HEX is a string of characters representing hexadecimal digits.
- Convert pairs of hex digits to bytes and store sequentially into
- BIN. COUNT is the maximum number of characters to convert. This
- will convert fewer characters if the number of hex characters
- actually seen is odd, or if HEX terminates before COUNT characters.
- Returns the number of characters actually converted. */
-
-extern int hex2bin (const char *hex, gdb_byte *bin, int count);
-
-/* Like the above, but return a gdb::byte_vector. */
-
-gdb::byte_vector hex2bin (const char *hex);
-
-/* Like hex2bin, but return a std::string. */
-
-extern std::string hex2str (const char *hex);
-
-/* Like hex2bin, but return a std::string. */
-
-extern std::string hex2str (const char *hex, int count);
-
-/* Convert some bytes to a hexadecimal representation. BIN holds the
- bytes to convert. COUNT says how many bytes to convert. The
- resulting characters are stored in HEX, followed by a NUL
- character. Returns the number of bytes actually converted. */
-
-extern int bin2hex (const gdb_byte *bin, char *hex, int count);
-
-/* Overloaded version of bin2hex that returns a std::string. */
-
-extern std::string bin2hex (const gdb_byte *bin, int count);
-
-/* Convert BUFFER, binary data at least LEN_UNITS addressable memory units
- long, into escaped binary data in OUT_BUF. Only copy memory units that fit
- completely in OUT_BUF. Set *OUT_LEN_UNITS to the number of units from
- BUFFER successfully encoded in OUT_BUF, and return the number of bytes used
- in OUT_BUF. The total number of bytes in the output buffer will be at most
- OUT_MAXLEN_BYTES. This function properly escapes '*', and so is suitable
- for the server side as well as the client. */
-
-extern int remote_escape_output (const gdb_byte *buffer, int len_units,
- int unit_size, gdb_byte *out_buf,
- int *out_len_units, int out_maxlen_bytes);
-
-/* Convert BUFFER, escaped data LEN bytes long, into binary data
- in OUT_BUF. Return the number of bytes written to OUT_BUF.
- Raise an error if the total number of bytes exceeds OUT_MAXLEN.
-
- This function reverses remote_escape_output. */
-
-extern int remote_unescape_input (const gdb_byte *buffer, int len,
- gdb_byte *out_buf, int out_maxlen);
-
-#endif /* COMMON_RSP_LOW_H */
diff --git a/gdb/gdbsupport/run-time-clock.c b/gdb/gdbsupport/run-time-clock.c
deleted file mode 100644
index 24dc19c..0000000
--- a/gdb/gdbsupport/run-time-clock.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/* User/system CPU time clocks that follow the std::chrono interface.
- Copyright (C) 2016-2020 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 "run-time-clock.h"
-#if defined HAVE_SYS_RESOURCE_H
-#include <sys/resource.h>
-#endif
-
-using namespace std::chrono;
-
-run_time_clock::time_point
-run_time_clock::now () noexcept
-{
- return time_point (microseconds (get_run_time ()));
-}
-
-#ifdef HAVE_GETRUSAGE
-static std::chrono::microseconds
-timeval_to_microseconds (struct timeval *tv)
-{
- return (seconds (tv->tv_sec) + microseconds (tv->tv_usec));
-}
-#endif
-
-void
-run_time_clock::now (user_cpu_time_clock::time_point &user,
- system_cpu_time_clock::time_point &system) noexcept
-{
-#ifdef HAVE_GETRUSAGE
- struct rusage rusage;
-
- getrusage (RUSAGE_SELF, &rusage);
-
- microseconds utime = timeval_to_microseconds (&rusage.ru_utime);
- microseconds stime = timeval_to_microseconds (&rusage.ru_stime);
- user = user_cpu_time_clock::time_point (utime);
- system = system_cpu_time_clock::time_point (stime);
-#else
- user = user_cpu_time_clock::time_point (microseconds (get_run_time ()));
- system = system_cpu_time_clock::time_point (microseconds::zero ());
-#endif
-}
diff --git a/gdb/gdbsupport/run-time-clock.h b/gdb/gdbsupport/run-time-clock.h
deleted file mode 100644
index fef0c34..0000000
--- a/gdb/gdbsupport/run-time-clock.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/* User/system CPU time clocks that follow the std::chrono interface.
- Copyright (C) 2016-2020 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 COMMON_RUN_TIME_CLOCK_H
-#define COMMON_RUN_TIME_CLOCK_H
-
-#include <chrono>
-
-/* Count the total amount of time spent executing in user mode. */
-
-struct user_cpu_time_clock
-{
- using duration = std::chrono::microseconds;
- using rep = duration::rep;
- using period = duration::period;
- using time_point = std::chrono::time_point<user_cpu_time_clock>;
-
- static constexpr bool is_steady = true;
-
- /* Use run_time_clock::now instead. */
- static time_point now () noexcept = delete;
-};
-
-/* Count the total amount of time spent executing in kernel mode. */
-
-struct system_cpu_time_clock
-{
- using duration = std::chrono::microseconds;
- using rep = duration::rep;
- using period = duration::period;
- using time_point = std::chrono::time_point<system_cpu_time_clock>;
-
- static constexpr bool is_steady = true;
-
- /* Use run_time_clock::now instead. */
- static time_point now () noexcept = delete;
-};
-
-/* Count the total amount of time spent executing in userspace+kernel
- mode. */
-
-struct run_time_clock
-{
- using duration = std::chrono::microseconds;
- using rep = duration::rep;
- using period = duration::period;
- using time_point = std::chrono::time_point<run_time_clock>;
-
- static constexpr bool is_steady = true;
-
- static time_point now () noexcept;
-
- /* Return the user/system time as separate time points, if
- supported. If not supported, then the combined user+kernel time
- is returned in USER and SYSTEM is set to zero. */
- static void now (user_cpu_time_clock::time_point &user,
- system_cpu_time_clock::time_point &system) noexcept;
-};
-
-#endif /* COMMON_RUN_TIME_CLOCK_H */
diff --git a/gdb/gdbsupport/safe-iterator.h b/gdb/gdbsupport/safe-iterator.h
deleted file mode 100644
index 04fe52a..0000000
--- a/gdb/gdbsupport/safe-iterator.h
+++ /dev/null
@@ -1,135 +0,0 @@
-/* A safe iterator for GDB, the GNU debugger.
- Copyright (C) 2018-2020 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 COMMON_SAFE_ITERATOR_H
-#define COMMON_SAFE_ITERATOR_H
-
-/* A forward iterator that wraps Iterator, such that when iterating
- with iterator IT, it is possible to delete *IT without invalidating
- IT. Suitably wrapped in a range type and used with range-for, this
- allow convenient patterns like this:
-
- // range_safe() returns a range type whose begin()/end() methods
- // return safe iterators.
- for (foo *f : range_safe ())
- {
- if (f->should_delete ())
- {
- // The ++it operation implicitly done by the range-for is
- // still OK after this.
- delete f;
- }
- }
-*/
-
-template<typename Iterator>
-class basic_safe_iterator
-{
-public:
- typedef basic_safe_iterator self_type;
- typedef typename Iterator::value_type value_type;
- typedef typename Iterator::reference reference;
- typedef typename Iterator::pointer pointer;
- typedef typename Iterator::iterator_category iterator_category;
- typedef typename Iterator::difference_type difference_type;
-
- /* Construct using the given argument; the end iterator is default
- constructed. */
- template<typename Arg>
- explicit basic_safe_iterator (Arg &&arg)
- : m_it (std::forward<Arg> (arg)),
- m_next (m_it)
- {
- if (m_it != m_end)
- ++m_next;
- }
-
- /* Construct the iterator using the first argument, and construct
- the end iterator using the second argument. */
- template<typename Arg>
- explicit basic_safe_iterator (Arg &&arg, Arg &&arg2)
- : m_it (std::forward<Arg> (arg)),
- m_next (m_it),
- m_end (std::forward<Arg> (arg2))
- {
- if (m_it != m_end)
- ++m_next;
- }
-
- /* Create a one-past-end iterator. */
- basic_safe_iterator ()
- {}
-
- value_type operator* () const { return *m_it; }
-
- self_type &operator++ ()
- {
- m_it = m_next;
- if (m_it != m_end)
- ++m_next;
- return *this;
- }
-
- bool operator== (const self_type &other) const
- { return m_it == other.m_it; }
-
- bool operator!= (const self_type &other) const
- { return m_it != other.m_it; }
-
-private:
- /* The current element. */
- Iterator m_it {};
-
- /* The next element. Always one element ahead of M_IT. */
- Iterator m_next {};
-
- /* A one-past-end iterator. */
- Iterator m_end {};
-};
-
-/* A range adapter that wraps another range, and then returns safe
- iterators wrapping the original range's iterators. */
-
-template<typename Range>
-class basic_safe_range
-{
-public:
-
- typedef basic_safe_iterator<typename Range::iterator> iterator;
-
- explicit basic_safe_range (Range range)
- : m_range (range)
- {
- }
-
- iterator begin ()
- {
- return iterator (m_range.begin (), m_range.end ());
- }
-
- iterator end ()
- {
- return iterator (m_range.end (), m_range.end ());
- }
-
-private:
-
- Range m_range;
-};
-
-#endif /* COMMON_SAFE_ITERATOR_H */
diff --git a/gdb/gdbsupport/safe-strerror.c b/gdb/gdbsupport/safe-strerror.c
deleted file mode 100644
index 5804621..0000000
--- a/gdb/gdbsupport/safe-strerror.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/* Safe version of strerror for GDB, the GNU debugger.
-
- Copyright (C) 2006-2020 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 <string.h>
-
-/* There are two different versions of strerror_r; one is GNU-specific, the
- other XSI-compliant. They differ in the return type. This overload lets
- us choose the right behavior for each return type. We cannot rely on Gnulib
- to solve this for us because IPA does not use Gnulib but uses this
- function. */
-
-/* Called if we have a XSI-compliant strerror_r. */
-ATTRIBUTE_UNUSED static char *
-select_strerror_r (int res, char *buf)
-{
- return res == 0 ? buf : nullptr;
-}
-
-/* Called if we have a GNU strerror_r. */
-ATTRIBUTE_UNUSED static char *
-select_strerror_r (char *res, char *)
-{
- return res;
-}
-
-/* Implementation of safe_strerror as defined in common-utils.h. */
-
-const char *
-safe_strerror (int errnum)
-{
- static thread_local char buf[1024];
-
- char *res = select_strerror_r (strerror_r (errnum, buf, sizeof (buf)), buf);
- if (res != nullptr)
- return res;
-
- xsnprintf (buf, sizeof buf, "(undocumented errno %d)", errnum);
- return buf;
-}
diff --git a/gdb/gdbsupport/scope-exit.h b/gdb/gdbsupport/scope-exit.h
deleted file mode 100644
index 192f666..0000000
--- a/gdb/gdbsupport/scope-exit.h
+++ /dev/null
@@ -1,186 +0,0 @@
-/* Copyright (C) 2019-2020 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 COMMON_SCOPE_EXIT_H
-#define COMMON_SCOPE_EXIT_H
-
-#include <functional>
-#include <type_traits>
-#include "gdbsupport/preprocessor.h"
-
-/* scope_exit is a general-purpose scope guard that calls its exit
- function at the end of the current scope. A scope_exit may be
- canceled by calling the "release" method. The API is modeled on
- P0052R5 - Generic Scope Guard and RAII Wrapper for the Standard
- Library, which is itself based on Andrej Alexandrescu's
- ScopeGuard/SCOPE_EXIT.
-
- There are two forms available:
-
- - The "make_scope_exit" form allows canceling the scope guard. Use
- it like this:
-
- auto cleanup = make_scope_exit ( <function, function object, lambda> );
- ...
- cleanup.release (); // cancel
-
- - If you don't need to cancel the guard, you can use the SCOPE_EXIT
- macro, like this:
-
- SCOPE_EXIT
- {
- // any code you like here.
- }
-
- See also forward_scope_exit.
-*/
-
-/* CRTP base class for cancelable scope_exit-like classes. Implements
- the common call-custom-function-from-dtor functionality. Classes
- that inherit this implement the on_exit() method, which is called
- from scope_exit_base's dtor. */
-
-template <typename CRTP>
-class scope_exit_base
-{
-public:
- scope_exit_base () = default;
-
- ~scope_exit_base ()
- {
- if (!m_released)
- {
- auto *self = static_cast<CRTP *> (this);
- self->on_exit ();
- }
- }
-
- /* This is needed for make_scope_exit because copy elision isn't
- guaranteed until C++17. An optimizing compiler will usually skip
- calling this, but it must exist. */
- scope_exit_base (const scope_exit_base &other)
- : m_released (other.m_released)
- {
- other.m_released = true;
- }
-
- void operator= (const scope_exit_base &) = delete;
-
- /* If this is called, then the wrapped function will not be called
- on destruction. */
- void release () noexcept
- {
- m_released = true;
- }
-
-private:
-
- /* True if released. Mutable because of the copy ctor hack
- above. */
- mutable bool m_released = false;
-};
-
-/* The scope_exit class. */
-
-template<typename EF>
-class scope_exit : public scope_exit_base<scope_exit<EF>>
-{
- /* For access to on_exit(). */
- friend scope_exit_base<scope_exit<EF>>;
-
-public:
-
- template<typename EFP,
- typename = gdb::Requires<std::is_constructible<EF, EFP>>>
- scope_exit (EFP &&f)
- try : m_exit_function ((!std::is_lvalue_reference<EFP>::value
- && std::is_nothrow_constructible<EF, EFP>::value)
- ? std::move (f)
- : f)
- {
- }
- catch (...)
- {
- /* "If the initialization of exit_function throws an exception,
- calls f()." */
- f ();
- }
-
- template<typename EFP,
- typename = gdb::Requires<std::is_constructible<EF, EFP>>>
- scope_exit (scope_exit &&rhs)
- noexcept (std::is_nothrow_move_constructible<EF>::value
- || std::is_nothrow_copy_constructible<EF>::value)
- : m_exit_function (std::is_nothrow_constructible<EFP>::value
- ? std::move (rhs)
- : rhs)
- {
- rhs.release ();
- }
-
- /* This is needed for make_scope_exit because copy elision isn't
- guaranteed until C++17. An optimizing compiler will usually skip
- calling this, but it must exist. */
- scope_exit (const scope_exit &other)
- : scope_exit_base<scope_exit<EF>> (other),
- m_exit_function (other.m_exit_function)
- {
- }
-
- void operator= (const scope_exit &) = delete;
- void operator= (scope_exit &&) = delete;
-
-private:
- void on_exit ()
- {
- m_exit_function ();
- }
-
- /* The function to call on scope exit. */
- EF m_exit_function;
-};
-
-template <typename EF>
-scope_exit<typename std::decay<EF>::type>
-make_scope_exit (EF &&f)
-{
- return scope_exit<typename std::decay<EF>::type> (std::forward<EF> (f));
-}
-
-namespace detail
-{
-
-enum class scope_exit_lhs {};
-
-template<typename EF>
-scope_exit<typename std::decay<EF>::type>
-operator+ (scope_exit_lhs, EF &&rhs)
-{
- return scope_exit<typename std::decay<EF>::type> (std::forward<EF> (rhs));
-}
-
-}
-
-/* Register a block of code to run on scope exit. Note that the local
- context is captured by reference, which means you should be careful
- to avoid inadvertently changing a captured local's value before the
- scope exit runs. */
-
-#define SCOPE_EXIT \
- auto CONCAT(scope_exit_, __LINE__) = ::detail::scope_exit_lhs () + [&] ()
-
-#endif /* COMMON_SCOPE_EXIT_H */
diff --git a/gdb/gdbsupport/scoped_fd.h b/gdb/gdbsupport/scoped_fd.h
deleted file mode 100644
index f40ce8b..0000000
--- a/gdb/gdbsupport/scoped_fd.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/* scoped_fd, automatically close a file descriptor
-
- Copyright (C) 2018-2020 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 COMMON_SCOPED_FD_H
-#define COMMON_SCOPED_FD_H
-
-#include <unistd.h>
-#include "filestuff.h"
-
-/* A smart-pointer-like class to automatically close a file descriptor. */
-
-class scoped_fd
-{
-public:
- explicit scoped_fd (int fd = -1) noexcept : m_fd (fd) {}
-
- scoped_fd (scoped_fd &&other)
- : m_fd (other.m_fd)
- {
- other.m_fd = -1;
- }
-
- ~scoped_fd ()
- {
- if (m_fd >= 0)
- close (m_fd);
- }
-
- scoped_fd &operator= (scoped_fd &&other)
- {
- if (m_fd != other.m_fd)
- {
- if (m_fd >= 0)
- close (m_fd);
- m_fd = other.m_fd;
- other.m_fd = -1;
- }
- return *this;
- }
-
- DISABLE_COPY_AND_ASSIGN (scoped_fd);
-
- ATTRIBUTE_UNUSED_RESULT int release () noexcept
- {
- int fd = m_fd;
- m_fd = -1;
- return fd;
- }
-
- /* Like release, but return a gdb_file_up that owns the file
- descriptor. On success, this scoped_fd will be released. On
- failure, return NULL and leave this scoped_fd in possession of
- the fd. */
- gdb_file_up to_file (const char *mode) noexcept
- {
- gdb_file_up result (fdopen (m_fd, mode));
- if (result != nullptr)
- m_fd = -1;
- return result;
- }
-
- int get () const noexcept
- {
- return m_fd;
- }
-
-private:
- int m_fd;
-};
-
-#endif /* COMMON_SCOPED_FD_H */
diff --git a/gdb/gdbsupport/scoped_mmap.c b/gdb/gdbsupport/scoped_mmap.c
deleted file mode 100644
index 6b424dc..0000000
--- a/gdb/gdbsupport/scoped_mmap.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/* scoped_mmap, automatically unmap files
-
- Copyright (C) 2018-2020 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 "scoped_mmap.h"
-#include "scoped_fd.h"
-#include "gdbsupport/filestuff.h"
-
-#ifdef HAVE_SYS_MMAN_H
-
-scoped_mmap
-mmap_file (const char *filename)
-{
- scoped_fd fd (gdb_open_cloexec (filename, O_RDONLY, 0));
- if (fd.get () < 0)
- perror_with_name (("open"));
-
- off_t size = lseek (fd.get (), 0, SEEK_END);
- if (size < 0)
- perror_with_name (("lseek"));
-
- /* We can't map an empty file. */
- if (size == 0)
- error (_("file to mmap is empty"));
-
- scoped_mmap mmapped_file (nullptr, size, PROT_READ, MAP_PRIVATE, fd.get (), 0);
- if (mmapped_file.get () == MAP_FAILED)
- perror_with_name (("mmap"));
-
- return mmapped_file;
-}
-
-#endif /* HAVE_SYS_MMAN_H */
diff --git a/gdb/gdbsupport/scoped_mmap.h b/gdb/gdbsupport/scoped_mmap.h
deleted file mode 100644
index bab988f..0000000
--- a/gdb/gdbsupport/scoped_mmap.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/* scoped_mmap, automatically unmap files
-
- Copyright (C) 2018-2020 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 COMMON_SCOPED_MMAP_H
-#define COMMON_SCOPED_MMAP_H
-
-#ifdef HAVE_SYS_MMAN_H
-
-#include <sys/mman.h>
-
-/* A smart-pointer-like class to mmap() and automatically munmap() a memory
- mapping. */
-
-class scoped_mmap
-{
-public:
- scoped_mmap () noexcept : m_mem (MAP_FAILED), m_length (0) {}
- scoped_mmap (void *addr, size_t length, int prot, int flags, int fd,
- off_t offset) noexcept : m_length (length)
- {
- m_mem = mmap (addr, m_length, prot, flags, fd, offset);
- }
-
- ~scoped_mmap ()
- {
- destroy ();
- }
-
- scoped_mmap (scoped_mmap &&rhs)
- {
- destroy ();
-
- m_mem = rhs.m_mem;
- m_length = rhs.m_length;
-
- rhs.m_mem = MAP_FAILED;
- rhs.m_length = 0;
- }
-
- DISABLE_COPY_AND_ASSIGN (scoped_mmap);
-
- ATTRIBUTE_UNUSED_RESULT void *release () noexcept
- {
- void *mem = m_mem;
- m_mem = MAP_FAILED;
- m_length = 0;
- return mem;
- }
-
- void reset (void *addr, size_t length, int prot, int flags, int fd,
- off_t offset) noexcept
- {
- destroy ();
-
- m_length = length;
- m_mem = mmap (addr, m_length, prot, flags, fd, offset);
- }
-
- size_t size () const noexcept { return m_length; }
- void *get () const noexcept { return m_mem; }
-
-private:
- void destroy ()
- {
- if (m_mem != MAP_FAILED)
- munmap (m_mem, m_length);
- }
-
- void *m_mem;
- size_t m_length;
-};
-
-/* Map FILENAME in memory. Throw an error if anything goes wrong. */
-scoped_mmap mmap_file (const char *filename);
-
-#endif /* HAVE_SYS_MMAN_H */
-
-#endif /* COMMON_SCOPED_MMAP_H */
diff --git a/gdb/gdbsupport/scoped_restore.h b/gdb/gdbsupport/scoped_restore.h
deleted file mode 100644
index 0dca6d0..0000000
--- a/gdb/gdbsupport/scoped_restore.h
+++ /dev/null
@@ -1,118 +0,0 @@
-/* scoped_restore, a simple class for saving and restoring a value
-
- Copyright (C) 2016-2020 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 COMMON_SCOPED_RESTORE_H
-#define COMMON_SCOPED_RESTORE_H
-
-/* Base class for scoped_restore_tmpl. */
-class scoped_restore_base
-{
-public:
- /* This informs the (scoped_restore_tmpl<T>) dtor that you no longer
- want the original value restored. */
- void release () const
- { m_saved_var = NULL; }
-
-protected:
- scoped_restore_base (void *saved_var)
- : m_saved_var (saved_var)
- {}
-
- /* The type-erased saved variable. This is here so that clients can
- call release() on a "scoped_restore" local, which is a typedef to
- a scoped_restore_base. See below. */
- mutable void *m_saved_var;
-};
-
-/* A convenience typedef. Users of make_scoped_restore declare the
- local RAII object as having this type. */
-typedef const scoped_restore_base &scoped_restore;
-
-/* An RAII-based object that saves a variable's value, and then
- restores it again when this object is destroyed. */
-template<typename T>
-class scoped_restore_tmpl : public scoped_restore_base
-{
- public:
-
- /* Create a new scoped_restore object that saves the current value
- of *VAR. *VAR will be restored when this scoped_restore object
- is destroyed. */
- scoped_restore_tmpl (T *var)
- : scoped_restore_base (var),
- m_saved_value (*var)
- {
- }
-
- /* Create a new scoped_restore object that saves the current value
- of *VAR, and sets *VAR to VALUE. *VAR will be restored when this
- scoped_restore object is destroyed. This is templated on T2 to
- allow passing VALUEs of types convertible to T.
- E.g.: T='base'; T2='derived'. */
- template <typename T2>
- scoped_restore_tmpl (T *var, T2 value)
- : scoped_restore_base (var),
- m_saved_value (*var)
- {
- *var = value;
- }
-
- scoped_restore_tmpl (const scoped_restore_tmpl<T> &other)
- : scoped_restore_base {other.m_saved_var},
- m_saved_value (other.m_saved_value)
- {
- other.m_saved_var = NULL;
- }
-
- ~scoped_restore_tmpl ()
- {
- if (saved_var () != NULL)
- *saved_var () = m_saved_value;
- }
-
-private:
- /* Return a pointer to the saved variable with its type
- restored. */
- T *saved_var ()
- { return static_cast<T *> (m_saved_var); }
-
- /* No need for this. It is intentionally not defined anywhere. */
- scoped_restore_tmpl &operator= (const scoped_restore_tmpl &);
-
- /* The saved value. */
- const T m_saved_value;
-};
-
-/* Make a scoped_restore. This is useful because it lets template
- argument deduction work. */
-template<typename T>
-scoped_restore_tmpl<T> make_scoped_restore (T *var)
-{
- return scoped_restore_tmpl<T> (var);
-}
-
-/* Make a scoped_restore. This is useful because it lets template
- argument deduction work. */
-template<typename T, typename T2>
-scoped_restore_tmpl<T> make_scoped_restore (T *var, T2 value)
-{
- return scoped_restore_tmpl<T> (var, value);
-}
-
-#endif /* COMMON_SCOPED_RESTORE_H */
diff --git a/gdb/gdbsupport/selftest.c b/gdb/gdbsupport/selftest.c
deleted file mode 100644
index 8ab63be..0000000
--- a/gdb/gdbsupport/selftest.c
+++ /dev/null
@@ -1,111 +0,0 @@
-/* GDB self-testing.
- Copyright (C) 2016-2020 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 "common-exceptions.h"
-#include "common-debug.h"
-#include "selftest.h"
-#include <map>
-
-namespace selftests
-{
-/* All the tests that have been registered. Using an std::map allows keeping
- the order of tests stable and easily looking up whether a test name
- exists. */
-
-static std::map<std::string, std::unique_ptr<selftest>> tests;
-
-/* A selftest that calls the test function without arguments. */
-
-struct simple_selftest : public selftest
-{
- simple_selftest (self_test_function *function_)
- : function (function_)
- {}
-
- void operator() () const override
- {
- function ();
- }
-
- self_test_function *function;
-};
-
-/* See selftest.h. */
-
-void
-register_test (const std::string &name, selftest *test)
-{
- /* Check that no test with this name already exist. */
- gdb_assert (tests.find (name) == tests.end ());
-
- tests[name] = std::unique_ptr<selftest> (test);
-}
-
-/* See selftest.h. */
-
-void
-register_test (const std::string &name, self_test_function *function)
-{
- register_test (name, new simple_selftest (function));
-}
-
-/* See selftest.h. */
-
-void
-run_tests (const char *filter)
-{
- int ran = 0, failed = 0;
-
- for (const auto &pair : tests)
- {
- const std::string &name = pair.first;
- const std::unique_ptr<selftest> &test = pair.second;
-
- if (filter != NULL && *filter != '\0'
- && name.find (filter) == std::string::npos)
- continue;
-
- try
- {
- debug_printf (_("Running selftest %s.\n"), name.c_str ());
- ++ran;
- (*test) ();
- }
- catch (const gdb_exception_error &ex)
- {
- ++failed;
- debug_printf ("Self test failed: %s\n", ex.what ());
- }
-
- reset ();
- }
-
- debug_printf (_("Ran %d unit tests, %d failed\n"),
- ran, failed);
-}
-
-/* See selftest.h. */
-
-void for_each_selftest (for_each_selftest_ftype func)
-{
- for (const auto &pair : tests)
- func (pair.first);
-}
-
-} // namespace selftests
diff --git a/gdb/gdbsupport/selftest.h b/gdb/gdbsupport/selftest.h
deleted file mode 100644
index 1c47fe1..0000000
--- a/gdb/gdbsupport/selftest.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/* GDB self-testing.
- Copyright (C) 2016-2020 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 COMMON_SELFTEST_H
-#define COMMON_SELFTEST_H
-
-/* A test is just a function that does some checks and throws an
- exception if something has gone wrong. */
-
-typedef void self_test_function (void);
-
-namespace selftests
-{
-
-/* Interface for the various kinds of selftests. */
-
-struct selftest
-{
- virtual ~selftest () = default;
- virtual void operator() () const = 0;
-};
-
-/* Register a new self-test. */
-
-extern void register_test (const std::string &name, selftest *test);
-
-/* Register a new self-test. */
-
-extern void register_test (const std::string &name,
- self_test_function *function);
-
-/* Run all the self tests. This print a message describing the number
- of test and the number of failures.
-
- If FILTER is not NULL and not empty, only tests with names containing FILTER
- will be ran. */
-
-extern void run_tests (const char *filter);
-
-/* Reset GDB or GDBserver's internal state. */
-extern void reset ();
-
-typedef void for_each_selftest_ftype (const std::string &name);
-
-/* Call FUNC for each registered selftest. */
-
-extern void for_each_selftest (for_each_selftest_ftype func);
-}
-
-/* Check that VALUE is true, and, if not, throw an exception. */
-
-#define SELF_CHECK(VALUE) \
- do { \
- if (!(VALUE)) \
- error (_("self-test failed at %s:%d"), __FILE__, __LINE__); \
- } while (0)
-
-#endif /* COMMON_SELFTEST_H */
diff --git a/gdb/gdbsupport/signals-state-save-restore.c b/gdb/gdbsupport/signals-state-save-restore.c
deleted file mode 100644
index c292d49..0000000
--- a/gdb/gdbsupport/signals-state-save-restore.c
+++ /dev/null
@@ -1,114 +0,0 @@
-/* Copyright (C) 2016-2020 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 "signals-state-save-restore.h"
-#include "gdbsupport/gdb-sigmask.h"
-
-#include <signal.h>
-
-/* The original signal actions and mask. */
-
-#ifdef HAVE_SIGACTION
-static struct sigaction original_signal_actions[NSIG];
-
-static sigset_t original_signal_mask;
-#endif
-
-/* See signals-state-save-restore.h. */
-
-void
-save_original_signals_state (bool quiet)
-{
-#ifdef HAVE_SIGACTION
- int i;
- int res;
-
- res = gdb_sigmask (0, NULL, &original_signal_mask);
- if (res == -1)
- perror_with_name (("sigprocmask"));
-
- bool found_preinstalled = false;
-
- for (i = 1; i < NSIG; i++)
- {
- struct sigaction *oldact = &original_signal_actions[i];
-
- res = sigaction (i, NULL, oldact);
- if (res == -1 && errno == EINVAL)
- {
- /* Some signal numbers in the range are invalid. */
- continue;
- }
- else if (res == -1)
- perror_with_name (("sigaction"));
-
- /* If we find a custom signal handler already installed, then
- this function was called too late. This is a warning instead
- of an internal error because this can also happen if you
- LD_PRELOAD a library that installs a signal handler early via
- __attribute__((constructor)), like libSegFault.so. */
- if (!quiet
- && oldact->sa_handler != SIG_DFL
- && oldact->sa_handler != SIG_IGN)
- {
- found_preinstalled = true;
-
- /* Use raw fprintf here because we're being called in early
- startup, before GDB's filtered streams are created. */
- fprintf (stderr,
- _("warning: Found custom handler for signal "
- "%d (%s) preinstalled.\n"), i,
- strsignal (i));
- }
- }
-
- if (found_preinstalled)
- {
- fprintf (stderr, _("\
-Some signal dispositions inherited from the environment (SIG_DFL/SIG_IGN)\n\
-won't be propagated to spawned programs.\n"));
- }
-#endif
-}
-
-/* See signals-state-save-restore.h. */
-
-void
-restore_original_signals_state (void)
-{
-#ifdef HAVE_SIGACTION
- int i;
- int res;
-
- for (i = 1; i < NSIG; i++)
- {
- res = sigaction (i, &original_signal_actions[i], NULL);
- if (res == -1 && errno == EINVAL)
- {
- /* Some signal numbers in the range are invalid. */
- continue;
- }
- else if (res == -1)
- perror_with_name (("sigaction"));
- }
-
- res = gdb_sigmask (SIG_SETMASK, &original_signal_mask, NULL);
- if (res == -1)
- perror_with_name (("sigprocmask"));
-#endif
-}
diff --git a/gdb/gdbsupport/signals-state-save-restore.h b/gdb/gdbsupport/signals-state-save-restore.h
deleted file mode 100644
index 8726bf1..0000000
--- a/gdb/gdbsupport/signals-state-save-restore.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/* Copyright (C) 2016-2020 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 COMMON_SIGNALS_STATE_SAVE_RESTORE_H
-#define COMMON_SIGNALS_STATE_SAVE_RESTORE_H
-
-/* Save/restore the signal actions of all signals, and the signal
- mask.
-
- Since the exec family of functions does not reset the signal
- disposition of signals set to SIG_IGN, nor does it reset the signal
- mask, in order to be transparent, when spawning new child processes
- to debug (with "run", etc.), we must reset signal actions and mask
- back to what was originally inherited from gdb/gdbserver's parent,
- just before execing the target program to debug. */
-
-/* Save the signal state of all signals. If !QUIET, warn if we detect
- a custom signal handler preinstalled. */
-
-extern void save_original_signals_state (bool quiet);
-
-/* Restore the signal state of all signals. */
-
-extern void restore_original_signals_state (void);
-
-#endif /* COMMON_SIGNALS_STATE_SAVE_RESTORE_H */
diff --git a/gdb/gdbsupport/signals.c b/gdb/gdbsupport/signals.c
deleted file mode 100644
index 485e0f0..0000000
--- a/gdb/gdbsupport/signals.c
+++ /dev/null
@@ -1,653 +0,0 @@
-/* Target signal translation functions for GDB.
- Copyright (C) 1990-2020 Free Software Foundation, Inc.
- Contributed by Cygnus Support.
-
- 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"
-
-#ifdef HAVE_SIGNAL_H
-#include <signal.h>
-#endif
-
-#include "gdb_signals.h"
-
-struct gdbarch;
-
-/* Always use __SIGRTMIN if it's available. SIGRTMIN is the lowest
- _available_ realtime signal, not the lowest supported; glibc takes
- several for its own use. */
-
-#ifndef REALTIME_LO
-# if defined(__SIGRTMIN)
-# define REALTIME_LO __SIGRTMIN
-# define REALTIME_HI (__SIGRTMAX + 1)
-# elif defined(SIGRTMIN)
-# define REALTIME_LO SIGRTMIN
-# define REALTIME_HI (SIGRTMAX + 1)
-# endif
-#endif
-
-/* This table must match in order and size the signals in enum
- gdb_signal. */
-
-static const struct {
- const char *symbol;
- const char *name;
- const char *string;
- } signals [] =
-{
-#define SET(symbol, constant, name, string) { #symbol, name, string },
-#include "gdb/signals.def"
-#undef SET
-};
-
-const char *
-gdb_signal_to_symbol_string (enum gdb_signal sig)
-{
- gdb_assert ((int) sig >= GDB_SIGNAL_FIRST && (int) sig <= GDB_SIGNAL_LAST);
-
- return signals[sig].symbol;
-}
-
-/* Return the string for a signal. */
-const char *
-gdb_signal_to_string (enum gdb_signal sig)
-{
- if ((int) sig >= GDB_SIGNAL_FIRST && (int) sig <= GDB_SIGNAL_LAST)
- return signals[sig].string;
- else
- return signals[GDB_SIGNAL_UNKNOWN].string;
-}
-
-/* Return the name for a signal. */
-const char *
-gdb_signal_to_name (enum gdb_signal sig)
-{
- if ((int) sig >= GDB_SIGNAL_FIRST && (int) sig <= GDB_SIGNAL_LAST
- && signals[sig].name != NULL)
- return signals[sig].name;
- else
- /* I think the code which prints this will always print it along
- with the string, so no need to be verbose (very old comment). */
- return "?";
-}
-
-/* Given a name, return its signal. */
-enum gdb_signal
-gdb_signal_from_name (const char *name)
-{
- enum gdb_signal sig;
-
- /* It's possible we also should allow "SIGCLD" as well as "SIGCHLD"
- for GDB_SIGNAL_SIGCHLD. SIGIOT, on the other hand, is more
- questionable; seems like by now people should call it SIGABRT
- instead. */
-
- /* This ugly cast brought to you by the native VAX compiler. */
- for (sig = GDB_SIGNAL_HUP;
- sig < GDB_SIGNAL_LAST;
- sig = (enum gdb_signal) ((int) sig + 1))
- if (signals[sig].name != NULL
- && strcmp (name, signals[sig].name) == 0)
- return sig;
- return GDB_SIGNAL_UNKNOWN;
-}
-
-/* The following functions are to help certain targets deal
- with the signal/waitstatus stuff. They could just as well be in
- a file called native-utils.c or unixwaitstatus-utils.c or whatever. */
-
-/* Convert host signal to our signals. */
-enum gdb_signal
-gdb_signal_from_host (int hostsig)
-{
- /* A switch statement would make sense but would require special
- kludges to deal with the cases where more than one signal has the
- same number. Signals are ordered ANSI-standard signals first,
- other signals second, with signals in each block ordered by their
- numerical values on a typical POSIX platform. */
-
- if (hostsig == 0)
- return GDB_SIGNAL_0;
-
- /* SIGINT, SIGILL, SIGABRT, SIGFPE, SIGSEGV and SIGTERM
- are ANSI-standard signals and are always available. */
- if (hostsig == SIGINT)
- return GDB_SIGNAL_INT;
- if (hostsig == SIGILL)
- return GDB_SIGNAL_ILL;
- if (hostsig == SIGABRT)
- return GDB_SIGNAL_ABRT;
- if (hostsig == SIGFPE)
- return GDB_SIGNAL_FPE;
- if (hostsig == SIGSEGV)
- return GDB_SIGNAL_SEGV;
- if (hostsig == SIGTERM)
- return GDB_SIGNAL_TERM;
-
- /* All other signals need preprocessor conditionals. */
-#if defined (SIGHUP)
- if (hostsig == SIGHUP)
- return GDB_SIGNAL_HUP;
-#endif
-#if defined (SIGQUIT)
- if (hostsig == SIGQUIT)
- return GDB_SIGNAL_QUIT;
-#endif
-#if defined (SIGTRAP)
- if (hostsig == SIGTRAP)
- return GDB_SIGNAL_TRAP;
-#endif
-#if defined (SIGEMT)
- if (hostsig == SIGEMT)
- return GDB_SIGNAL_EMT;
-#endif
-#if defined (SIGKILL)
- if (hostsig == SIGKILL)
- return GDB_SIGNAL_KILL;
-#endif
-#if defined (SIGBUS)
- if (hostsig == SIGBUS)
- return GDB_SIGNAL_BUS;
-#endif
-#if defined (SIGSYS)
- if (hostsig == SIGSYS)
- return GDB_SIGNAL_SYS;
-#endif
-#if defined (SIGPIPE)
- if (hostsig == SIGPIPE)
- return GDB_SIGNAL_PIPE;
-#endif
-#if defined (SIGALRM)
- if (hostsig == SIGALRM)
- return GDB_SIGNAL_ALRM;
-#endif
-#if defined (SIGUSR1)
- if (hostsig == SIGUSR1)
- return GDB_SIGNAL_USR1;
-#endif
-#if defined (SIGUSR2)
- if (hostsig == SIGUSR2)
- return GDB_SIGNAL_USR2;
-#endif
-#if defined (SIGCLD)
- if (hostsig == SIGCLD)
- return GDB_SIGNAL_CHLD;
-#endif
-#if defined (SIGCHLD)
- if (hostsig == SIGCHLD)
- return GDB_SIGNAL_CHLD;
-#endif
-#if defined (SIGPWR)
- if (hostsig == SIGPWR)
- return GDB_SIGNAL_PWR;
-#endif
-#if defined (SIGWINCH)
- if (hostsig == SIGWINCH)
- return GDB_SIGNAL_WINCH;
-#endif
-#if defined (SIGURG)
- if (hostsig == SIGURG)
- return GDB_SIGNAL_URG;
-#endif
-#if defined (SIGIO)
- if (hostsig == SIGIO)
- return GDB_SIGNAL_IO;
-#endif
-#if defined (SIGPOLL)
- if (hostsig == SIGPOLL)
- return GDB_SIGNAL_POLL;
-#endif
-#if defined (SIGSTOP)
- if (hostsig == SIGSTOP)
- return GDB_SIGNAL_STOP;
-#endif
-#if defined (SIGTSTP)
- if (hostsig == SIGTSTP)
- return GDB_SIGNAL_TSTP;
-#endif
-#if defined (SIGCONT)
- if (hostsig == SIGCONT)
- return GDB_SIGNAL_CONT;
-#endif
-#if defined (SIGTTIN)
- if (hostsig == SIGTTIN)
- return GDB_SIGNAL_TTIN;
-#endif
-#if defined (SIGTTOU)
- if (hostsig == SIGTTOU)
- return GDB_SIGNAL_TTOU;
-#endif
-#if defined (SIGVTALRM)
- if (hostsig == SIGVTALRM)
- return GDB_SIGNAL_VTALRM;
-#endif
-#if defined (SIGPROF)
- if (hostsig == SIGPROF)
- return GDB_SIGNAL_PROF;
-#endif
-#if defined (SIGXCPU)
- if (hostsig == SIGXCPU)
- return GDB_SIGNAL_XCPU;
-#endif
-#if defined (SIGXFSZ)
- if (hostsig == SIGXFSZ)
- return GDB_SIGNAL_XFSZ;
-#endif
-#if defined (SIGWIND)
- if (hostsig == SIGWIND)
- return GDB_SIGNAL_WIND;
-#endif
-#if defined (SIGPHONE)
- if (hostsig == SIGPHONE)
- return GDB_SIGNAL_PHONE;
-#endif
-#if defined (SIGLOST)
- if (hostsig == SIGLOST)
- return GDB_SIGNAL_LOST;
-#endif
-#if defined (SIGWAITING)
- if (hostsig == SIGWAITING)
- return GDB_SIGNAL_WAITING;
-#endif
-#if defined (SIGCANCEL)
- if (hostsig == SIGCANCEL)
- return GDB_SIGNAL_CANCEL;
-#endif
-#if defined (SIGLWP)
- if (hostsig == SIGLWP)
- return GDB_SIGNAL_LWP;
-#endif
-#if defined (SIGDANGER)
- if (hostsig == SIGDANGER)
- return GDB_SIGNAL_DANGER;
-#endif
-#if defined (SIGGRANT)
- if (hostsig == SIGGRANT)
- return GDB_SIGNAL_GRANT;
-#endif
-#if defined (SIGRETRACT)
- if (hostsig == SIGRETRACT)
- return GDB_SIGNAL_RETRACT;
-#endif
-#if defined (SIGMSG)
- if (hostsig == SIGMSG)
- return GDB_SIGNAL_MSG;
-#endif
-#if defined (SIGSOUND)
- if (hostsig == SIGSOUND)
- return GDB_SIGNAL_SOUND;
-#endif
-#if defined (SIGSAK)
- if (hostsig == SIGSAK)
- return GDB_SIGNAL_SAK;
-#endif
-#if defined (SIGPRIO)
- if (hostsig == SIGPRIO)
- return GDB_SIGNAL_PRIO;
-#endif
-
- /* Mach exceptions. Assumes that the values for EXC_ are positive! */
-#if defined (EXC_BAD_ACCESS) && defined (_NSIG)
- if (hostsig == _NSIG + EXC_BAD_ACCESS)
- return GDB_EXC_BAD_ACCESS;
-#endif
-#if defined (EXC_BAD_INSTRUCTION) && defined (_NSIG)
- if (hostsig == _NSIG + EXC_BAD_INSTRUCTION)
- return GDB_EXC_BAD_INSTRUCTION;
-#endif
-#if defined (EXC_ARITHMETIC) && defined (_NSIG)
- if (hostsig == _NSIG + EXC_ARITHMETIC)
- return GDB_EXC_ARITHMETIC;
-#endif
-#if defined (EXC_EMULATION) && defined (_NSIG)
- if (hostsig == _NSIG + EXC_EMULATION)
- return GDB_EXC_EMULATION;
-#endif
-#if defined (EXC_SOFTWARE) && defined (_NSIG)
- if (hostsig == _NSIG + EXC_SOFTWARE)
- return GDB_EXC_SOFTWARE;
-#endif
-#if defined (EXC_BREAKPOINT) && defined (_NSIG)
- if (hostsig == _NSIG + EXC_BREAKPOINT)
- return GDB_EXC_BREAKPOINT;
-#endif
-
-#if defined (SIGINFO)
- if (hostsig == SIGINFO)
- return GDB_SIGNAL_INFO;
-#endif
-#if defined (SIGLIBRT)
- if (hostsig == SIGLIBRT)
- return GDB_SIGNAL_LIBRT;
-#endif
-
-#if defined (REALTIME_LO)
- if (hostsig >= REALTIME_LO && hostsig < REALTIME_HI)
- {
- /* This block of GDB_SIGNAL_REALTIME value is in order. */
- if (33 <= hostsig && hostsig <= 63)
- return (enum gdb_signal)
- (hostsig - 33 + (int) GDB_SIGNAL_REALTIME_33);
- else if (hostsig == 32)
- return GDB_SIGNAL_REALTIME_32;
- else if (64 <= hostsig && hostsig <= 127)
- return (enum gdb_signal)
- (hostsig - 64 + (int) GDB_SIGNAL_REALTIME_64);
- else
- error (_("GDB bug: target.c (gdb_signal_from_host): "
- "unrecognized real-time signal"));
- }
-#endif
-
- return GDB_SIGNAL_UNKNOWN;
-}
-
-/* Convert a OURSIG (an enum gdb_signal) to the form used by the
- target operating system (refered to as the ``host'') or zero if the
- equivalent host signal is not available. Set/clear OURSIG_OK
- accordingly. */
-
-static int
-do_gdb_signal_to_host (enum gdb_signal oursig,
- int *oursig_ok)
-{
- int retsig;
- /* Silence the 'not used' warning, for targets that
- do not support signals. */
- (void) retsig;
-
- /* Signals are ordered ANSI-standard signals first, other signals
- second, with signals in each block ordered by their numerical
- values on a typical POSIX platform. */
-
- *oursig_ok = 1;
- switch (oursig)
- {
- case GDB_SIGNAL_0:
- return 0;
-
- /* SIGINT, SIGILL, SIGABRT, SIGFPE, SIGSEGV and SIGTERM
- are ANSI-standard signals and are always available. */
- case GDB_SIGNAL_INT:
- return SIGINT;
- case GDB_SIGNAL_ILL:
- return SIGILL;
- case GDB_SIGNAL_ABRT:
- return SIGABRT;
- case GDB_SIGNAL_FPE:
- return SIGFPE;
- case GDB_SIGNAL_SEGV:
- return SIGSEGV;
- case GDB_SIGNAL_TERM:
- return SIGTERM;
-
- /* All other signals need preprocessor conditionals. */
-#if defined (SIGHUP)
- case GDB_SIGNAL_HUP:
- return SIGHUP;
-#endif
-#if defined (SIGQUIT)
- case GDB_SIGNAL_QUIT:
- return SIGQUIT;
-#endif
-#if defined (SIGTRAP)
- case GDB_SIGNAL_TRAP:
- return SIGTRAP;
-#endif
-#if defined (SIGEMT)
- case GDB_SIGNAL_EMT:
- return SIGEMT;
-#endif
-#if defined (SIGKILL)
- case GDB_SIGNAL_KILL:
- return SIGKILL;
-#endif
-#if defined (SIGBUS)
- case GDB_SIGNAL_BUS:
- return SIGBUS;
-#endif
-#if defined (SIGSYS)
- case GDB_SIGNAL_SYS:
- return SIGSYS;
-#endif
-#if defined (SIGPIPE)
- case GDB_SIGNAL_PIPE:
- return SIGPIPE;
-#endif
-#if defined (SIGALRM)
- case GDB_SIGNAL_ALRM:
- return SIGALRM;
-#endif
-#if defined (SIGUSR1)
- case GDB_SIGNAL_USR1:
- return SIGUSR1;
-#endif
-#if defined (SIGUSR2)
- case GDB_SIGNAL_USR2:
- return SIGUSR2;
-#endif
-#if defined (SIGCHLD) || defined (SIGCLD)
- case GDB_SIGNAL_CHLD:
-#if defined (SIGCHLD)
- return SIGCHLD;
-#else
- return SIGCLD;
-#endif
-#endif /* SIGCLD or SIGCHLD */
-#if defined (SIGPWR)
- case GDB_SIGNAL_PWR:
- return SIGPWR;
-#endif
-#if defined (SIGWINCH)
- case GDB_SIGNAL_WINCH:
- return SIGWINCH;
-#endif
-#if defined (SIGURG)
- case GDB_SIGNAL_URG:
- return SIGURG;
-#endif
-#if defined (SIGIO)
- case GDB_SIGNAL_IO:
- return SIGIO;
-#endif
-#if defined (SIGPOLL)
- case GDB_SIGNAL_POLL:
- return SIGPOLL;
-#endif
-#if defined (SIGSTOP)
- case GDB_SIGNAL_STOP:
- return SIGSTOP;
-#endif
-#if defined (SIGTSTP)
- case GDB_SIGNAL_TSTP:
- return SIGTSTP;
-#endif
-#if defined (SIGCONT)
- case GDB_SIGNAL_CONT:
- return SIGCONT;
-#endif
-#if defined (SIGTTIN)
- case GDB_SIGNAL_TTIN:
- return SIGTTIN;
-#endif
-#if defined (SIGTTOU)
- case GDB_SIGNAL_TTOU:
- return SIGTTOU;
-#endif
-#if defined (SIGVTALRM)
- case GDB_SIGNAL_VTALRM:
- return SIGVTALRM;
-#endif
-#if defined (SIGPROF)
- case GDB_SIGNAL_PROF:
- return SIGPROF;
-#endif
-#if defined (SIGXCPU)
- case GDB_SIGNAL_XCPU:
- return SIGXCPU;
-#endif
-#if defined (SIGXFSZ)
- case GDB_SIGNAL_XFSZ:
- return SIGXFSZ;
-#endif
-#if defined (SIGWIND)
- case GDB_SIGNAL_WIND:
- return SIGWIND;
-#endif
-#if defined (SIGPHONE)
- case GDB_SIGNAL_PHONE:
- return SIGPHONE;
-#endif
-#if defined (SIGLOST)
- case GDB_SIGNAL_LOST:
- return SIGLOST;
-#endif
-#if defined (SIGWAITING)
- case GDB_SIGNAL_WAITING:
- return SIGWAITING;
-#endif
-#if defined (SIGCANCEL)
- case GDB_SIGNAL_CANCEL:
- return SIGCANCEL;
-#endif
-#if defined (SIGLWP)
- case GDB_SIGNAL_LWP:
- return SIGLWP;
-#endif
-#if defined (SIGDANGER)
- case GDB_SIGNAL_DANGER:
- return SIGDANGER;
-#endif
-#if defined (SIGGRANT)
- case GDB_SIGNAL_GRANT:
- return SIGGRANT;
-#endif
-#if defined (SIGRETRACT)
- case GDB_SIGNAL_RETRACT:
- return SIGRETRACT;
-#endif
-#if defined (SIGMSG)
- case GDB_SIGNAL_MSG:
- return SIGMSG;
-#endif
-#if defined (SIGSOUND)
- case GDB_SIGNAL_SOUND:
- return SIGSOUND;
-#endif
-#if defined (SIGSAK)
- case GDB_SIGNAL_SAK:
- return SIGSAK;
-#endif
-#if defined (SIGPRIO)
- case GDB_SIGNAL_PRIO:
- return SIGPRIO;
-#endif
-
- /* Mach exceptions. Assumes that the values for EXC_ are positive! */
-#if defined (EXC_BAD_ACCESS) && defined (_NSIG)
- case GDB_EXC_BAD_ACCESS:
- return _NSIG + EXC_BAD_ACCESS;
-#endif
-#if defined (EXC_BAD_INSTRUCTION) && defined (_NSIG)
- case GDB_EXC_BAD_INSTRUCTION:
- return _NSIG + EXC_BAD_INSTRUCTION;
-#endif
-#if defined (EXC_ARITHMETIC) && defined (_NSIG)
- case GDB_EXC_ARITHMETIC:
- return _NSIG + EXC_ARITHMETIC;
-#endif
-#if defined (EXC_EMULATION) && defined (_NSIG)
- case GDB_EXC_EMULATION:
- return _NSIG + EXC_EMULATION;
-#endif
-#if defined (EXC_SOFTWARE) && defined (_NSIG)
- case GDB_EXC_SOFTWARE:
- return _NSIG + EXC_SOFTWARE;
-#endif
-#if defined (EXC_BREAKPOINT) && defined (_NSIG)
- case GDB_EXC_BREAKPOINT:
- return _NSIG + EXC_BREAKPOINT;
-#endif
-
-#if defined (SIGINFO)
- case GDB_SIGNAL_INFO:
- return SIGINFO;
-#endif
-#if defined (SIGLIBRT)
- case GDB_SIGNAL_LIBRT:
- return SIGLIBRT;
-#endif
-
- default:
-#if defined (REALTIME_LO)
- retsig = 0;
-
- if (oursig >= GDB_SIGNAL_REALTIME_33
- && oursig <= GDB_SIGNAL_REALTIME_63)
- {
- /* This block of signals is continuous, and
- GDB_SIGNAL_REALTIME_33 is 33 by definition. */
- retsig = (int) oursig - (int) GDB_SIGNAL_REALTIME_33 + 33;
- }
- else if (oursig == GDB_SIGNAL_REALTIME_32)
- {
- /* GDB_SIGNAL_REALTIME_32 isn't contiguous with
- GDB_SIGNAL_REALTIME_33. It is 32 by definition. */
- retsig = 32;
- }
- else if (oursig >= GDB_SIGNAL_REALTIME_64
- && oursig <= GDB_SIGNAL_REALTIME_127)
- {
- /* This block of signals is continuous, and
- GDB_SIGNAL_REALTIME_64 is 64 by definition. */
- retsig = (int) oursig - (int) GDB_SIGNAL_REALTIME_64 + 64;
- }
-
- if (retsig >= REALTIME_LO && retsig < REALTIME_HI)
- return retsig;
-#endif
-
- *oursig_ok = 0;
- return 0;
- }
-}
-
-int
-gdb_signal_to_host_p (enum gdb_signal oursig)
-{
- int oursig_ok;
- do_gdb_signal_to_host (oursig, &oursig_ok);
- return oursig_ok;
-}
-
-int
-gdb_signal_to_host (enum gdb_signal oursig)
-{
- int oursig_ok;
- int targ_signo = do_gdb_signal_to_host (oursig, &oursig_ok);
- if (!oursig_ok)
- {
- /* The user might be trying to do "signal SIGSAK" where this system
- doesn't have SIGSAK. */
- warning (_("Signal %s does not exist on this system."),
- gdb_signal_to_name (oursig));
- return 0;
- }
- else
- return targ_signo;
-}
diff --git a/gdb/gdbsupport/symbol.h b/gdb/gdbsupport/symbol.h
deleted file mode 100644
index 3cc3adf..0000000
--- a/gdb/gdbsupport/symbol.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/* Declarations of common symbol functions.
-
- Copyright (C) 2014-2020 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 COMMON_SYMBOL_H
-#define COMMON_SYMBOL_H
-
-struct objfile;
-
-/* Find a symbol that matches NAME. Limit the search to OBJFILE if
- OBJFILE is non-NULL and the implementation supports limiting the
- search to specific object files. NAME may be mangled or demangled.
- If a match is found, store the matching symbol's address in ADDR
- and return zero. Returns nonzero if no symbol matching NAME is
- found. Raise an exception if OBJFILE is non-NULL and the
- implementation does not support limiting searches to specific
- object files. This function must be provided by the client. */
-
-extern int find_minimal_symbol_address (const char *name, CORE_ADDR *addr,
- struct objfile *objfile);
-
-#endif /* COMMON_SYMBOL_H */
diff --git a/gdb/gdbsupport/tdesc.c b/gdb/gdbsupport/tdesc.c
deleted file mode 100644
index aaea8e0..0000000
--- a/gdb/gdbsupport/tdesc.c
+++ /dev/null
@@ -1,401 +0,0 @@
-/* Target description support for GDB.
-
- Copyright (C) 2018-2020 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 "gdbsupport/tdesc.h"
-
-tdesc_reg::tdesc_reg (struct tdesc_feature *feature, const std::string &name_,
- int regnum, int save_restore_, const char *group_,
- int bitsize_, const char *type_)
- : name (name_), target_regnum (regnum),
- save_restore (save_restore_),
- group (group_ != NULL ? group_ : ""),
- bitsize (bitsize_),
- type (type_ != NULL ? type_ : "<unknown>")
-{
- /* If the register's type is target-defined, look it up now. We may not
- have easy access to the containing feature when we want it later. */
- tdesc_type = tdesc_named_type (feature, type.c_str ());
-}
-
-/* Predefined types. */
-static tdesc_type_builtin tdesc_predefined_types[] =
-{
- { "bool", TDESC_TYPE_BOOL },
- { "int8", TDESC_TYPE_INT8 },
- { "int16", TDESC_TYPE_INT16 },
- { "int32", TDESC_TYPE_INT32 },
- { "int64", TDESC_TYPE_INT64 },
- { "int128", TDESC_TYPE_INT128 },
- { "uint8", TDESC_TYPE_UINT8 },
- { "uint16", TDESC_TYPE_UINT16 },
- { "uint32", TDESC_TYPE_UINT32 },
- { "uint64", TDESC_TYPE_UINT64 },
- { "uint128", TDESC_TYPE_UINT128 },
- { "code_ptr", TDESC_TYPE_CODE_PTR },
- { "data_ptr", TDESC_TYPE_DATA_PTR },
- { "ieee_half", TDESC_TYPE_IEEE_HALF },
- { "ieee_single", TDESC_TYPE_IEEE_SINGLE },
- { "ieee_double", TDESC_TYPE_IEEE_DOUBLE },
- { "arm_fpa_ext", TDESC_TYPE_ARM_FPA_EXT },
- { "i387_ext", TDESC_TYPE_I387_EXT }
-};
-
-void tdesc_feature::accept (tdesc_element_visitor &v) const
-{
- v.visit_pre (this);
-
- for (const tdesc_type_up &type : types)
- type->accept (v);
-
- for (const tdesc_reg_up &reg : registers)
- reg->accept (v);
-
- v.visit_post (this);
-}
-
-bool tdesc_feature::operator== (const tdesc_feature &other) const
-{
- if (name != other.name)
- return false;
-
- if (registers.size () != other.registers.size ())
- return false;
-
- for (int ix = 0; ix < registers.size (); ix++)
- {
- const tdesc_reg_up &reg1 = registers[ix];
- const tdesc_reg_up &reg2 = other.registers[ix];
-
- if (reg1 != reg2 && *reg1 != *reg2)
- return false;
- }
-
- if (types.size () != other.types.size ())
- return false;
-
- for (int ix = 0; ix < types.size (); ix++)
- {
- const tdesc_type_up &type1 = types[ix];
- const tdesc_type_up &type2 = other.types[ix];
-
- if (type1 != type2 && *type1 != *type2)
- return false;
- }
-
- return true;
-}
-
-/* Lookup a predefined type. */
-
-static struct tdesc_type *
-tdesc_predefined_type (enum tdesc_type_kind kind)
-{
- for (int ix = 0; ix < ARRAY_SIZE (tdesc_predefined_types); ix++)
- if (tdesc_predefined_types[ix].kind == kind)
- return &tdesc_predefined_types[ix];
-
- gdb_assert_not_reached ("bad predefined tdesc type");
-}
-
-/* See gdbsupport/tdesc.h. */
-
-struct tdesc_type *
-tdesc_named_type (const struct tdesc_feature *feature, const char *id)
-{
- /* First try target-defined types. */
- for (const tdesc_type_up &type : feature->types)
- if (type->name == id)
- return type.get ();
-
- /* Next try the predefined types. */
- for (int ix = 0; ix < ARRAY_SIZE (tdesc_predefined_types); ix++)
- if (tdesc_predefined_types[ix].name == id)
- return &tdesc_predefined_types[ix];
-
- return NULL;
-}
-
-/* See gdbsupport/tdesc.h. */
-
-void
-tdesc_create_reg (struct tdesc_feature *feature, const char *name,
- int regnum, int save_restore, const char *group,
- int bitsize, const char *type)
-{
- tdesc_reg *reg = new tdesc_reg (feature, name, regnum, save_restore,
- group, bitsize, type);
-
- feature->registers.emplace_back (reg);
-}
-
-/* See gdbsupport/tdesc.h. */
-
-struct tdesc_type *
-tdesc_create_vector (struct tdesc_feature *feature, const char *name,
- struct tdesc_type *field_type, int count)
-{
- tdesc_type_vector *type = new tdesc_type_vector (name, field_type, count);
- feature->types.emplace_back (type);
-
- return type;
-}
-
-/* See gdbsupport/tdesc.h. */
-
-tdesc_type_with_fields *
-tdesc_create_struct (struct tdesc_feature *feature, const char *name)
-{
- tdesc_type_with_fields *type
- = new tdesc_type_with_fields (name, TDESC_TYPE_STRUCT);
- feature->types.emplace_back (type);
-
- return type;
-}
-
-/* See gdbsupport/tdesc.h. */
-
-void
-tdesc_set_struct_size (tdesc_type_with_fields *type, int size)
-{
- gdb_assert (type->kind == TDESC_TYPE_STRUCT);
- gdb_assert (size > 0);
- type->size = size;
-}
-
-/* See gdbsupport/tdesc.h. */
-
-tdesc_type_with_fields *
-tdesc_create_union (struct tdesc_feature *feature, const char *name)
-{
- tdesc_type_with_fields *type
- = new tdesc_type_with_fields (name, TDESC_TYPE_UNION);
- feature->types.emplace_back (type);
-
- return type;
-}
-
-/* See gdbsupport/tdesc.h. */
-
-tdesc_type_with_fields *
-tdesc_create_flags (struct tdesc_feature *feature, const char *name,
- int size)
-{
- gdb_assert (size > 0);
-
- tdesc_type_with_fields *type
- = new tdesc_type_with_fields (name, TDESC_TYPE_FLAGS, size);
- feature->types.emplace_back (type);
-
- return type;
-}
-
-/* See gdbsupport/tdesc.h. */
-
-tdesc_type_with_fields *
-tdesc_create_enum (struct tdesc_feature *feature, const char *name,
- int size)
-{
- gdb_assert (size > 0);
-
- tdesc_type_with_fields *type
- = new tdesc_type_with_fields (name, TDESC_TYPE_ENUM, size);
- feature->types.emplace_back (type);
-
- return type;
-}
-
-/* See gdbsupport/tdesc.h. */
-
-void
-tdesc_add_field (tdesc_type_with_fields *type, const char *field_name,
- struct tdesc_type *field_type)
-{
- gdb_assert (type->kind == TDESC_TYPE_UNION
- || type->kind == TDESC_TYPE_STRUCT);
-
- /* Initialize start and end so we know this is not a bit-field
- when we print-c-tdesc. */
- type->fields.emplace_back (field_name, field_type, -1, -1);
-}
-
-/* See gdbsupport/tdesc.h. */
-
-void
-tdesc_add_typed_bitfield (tdesc_type_with_fields *type, const char *field_name,
- int start, int end, struct tdesc_type *field_type)
-{
- gdb_assert (type->kind == TDESC_TYPE_STRUCT
- || type->kind == TDESC_TYPE_FLAGS);
- gdb_assert (start >= 0 && end >= start);
-
- type->fields.emplace_back (field_name, field_type, start, end);
-}
-
-/* See gdbsupport/tdesc.h. */
-
-void
-tdesc_add_bitfield (tdesc_type_with_fields *type, const char *field_name,
- int start, int end)
-{
- struct tdesc_type *field_type;
-
- gdb_assert (start >= 0 && end >= start);
-
- if (type->size > 4)
- field_type = tdesc_predefined_type (TDESC_TYPE_UINT64);
- else
- field_type = tdesc_predefined_type (TDESC_TYPE_UINT32);
-
- tdesc_add_typed_bitfield (type, field_name, start, end, field_type);
-}
-
-/* See gdbsupport/tdesc.h. */
-
-void
-tdesc_add_flag (tdesc_type_with_fields *type, int start,
- const char *flag_name)
-{
- gdb_assert (type->kind == TDESC_TYPE_FLAGS
- || type->kind == TDESC_TYPE_STRUCT);
-
- type->fields.emplace_back (flag_name,
- tdesc_predefined_type (TDESC_TYPE_BOOL),
- start, start);
-}
-
-/* See gdbsupport/tdesc.h. */
-
-void
-tdesc_add_enum_value (tdesc_type_with_fields *type, int value,
- const char *name)
-{
- gdb_assert (type->kind == TDESC_TYPE_ENUM);
- type->fields.emplace_back (name,
- tdesc_predefined_type (TDESC_TYPE_INT32),
- value, -1);
-}
-
-void print_xml_feature::visit_pre (const tdesc_feature *e)
-{
- string_appendf (*m_buffer, "<feature name=\"%s\">\n", e->name.c_str ());
-}
-
-void print_xml_feature::visit_post (const tdesc_feature *e)
-{
- string_appendf (*m_buffer, "</feature>\n");
-}
-
-void print_xml_feature::visit (const tdesc_type_builtin *t)
-{
- error (_("xml output is not supported for type \"%s\"."), t->name.c_str ());
-}
-
-void print_xml_feature::visit (const tdesc_type_vector *t)
-{
- string_appendf (*m_buffer, "<vector id=\"%s\" type=\"%s\" count=\"%d\"/>\n",
- t->name.c_str (), t->element_type->name.c_str (), t->count);
-}
-
-void print_xml_feature::visit (const tdesc_type_with_fields *t)
-{
- const static char *types[] = { "struct", "union", "flags", "enum" };
-
- gdb_assert (t->kind >= TDESC_TYPE_STRUCT && t->kind <= TDESC_TYPE_ENUM);
-
- string_appendf (*m_buffer,
- "<%s id=\"%s\"", types[t->kind - TDESC_TYPE_STRUCT],
- t->name.c_str ());
-
- switch (t->kind)
- {
- case TDESC_TYPE_STRUCT:
- case TDESC_TYPE_FLAGS:
- if (t->size > 0)
- string_appendf (*m_buffer, " size=\"%d\"", t->size);
- string_appendf (*m_buffer, ">\n");
-
- for (const tdesc_type_field &f : t->fields)
- {
- string_appendf (*m_buffer, " <field name=\"%s\" ", f.name.c_str ());
- if (f.start == -1)
- string_appendf (*m_buffer, "type=\"%s\"/>\n",
- f.type->name.c_str ());
- else
- string_appendf (*m_buffer, "start=\"%d\" end=\"%d\"/>\n", f.start,
- f.end);
- }
- break;
-
- case TDESC_TYPE_ENUM:
- string_appendf (*m_buffer, ">\n");
- for (const tdesc_type_field &f : t->fields)
- string_appendf (*m_buffer, " <field name=\"%s\" start=\"%d\"/>\n",
- f.name.c_str (), f.start);
- break;
-
- case TDESC_TYPE_UNION:
- string_appendf (*m_buffer, ">\n");
- for (const tdesc_type_field &f : t->fields)
- string_appendf (*m_buffer, " <field name=\"%s\" type=\"%s\"/>\n",
- f.name.c_str (), f.type->name.c_str ());
- break;
-
- default:
- error (_("xml output is not supported for type \"%s\"."),
- t->name.c_str ());
- }
-
- string_appendf (*m_buffer, "</%s>\n", types[t->kind - TDESC_TYPE_STRUCT]);
-}
-
-void print_xml_feature::visit (const tdesc_reg *r)
-{
- string_appendf (*m_buffer,
- "<reg name=\"%s\" bitsize=\"%d\" type=\"%s\" regnum=\"%ld\"",
- r->name.c_str (), r->bitsize, r->type.c_str (),
- r->target_regnum);
-
- if (r->group.length () > 0)
- string_appendf (*m_buffer, " group=\"%s\"", r->group.c_str ());
-
- if (r->save_restore == 0)
- string_appendf (*m_buffer, " save-restore=\"no\"");
-
- string_appendf (*m_buffer, "/>\n");
-}
-
-void print_xml_feature::visit_pre (const target_desc *e)
-{
-#ifndef IN_PROCESS_AGENT
- string_appendf (*m_buffer, "<?xml version=\"1.0\"?>\n");
- string_appendf (*m_buffer, "<!DOCTYPE target SYSTEM \"gdb-target.dtd\">\n");
- string_appendf (*m_buffer, "<target>\n<architecture>%s</architecture>\n",
- tdesc_architecture_name (e));
-
- const char *osabi = tdesc_osabi_name (e);
- if (osabi != nullptr)
- string_appendf (*m_buffer, "<osabi>%s</osabi>", osabi);
-#endif
-}
-
-void print_xml_feature::visit_post (const target_desc *e)
-{
- string_appendf (*m_buffer, "</target>\n");
-}
diff --git a/gdb/gdbsupport/tdesc.h b/gdb/gdbsupport/tdesc.h
deleted file mode 100644
index 3b1f1f5..0000000
--- a/gdb/gdbsupport/tdesc.h
+++ /dev/null
@@ -1,408 +0,0 @@
-/* Copyright (C) 2006-2020 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 COMMON_TDESC_H
-#define COMMON_TDESC_H
-
-struct tdesc_feature;
-struct tdesc_type;
-struct tdesc_type_builtin;
-struct tdesc_type_vector;
-struct tdesc_type_with_fields;
-struct tdesc_reg;
-struct target_desc;
-
-/* The interface to visit different elements of target description. */
-
-class tdesc_element_visitor
-{
-public:
- virtual void visit_pre (const target_desc *e)
- {}
-
- virtual void visit_post (const target_desc *e)
- {}
-
- virtual void visit_pre (const tdesc_feature *e)
- {}
-
- virtual void visit_post (const tdesc_feature *e)
- {}
-
- virtual void visit (const tdesc_type_builtin *e)
- {}
-
- virtual void visit (const tdesc_type_vector *e)
- {}
-
- virtual void visit (const tdesc_type_with_fields *e)
- {}
-
- virtual void visit (const tdesc_reg *e)
- {}
-};
-
-class tdesc_element
-{
-public:
- virtual void accept (tdesc_element_visitor &v) const = 0;
-};
-
-/* An individual register from a target description. */
-
-struct tdesc_reg : tdesc_element
-{
- tdesc_reg (struct tdesc_feature *feature, const std::string &name_,
- int regnum, int save_restore_, const char *group_,
- int bitsize_, const char *type_);
-
- virtual ~tdesc_reg () = default;
-
- DISABLE_COPY_AND_ASSIGN (tdesc_reg);
-
- /* The name of this register. In standard features, it may be
- recognized by the architecture support code, or it may be purely
- for the user. */
- std::string name;
-
- /* The register number used by this target to refer to this
- register. This is used for remote p/P packets and to determine
- the ordering of registers in the remote g/G packets. */
- long target_regnum;
-
- /* If this flag is set, GDB should save and restore this register
- around calls to an inferior function. */
- int save_restore;
-
- /* The name of the register group containing this register, or empty
- if the group should be automatically determined from the
- register's type. If this is "general", "float", or "vector", the
- corresponding "info" command should display this register's
- value. It can be an arbitrary string, but should be limited to
- alphanumeric characters and internal hyphens. Currently other
- strings are ignored (treated as empty). */
- std::string group;
-
- /* The size of the register, in bits. */
- int bitsize;
-
- /* The type of the register. This string corresponds to either
- a named type from the target description or a predefined
- type from GDB. */
- std::string type;
-
- /* The target-described type corresponding to TYPE, if found. */
- struct tdesc_type *tdesc_type;
-
- void accept (tdesc_element_visitor &v) const override
- {
- v.visit (this);
- }
-
- bool operator== (const tdesc_reg &other) const
- {
- return (name == other.name
- && target_regnum == other.target_regnum
- && save_restore == other.save_restore
- && bitsize == other.bitsize
- && group == other.group
- && type == other.type);
- }
-
- bool operator!= (const tdesc_reg &other) const
- {
- return !(*this == other);
- }
-};
-
-typedef std::unique_ptr<tdesc_reg> tdesc_reg_up;
-
-enum tdesc_type_kind
-{
- /* Predefined types. */
- TDESC_TYPE_BOOL,
- TDESC_TYPE_INT8,
- TDESC_TYPE_INT16,
- TDESC_TYPE_INT32,
- TDESC_TYPE_INT64,
- TDESC_TYPE_INT128,
- TDESC_TYPE_UINT8,
- TDESC_TYPE_UINT16,
- TDESC_TYPE_UINT32,
- TDESC_TYPE_UINT64,
- TDESC_TYPE_UINT128,
- TDESC_TYPE_CODE_PTR,
- TDESC_TYPE_DATA_PTR,
- TDESC_TYPE_IEEE_HALF,
- TDESC_TYPE_IEEE_SINGLE,
- TDESC_TYPE_IEEE_DOUBLE,
- TDESC_TYPE_ARM_FPA_EXT,
- TDESC_TYPE_I387_EXT,
-
- /* Types defined by a target feature. */
- TDESC_TYPE_VECTOR,
- TDESC_TYPE_STRUCT,
- TDESC_TYPE_UNION,
- TDESC_TYPE_FLAGS,
- TDESC_TYPE_ENUM
-};
-
-struct tdesc_type : tdesc_element
-{
- tdesc_type (const std::string &name_, enum tdesc_type_kind kind_)
- : name (name_), kind (kind_)
- {}
-
- virtual ~tdesc_type () = default;
-
- DISABLE_COPY_AND_ASSIGN (tdesc_type);
-
- /* The name of this type. */
- std::string name;
-
- /* Identify the kind of this type. */
- enum tdesc_type_kind kind;
-
- bool operator== (const tdesc_type &other) const
- {
- return name == other.name && kind == other.kind;
- }
-
- bool operator!= (const tdesc_type &other) const
- {
- return !(*this == other);
- }
-};
-
-typedef std::unique_ptr<tdesc_type> tdesc_type_up;
-
-struct tdesc_type_builtin : tdesc_type
-{
- tdesc_type_builtin (const std::string &name, enum tdesc_type_kind kind)
- : tdesc_type (name, kind)
- {}
-
- void accept (tdesc_element_visitor &v) const override
- {
- v.visit (this);
- }
-};
-
-/* tdesc_type for vector types. */
-
-struct tdesc_type_vector : tdesc_type
-{
- tdesc_type_vector (const std::string &name, tdesc_type *element_type_,
- int count_)
- : tdesc_type (name, TDESC_TYPE_VECTOR),
- element_type (element_type_), count (count_)
- {}
-
- void accept (tdesc_element_visitor &v) const override
- {
- v.visit (this);
- }
-
- struct tdesc_type *element_type;
- int count;
-};
-
-/* A named type from a target description. */
-
-struct tdesc_type_field
-{
- tdesc_type_field (const std::string &name_, tdesc_type *type_,
- int start_, int end_)
- : name (name_), type (type_), start (start_), end (end_)
- {}
-
- std::string name;
- struct tdesc_type *type;
- /* For non-enum-values, either both are -1 (non-bitfield), or both are
- not -1 (bitfield). For enum values, start is the value (which could be
- -1), end is -1. */
- int start, end;
-};
-
-/* tdesc_type for struct, union, flags, and enum types. */
-
-struct tdesc_type_with_fields : tdesc_type
-{
- tdesc_type_with_fields (const std::string &name, tdesc_type_kind kind,
- int size_ = 0)
- : tdesc_type (name, kind), size (size_)
- {}
-
- void accept (tdesc_element_visitor &v) const override
- {
- v.visit (this);
- }
-
- std::vector<tdesc_type_field> fields;
- int size;
-};
-
-/* A feature from a target description. Each feature is a collection
- of other elements, e.g. registers and types. */
-
-struct tdesc_feature : tdesc_element
-{
- tdesc_feature (const std::string &name_)
- : name (name_)
- {}
-
- virtual ~tdesc_feature () = default;
-
- DISABLE_COPY_AND_ASSIGN (tdesc_feature);
-
- /* The name of this feature. It may be recognized by the architecture
- support code. */
- std::string name;
-
- /* The registers associated with this feature. */
- std::vector<tdesc_reg_up> registers;
-
- /* The types associated with this feature. */
- std::vector<tdesc_type_up> types;
-
- void accept (tdesc_element_visitor &v) const override;
-
- bool operator== (const tdesc_feature &other) const;
-
- bool operator!= (const tdesc_feature &other) const
- {
- return !(*this == other);
- }
-};
-
-typedef std::unique_ptr<tdesc_feature> tdesc_feature_up;
-
-/* Allocate a new target_desc. */
-target_desc *allocate_target_description (void);
-
-/* Set TARGET_DESC's architecture by NAME. */
-void set_tdesc_architecture (target_desc *target_desc,
- const char *name);
-
-/* Return the architecture associated with this target description as a string,
- or NULL if no architecture was specified. */
-const char *tdesc_architecture_name (const struct target_desc *target_desc);
-
-/* Set TARGET_DESC's osabi by NAME. */
-void set_tdesc_osabi (target_desc *target_desc, const char *name);
-
-/* Return the osabi associated with this target description as a string,
- or NULL if no osabi was specified. */
-const char *tdesc_osabi_name (const struct target_desc *target_desc);
-
-/* Return the type associated with ID in the context of FEATURE, or
- NULL if none. */
-struct tdesc_type *tdesc_named_type (const struct tdesc_feature *feature,
- const char *id);
-
-/* Return the created feature named NAME in target description TDESC. */
-struct tdesc_feature *tdesc_create_feature (struct target_desc *tdesc,
- const char *name);
-
-/* Return the created vector tdesc_type named NAME in FEATURE. */
-struct tdesc_type *tdesc_create_vector (struct tdesc_feature *feature,
- const char *name,
- struct tdesc_type *field_type,
- int count);
-
-/* Return the created struct tdesc_type named NAME in FEATURE. */
-tdesc_type_with_fields *tdesc_create_struct (struct tdesc_feature *feature,
- const char *name);
-
-/* Return the created union tdesc_type named NAME in FEATURE. */
-tdesc_type_with_fields *tdesc_create_union (struct tdesc_feature *feature,
- const char *name);
-
-/* Return the created flags tdesc_type named NAME in FEATURE. */
-tdesc_type_with_fields *tdesc_create_flags (struct tdesc_feature *feature,
- const char *name,
- int size);
-
-/* Return the created enum tdesc_type named NAME in FEATURE. */
-tdesc_type_with_fields *tdesc_create_enum (struct tdesc_feature *feature,
- const char *name,
- int size);
-
-/* Add a new field to TYPE. FIELD_NAME is its name, and FIELD_TYPE is
- its type. */
-void tdesc_add_field (tdesc_type_with_fields *type, const char *field_name,
- struct tdesc_type *field_type);
-
-/* Add a new bitfield to TYPE, with range START to END. FIELD_NAME is its name,
- and FIELD_TYPE is its type. */
-void tdesc_add_typed_bitfield (tdesc_type_with_fields *type,
- const char *field_name,
- int start, int end,
- struct tdesc_type *field_type);
-
-/* Set the total length of TYPE. Structs which contain bitfields may
- omit the reserved bits, so the end of the last field may not
- suffice. */
-void tdesc_set_struct_size (tdesc_type_with_fields *type, int size);
-
-/* Add a new untyped bitfield to TYPE.
- Untyped bitfields become either uint32 or uint64 depending on the size
- of the underlying type. */
-void tdesc_add_bitfield (tdesc_type_with_fields *type, const char *field_name,
- int start, int end);
-
-/* A flag is just a typed(bool) single-bit bitfield.
- This function is kept to minimize changes in generated files. */
-void tdesc_add_flag (tdesc_type_with_fields *type, int start,
- const char *flag_name);
-
-/* Add field with VALUE and NAME to the enum TYPE. */
-void tdesc_add_enum_value (tdesc_type_with_fields *type, int value,
- const char *name);
-
-/* Create a register in feature FEATURE. */
-void tdesc_create_reg (struct tdesc_feature *feature, const char *name,
- int regnum, int save_restore, const char *group,
- int bitsize, const char *type);
-
-/* Return the tdesc in string XML format. */
-
-const char *tdesc_get_features_xml (const target_desc *tdesc);
-
-/* Print target description as xml. */
-
-class print_xml_feature : public tdesc_element_visitor
-{
-public:
- print_xml_feature (std::string *buffer_)
- : m_buffer (buffer_)
- {}
-
- void visit_pre (const target_desc *e) override;
- void visit_post (const target_desc *e) override;
- void visit_pre (const tdesc_feature *e) override;
- void visit_post (const tdesc_feature *e) override;
- void visit (const tdesc_type_builtin *type) override;
- void visit (const tdesc_type_vector *type) override;
- void visit (const tdesc_type_with_fields *type) override;
- void visit (const tdesc_reg *reg) override;
-
-private:
- std::string *m_buffer;
-};
-
-#endif /* COMMON_TDESC_H */
diff --git a/gdb/gdbsupport/thread-pool.c b/gdb/gdbsupport/thread-pool.c
deleted file mode 100644
index fc83ff7..0000000
--- a/gdb/gdbsupport/thread-pool.c
+++ /dev/null
@@ -1,167 +0,0 @@
-/* Thread pool
-
- Copyright (C) 2019-2020 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"
-
-#if CXX_STD_THREAD
-
-#include "gdbsupport/thread-pool.h"
-#include "gdbsupport/alt-stack.h"
-#include "gdbsupport/block-signals.h"
-#include <algorithm>
-
-/* On the off chance that we have the pthread library on a Windows
- host, but std::thread is not using it, avoid calling
- pthread_setname_np on Windows. */
-#ifndef _WIN32
-#ifdef HAVE_PTHREAD_SETNAME_NP
-#define USE_PTHREAD_SETNAME_NP
-#endif
-#endif
-
-#ifdef USE_PTHREAD_SETNAME_NP
-
-#include <pthread.h>
-
-/* Handle platform discrepancies in pthread_setname_np: macOS uses a
- single-argument form, while Linux uses a two-argument form. This
- wrapper handles the difference. */
-
-ATTRIBUTE_UNUSED static void
-set_thread_name (int (*set_name) (pthread_t, const char *), const char *name)
-{
- set_name (pthread_self (), name);
-}
-
-/* The macOS man page says that pthread_setname_np returns "void", but
- the headers actually declare it returning "int". */
-ATTRIBUTE_UNUSED static void
-set_thread_name (int (*set_name) (const char *), const char *name)
-{
- set_name (name);
-}
-
-#endif /* USE_PTHREAD_SETNAME_NP */
-
-namespace gdb
-{
-
-/* The thread pool detach()s its threads, so that the threads will not
- prevent the process from exiting. However, it was discovered that
- if any detached threads were still waiting on a condition variable,
- then the condition variable's destructor would wait for the threads
- to exit -- defeating the purpose.
-
- Allocating the thread pool on the heap and simply "leaking" it
- avoids this problem.
-*/
-thread_pool *thread_pool::g_thread_pool = new thread_pool ();
-
-thread_pool::~thread_pool ()
-{
- /* Because this is a singleton, we don't need to clean up. The
- threads are detached so that they won't prevent process exit.
- And, cleaning up here would be actively harmful in at least one
- case -- see the comment by the definition of g_thread_pool. */
-}
-
-void
-thread_pool::set_thread_count (size_t num_threads)
-{
- std::lock_guard<std::mutex> guard (m_tasks_mutex);
-
- /* If the new size is larger, start some new threads. */
- if (m_thread_count < num_threads)
- {
- /* Ensure that signals used by gdb are blocked in the new
- threads. */
- block_signals blocker;
- for (size_t i = m_thread_count; i < num_threads; ++i)
- {
- std::thread thread (&thread_pool::thread_function, this);
- thread.detach ();
- }
- }
- /* If the new size is smaller, terminate some existing threads. */
- if (num_threads < m_thread_count)
- {
- for (size_t i = num_threads; i < m_thread_count; ++i)
- m_tasks.emplace ();
- m_tasks_cv.notify_all ();
- }
-
- m_thread_count = num_threads;
-}
-
-std::future<void>
-thread_pool::post_task (std::function<void ()> func)
-{
- std::packaged_task<void ()> t (func);
- std::future<void> f = t.get_future ();
-
- if (m_thread_count == 0)
- {
- /* Just execute it now. */
- t ();
- }
- else
- {
- std::lock_guard<std::mutex> guard (m_tasks_mutex);
- m_tasks.emplace (std::move (t));
- m_tasks_cv.notify_one ();
- }
- return f;
-}
-
-void
-thread_pool::thread_function ()
-{
-#ifdef USE_PTHREAD_SETNAME_NP
- /* This must be done here, because on macOS one can only set the
- name of the current thread. */
- set_thread_name (pthread_setname_np, "gdb worker");
-#endif
-
- /* Ensure that SIGSEGV is delivered to an alternate signal
- stack. */
- gdb::alternate_signal_stack signal_stack;
-
- while (true)
- {
- optional<task> t;
-
- {
- /* We want to hold the lock while examining the task list, but
- not while invoking the task function. */
- std::unique_lock<std::mutex> guard (m_tasks_mutex);
- while (m_tasks.empty ())
- m_tasks_cv.wait (guard);
- t = std::move (m_tasks.front());
- m_tasks.pop ();
- }
-
- if (!t.has_value ())
- break;
- (*t) ();
- }
-}
-
-}
-
-#endif /* CXX_STD_THREAD */
diff --git a/gdb/gdbsupport/thread-pool.h b/gdb/gdbsupport/thread-pool.h
deleted file mode 100644
index 2fb4453..0000000
--- a/gdb/gdbsupport/thread-pool.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/* Thread pool
-
- Copyright (C) 2019-2020 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 GDBSUPPORT_THREAD_POOL_H
-#define GDBSUPPORT_THREAD_POOL_H
-
-#include <queue>
-#include <thread>
-#include <vector>
-#include <functional>
-#include <mutex>
-#include <condition_variable>
-#include <future>
-#include "gdbsupport/gdb_optional.h"
-
-namespace gdb
-{
-
-/* A thread pool.
-
- There is a single global thread pool, see g_thread_pool. Tasks can
- be submitted to the thread pool. They will be processed in worker
- threads as time allows. */
-class thread_pool
-{
-public:
- /* The sole global thread pool. */
- static thread_pool *g_thread_pool;
-
- ~thread_pool ();
- DISABLE_COPY_AND_ASSIGN (thread_pool);
-
- /* Set the thread count of this thread pool. By default, no threads
- are created -- the thread count must be set first. */
- void set_thread_count (size_t num_threads);
-
- /* Return the number of executing threads. */
- size_t thread_count () const
- {
- return m_thread_count;
- }
-
- /* Post a task to the thread pool. A future is returned, which can
- be used to wait for the result. */
- std::future<void> post_task (std::function<void ()> func);
-
-private:
-
- thread_pool () = default;
-
- /* The callback for each worker thread. */
- void thread_function ();
-
- /* The current thread count. */
- size_t m_thread_count = 0;
-
- /* A convenience typedef for the type of a task. */
- typedef std::packaged_task<void ()> task;
-
- /* The tasks that have not been processed yet. An optional is used
- to represent a task. If the optional is empty, then this means
- that the receiving thread should terminate. If the optional is
- non-empty, then it is an actual task to evaluate. */
- std::queue<optional<task>> m_tasks;
-
- /* A condition variable and mutex that are used for communication
- between the main thread and the worker threads. */
- std::condition_variable m_tasks_cv;
- std::mutex m_tasks_mutex;
-};
-
-}
-
-#endif /* GDBSUPPORT_THREAD_POOL_H */
diff --git a/gdb/gdbsupport/traits.h b/gdb/gdbsupport/traits.h
deleted file mode 100644
index 2a6f006..0000000
--- a/gdb/gdbsupport/traits.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/* Copyright (C) 2017-2020 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 COMMON_TRAITS_H
-#define COMMON_TRAITS_H
-
-#include <type_traits>
-
-/* GCC does not understand __has_feature. */
-#if !defined(__has_feature)
-# define __has_feature(x) 0
-#endif
-
-/* HAVE_IS_TRIVIALLY_COPYABLE is defined as 1 iff
- std::is_trivially_copyable is available. GCC only implemented it
- in GCC 5. */
-#if (__has_feature(is_trivially_copyable) \
- || (defined __GNUC__ && __GNUC__ >= 5))
-# define HAVE_IS_TRIVIALLY_COPYABLE 1
-#endif
-
-/* HAVE_IS_TRIVIALLY_CONSTRUCTIBLE is defined as 1 iff
- std::is_trivially_constructible is available. GCC only implemented it
- in GCC 5. */
-#if (__has_feature(is_trivially_constructible) \
- || (defined __GNUC__ && __GNUC__ >= 5))
-# define HAVE_IS_TRIVIALLY_CONSTRUCTIBLE 1
-#endif
-
-namespace gdb {
-
-/* Pre C++14-safe (CWG 1558) version of C++17's std::void_t. See
- <http://en.cppreference.com/w/cpp/types/void_t>. */
-
-template<typename... Ts>
-struct make_void { typedef void type; };
-
-template<typename... Ts>
-using void_t = typename make_void<Ts...>::type;
-
-/* A few trait helpers, mainly stolen from libstdc++. Uppercase
- because "and/or", etc. are reserved keywords. */
-
-template<typename Predicate>
-struct Not : public std::integral_constant<bool, !Predicate::value>
-{};
-
-template<typename...>
-struct Or;
-
-template<>
-struct Or<> : public std::false_type
-{};
-
-template<typename B1>
-struct Or<B1> : public B1
-{};
-
-template<typename B1, typename B2>
-struct Or<B1, B2>
- : public std::conditional<B1::value, B1, B2>::type
-{};
-
-template<typename B1,typename B2,typename B3, typename... Bn>
-struct Or<B1, B2, B3, Bn...>
- : public std::conditional<B1::value, B1, Or<B2, B3, Bn...>>::type
-{};
-
-template<typename...>
-struct And;
-
-template<>
-struct And<> : public std::true_type
-{};
-
-template<typename B1>
-struct And<B1> : public B1
-{};
-
-template<typename B1, typename B2>
-struct And<B1, B2>
- : public std::conditional<B1::value, B2, B1>::type
-{};
-
-template<typename B1, typename B2, typename B3, typename... Bn>
-struct And<B1, B2, B3, Bn...>
- : public std::conditional<B1::value, And<B2, B3, Bn...>, B1>::type
-{};
-
-/* Concepts-light-like helper to make SFINAE logic easier to read. */
-template<typename Condition>
-using Requires = typename std::enable_if<Condition::value, void>::type;
-}
-
-#endif /* COMMON_TRAITS_H */
diff --git a/gdb/gdbsupport/underlying.h b/gdb/gdbsupport/underlying.h
deleted file mode 100644
index a90aedb..0000000
--- a/gdb/gdbsupport/underlying.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Copyright (C) 2017-2020 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 COMMON_UNDERLYING_H
-#define COMMON_UNDERLYING_H
-
-#include <type_traits>
-
-/* Convert an enum to its underlying value. */
-
-template<typename E>
-constexpr typename std::underlying_type<E>::type
-to_underlying (E val) noexcept
-{
- return static_cast<typename std::underlying_type<E>::type> (val);
-}
-
-#endif
diff --git a/gdb/gdbsupport/valid-expr.h b/gdb/gdbsupport/valid-expr.h
deleted file mode 100644
index b1c8446..0000000
--- a/gdb/gdbsupport/valid-expr.h
+++ /dev/null
@@ -1,108 +0,0 @@
-/* Compile-time valid expression checker for GDB, the GNU debugger.
-
- Copyright (C) 2017-2020 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/>. */
-
-/* Helper macros used to build compile-time unit tests that make sure
- that invalid expressions that should not compile would not compile,
- and that expressions that should compile do compile, and have the
- right type. This is mainly used to verify that some utility's API
- is really as safe as intended. */
-
-#ifndef COMMON_VALID_EXPR_H
-#define COMMON_VALID_EXPR_H
-
-#include "gdbsupport/preprocessor.h"
-#include "gdbsupport/traits.h"
-
-/* Macro that uses SFINAE magic to detect whether the EXPR expression
- is either valid or ill-formed, at compile time, without actually
- producing compile-time errors. I.e., check that bad uses of the
- types (e.g., involving mismatching types) would be caught at
- compile time. If the expression is valid, also check whether the
- expression has the right type.
-
- EXPR must be defined in terms of some of the template parameters,
- so that template substitution failure discards the overload instead
- of causing a real compile error. TYPES is thus the list of types
- involved in the expression, and TYPENAMES is the same list, but
- with each element prefixed by "typename". These are passed as
- template parameter types to the templates within the macro.
-
- VALID is a boolean that indicates whether the expression is
- supposed to be valid or invalid.
-
- EXPR_TYPE is the expected type of EXPR. Only meaningful iff VALID
- is true. If VALID is false, then you must pass "void" as expected
- type.
-
- Each invocation of the macro is wrapped in its own namespace to
- avoid ODR violations. The generated namespace only includes the
- line number, so client code should wrap sets of calls in a
- test-specific namespace too, to fully guarantee uniqueness between
- the multiple clients in the codebase. */
-#define CHECK_VALID_EXPR_INT(TYPENAMES, TYPES, VALID, EXPR_TYPE, EXPR) \
- namespace CONCAT (check_valid_expr, __LINE__) { \
- \
- template<typename, typename, typename = void> \
- struct is_valid_expression \
- : std::false_type {}; \
- \
- template <TYPENAMES> \
- struct is_valid_expression<TYPES, gdb::void_t<decltype (EXPR)>> \
- : std::true_type {}; \
- \
- static_assert (is_valid_expression<TYPES>::value == VALID, \
- ""); \
- \
- template<TYPENAMES, typename = void> \
- struct is_same_type \
- : std::is_same<EXPR_TYPE, void> {}; \
- \
- template <TYPENAMES> \
- struct is_same_type<TYPES, gdb::void_t<decltype (EXPR)>> \
- : std::is_same<EXPR_TYPE, decltype (EXPR)> {}; \
- \
- static_assert (is_same_type<TYPES>::value, ""); \
- } /* namespace */
-
-/* A few convenience macros that support expressions involving a
- varying numbers of types. If you need more types, feel free to add
- another variant. */
-
-#define CHECK_VALID_EXPR_1(T1, VALID, EXPR_TYPE, EXPR) \
- CHECK_VALID_EXPR_INT (ESC_PARENS (typename T1), \
- ESC_PARENS (T1), \
- VALID, EXPR_TYPE, EXPR)
-
-#define CHECK_VALID_EXPR_2(T1, T2, VALID, EXPR_TYPE, EXPR) \
- CHECK_VALID_EXPR_INT (ESC_PARENS(typename T1, typename T2), \
- ESC_PARENS (T1, T2), \
- VALID, EXPR_TYPE, EXPR)
-
-#define CHECK_VALID_EXPR_3(T1, T2, T3, VALID, EXPR_TYPE, EXPR) \
- CHECK_VALID_EXPR_INT (ESC_PARENS (typename T1, typename T2, typename T3), \
- ESC_PARENS (T1, T2, T3), \
- VALID, EXPR_TYPE, EXPR)
-
-#define CHECK_VALID_EXPR_4(T1, T2, T3, T4, VALID, EXPR_TYPE, EXPR) \
- CHECK_VALID_EXPR_INT (ESC_PARENS (typename T1, typename T2, \
- typename T3, typename T4), \
- ESC_PARENS (T1, T2, T3, T4), \
- VALID, EXPR_TYPE, EXPR)
-
-#endif /* COMMON_VALID_EXPR_H */
diff --git a/gdb/gdbsupport/version.h b/gdb/gdbsupport/version.h
deleted file mode 100644
index 9c94fec..0000000
--- a/gdb/gdbsupport/version.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/* Version information for GDB.
- Copyright (C) 1999-2020 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 COMMON_VERSION_H
-#define COMMON_VERSION_H
-
-/* Version number of GDB, as a string. */
-extern const char version[];
-
-/* Canonical host name as a string. */
-extern const char host_name[];
-
-/* Canonical target name as a string. */
-extern const char target_name[];
-
-#endif /* COMMON_VERSION_H */
diff --git a/gdb/gdbsupport/x86-xstate.h b/gdb/gdbsupport/x86-xstate.h
deleted file mode 100644
index 0331d8f..0000000
--- a/gdb/gdbsupport/x86-xstate.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/* Common code for x86 XSAVE extended state.
-
- Copyright (C) 2010-2020 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 COMMON_X86_XSTATE_H
-#define COMMON_X86_XSTATE_H
-
-/* The extended state feature bits. */
-#define X86_XSTATE_X87 (1ULL << 0)
-#define X86_XSTATE_SSE (1ULL << 1)
-#define X86_XSTATE_AVX (1ULL << 2)
-#define X86_XSTATE_BNDREGS (1ULL << 3)
-#define X86_XSTATE_BNDCFG (1ULL << 4)
-#define X86_XSTATE_MPX (X86_XSTATE_BNDREGS | X86_XSTATE_BNDCFG)
-
-/* AVX 512 adds three feature bits. All three must be enabled. */
-#define X86_XSTATE_K (1ULL << 5)
-#define X86_XSTATE_ZMM_H (1ULL << 6)
-#define X86_XSTATE_ZMM (1ULL << 7)
-#define X86_XSTATE_AVX512 (X86_XSTATE_K | X86_XSTATE_ZMM_H \
- | X86_XSTATE_ZMM)
-
-#define X86_XSTATE_PKRU (1ULL << 9)
-
-/* Supported mask and size of the extended state. */
-#define X86_XSTATE_X87_MASK X86_XSTATE_X87
-#define X86_XSTATE_SSE_MASK (X86_XSTATE_X87 | X86_XSTATE_SSE)
-#define X86_XSTATE_AVX_MASK (X86_XSTATE_SSE_MASK | X86_XSTATE_AVX)
-#define X86_XSTATE_MPX_MASK (X86_XSTATE_SSE_MASK | X86_XSTATE_MPX)
-#define X86_XSTATE_AVX_MPX_MASK (X86_XSTATE_AVX_MASK | X86_XSTATE_MPX)
-#define X86_XSTATE_AVX_AVX512_MASK (X86_XSTATE_AVX_MASK | X86_XSTATE_AVX512)
-#define X86_XSTATE_AVX_MPX_AVX512_PKU_MASK (X86_XSTATE_AVX_MPX_MASK\
- | X86_XSTATE_AVX512 | X86_XSTATE_PKRU)
-
-#define X86_XSTATE_ALL_MASK (X86_XSTATE_AVX_MPX_AVX512_PKU_MASK)
-
-
-#define X86_XSTATE_SSE_SIZE 576
-#define X86_XSTATE_AVX_SIZE 832
-#define X86_XSTATE_BNDREGS_SIZE 1024
-#define X86_XSTATE_BNDCFG_SIZE 1088
-#define X86_XSTATE_AVX512_SIZE 2688
-#define X86_XSTATE_PKRU_SIZE 2696
-#define X86_XSTATE_MAX_SIZE 2696
-
-
-/* In case one of the MPX XCR0 bits is set we consider we have MPX. */
-#define HAS_MPX(XCR0) (((XCR0) & X86_XSTATE_MPX) != 0)
-#define HAS_AVX(XCR0) (((XCR0) & X86_XSTATE_AVX) != 0)
-#define HAS_AVX512(XCR0) (((XCR0) & X86_XSTATE_AVX512) != 0)
-#define HAS_PKRU(XCR0) (((XCR0) & X86_XSTATE_PKRU) != 0)
-
-/* Get I386 XSAVE extended state size. */
-#define X86_XSTATE_SIZE(XCR0) \
- (HAS_PKRU (XCR0) ? X86_XSTATE_PKRU_SIZE : \
- (HAS_AVX512 (XCR0) ? X86_XSTATE_AVX512_SIZE : \
- (HAS_MPX (XCR0) ? X86_XSTATE_BNDCFG_SIZE : \
- (HAS_AVX (XCR0) ? X86_XSTATE_AVX_SIZE : X86_XSTATE_SSE_SIZE))))
-
-/* Initial value for fctrl register, as defined in the X86 manual, and
- confirmed in the (Linux) kernel source. When the x87 floating point
- feature is not enabled in an inferior we use this as the value of the
- fcrtl register. */
-
-#define I387_FCTRL_INIT_VAL 0x037f
-
-/* Initial value for mxcsr register. When the avx and sse floating point
- features are not enabled in an inferior we use this as the value of the
- mxcsr register. */
-
-#define I387_MXCSR_INIT_VAL 0x1f80
-
-#endif /* COMMON_X86_XSTATE_H */
diff --git a/gdb/gdbsupport/xml-utils.c b/gdb/gdbsupport/xml-utils.c
deleted file mode 100644
index 3c6c11a..0000000
--- a/gdb/gdbsupport/xml-utils.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/* Shared helper routines for manipulating XML.
-
- Copyright (C) 2006-2020 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 "xml-utils.h"
-
-/* See xml-utils.h. */
-
-std::string
-xml_escape_text (const char *text)
-{
- std::string result;
-
- xml_escape_text_append (&result, text);
-
- return result;
-}
-
-/* See xml-utils.h. */
-
-void
-xml_escape_text_append (std::string *result, const char *text)
-{
- /* Expand the result. */
- for (int i = 0; text[i] != '\0'; i++)
- switch (text[i])
- {
- case '\'':
- *result += "&apos;";
- break;
- case '\"':
- *result += "&quot;";
- break;
- case '&':
- *result += "&amp;";
- break;
- case '<':
- *result += "&lt;";
- break;
- case '>':
- *result += "&gt;";
- break;
- default:
- *result += text[i];
- break;
- }
-}
diff --git a/gdb/gdbsupport/xml-utils.h b/gdb/gdbsupport/xml-utils.h
deleted file mode 100644
index 19dead4..0000000
--- a/gdb/gdbsupport/xml-utils.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/* Shared helper routines for manipulating XML.
-
- Copyright (C) 2006-2020 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 COMMON_XML_UTILS_H
-#define COMMON_XML_UTILS_H
-
-/* Return a string with special characters from TEXT replaced by entity
- references. */
-
-extern std::string xml_escape_text (const char *text);
-
-/* Append TEXT to RESULT, with special characters replaced by entity
- references. */
-
-extern void xml_escape_text_append (std::string *result, const char *text);
-
-#endif /* COMMON_XML_UTILS_H */
diff --git a/gdb/nat/linux-btrace.c b/gdb/nat/linux-btrace.c
index 03fc85e..3a3cd8d 100644
--- a/gdb/nat/linux-btrace.c
+++ b/gdb/nat/linux-btrace.c
@@ -20,6 +20,14 @@
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include "gdbsupport/common-defs.h"
+
+#undef PACKAGE
+#undef PACKAGE_NAME
+#undef PACKAGE_VERSION
+#undef PACKAGE_STRING
+#undef PACKAGE_TARNAME
+
+#include <config.h>
#include "linux-btrace.h"
#include "gdbsupport/common-regcache.h"
#include "gdbsupport/gdb_wait.h"
diff --git a/gdb/nat/linux-ptrace.c b/gdb/nat/linux-ptrace.c
index 5335d69..859feb7 100644
--- a/gdb/nat/linux-ptrace.c
+++ b/gdb/nat/linux-ptrace.c
@@ -17,6 +17,14 @@
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include "gdbsupport/common-defs.h"
+
+#undef PACKAGE
+#undef PACKAGE_NAME
+#undef PACKAGE_VERSION
+#undef PACKAGE_STRING
+#undef PACKAGE_TARNAME
+
+#include <config.h>
#include "linux-ptrace.h"
#include "linux-procfs.h"
#include "linux-waitpid.h"
diff --git a/gdb/nat/x86-linux-dregs.c b/gdb/nat/x86-linux-dregs.c
index b5dd71e..31683aa 100644
--- a/gdb/nat/x86-linux-dregs.c
+++ b/gdb/nat/x86-linux-dregs.c
@@ -18,6 +18,14 @@
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include "gdbsupport/common-defs.h"
+
+#undef PACKAGE
+#undef PACKAGE_NAME
+#undef PACKAGE_VERSION
+#undef PACKAGE_STRING
+#undef PACKAGE_TARNAME
+
+#include <config.h>
#include "nat/gdb_ptrace.h"
#include <sys/user.h>
#include "target/waitstatus.h"