summaryrefslogtreecommitdiff
path: root/share/gdb
diff options
context:
space:
mode:
authoralk3pInjection <webmaster@raspii.tech>2024-02-04 16:16:35 +0800
committeralk3pInjection <webmaster@raspii.tech>2024-02-04 16:16:35 +0800
commit6ce4ebed87858ecdd79a1091367c6e961055daa9 (patch)
tree1c2a6a60531acf791531bbd9c8ac14c23ef8a66c /share/gdb
Import stripped Arm GNU Toolchain 13.2.Rel1HEADumineko
https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads Change-Id: I7303388733328cd98ab9aa3c30236db67f2e9e9c
Diffstat (limited to 'share/gdb')
-rw-r--r--share/gdb/python/gdb/FrameDecorator.py300
-rw-r--r--share/gdb/python/gdb/FrameIterator.py49
-rw-r--r--share/gdb/python/gdb/__init__.py261
-rw-r--r--share/gdb/python/gdb/command/__init__.py14
-rw-r--r--share/gdb/python/gdb/command/explore.py785
-rw-r--r--share/gdb/python/gdb/command/frame_filters.py479
-rw-r--r--share/gdb/python/gdb/command/pretty_printers.py395
-rw-r--r--share/gdb/python/gdb/command/prompt.py66
-rw-r--r--share/gdb/python/gdb/command/type_printers.py125
-rw-r--r--share/gdb/python/gdb/command/unwinders.py199
-rw-r--r--share/gdb/python/gdb/command/xmethods.py270
-rw-r--r--share/gdb/python/gdb/disassembler.py178
-rw-r--r--share/gdb/python/gdb/frames.py233
-rw-r--r--share/gdb/python/gdb/function/__init__.py14
-rw-r--r--share/gdb/python/gdb/function/as_string.py38
-rw-r--r--share/gdb/python/gdb/function/caller_is.py157
-rw-r--r--share/gdb/python/gdb/function/strfns.py104
-rw-r--r--share/gdb/python/gdb/printer/__init__.py14
-rw-r--r--share/gdb/python/gdb/printer/bound_registers.py40
-rw-r--r--share/gdb/python/gdb/printing.py285
-rw-r--r--share/gdb/python/gdb/prompt.py163
-rw-r--r--share/gdb/python/gdb/styling.py101
-rw-r--r--share/gdb/python/gdb/types.py183
-rw-r--r--share/gdb/python/gdb/unwinder.py95
-rw-r--r--share/gdb/python/gdb/xmethod.py274
-rw-r--r--share/gdb/syscalls/aarch64-linux.xml269
-rw-r--r--share/gdb/syscalls/amd64-linux.xml376
-rw-r--r--share/gdb/syscalls/arm-linux.xml395
-rw-r--r--share/gdb/syscalls/freebsd.xml487
-rw-r--r--share/gdb/syscalls/gdb-syscalls.dtd16
-rw-r--r--share/gdb/syscalls/i386-linux.xml454
-rw-r--r--share/gdb/syscalls/mips-n32-linux.xml390
-rw-r--r--share/gdb/syscalls/mips-n64-linux.xml365
-rw-r--r--share/gdb/syscalls/mips-o32-linux.xml430
-rw-r--r--share/gdb/syscalls/netbsd.xml477
-rw-r--r--share/gdb/syscalls/ppc-linux.xml445
-rw-r--r--share/gdb/syscalls/ppc64-linux.xml417
-rw-r--r--share/gdb/syscalls/s390-linux.xml434
-rw-r--r--share/gdb/syscalls/s390x-linux.xml382
-rw-r--r--share/gdb/syscalls/sparc-linux.xml433
-rw-r--r--share/gdb/syscalls/sparc64-linux.xml396
-rw-r--r--share/gdb/system-gdbinit/elinos.py90
-rw-r--r--share/gdb/system-gdbinit/wrs-linux.py25
43 files changed, 11103 insertions, 0 deletions
diff --git a/share/gdb/python/gdb/FrameDecorator.py b/share/gdb/python/gdb/FrameDecorator.py
new file mode 100644
index 0000000..82be4fc
--- /dev/null
+++ b/share/gdb/python/gdb/FrameDecorator.py
@@ -0,0 +1,300 @@
+# Copyright (C) 2013-2023 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/>.
+
+import gdb
+
+
+class FrameDecorator(object):
+ """Basic implementation of a Frame Decorator"""
+
+ """ This base frame decorator decorates a frame or another frame
+ decorator, and provides convenience methods. If this object is
+ wrapping a frame decorator, defer to that wrapped object's method
+ if it has one. This allows for frame decorators that have
+ sub-classed FrameDecorator object, but also wrap other frame
+ decorators on the same frame to correctly execute.
+
+ E.g
+
+ If the result of frame filters running means we have one gdb.Frame
+ wrapped by multiple frame decorators, all sub-classed from
+ FrameDecorator, the resulting hierarchy will be:
+
+ Decorator1
+ -- (wraps) Decorator2
+ -- (wraps) FrameDecorator
+ -- (wraps) gdb.Frame
+
+ In this case we have two frame decorators, both of which are
+ sub-classed from FrameDecorator. If Decorator1 just overrides the
+ 'function' method, then all of the other methods are carried out
+ by the super-class FrameDecorator. But Decorator2 may have
+ overriden other methods, so FrameDecorator will look at the
+ 'base' parameter and defer to that class's methods. And so on,
+ down the chain."""
+
+ # 'base' can refer to a gdb.Frame or another frame decorator. In
+ # the latter case, the child class will have called the super
+ # method and _base will be an object conforming to the Frame Filter
+ # class.
+ def __init__(self, base):
+ self._base = base
+
+ @staticmethod
+ def _is_limited_frame(frame):
+ """Internal utility to determine if the frame is special or
+ limited."""
+ sal = frame.find_sal()
+
+ if (
+ not sal.symtab
+ or not sal.symtab.filename
+ or frame.type() == gdb.DUMMY_FRAME
+ or frame.type() == gdb.SIGTRAMP_FRAME
+ ):
+
+ return True
+
+ return False
+
+ def elided(self):
+ """Return any elided frames that this class might be
+ wrapping, or None."""
+ if hasattr(self._base, "elided"):
+ return self._base.elided()
+
+ return None
+
+ def function(self):
+ """Return the name of the frame's function or an address of
+ the function of the frame. First determine if this is a
+ special frame. If not, try to determine filename from GDB's
+ frame internal function API. Finally, if a name cannot be
+ determined return the address. If this function returns an
+ address, GDB will attempt to determine the function name from
+ its internal minimal symbols store (for example, for inferiors
+ without debug-info)."""
+
+ # Both gdb.Frame, and FrameDecorator have a method called
+ # "function", so determine which object this is.
+ if not isinstance(self._base, gdb.Frame):
+ if hasattr(self._base, "function"):
+ # If it is not a gdb.Frame, and there is already a
+ # "function" method, use that.
+ return self._base.function()
+
+ frame = self.inferior_frame()
+
+ if frame.type() == gdb.DUMMY_FRAME:
+ return "<function called from gdb>"
+ elif frame.type() == gdb.SIGTRAMP_FRAME:
+ return "<signal handler called>"
+
+ func = frame.function()
+
+ # If we cannot determine the function name, return the
+ # address. If GDB detects an integer value from this function
+ # it will attempt to find the function name from minimal
+ # symbols via its own internal functions.
+ if func is None:
+ pc = frame.pc()
+ return pc
+
+ return str(func)
+
+ def address(self):
+ """Return the address of the frame's pc"""
+
+ if hasattr(self._base, "address"):
+ return self._base.address()
+
+ frame = self.inferior_frame()
+ return frame.pc()
+
+ def filename(self):
+ """Return the filename associated with this frame, detecting
+ and returning the appropriate library name is this is a shared
+ library."""
+
+ if hasattr(self._base, "filename"):
+ return self._base.filename()
+
+ frame = self.inferior_frame()
+ sal = frame.find_sal()
+ if not sal.symtab or not sal.symtab.filename:
+ pc = frame.pc()
+ return gdb.solib_name(pc)
+ else:
+ return sal.symtab.filename
+
+ def frame_args(self):
+ """Return an iterable of frame arguments for this frame, if
+ any. The iterable object contains objects conforming with the
+ Symbol/Value interface. If there are no frame arguments, or
+ if this frame is deemed to be a special case, return None."""
+
+ if hasattr(self._base, "frame_args"):
+ return self._base.frame_args()
+
+ frame = self.inferior_frame()
+ if self._is_limited_frame(frame):
+ return None
+
+ args = FrameVars(frame)
+ return args.fetch_frame_args()
+
+ def frame_locals(self):
+ """Return an iterable of local variables for this frame, if
+ any. The iterable object contains objects conforming with the
+ Symbol/Value interface. If there are no frame locals, or if
+ this frame is deemed to be a special case, return None."""
+
+ if hasattr(self._base, "frame_locals"):
+ return self._base.frame_locals()
+
+ frame = self.inferior_frame()
+ if self._is_limited_frame(frame):
+ return None
+
+ args = FrameVars(frame)
+ return args.fetch_frame_locals()
+
+ def line(self):
+ """Return line number information associated with the frame's
+ pc. If symbol table/line information does not exist, or if
+ this frame is deemed to be a special case, return None"""
+
+ if hasattr(self._base, "line"):
+ return self._base.line()
+
+ frame = self.inferior_frame()
+ if self._is_limited_frame(frame):
+ return None
+
+ sal = frame.find_sal()
+ if sal:
+ return sal.line
+ else:
+ return None
+
+ def inferior_frame(self):
+ """Return the gdb.Frame underpinning this frame decorator."""
+
+ # If 'base' is a frame decorator, we want to call its inferior
+ # frame method. If '_base' is a gdb.Frame, just return that.
+ if hasattr(self._base, "inferior_frame"):
+ return self._base.inferior_frame()
+ return self._base
+
+
+class SymValueWrapper(object):
+ """A container class conforming to the Symbol/Value interface
+ which holds frame locals or frame arguments."""
+
+ def __init__(self, symbol, value):
+ self.sym = symbol
+ self.val = value
+
+ def value(self):
+ """Return the value associated with this symbol, or None"""
+ return self.val
+
+ def symbol(self):
+ """Return the symbol, or Python text, associated with this
+ symbol, or None"""
+ return self.sym
+
+
+class FrameVars(object):
+
+ """Utility class to fetch and store frame local variables, or
+ frame arguments."""
+
+ def __init__(self, frame):
+ self.frame = frame
+ self.symbol_class = {
+ gdb.SYMBOL_LOC_STATIC: True,
+ gdb.SYMBOL_LOC_REGISTER: True,
+ gdb.SYMBOL_LOC_ARG: True,
+ gdb.SYMBOL_LOC_REF_ARG: True,
+ gdb.SYMBOL_LOC_LOCAL: True,
+ gdb.SYMBOL_LOC_REGPARM_ADDR: True,
+ gdb.SYMBOL_LOC_COMPUTED: True,
+ }
+
+ def fetch_b(self, sym):
+ """Local utility method to determine if according to Symbol
+ type whether it should be included in the iterator. Not all
+ symbols are fetched, and only symbols that return
+ True from this method should be fetched."""
+
+ # SYM may be a string instead of a symbol in the case of
+ # synthetic local arguments or locals. If that is the case,
+ # always fetch.
+ if isinstance(sym, str):
+ return True
+
+ sym_type = sym.addr_class
+
+ return self.symbol_class.get(sym_type, False)
+
+ def fetch_frame_locals(self):
+ """Public utility method to fetch frame local variables for
+ the stored frame. Frame arguments are not fetched. If there
+ are no frame local variables, return an empty list."""
+ lvars = []
+
+ try:
+ block = self.frame.block()
+ except RuntimeError:
+ block = None
+
+ while block is not None:
+ if block.is_global or block.is_static:
+ break
+ for sym in block:
+ if sym.is_argument:
+ continue
+ if self.fetch_b(sym):
+ lvars.append(SymValueWrapper(sym, None))
+
+ block = block.superblock
+
+ return lvars
+
+ def fetch_frame_args(self):
+ """Public utility method to fetch frame arguments for the
+ stored frame. Frame arguments are the only type fetched. If
+ there are no frame argument variables, return an empty list."""
+
+ args = []
+
+ try:
+ block = self.frame.block()
+ except RuntimeError:
+ block = None
+
+ while block is not None:
+ if block.function is not None:
+ break
+ block = block.superblock
+
+ if block is not None:
+ for sym in block:
+ if not sym.is_argument:
+ continue
+ args.append(SymValueWrapper(sym, None))
+
+ return args
diff --git a/share/gdb/python/gdb/FrameIterator.py b/share/gdb/python/gdb/FrameIterator.py
new file mode 100644
index 0000000..190ec94
--- /dev/null
+++ b/share/gdb/python/gdb/FrameIterator.py
@@ -0,0 +1,49 @@
+# Copyright (C) 2013-2023 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/>.
+
+
+class FrameIterator(object):
+ """A gdb.Frame iterator. Iterates over gdb.Frames or objects that
+ conform to that interface."""
+
+ def __init__(self, frame_obj):
+ """Initialize a FrameIterator.
+
+ Arguments:
+ frame_obj the starting frame."""
+
+ super(FrameIterator, self).__init__()
+ self.frame = frame_obj
+
+ def __iter__(self):
+ return self
+
+ def next(self):
+ """next implementation.
+
+ Returns:
+ The next oldest frame."""
+
+ result = self.frame
+ if result is None:
+ raise StopIteration
+ self.frame = result.older()
+ return result
+
+ # Python 3.x requires __next__(self) while Python 2.x requires
+ # next(self). Define next(self), and for Python 3.x create this
+ # wrapper.
+ def __next__(self):
+ return self.next()
diff --git a/share/gdb/python/gdb/__init__.py b/share/gdb/python/gdb/__init__.py
new file mode 100644
index 0000000..6f3f194
--- /dev/null
+++ b/share/gdb/python/gdb/__init__.py
@@ -0,0 +1,261 @@
+# Copyright (C) 2010-2023 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/>.
+
+import traceback
+import os
+import sys
+import _gdb
+from contextlib import contextmanager
+
+# Python 3 moved "reload"
+if sys.version_info >= (3, 4):
+ from importlib import reload
+else:
+ from imp import reload
+
+from _gdb import *
+
+# Historically, gdb.events was always available, so ensure it's
+# still available without an explicit import.
+import _gdbevents as events
+
+sys.modules["gdb.events"] = events
+
+
+class _GdbFile(object):
+ # These two are needed in Python 3
+ encoding = "UTF-8"
+ errors = "strict"
+
+ def __init__(self, stream):
+ self.stream = stream
+
+ def close(self):
+ # Do nothing.
+ return None
+
+ def isatty(self):
+ return False
+
+ def writelines(self, iterable):
+ for line in iterable:
+ self.write(line)
+
+ def flush(self):
+ flush(stream=self.stream)
+
+ def write(self, s):
+ write(s, stream=self.stream)
+
+
+sys.stdout = _GdbFile(STDOUT)
+
+sys.stderr = _GdbFile(STDERR)
+
+# Default prompt hook does nothing.
+prompt_hook = None
+
+# Ensure that sys.argv is set to something.
+# We do not use PySys_SetArgvEx because it did not appear until 2.6.6.
+sys.argv = [""]
+
+# Initial pretty printers.
+pretty_printers = []
+
+# Initial type printers.
+type_printers = []
+# Initial xmethod matchers.
+xmethods = []
+# Initial frame filters.
+frame_filters = {}
+# Initial frame unwinders.
+frame_unwinders = []
+
+
+def _execute_unwinders(pending_frame):
+ """Internal function called from GDB to execute all unwinders.
+
+ Runs each currently enabled unwinder until it finds the one that
+ can unwind given frame.
+
+ Arguments:
+ pending_frame: gdb.PendingFrame instance.
+
+ Returns:
+ Tuple with:
+
+ [0] gdb.UnwindInfo instance
+ [1] Name of unwinder that claimed the frame (type `str`)
+
+ or None, if no unwinder has claimed the frame.
+ """
+ for objfile in objfiles():
+ for unwinder in objfile.frame_unwinders:
+ if unwinder.enabled:
+ unwind_info = unwinder(pending_frame)
+ if unwind_info is not None:
+ return (unwind_info, unwinder.name)
+
+ for unwinder in current_progspace().frame_unwinders:
+ if unwinder.enabled:
+ unwind_info = unwinder(pending_frame)
+ if unwind_info is not None:
+ return (unwind_info, unwinder.name)
+
+ for unwinder in frame_unwinders:
+ if unwinder.enabled:
+ unwind_info = unwinder(pending_frame)
+ if unwind_info is not None:
+ return (unwind_info, unwinder.name)
+
+ return None
+
+
+def _execute_file(filepath):
+ """This function is used to replace Python 2's PyRun_SimpleFile.
+
+ Loads and executes the given file.
+
+ We could use the runpy module, but its documentation says:
+ "Furthermore, any functions and classes defined by the executed code are
+ not guaranteed to work correctly after a runpy function has returned."
+ """
+ globals = sys.modules["__main__"].__dict__
+ set_file = False
+ # Set file (if not set) so that the imported file can use it (e.g. to
+ # access file-relative paths). This matches what PyRun_SimpleFile does.
+ if not hasattr(globals, "__file__"):
+ globals["__file__"] = filepath
+ set_file = True
+ try:
+ with open(filepath, "rb") as file:
+ # We pass globals also as locals to match what Python does
+ # in PyRun_SimpleFile.
+ compiled = compile(file.read(), filepath, "exec")
+ exec(compiled, globals, globals)
+ finally:
+ if set_file:
+ del globals["__file__"]
+
+
+# Convenience variable to GDB's python directory
+PYTHONDIR = os.path.dirname(os.path.dirname(__file__))
+
+# Auto-load all functions/commands.
+
+# Packages to auto-load.
+
+packages = ["function", "command", "printer"]
+
+# pkgutil.iter_modules is not available prior to Python 2.6. Instead,
+# manually iterate the list, collating the Python files in each module
+# path. Construct the module name, and import.
+
+
+def _auto_load_packages():
+ for package in packages:
+ location = os.path.join(os.path.dirname(__file__), package)
+ if os.path.exists(location):
+ py_files = filter(
+ lambda x: x.endswith(".py") and x != "__init__.py", os.listdir(location)
+ )
+
+ for py_file in py_files:
+ # Construct from foo.py, gdb.module.foo
+ modname = "%s.%s.%s" % (__name__, package, py_file[:-3])
+ try:
+ if modname in sys.modules:
+ # reload modules with duplicate names
+ reload(__import__(modname))
+ else:
+ __import__(modname)
+ except:
+ sys.stderr.write(traceback.format_exc() + "\n")
+
+
+_auto_load_packages()
+
+
+def GdbSetPythonDirectory(dir):
+ """Update sys.path, reload gdb and auto-load packages."""
+ global PYTHONDIR
+
+ try:
+ sys.path.remove(PYTHONDIR)
+ except ValueError:
+ pass
+ sys.path.insert(0, dir)
+
+ PYTHONDIR = dir
+
+ # note that reload overwrites the gdb module without deleting existing
+ # attributes
+ reload(__import__(__name__))
+ _auto_load_packages()
+
+
+def current_progspace():
+ "Return the current Progspace."
+ return selected_inferior().progspace
+
+
+def objfiles():
+ "Return a sequence of the current program space's objfiles."
+ return current_progspace().objfiles()
+
+
+def solib_name(addr):
+ """solib_name (Long) -> String.\n\
+Return the name of the shared library holding a given address, or None."""
+ return current_progspace().solib_name(addr)
+
+
+def block_for_pc(pc):
+ "Return the block containing the given pc value, or None."
+ return current_progspace().block_for_pc(pc)
+
+
+def find_pc_line(pc):
+ """find_pc_line (pc) -> Symtab_and_line.
+ Return the gdb.Symtab_and_line object corresponding to the pc value."""
+ return current_progspace().find_pc_line(pc)
+
+
+def set_parameter(name, value):
+ """Set the GDB parameter NAME to VALUE."""
+ # Handle the specific cases of None and booleans here, because
+ # gdb.parameter can return them, but they can't be passed to 'set'
+ # this way.
+ if value is None:
+ value = "unlimited"
+ elif isinstance(value, bool):
+ if value:
+ value = "on"
+ else:
+ value = "off"
+ execute("set " + name + " " + str(value), to_string=True)
+
+
+@contextmanager
+def with_parameter(name, value):
+ """Temporarily set the GDB parameter NAME to VALUE.
+ Note that this is a context manager."""
+ old_value = parameter(name)
+ set_parameter(name, value)
+ try:
+ # Nothing that useful to return.
+ yield None
+ finally:
+ set_parameter(name, old_value)
diff --git a/share/gdb/python/gdb/command/__init__.py b/share/gdb/python/gdb/command/__init__.py
new file mode 100644
index 0000000..5f369bf
--- /dev/null
+++ b/share/gdb/python/gdb/command/__init__.py
@@ -0,0 +1,14 @@
+# Copyright (C) 2010-2023 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/>.
diff --git a/share/gdb/python/gdb/command/explore.py b/share/gdb/python/gdb/command/explore.py
new file mode 100644
index 0000000..db72f33
--- /dev/null
+++ b/share/gdb/python/gdb/command/explore.py
@@ -0,0 +1,785 @@
+# GDB 'explore' command.
+# Copyright (C) 2012-2023 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/>.
+
+"""Implementation of the GDB 'explore' command using the GDB Python API."""
+
+import gdb
+import sys
+
+
+class Explorer(object):
+ """Internal class which invokes other explorers."""
+
+ # This map is filled by the Explorer.init_env() function
+ type_code_to_explorer_map = {}
+
+ _SCALAR_TYPE_LIST = (
+ gdb.TYPE_CODE_CHAR,
+ gdb.TYPE_CODE_INT,
+ gdb.TYPE_CODE_BOOL,
+ gdb.TYPE_CODE_FLT,
+ gdb.TYPE_CODE_VOID,
+ gdb.TYPE_CODE_ENUM,
+ )
+
+ @staticmethod
+ def guard_expr(expr):
+ length = len(expr)
+ guard = False
+
+ if expr[0] == "(" and expr[length - 1] == ")":
+ pass
+ else:
+ i = 0
+ while i < length:
+ c = expr[i]
+ if (
+ c == "_"
+ or ("a" <= c and c <= "z")
+ or ("A" <= c and c <= "Z")
+ or ("0" <= c and c <= "9")
+ ):
+ pass
+ else:
+ guard = True
+ break
+ i += 1
+
+ if guard:
+ return "(" + expr + ")"
+ else:
+ return expr
+
+ @staticmethod
+ def explore_expr(expr, value, is_child):
+ """Main function to explore an expression value.
+
+ Arguments:
+ expr: The expression string that is being explored.
+ value: The gdb.Value value of the expression.
+ is_child: Boolean value to indicate if the expression is a child.
+ An expression is a child if it is derived from the main
+ expression entered by the user. For example, if the user
+ entered an expression which evaluates to a struct, then
+ when exploring the fields of the struct, is_child is set
+ to True internally.
+
+ Returns:
+ No return value.
+ """
+ type_code = value.type.code
+ if type_code in Explorer.type_code_to_explorer_map:
+ explorer_class = Explorer.type_code_to_explorer_map[type_code]
+ while explorer_class.explore_expr(expr, value, is_child):
+ pass
+ else:
+ print("Explorer for type '%s' not yet available.\n" % str(value.type))
+
+ @staticmethod
+ def explore_type(name, datatype, is_child):
+ """Main function to explore a data type.
+
+ Arguments:
+ name: The string representing the path to the data type being
+ explored.
+ datatype: The gdb.Type value of the data type being explored.
+ is_child: Boolean value to indicate if the name is a child.
+ A name is a child if it is derived from the main name
+ entered by the user. For example, if the user entered
+ the name of struct type, then when exploring the fields
+ of the struct, is_child is set to True internally.
+
+ Returns:
+ No return value.
+ """
+ type_code = datatype.code
+ if type_code in Explorer.type_code_to_explorer_map:
+ explorer_class = Explorer.type_code_to_explorer_map[type_code]
+ while explorer_class.explore_type(name, datatype, is_child):
+ pass
+ else:
+ print("Explorer for type '%s' not yet available.\n" % str(datatype))
+
+ @staticmethod
+ def init_env():
+ """Initializes the Explorer environment.
+ This function should be invoked before starting any exploration. If
+ invoked before an exploration, it need not be invoked for subsequent
+ explorations.
+ """
+ Explorer.type_code_to_explorer_map = {
+ gdb.TYPE_CODE_CHAR: ScalarExplorer,
+ gdb.TYPE_CODE_INT: ScalarExplorer,
+ gdb.TYPE_CODE_BOOL: ScalarExplorer,
+ gdb.TYPE_CODE_FLT: ScalarExplorer,
+ gdb.TYPE_CODE_VOID: ScalarExplorer,
+ gdb.TYPE_CODE_ENUM: ScalarExplorer,
+ gdb.TYPE_CODE_STRUCT: CompoundExplorer,
+ gdb.TYPE_CODE_UNION: CompoundExplorer,
+ gdb.TYPE_CODE_PTR: PointerExplorer,
+ gdb.TYPE_CODE_REF: ReferenceExplorer,
+ gdb.TYPE_CODE_RVALUE_REF: ReferenceExplorer,
+ gdb.TYPE_CODE_TYPEDEF: TypedefExplorer,
+ gdb.TYPE_CODE_ARRAY: ArrayExplorer,
+ }
+
+ @staticmethod
+ def is_scalar_type(type):
+ """Checks whether a type is a scalar type.
+ A type is a scalar type of its type is
+ gdb.TYPE_CODE_CHAR or
+ gdb.TYPE_CODE_INT or
+ gdb.TYPE_CODE_BOOL or
+ gdb.TYPE_CODE_FLT or
+ gdb.TYPE_CODE_VOID or
+ gdb.TYPE_CODE_ENUM.
+
+ Arguments:
+ type: The type to be checked.
+
+ Returns:
+ 'True' if 'type' is a scalar type. 'False' otherwise.
+ """
+ return type.code in Explorer._SCALAR_TYPE_LIST
+
+ @staticmethod
+ def return_to_parent_value():
+ """A utility function which prints that the current exploration session
+ is returning to the parent value. Useful when exploring values.
+ """
+ print("\nReturning to parent value...\n")
+
+ @staticmethod
+ def return_to_parent_value_prompt():
+ """A utility function which prompts the user to press the 'enter' key
+ so that the exploration session can shift back to the parent value.
+ Useful when exploring values.
+ """
+ input("\nPress enter to return to parent value: ")
+
+ @staticmethod
+ def return_to_enclosing_type():
+ """A utility function which prints that the current exploration session
+ is returning to the enclosing type. Useful when exploring types.
+ """
+ print("\nReturning to enclosing type...\n")
+
+ @staticmethod
+ def return_to_enclosing_type_prompt():
+ """A utility function which prompts the user to press the 'enter' key
+ so that the exploration session can shift back to the enclosing type.
+ Useful when exploring types.
+ """
+ input("\nPress enter to return to enclosing type: ")
+
+
+class ScalarExplorer(object):
+ """Internal class used to explore scalar values."""
+
+ @staticmethod
+ def explore_expr(expr, value, is_child):
+ """Function to explore scalar values.
+ See Explorer.explore_expr and Explorer.is_scalar_type for more
+ information.
+ """
+ print("'%s' is a scalar value of type '%s'." % (expr, value.type))
+ print("%s = %s" % (expr, str(value)))
+
+ if is_child:
+ Explorer.return_to_parent_value_prompt()
+ Explorer.return_to_parent_value()
+
+ return False
+
+ @staticmethod
+ def explore_type(name, datatype, is_child):
+ """Function to explore scalar types.
+ See Explorer.explore_type and Explorer.is_scalar_type for more
+ information.
+ """
+ if datatype.code == gdb.TYPE_CODE_ENUM:
+ if is_child:
+ print("%s is of an enumerated type '%s'." % (name, str(datatype)))
+ else:
+ print("'%s' is an enumerated type." % name)
+ else:
+ if is_child:
+ print("%s is of a scalar type '%s'." % (name, str(datatype)))
+ else:
+ print("'%s' is a scalar type." % name)
+
+ if is_child:
+ Explorer.return_to_enclosing_type_prompt()
+ Explorer.return_to_enclosing_type()
+
+ return False
+
+
+class PointerExplorer(object):
+ """Internal class used to explore pointer values."""
+
+ @staticmethod
+ def explore_expr(expr, value, is_child):
+ """Function to explore pointer values.
+ See Explorer.explore_expr for more information.
+ """
+ print(
+ "'%s' is a pointer to a value of type '%s'"
+ % (expr, str(value.type.target()))
+ )
+ option = input(
+ "Continue exploring it as a pointer to a single " "value [y/n]: "
+ )
+ if option == "y":
+ deref_value = None
+ try:
+ deref_value = value.dereference()
+ str(deref_value)
+ except gdb.MemoryError:
+ print(
+ "'%s' a pointer pointing to an invalid memory " "location." % expr
+ )
+ if is_child:
+ Explorer.return_to_parent_value_prompt()
+ return False
+ Explorer.explore_expr(
+ "*%s" % Explorer.guard_expr(expr), deref_value, is_child
+ )
+ return False
+
+ option = input("Continue exploring it as a pointer to an " "array [y/n]: ")
+ if option == "y":
+ while True:
+ index = 0
+ try:
+ index = int(
+ input(
+ "Enter the index of the element you "
+ "want to explore in '%s': " % expr
+ )
+ )
+ except ValueError:
+ break
+ element_expr = "%s[%d]" % (Explorer.guard_expr(expr), index)
+ element = value[index]
+ try:
+ str(element)
+ except gdb.MemoryError:
+ print("Cannot read value at index %d." % index)
+ continue
+ Explorer.explore_expr(element_expr, element, True)
+ return False
+
+ if is_child:
+ Explorer.return_to_parent_value()
+ return False
+
+ @staticmethod
+ def explore_type(name, datatype, is_child):
+ """Function to explore pointer types.
+ See Explorer.explore_type for more information.
+ """
+ target_type = datatype.target()
+ print("\n%s is a pointer to a value of type '%s'." % (name, str(target_type)))
+
+ Explorer.explore_type("the pointee type of %s" % name, target_type, is_child)
+ return False
+
+
+class ReferenceExplorer(object):
+ """Internal class used to explore reference (TYPE_CODE_REF) values."""
+
+ @staticmethod
+ def explore_expr(expr, value, is_child):
+ """Function to explore array values.
+ See Explorer.explore_expr for more information.
+ """
+ referenced_value = value.referenced_value()
+ Explorer.explore_expr(expr, referenced_value, is_child)
+ return False
+
+ @staticmethod
+ def explore_type(name, datatype, is_child):
+ """Function to explore pointer types.
+ See Explorer.explore_type for more information.
+ """
+ target_type = datatype.target()
+ Explorer.explore_type(name, target_type, is_child)
+ return False
+
+
+class ArrayExplorer(object):
+ """Internal class used to explore arrays."""
+
+ @staticmethod
+ def explore_expr(expr, value, is_child):
+ """Function to explore array values.
+ See Explorer.explore_expr for more information.
+ """
+ target_type = value.type.target()
+ print("'%s' is an array of '%s'." % (expr, str(target_type)))
+ index = 0
+ try:
+ index = int(
+ input(
+ "Enter the index of the element you want to "
+ "explore in '%s': " % expr
+ )
+ )
+ except ValueError:
+ if is_child:
+ Explorer.return_to_parent_value()
+ return False
+
+ element = None
+ try:
+ element = value[index]
+ str(element)
+ except gdb.MemoryError:
+ print("Cannot read value at index %d." % index)
+ input("Press enter to continue... ")
+ return True
+
+ Explorer.explore_expr(
+ "%s[%d]" % (Explorer.guard_expr(expr), index), element, True
+ )
+ return True
+
+ @staticmethod
+ def explore_type(name, datatype, is_child):
+ """Function to explore array types.
+ See Explorer.explore_type for more information.
+ """
+ target_type = datatype.target()
+ print("%s is an array of '%s'." % (name, str(target_type)))
+
+ Explorer.explore_type("the array element of %s" % name, target_type, is_child)
+ return False
+
+
+class CompoundExplorer(object):
+ """Internal class used to explore struct, classes and unions."""
+
+ @staticmethod
+ def _print_fields(print_list):
+ """Internal function which prints the fields of a struct/class/union."""
+ max_field_name_length = 0
+ for pair in print_list:
+ if max_field_name_length < len(pair[0]):
+ max_field_name_length = len(pair[0])
+
+ for pair in print_list:
+ print(" %*s = %s" % (max_field_name_length, pair[0], pair[1]))
+
+ @staticmethod
+ def _get_real_field_count(fields):
+ real_field_count = 0
+ for field in fields:
+ if not field.artificial:
+ real_field_count = real_field_count + 1
+
+ return real_field_count
+
+ @staticmethod
+ def explore_expr(expr, value, is_child):
+ """Function to explore structs/classes and union values.
+ See Explorer.explore_expr for more information.
+ """
+ datatype = value.type
+ type_code = datatype.code
+ fields = datatype.fields()
+
+ if type_code == gdb.TYPE_CODE_STRUCT:
+ type_desc = "struct/class"
+ else:
+ type_desc = "union"
+
+ if CompoundExplorer._get_real_field_count(fields) == 0:
+ print(
+ "The value of '%s' is a %s of type '%s' with no fields."
+ % (expr, type_desc, str(value.type))
+ )
+ if is_child:
+ Explorer.return_to_parent_value_prompt()
+ return False
+
+ print(
+ "The value of '%s' is a %s of type '%s' with the following "
+ "fields:\n" % (expr, type_desc, str(value.type))
+ )
+
+ has_explorable_fields = False
+ choice_to_compound_field_map = {}
+ current_choice = 0
+ print_list = []
+ for field in fields:
+ if field.artificial:
+ continue
+ field_full_name = Explorer.guard_expr(expr) + "." + field.name
+ if field.is_base_class:
+ field_value = value.cast(field.type)
+ else:
+ field_value = value[field.name]
+ literal_value = ""
+ if type_code == gdb.TYPE_CODE_UNION:
+ literal_value = "<Enter %d to explore this field of type " "'%s'>" % (
+ current_choice,
+ str(field.type),
+ )
+ has_explorable_fields = True
+ else:
+ if Explorer.is_scalar_type(field.type):
+ literal_value = "%s .. (Value of type '%s')" % (
+ str(field_value),
+ str(field.type),
+ )
+ else:
+ if field.is_base_class:
+ field_desc = "base class"
+ else:
+ field_desc = "field"
+ literal_value = "<Enter %d to explore this %s of type " "'%s'>" % (
+ current_choice,
+ field_desc,
+ str(field.type),
+ )
+ has_explorable_fields = True
+
+ choice_to_compound_field_map[str(current_choice)] = (
+ field_full_name,
+ field_value,
+ )
+ current_choice = current_choice + 1
+
+ print_list.append((field.name, literal_value))
+
+ CompoundExplorer._print_fields(print_list)
+ print("")
+
+ if has_explorable_fields:
+ choice = input("Enter the field number of choice: ")
+ if choice in choice_to_compound_field_map:
+ Explorer.explore_expr(
+ choice_to_compound_field_map[choice][0],
+ choice_to_compound_field_map[choice][1],
+ True,
+ )
+ return True
+ else:
+ if is_child:
+ Explorer.return_to_parent_value()
+ else:
+ if is_child:
+ Explorer.return_to_parent_value_prompt()
+
+ return False
+
+ @staticmethod
+ def explore_type(name, datatype, is_child):
+ """Function to explore struct/class and union types.
+ See Explorer.explore_type for more information.
+ """
+ type_code = datatype.code
+ type_desc = ""
+ if type_code == gdb.TYPE_CODE_STRUCT:
+ type_desc = "struct/class"
+ else:
+ type_desc = "union"
+
+ fields = datatype.fields()
+ if CompoundExplorer._get_real_field_count(fields) == 0:
+ if is_child:
+ print(
+ "%s is a %s of type '%s' with no fields."
+ % (name, type_desc, str(datatype))
+ )
+ Explorer.return_to_enclosing_type_prompt()
+ else:
+ print("'%s' is a %s with no fields." % (name, type_desc))
+ return False
+
+ if is_child:
+ print(
+ "%s is a %s of type '%s' "
+ "with the following fields:\n" % (name, type_desc, str(datatype))
+ )
+ else:
+ print("'%s' is a %s with the following " "fields:\n" % (name, type_desc))
+
+ current_choice = 0
+ choice_to_compound_field_map = {}
+ print_list = []
+ for field in fields:
+ if field.artificial:
+ continue
+ if field.is_base_class:
+ field_desc = "base class"
+ else:
+ field_desc = "field"
+ rhs = "<Enter %d to explore this %s of type '%s'>" % (
+ current_choice,
+ field_desc,
+ str(field.type),
+ )
+ print_list.append((field.name, rhs))
+ choice_to_compound_field_map[str(current_choice)] = (
+ field.name,
+ field.type,
+ field_desc,
+ )
+ current_choice = current_choice + 1
+
+ CompoundExplorer._print_fields(print_list)
+ print("")
+
+ if len(choice_to_compound_field_map) > 0:
+ choice = input("Enter the field number of choice: ")
+ if choice in choice_to_compound_field_map:
+ if is_child:
+ new_name = "%s '%s' of %s" % (
+ choice_to_compound_field_map[choice][2],
+ choice_to_compound_field_map[choice][0],
+ name,
+ )
+ else:
+ new_name = "%s '%s' of '%s'" % (
+ choice_to_compound_field_map[choice][2],
+ choice_to_compound_field_map[choice][0],
+ name,
+ )
+ Explorer.explore_type(
+ new_name, choice_to_compound_field_map[choice][1], True
+ )
+ return True
+ else:
+ if is_child:
+ Explorer.return_to_enclosing_type()
+ else:
+ if is_child:
+ Explorer.return_to_enclosing_type_prompt()
+
+ return False
+
+
+class TypedefExplorer(object):
+ """Internal class used to explore values whose type is a typedef."""
+
+ @staticmethod
+ def explore_expr(expr, value, is_child):
+ """Function to explore typedef values.
+ See Explorer.explore_expr for more information.
+ """
+ actual_type = value.type.strip_typedefs()
+ print(
+ "The value of '%s' is of type '%s' "
+ "which is a typedef of type '%s'"
+ % (expr, str(value.type), str(actual_type))
+ )
+
+ Explorer.explore_expr(expr, value.cast(actual_type), is_child)
+ return False
+
+ @staticmethod
+ def explore_type(name, datatype, is_child):
+ """Function to explore typedef types.
+ See Explorer.explore_type for more information.
+ """
+ actual_type = datatype.strip_typedefs()
+ if is_child:
+ print(
+ "The type of %s is a typedef of type '%s'." % (name, str(actual_type))
+ )
+ else:
+ print("The type '%s' is a typedef of type '%s'." % (name, str(actual_type)))
+
+ Explorer.explore_type(name, actual_type, is_child)
+ return False
+
+
+class ExploreUtils(object):
+ """Internal class which provides utilities for the main command classes."""
+
+ @staticmethod
+ def check_args(name, arg_str):
+ """Utility to check if adequate number of arguments are passed to an
+ explore command.
+
+ Arguments:
+ name: The name of the explore command.
+ arg_str: The argument string passed to the explore command.
+
+ Returns:
+ True if adequate arguments are passed, false otherwise.
+
+ Raises:
+ gdb.GdbError if adequate arguments are not passed.
+ """
+ if len(arg_str) < 1:
+ raise gdb.GdbError("ERROR: '%s' requires an argument." % name)
+ return False
+ else:
+ return True
+
+ @staticmethod
+ def get_type_from_str(type_str):
+ """A utility function to deduce the gdb.Type value from a string
+ representing the type.
+
+ Arguments:
+ type_str: The type string from which the gdb.Type value should be
+ deduced.
+
+ Returns:
+ The deduced gdb.Type value if possible, None otherwise.
+ """
+ try:
+ # Assume the current language to be C/C++ and make a try.
+ return gdb.parse_and_eval("(%s *)0" % type_str).type.target()
+ except RuntimeError:
+ # If assumption of current language to be C/C++ was wrong, then
+ # lookup the type using the API.
+ try:
+ return gdb.lookup_type(type_str)
+ except RuntimeError:
+ return None
+
+ @staticmethod
+ def get_value_from_str(value_str):
+ """A utility function to deduce the gdb.Value value from a string
+ representing the value.
+
+ Arguments:
+ value_str: The value string from which the gdb.Value value should
+ be deduced.
+
+ Returns:
+ The deduced gdb.Value value if possible, None otherwise.
+ """
+ try:
+ return gdb.parse_and_eval(value_str)
+ except RuntimeError:
+ return None
+
+
+class ExploreCommand(gdb.Command):
+ """Explore a value or a type valid in the current context.
+
+ Usage: explore ARG
+
+ - ARG is either a valid expression or a type name.
+ - At any stage of exploration, hit the return key (instead of a
+ choice, if any) to return to the enclosing type or value."""
+
+ def __init__(self):
+ super(ExploreCommand, self).__init__(
+ name="explore", command_class=gdb.COMMAND_DATA, prefix=True
+ )
+
+ def invoke(self, arg_str, from_tty):
+ if ExploreUtils.check_args("explore", arg_str) is False:
+ return
+
+ # Check if it is a value
+ value = ExploreUtils.get_value_from_str(arg_str)
+ if value is not None:
+ Explorer.explore_expr(arg_str, value, False)
+ return
+
+ # If it is not a value, check if it is a type
+ datatype = ExploreUtils.get_type_from_str(arg_str)
+ if datatype is not None:
+ Explorer.explore_type(arg_str, datatype, False)
+ return
+
+ # If it is neither a value nor a type, raise an error.
+ raise gdb.GdbError(
+ (
+ "'%s' neither evaluates to a value nor is a type "
+ "in the current context." % arg_str
+ )
+ )
+
+
+class ExploreValueCommand(gdb.Command):
+ """Explore value of an expression valid in the current context.
+
+ Usage: explore value ARG
+
+ - ARG is a valid expression.
+ - At any stage of exploration, hit the return key (instead of a
+ choice, if any) to return to the enclosing value."""
+
+ def __init__(self):
+ super(ExploreValueCommand, self).__init__(
+ name="explore value", command_class=gdb.COMMAND_DATA
+ )
+
+ def invoke(self, arg_str, from_tty):
+ if ExploreUtils.check_args("explore value", arg_str) is False:
+ return
+
+ value = ExploreUtils.get_value_from_str(arg_str)
+ if value is None:
+ raise gdb.GdbError(
+ (
+ " '%s' does not evaluate to a value in the current "
+ "context." % arg_str
+ )
+ )
+ return
+
+ Explorer.explore_expr(arg_str, value, False)
+
+
+class ExploreTypeCommand(gdb.Command):
+ """Explore a type or the type of an expression.
+
+ Usage: explore type ARG
+
+ - ARG is a valid expression or a type name.
+ - At any stage of exploration, hit the return key (instead of a
+ choice, if any) to return to the enclosing type."""
+
+ def __init__(self):
+ super(ExploreTypeCommand, self).__init__(
+ name="explore type", command_class=gdb.COMMAND_DATA
+ )
+
+ def invoke(self, arg_str, from_tty):
+ if ExploreUtils.check_args("explore type", arg_str) is False:
+ return
+
+ datatype = ExploreUtils.get_type_from_str(arg_str)
+ if datatype is not None:
+ Explorer.explore_type(arg_str, datatype, False)
+ return
+
+ value = ExploreUtils.get_value_from_str(arg_str)
+ if value is not None:
+ print("'%s' is of type '%s'." % (arg_str, str(value.type)))
+ Explorer.explore_type(str(value.type), value.type, False)
+ return
+
+ raise gdb.GdbError(
+ ("'%s' is not a type or value in the current " "context." % arg_str)
+ )
+
+
+Explorer.init_env()
+
+ExploreCommand()
+ExploreValueCommand()
+ExploreTypeCommand()
diff --git a/share/gdb/python/gdb/command/frame_filters.py b/share/gdb/python/gdb/command/frame_filters.py
new file mode 100644
index 0000000..0fca0e7
--- /dev/null
+++ b/share/gdb/python/gdb/command/frame_filters.py
@@ -0,0 +1,479 @@
+# Frame-filter commands.
+# Copyright (C) 2013-2023 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/>.
+
+"""GDB commands for working with frame-filters."""
+
+import sys
+import gdb
+import gdb.frames
+
+# GDB Commands.
+class SetFilterPrefixCmd(gdb.Command):
+ """Prefix command for 'set' frame-filter related operations."""
+
+ def __init__(self):
+ super(SetFilterPrefixCmd, self).__init__(
+ "set frame-filter", gdb.COMMAND_OBSCURE, gdb.COMPLETE_NONE, True
+ )
+
+
+class ShowFilterPrefixCmd(gdb.Command):
+ """Prefix command for 'show' frame-filter related operations."""
+
+ def __init__(self):
+ super(ShowFilterPrefixCmd, self).__init__(
+ "show frame-filter", gdb.COMMAND_OBSCURE, gdb.COMPLETE_NONE, True
+ )
+
+
+class InfoFrameFilter(gdb.Command):
+ """List all registered Python frame-filters.
+
+ Usage: info frame-filters"""
+
+ def __init__(self):
+ super(InfoFrameFilter, self).__init__("info frame-filter", gdb.COMMAND_DATA)
+
+ @staticmethod
+ def enabled_string(state):
+ """Return "Yes" if filter is enabled, otherwise "No"."""
+ if state:
+ return "Yes"
+ else:
+ return "No"
+
+ def print_list(self, title, frame_filters, blank_line):
+ sorted_frame_filters = sorted(
+ frame_filters.items(),
+ key=lambda i: gdb.frames.get_priority(i[1]),
+ reverse=True,
+ )
+
+ if len(sorted_frame_filters) == 0:
+ return 0
+
+ print(title)
+ print(" Priority Enabled Name")
+ for frame_filter in sorted_frame_filters:
+ name = frame_filter[0]
+ try:
+ priority = "{:<8}".format(str(gdb.frames.get_priority(frame_filter[1])))
+ enabled = "{:<7}".format(
+ self.enabled_string(gdb.frames.get_enabled(frame_filter[1]))
+ )
+ print(" %s %s %s" % (priority, enabled, name))
+ except Exception:
+ e = sys.exc_info()[1]
+ print(" Error printing filter '" + name + "': " + str(e))
+ if blank_line:
+ print("")
+ return 1
+
+ def invoke(self, arg, from_tty):
+ any_printed = self.print_list("global frame-filters:", gdb.frame_filters, True)
+
+ cp = gdb.current_progspace()
+ any_printed += self.print_list(
+ "progspace %s frame-filters:" % cp.filename, cp.frame_filters, True
+ )
+
+ for objfile in gdb.objfiles():
+ any_printed += self.print_list(
+ "objfile %s frame-filters:" % objfile.filename,
+ objfile.frame_filters,
+ False,
+ )
+
+ if any_printed == 0:
+ print("No frame filters.")
+
+
+# Internal enable/disable functions.
+
+
+def _enable_parse_arg(cmd_name, arg):
+ """Internal worker function to take an argument from
+ enable/disable and return a tuple of arguments.
+
+ Arguments:
+ cmd_name: Name of the command invoking this function.
+ args: The argument as a string.
+
+ Returns:
+ A tuple containing the dictionary, and the argument, or just
+ the dictionary in the case of "all".
+ """
+
+ argv = gdb.string_to_argv(arg)
+ argc = len(argv)
+ if argc == 0:
+ raise gdb.GdbError(cmd_name + " requires an argument")
+ if argv[0] == "all":
+ if argc > 1:
+ raise gdb.GdbError(
+ cmd_name + ": with 'all' " "you may not specify a filter."
+ )
+ elif argc != 2:
+ raise gdb.GdbError(cmd_name + " takes exactly two arguments.")
+
+ return argv
+
+
+def _do_enable_frame_filter(command_tuple, flag):
+ """Worker for enabling/disabling frame_filters.
+
+ Arguments:
+ command_type: A tuple with the first element being the
+ frame filter dictionary, and the second being
+ the frame filter name.
+ flag: True for Enable, False for Disable.
+ """
+
+ list_op = command_tuple[0]
+ op_list = gdb.frames.return_list(list_op)
+
+ if list_op == "all":
+ for item in op_list:
+ gdb.frames.set_enabled(item, flag)
+ else:
+ frame_filter = command_tuple[1]
+ try:
+ ff = op_list[frame_filter]
+ except KeyError:
+ msg = "frame-filter '" + str(frame_filter) + "' not found."
+ raise gdb.GdbError(msg)
+
+ gdb.frames.set_enabled(ff, flag)
+
+
+def _complete_frame_filter_list(text, word, all_flag):
+ """Worker for frame filter dictionary name completion.
+
+ Arguments:
+ text: The full text of the command line.
+ word: The most recent word of the command line.
+ all_flag: Whether to include the word "all" in completion.
+
+ Returns:
+ A list of suggested frame filter dictionary name completions
+ from text/word analysis. This list can be empty when there
+ are no suggestions for completion.
+ """
+ if all_flag:
+ filter_locations = ["all", "global", "progspace"]
+ else:
+ filter_locations = ["global", "progspace"]
+ for objfile in gdb.objfiles():
+ filter_locations.append(objfile.filename)
+
+ # If the user just asked for completions with no completion
+ # hints, just return all the frame filter dictionaries we know
+ # about.
+ if text == "":
+ return filter_locations
+
+ # Otherwise filter on what we know.
+ flist = filter(lambda x, y=text: x.startswith(y), filter_locations)
+
+ # If we only have one completion, complete it and return it.
+ if len(flist) == 1:
+ flist[0] = flist[0][len(text) - len(word) :]
+
+ # Otherwise, return an empty list, or a list of frame filter
+ # dictionaries that the previous filter operation returned.
+ return flist
+
+
+def _complete_frame_filter_name(word, printer_dict):
+ """Worker for frame filter name completion.
+
+ Arguments:
+
+ word: The most recent word of the command line.
+
+ printer_dict: The frame filter dictionary to search for frame
+ filter name completions.
+
+ Returns: A list of suggested frame filter name completions
+ from word analysis of the frame filter dictionary. This list
+ can be empty when there are no suggestions for completion.
+ """
+
+ printer_keys = printer_dict.keys()
+ if word == "":
+ return printer_keys
+
+ flist = filter(lambda x, y=word: x.startswith(y), printer_keys)
+ return flist
+
+
+class EnableFrameFilter(gdb.Command):
+ """GDB command to enable the specified frame-filter.
+
+ Usage: enable frame-filter DICTIONARY [NAME]
+
+ DICTIONARY is the name of the frame filter dictionary on which to
+ operate. If dictionary is set to "all", perform operations on all
+ dictionaries. Named dictionaries are: "global" for the global
+ frame filter dictionary, "progspace" for the program space's frame
+ filter dictionary. If either all, or the two named dictionaries
+ are not specified, the dictionary name is assumed to be the name
+ of an "objfile" -- a shared library or an executable.
+
+ NAME matches the name of the frame-filter to operate on."""
+
+ def __init__(self):
+ super(EnableFrameFilter, self).__init__("enable frame-filter", gdb.COMMAND_DATA)
+
+ def complete(self, text, word):
+ """Completion function for both frame filter dictionary, and
+ frame filter name."""
+ if text.count(" ") == 0:
+ return _complete_frame_filter_list(text, word, True)
+ else:
+ printer_list = gdb.frames.return_list(text.split()[0].rstrip())
+ return _complete_frame_filter_name(word, printer_list)
+
+ def invoke(self, arg, from_tty):
+ command_tuple = _enable_parse_arg("enable frame-filter", arg)
+ _do_enable_frame_filter(command_tuple, True)
+
+
+class DisableFrameFilter(gdb.Command):
+ """GDB command to disable the specified frame-filter.
+
+ Usage: disable frame-filter DICTIONARY [NAME]
+
+ DICTIONARY is the name of the frame filter dictionary on which to
+ operate. If dictionary is set to "all", perform operations on all
+ dictionaries. Named dictionaries are: "global" for the global
+ frame filter dictionary, "progspace" for the program space's frame
+ filter dictionary. If either all, or the two named dictionaries
+ are not specified, the dictionary name is assumed to be the name
+ of an "objfile" -- a shared library or an executable.
+
+ NAME matches the name of the frame-filter to operate on."""
+
+ def __init__(self):
+ super(DisableFrameFilter, self).__init__(
+ "disable frame-filter", gdb.COMMAND_DATA
+ )
+
+ def complete(self, text, word):
+ """Completion function for both frame filter dictionary, and
+ frame filter name."""
+ if text.count(" ") == 0:
+ return _complete_frame_filter_list(text, word, True)
+ else:
+ printer_list = gdb.frames.return_list(text.split()[0].rstrip())
+ return _complete_frame_filter_name(word, printer_list)
+
+ def invoke(self, arg, from_tty):
+ command_tuple = _enable_parse_arg("disable frame-filter", arg)
+ _do_enable_frame_filter(command_tuple, False)
+
+
+class SetFrameFilterPriority(gdb.Command):
+ """GDB command to set the priority of the specified frame-filter.
+
+ Usage: set frame-filter priority DICTIONARY NAME PRIORITY
+
+ DICTIONARY is the name of the frame filter dictionary on which to
+ operate. Named dictionaries are: "global" for the global frame
+ filter dictionary, "progspace" for the program space's framefilter
+ dictionary. If either of these two are not specified, the
+ dictionary name is assumed to be the name of an "objfile" -- a
+ shared library or an executable.
+
+ NAME matches the name of the frame filter to operate on.
+
+ PRIORITY is the an integer to assign the new priority to the frame
+ filter."""
+
+ def __init__(self):
+ super(SetFrameFilterPriority, self).__init__(
+ "set frame-filter " "priority", gdb.COMMAND_DATA
+ )
+
+ def _parse_pri_arg(self, arg):
+ """Internal worker to parse a priority from a tuple.
+
+ Arguments:
+ arg: Tuple which contains the arguments from the command.
+
+ Returns:
+ A tuple containing the dictionary, name and priority from
+ the arguments.
+
+ Raises:
+ gdb.GdbError: An error parsing the arguments.
+ """
+
+ argv = gdb.string_to_argv(arg)
+ argc = len(argv)
+ if argc != 3:
+ print("set frame-filter priority " "takes exactly three arguments.")
+ return None
+
+ return argv
+
+ def _set_filter_priority(self, command_tuple):
+ """Internal worker for setting priority of frame-filters, by
+ parsing a tuple and calling _set_priority with the parsed
+ tuple.
+
+ Arguments:
+ command_tuple: Tuple which contains the arguments from the
+ command.
+ """
+
+ list_op = command_tuple[0]
+ frame_filter = command_tuple[1]
+
+ # GDB returns arguments as a string, so convert priority to
+ # a number.
+ priority = int(command_tuple[2])
+
+ op_list = gdb.frames.return_list(list_op)
+
+ try:
+ ff = op_list[frame_filter]
+ except KeyError:
+ msg = "frame-filter '" + str(frame_filter) + "' not found."
+ raise gdb.GdbError(msg)
+
+ gdb.frames.set_priority(ff, priority)
+
+ def complete(self, text, word):
+ """Completion function for both frame filter dictionary, and
+ frame filter name."""
+ if text.count(" ") == 0:
+ return _complete_frame_filter_list(text, word, False)
+ else:
+ printer_list = gdb.frames.return_list(text.split()[0].rstrip())
+ return _complete_frame_filter_name(word, printer_list)
+
+ def invoke(self, arg, from_tty):
+ command_tuple = self._parse_pri_arg(arg)
+ if command_tuple is not None:
+ self._set_filter_priority(command_tuple)
+
+
+class ShowFrameFilterPriority(gdb.Command):
+ """GDB command to show the priority of the specified frame-filter.
+
+ Usage: show frame-filter priority DICTIONARY NAME
+
+ DICTIONARY is the name of the frame filter dictionary on which to
+ operate. Named dictionaries are: "global" for the global frame
+ filter dictionary, "progspace" for the program space's framefilter
+ dictionary. If either of these two are not specified, the
+ dictionary name is assumed to be the name of an "objfile" -- a
+ shared library or an executable.
+
+ NAME matches the name of the frame-filter to operate on."""
+
+ def __init__(self):
+ super(ShowFrameFilterPriority, self).__init__(
+ "show frame-filter " "priority", gdb.COMMAND_DATA
+ )
+
+ def _parse_pri_arg(self, arg):
+ """Internal worker to parse a dictionary and name from a
+ tuple.
+
+ Arguments:
+ arg: Tuple which contains the arguments from the command.
+
+ Returns:
+ A tuple containing the dictionary, and frame filter name.
+
+ Raises:
+ gdb.GdbError: An error parsing the arguments.
+ """
+
+ argv = gdb.string_to_argv(arg)
+ argc = len(argv)
+ if argc != 2:
+ print("show frame-filter priority " "takes exactly two arguments.")
+ return None
+
+ return argv
+
+ def get_filter_priority(self, frame_filters, name):
+ """Worker for retrieving the priority of frame_filters.
+
+ Arguments:
+ frame_filters: Name of frame filter dictionary.
+ name: object to select printers.
+
+ Returns:
+ The priority of the frame filter.
+
+ Raises:
+ gdb.GdbError: A frame filter cannot be found.
+ """
+
+ op_list = gdb.frames.return_list(frame_filters)
+
+ try:
+ ff = op_list[name]
+ except KeyError:
+ msg = "frame-filter '" + str(name) + "' not found."
+ raise gdb.GdbError(msg)
+
+ return gdb.frames.get_priority(ff)
+
+ def complete(self, text, word):
+ """Completion function for both frame filter dictionary, and
+ frame filter name."""
+
+ if text.count(" ") == 0:
+ return _complete_frame_filter_list(text, word, False)
+ else:
+ printer_list = frame._return_list(text.split()[0].rstrip())
+ return _complete_frame_filter_name(word, printer_list)
+
+ def invoke(self, arg, from_tty):
+ command_tuple = self._parse_pri_arg(arg)
+ if command_tuple is None:
+ return
+ filter_name = command_tuple[1]
+ list_name = command_tuple[0]
+ try:
+ priority = self.get_filter_priority(list_name, filter_name)
+ except Exception:
+ e = sys.exc_info()[1]
+ print("Error printing filter priority for '" + name + "':" + str(e))
+ else:
+ print(
+ "Priority of filter '"
+ + filter_name
+ + "' in list '"
+ + list_name
+ + "' is: "
+ + str(priority)
+ )
+
+
+# Register commands
+SetFilterPrefixCmd()
+ShowFilterPrefixCmd()
+InfoFrameFilter()
+EnableFrameFilter()
+DisableFrameFilter()
+SetFrameFilterPriority()
+ShowFrameFilterPriority()
diff --git a/share/gdb/python/gdb/command/pretty_printers.py b/share/gdb/python/gdb/command/pretty_printers.py
new file mode 100644
index 0000000..a3b582e
--- /dev/null
+++ b/share/gdb/python/gdb/command/pretty_printers.py
@@ -0,0 +1,395 @@
+# Pretty-printer commands.
+# Copyright (C) 2010-2023 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/>.
+
+"""GDB commands for working with pretty-printers."""
+
+import copy
+import gdb
+import re
+
+
+def parse_printer_regexps(arg):
+ """Internal utility to parse a pretty-printer command argv.
+
+ Arguments:
+ arg: The arguments to the command. The format is:
+ [object-regexp [name-regexp]].
+ Individual printers in a collection are named as
+ printer-name;subprinter-name.
+
+ Returns:
+ The result is a 3-tuple of compiled regular expressions, except that
+ the resulting compiled subprinter regexp is None if not provided.
+
+ Raises:
+ SyntaxError: an error processing ARG
+ """
+
+ argv = gdb.string_to_argv(arg)
+ argc = len(argv)
+ object_regexp = "" # match everything
+ name_regexp = "" # match everything
+ subname_regexp = None
+ if argc > 3:
+ raise SyntaxError("too many arguments")
+ if argc >= 1:
+ object_regexp = argv[0]
+ if argc >= 2:
+ name_subname = argv[1].split(";", 1)
+ name_regexp = name_subname[0]
+ if len(name_subname) == 2:
+ subname_regexp = name_subname[1]
+ # That re.compile raises SyntaxError was determined empirically.
+ # We catch it and reraise it to provide a slightly more useful
+ # error message for the user.
+ try:
+ object_re = re.compile(object_regexp)
+ except SyntaxError:
+ raise SyntaxError("invalid object regexp: %s" % object_regexp)
+ try:
+ name_re = re.compile(name_regexp)
+ except SyntaxError:
+ raise SyntaxError("invalid name regexp: %s" % name_regexp)
+ if subname_regexp is not None:
+ try:
+ subname_re = re.compile(subname_regexp)
+ except SyntaxError:
+ raise SyntaxError("invalid subname regexp: %s" % subname_regexp)
+ else:
+ subname_re = None
+ return (object_re, name_re, subname_re)
+
+
+def printer_enabled_p(printer):
+ """Internal utility to see if printer (or subprinter) is enabled."""
+ if hasattr(printer, "enabled"):
+ return printer.enabled
+ else:
+ return True
+
+
+class InfoPrettyPrinter(gdb.Command):
+ """GDB command to list all registered pretty-printers.
+
+ Usage: info pretty-printer [OBJECT-REGEXP [NAME-REGEXP]]
+
+ OBJECT-REGEXP is a regular expression matching the objects to list.
+ Objects are "global", the program space's file, and the objfiles within
+ that program space.
+
+ NAME-REGEXP matches the name of the pretty-printer.
+ Individual printers in a collection are named as
+ printer-name;subprinter-name."""
+
+ def __init__(self):
+ super(InfoPrettyPrinter, self).__init__("info pretty-printer", gdb.COMMAND_DATA)
+
+ @staticmethod
+ def enabled_string(printer):
+ """Return "" if PRINTER is enabled, otherwise " [disabled]"."""
+ if printer_enabled_p(printer):
+ return ""
+ else:
+ return " [disabled]"
+
+ @staticmethod
+ def printer_name(printer):
+ """Return the printer's name."""
+ if hasattr(printer, "name"):
+ return printer.name
+ if hasattr(printer, "__name__"):
+ return printer.__name__
+ # This "shouldn't happen", but the public API allows for
+ # direct additions to the pretty-printer list, and we shouldn't
+ # crash because someone added a bogus printer.
+ # Plus we want to give the user a way to list unknown printers.
+ return "unknown"
+
+ def list_pretty_printers(self, pretty_printers, name_re, subname_re):
+ """Print a list of pretty-printers."""
+ # A potential enhancement is to provide an option to list printers in
+ # "lookup order" (i.e. unsorted).
+ sorted_pretty_printers = sorted(
+ copy.copy(pretty_printers), key=self.printer_name
+ )
+ for printer in sorted_pretty_printers:
+ name = self.printer_name(printer)
+ enabled = self.enabled_string(printer)
+ if name_re.match(name):
+ print(" %s%s" % (name, enabled))
+ if hasattr(printer, "subprinters") and printer.subprinters is not None:
+ sorted_subprinters = sorted(
+ copy.copy(printer.subprinters), key=self.printer_name
+ )
+ for subprinter in sorted_subprinters:
+ if not subname_re or subname_re.match(subprinter.name):
+ print(
+ " %s%s"
+ % (subprinter.name, self.enabled_string(subprinter))
+ )
+
+ def invoke1(
+ self, title, printer_list, obj_name_to_match, object_re, name_re, subname_re
+ ):
+ """Subroutine of invoke to simplify it."""
+ if printer_list and object_re.match(obj_name_to_match):
+ print(title)
+ self.list_pretty_printers(printer_list, name_re, subname_re)
+
+ def invoke(self, arg, from_tty):
+ """GDB calls this to perform the command."""
+ (object_re, name_re, subname_re) = parse_printer_regexps(arg)
+ self.invoke1(
+ "global pretty-printers:",
+ gdb.pretty_printers,
+ "global",
+ object_re,
+ name_re,
+ subname_re,
+ )
+ cp = gdb.current_progspace()
+ self.invoke1(
+ "progspace %s pretty-printers:" % cp.filename,
+ cp.pretty_printers,
+ "progspace",
+ object_re,
+ name_re,
+ subname_re,
+ )
+ for objfile in gdb.objfiles():
+ self.invoke1(
+ "objfile %s pretty-printers:" % objfile.filename,
+ objfile.pretty_printers,
+ objfile.filename,
+ object_re,
+ name_re,
+ subname_re,
+ )
+
+
+def count_enabled_printers(pretty_printers):
+ """Return a 2-tuple of number of enabled and total printers."""
+ enabled = 0
+ total = 0
+ for printer in pretty_printers:
+ if hasattr(printer, "subprinters") and printer.subprinters is not None:
+ if printer_enabled_p(printer):
+ for subprinter in printer.subprinters:
+ if printer_enabled_p(subprinter):
+ enabled += 1
+ total += len(printer.subprinters)
+ else:
+ if printer_enabled_p(printer):
+ enabled += 1
+ total += 1
+ return (enabled, total)
+
+
+def count_all_enabled_printers():
+ """Return a 2-tuble of the enabled state and total number of all printers.
+ This includes subprinters.
+ """
+ enabled_count = 0
+ total_count = 0
+ (t_enabled, t_total) = count_enabled_printers(gdb.pretty_printers)
+ enabled_count += t_enabled
+ total_count += t_total
+ (t_enabled, t_total) = count_enabled_printers(
+ gdb.current_progspace().pretty_printers
+ )
+ enabled_count += t_enabled
+ total_count += t_total
+ for objfile in gdb.objfiles():
+ (t_enabled, t_total) = count_enabled_printers(objfile.pretty_printers)
+ enabled_count += t_enabled
+ total_count += t_total
+ return (enabled_count, total_count)
+
+
+def pluralize(text, n, suffix="s"):
+ """Return TEXT pluralized if N != 1."""
+ if n != 1:
+ return "%s%s" % (text, suffix)
+ else:
+ return text
+
+
+def show_pretty_printer_enabled_summary():
+ """Print the number of printers enabled/disabled.
+ We count subprinters individually.
+ """
+ (enabled_count, total_count) = count_all_enabled_printers()
+ print("%d of %d printers enabled" % (enabled_count, total_count))
+
+
+def do_enable_pretty_printer_1(pretty_printers, name_re, subname_re, flag):
+ """Worker for enabling/disabling pretty-printers.
+
+ Arguments:
+ pretty_printers: list of pretty-printers
+ name_re: regular-expression object to select printers
+ subname_re: regular expression object to select subprinters or None
+ if all are affected
+ flag: True for Enable, False for Disable
+
+ Returns:
+ The number of printers affected.
+ This is just for informational purposes for the user.
+ """
+ total = 0
+ for printer in pretty_printers:
+ if (
+ hasattr(printer, "name")
+ and name_re.match(printer.name)
+ or hasattr(printer, "__name__")
+ and name_re.match(printer.__name__)
+ ):
+ if hasattr(printer, "subprinters") and printer.subprinters is not None:
+ if not subname_re:
+ # Only record printers that change state.
+ if printer_enabled_p(printer) != flag:
+ for subprinter in printer.subprinters:
+ if printer_enabled_p(subprinter):
+ total += 1
+ # NOTE: We preserve individual subprinter settings.
+ printer.enabled = flag
+ else:
+ # NOTE: Whether this actually disables the subprinter
+ # depends on whether the printer's lookup function supports
+ # the "enable" API. We can only assume it does.
+ for subprinter in printer.subprinters:
+ if subname_re.match(subprinter.name):
+ # Only record printers that change state.
+ if (
+ printer_enabled_p(printer)
+ and printer_enabled_p(subprinter) != flag
+ ):
+ total += 1
+ subprinter.enabled = flag
+ else:
+ # This printer has no subprinters.
+ # If the user does "disable pretty-printer .* .* foo"
+ # should we disable printers that don't have subprinters?
+ # How do we apply "foo" in this context? Since there is no
+ # "foo" subprinter it feels like we should skip this printer.
+ # There's still the issue of how to handle
+ # "disable pretty-printer .* .* .*", and every other variation
+ # that can match everything. For now punt and only support
+ # "disable pretty-printer .* .*" (i.e. subname is elided)
+ # to disable everything.
+ if not subname_re:
+ # Only record printers that change state.
+ if printer_enabled_p(printer) != flag:
+ total += 1
+ printer.enabled = flag
+ return total
+
+
+def do_enable_pretty_printer(arg, flag):
+ """Internal worker for enabling/disabling pretty-printers."""
+ (object_re, name_re, subname_re) = parse_printer_regexps(arg)
+
+ total = 0
+ if object_re.match("global"):
+ total += do_enable_pretty_printer_1(
+ gdb.pretty_printers, name_re, subname_re, flag
+ )
+ cp = gdb.current_progspace()
+ if object_re.match("progspace"):
+ total += do_enable_pretty_printer_1(
+ cp.pretty_printers, name_re, subname_re, flag
+ )
+ for objfile in gdb.objfiles():
+ if object_re.match(objfile.filename):
+ total += do_enable_pretty_printer_1(
+ objfile.pretty_printers, name_re, subname_re, flag
+ )
+
+ if flag:
+ state = "enabled"
+ else:
+ state = "disabled"
+ print("%d %s %s" % (total, pluralize("printer", total), state))
+
+ # Print the total list of printers currently enabled/disabled.
+ # This is to further assist the user in determining whether the result
+ # is expected. Since we use regexps to select it's useful.
+ show_pretty_printer_enabled_summary()
+
+
+# Enable/Disable one or more pretty-printers.
+#
+# This is intended for use when a broken pretty-printer is shipped/installed
+# and the user wants to disable that printer without disabling all the other
+# printers.
+#
+# A useful addition would be -v (verbose) to show each printer affected.
+
+
+class EnablePrettyPrinter(gdb.Command):
+ """GDB command to enable the specified pretty-printer.
+
+ Usage: enable pretty-printer [OBJECT-REGEXP [NAME-REGEXP]]
+
+ OBJECT-REGEXP is a regular expression matching the objects to examine.
+ Objects are "global", the program space's file, and the objfiles within
+ that program space.
+
+ NAME-REGEXP matches the name of the pretty-printer.
+ Individual printers in a collection are named as
+ printer-name;subprinter-name."""
+
+ def __init__(self):
+ super(EnablePrettyPrinter, self).__init__(
+ "enable pretty-printer", gdb.COMMAND_DATA
+ )
+
+ def invoke(self, arg, from_tty):
+ """GDB calls this to perform the command."""
+ do_enable_pretty_printer(arg, True)
+
+
+class DisablePrettyPrinter(gdb.Command):
+ """GDB command to disable the specified pretty-printer.
+
+ Usage: disable pretty-printer [OBJECT-REGEXP [NAME-REGEXP]]
+
+ OBJECT-REGEXP is a regular expression matching the objects to examine.
+ Objects are "global", the program space's file, and the objfiles within
+ that program space.
+
+ NAME-REGEXP matches the name of the pretty-printer.
+ Individual printers in a collection are named as
+ printer-name;subprinter-name."""
+
+ def __init__(self):
+ super(DisablePrettyPrinter, self).__init__(
+ "disable pretty-printer", gdb.COMMAND_DATA
+ )
+
+ def invoke(self, arg, from_tty):
+ """GDB calls this to perform the command."""
+ do_enable_pretty_printer(arg, False)
+
+
+def register_pretty_printer_commands():
+ """Call from a top level script to install the pretty-printer commands."""
+ InfoPrettyPrinter()
+ EnablePrettyPrinter()
+ DisablePrettyPrinter()
+
+
+register_pretty_printer_commands()
diff --git a/share/gdb/python/gdb/command/prompt.py b/share/gdb/python/gdb/command/prompt.py
new file mode 100644
index 0000000..775fa1a
--- /dev/null
+++ b/share/gdb/python/gdb/command/prompt.py
@@ -0,0 +1,66 @@
+# Extended prompt.
+# Copyright (C) 2011-2023 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/>.
+
+"""GDB command for working with extended prompts."""
+
+import gdb
+import gdb.prompt
+
+
+class _ExtendedPrompt(gdb.Parameter):
+
+ """Set the extended prompt.
+
+ Usage: set extended-prompt VALUE
+
+ Substitutions are applied to VALUE to compute the real prompt.
+
+ The currently defined substitutions are:"""
+
+ # Add the prompt library's dynamically generated help to the
+ # __doc__ string.
+ __doc__ = __doc__ + "\n" + gdb.prompt.prompt_help()
+
+ set_doc = "Set the extended prompt."
+ show_doc = "Show the extended prompt."
+
+ def __init__(self):
+ super(_ExtendedPrompt, self).__init__(
+ "extended-prompt", gdb.COMMAND_SUPPORT, gdb.PARAM_STRING_NOESCAPE
+ )
+ self.value = ""
+ self.hook_set = False
+
+ def get_show_string(self, pvalue):
+ if self.value:
+ return "The extended prompt is: " + self.value
+ else:
+ return "The extended prompt is not set."
+
+ def get_set_string(self):
+ if self.hook_set is False:
+ gdb.prompt_hook = self.before_prompt_hook
+ self.hook_set = True
+ return ""
+
+ def before_prompt_hook(self, current):
+ if self.value:
+ return gdb.prompt.substitute_prompt(self.value)
+ else:
+ return None
+
+
+_ExtendedPrompt()
diff --git a/share/gdb/python/gdb/command/type_printers.py b/share/gdb/python/gdb/command/type_printers.py
new file mode 100644
index 0000000..35e6201
--- /dev/null
+++ b/share/gdb/python/gdb/command/type_printers.py
@@ -0,0 +1,125 @@
+# Type printer commands.
+# Copyright (C) 2010-2023 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/>.
+
+import copy
+import gdb
+
+"""GDB commands for working with type-printers."""
+
+
+class InfoTypePrinter(gdb.Command):
+ """GDB command to list all registered type-printers.
+
+ Usage: info type-printers"""
+
+ def __init__(self):
+ super(InfoTypePrinter, self).__init__("info type-printers", gdb.COMMAND_DATA)
+
+ def list_type_printers(self, type_printers):
+ """Print a list of type printers."""
+ # A potential enhancement is to provide an option to list printers in
+ # "lookup order" (i.e. unsorted).
+ sorted_type_printers = sorted(copy.copy(type_printers), key=lambda x: x.name)
+ for printer in sorted_type_printers:
+ if printer.enabled:
+ enabled = ""
+ else:
+ enabled = " [disabled]"
+ print(" %s%s" % (printer.name, enabled))
+
+ def invoke(self, arg, from_tty):
+ """GDB calls this to perform the command."""
+ sep = ""
+ for objfile in gdb.objfiles():
+ if objfile.type_printers:
+ print("%sType printers for %s:" % (sep, objfile.filename))
+ self.list_type_printers(objfile.type_printers)
+ sep = "\n"
+ if gdb.current_progspace().type_printers:
+ print("%sType printers for program space:" % sep)
+ self.list_type_printers(gdb.current_progspace().type_printers)
+ sep = "\n"
+ if gdb.type_printers:
+ print("%sGlobal type printers:" % sep)
+ self.list_type_printers(gdb.type_printers)
+
+
+class _EnableOrDisableCommand(gdb.Command):
+ def __init__(self, setting, name):
+ super(_EnableOrDisableCommand, self).__init__(name, gdb.COMMAND_DATA)
+ self.setting = setting
+
+ def set_some(self, name, printers):
+ result = False
+ for p in printers:
+ if name == p.name:
+ p.enabled = self.setting
+ result = True
+ return result
+
+ def invoke(self, arg, from_tty):
+ """GDB calls this to perform the command."""
+ for name in arg.split():
+ ok = False
+ for objfile in gdb.objfiles():
+ if self.set_some(name, objfile.type_printers):
+ ok = True
+ if self.set_some(name, gdb.current_progspace().type_printers):
+ ok = True
+ if self.set_some(name, gdb.type_printers):
+ ok = True
+ if not ok:
+ print("No type printer named '%s'" % name)
+
+ def add_some(self, result, word, printers):
+ for p in printers:
+ if p.name.startswith(word):
+ result.append(p.name)
+
+ def complete(self, text, word):
+ result = []
+ for objfile in gdb.objfiles():
+ self.add_some(result, word, objfile.type_printers)
+ self.add_some(result, word, gdb.current_progspace().type_printers)
+ self.add_some(result, word, gdb.type_printers)
+ return result
+
+
+class EnableTypePrinter(_EnableOrDisableCommand):
+ """GDB command to enable the specified type printer.
+
+ Usage: enable type-printer NAME
+
+ NAME is the name of the type-printer."""
+
+ def __init__(self):
+ super(EnableTypePrinter, self).__init__(True, "enable type-printer")
+
+
+class DisableTypePrinter(_EnableOrDisableCommand):
+ """GDB command to disable the specified type-printer.
+
+ Usage: disable type-printer NAME
+
+ NAME is the name of the type-printer."""
+
+ def __init__(self):
+ super(DisableTypePrinter, self).__init__(False, "disable type-printer")
+
+
+InfoTypePrinter()
+EnableTypePrinter()
+DisableTypePrinter()
diff --git a/share/gdb/python/gdb/command/unwinders.py b/share/gdb/python/gdb/command/unwinders.py
new file mode 100644
index 0000000..68087aa
--- /dev/null
+++ b/share/gdb/python/gdb/command/unwinders.py
@@ -0,0 +1,199 @@
+# Unwinder commands.
+# Copyright 2015-2023 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/>.
+
+import gdb
+import re
+
+
+def validate_regexp(exp, idstring):
+ try:
+ return re.compile(exp)
+ except SyntaxError:
+ raise SyntaxError("Invalid %s regexp: %s." % (idstring, exp))
+
+
+def parse_unwinder_command_args(arg):
+ """Internal utility to parse unwinder command argv.
+
+ Arguments:
+ arg: The arguments to the command. The format is:
+ [locus-regexp [name-regexp]]
+
+ Returns:
+ A 2-tuple of compiled regular expressions.
+
+ Raises:
+ SyntaxError: an error processing ARG
+ """
+
+ argv = gdb.string_to_argv(arg)
+ argc = len(argv)
+ if argc > 2:
+ raise SyntaxError("Too many arguments.")
+ locus_regexp = ""
+ name_regexp = ""
+ if argc >= 1:
+ locus_regexp = argv[0]
+ if argc >= 2:
+ name_regexp = argv[1]
+ return (
+ validate_regexp(locus_regexp, "locus"),
+ validate_regexp(name_regexp, "unwinder"),
+ )
+
+
+class InfoUnwinder(gdb.Command):
+ """GDB command to list unwinders.
+
+ Usage: info unwinder [LOCUS-REGEXP [NAME-REGEXP]]
+
+ LOCUS-REGEXP is a regular expression matching the location of the
+ unwinder. If it is omitted, all registered unwinders from all
+ loci are listed. A locus can be 'global', 'progspace' to list
+ the unwinders from the current progspace, or a regular expression
+ matching filenames of objfiles.
+
+ NAME-REGEXP is a regular expression to filter unwinder names. If
+ this omitted for a specified locus, then all registered unwinders
+ in the locus are listed."""
+
+ def __init__(self):
+ super(InfoUnwinder, self).__init__("info unwinder", gdb.COMMAND_STACK)
+
+ def list_unwinders(self, title, unwinders, name_re):
+ """Lists the unwinders whose name matches regexp.
+
+ Arguments:
+ title: The line to print before the list.
+ unwinders: The list of the unwinders.
+ name_re: unwinder name filter.
+ """
+ if not unwinders:
+ return
+ print(title)
+ for unwinder in unwinders:
+ if name_re.match(unwinder.name):
+ print(
+ " %s%s"
+ % (unwinder.name, "" if unwinder.enabled else " [disabled]")
+ )
+
+ def invoke(self, arg, from_tty):
+ locus_re, name_re = parse_unwinder_command_args(arg)
+ if locus_re.match("global"):
+ self.list_unwinders("Global:", gdb.frame_unwinders, name_re)
+ if locus_re.match("progspace"):
+ cp = gdb.current_progspace()
+ self.list_unwinders(
+ "Progspace %s:" % cp.filename, cp.frame_unwinders, name_re
+ )
+ for objfile in gdb.objfiles():
+ if locus_re.match(objfile.filename):
+ self.list_unwinders(
+ "Objfile %s:" % objfile.filename, objfile.frame_unwinders, name_re
+ )
+
+
+def do_enable_unwinder1(unwinders, name_re, flag):
+ """Enable/disable unwinders whose names match given regex.
+
+ Arguments:
+ unwinders: The list of unwinders.
+ name_re: Unwinder name filter.
+ flag: Enable/disable.
+
+ Returns:
+ The number of unwinders affected.
+ """
+ total = 0
+ for unwinder in unwinders:
+ if name_re.match(unwinder.name):
+ unwinder.enabled = flag
+ total += 1
+ return total
+
+
+def do_enable_unwinder(arg, flag):
+ """Enable/disable unwinder(s)."""
+ (locus_re, name_re) = parse_unwinder_command_args(arg)
+ total = 0
+ if locus_re.match("global"):
+ total += do_enable_unwinder1(gdb.frame_unwinders, name_re, flag)
+ if locus_re.match("progspace"):
+ total += do_enable_unwinder1(
+ gdb.current_progspace().frame_unwinders, name_re, flag
+ )
+ for objfile in gdb.objfiles():
+ if locus_re.match(objfile.filename):
+ total += do_enable_unwinder1(objfile.frame_unwinders, name_re, flag)
+ if total > 0:
+ gdb.invalidate_cached_frames()
+ print(
+ "%d unwinder%s %s"
+ % (total, "" if total == 1 else "s", "enabled" if flag else "disabled")
+ )
+
+
+class EnableUnwinder(gdb.Command):
+ """GDB command to enable unwinders.
+
+ Usage: enable unwinder [LOCUS-REGEXP [NAME-REGEXP]]
+
+ LOCUS-REGEXP is a regular expression specifying the unwinders to
+ enable. It can 'global', 'progspace', or the name of an objfile
+ within that progspace.
+
+ NAME_REGEXP is a regular expression to filter unwinder names. If
+ this omitted for a specified locus, then all registered unwinders
+ in the locus are affected."""
+
+ def __init__(self):
+ super(EnableUnwinder, self).__init__("enable unwinder", gdb.COMMAND_STACK)
+
+ def invoke(self, arg, from_tty):
+ """GDB calls this to perform the command."""
+ do_enable_unwinder(arg, True)
+
+
+class DisableUnwinder(gdb.Command):
+ """GDB command to disable the specified unwinder.
+
+ Usage: disable unwinder [LOCUS-REGEXP [NAME-REGEXP]]
+
+ LOCUS-REGEXP is a regular expression specifying the unwinders to
+ disable. It can 'global', 'progspace', or the name of an objfile
+ within that progspace.
+
+ NAME_REGEXP is a regular expression to filter unwinder names. If
+ this omitted for a specified locus, then all registered unwinders
+ in the locus are affected."""
+
+ def __init__(self):
+ super(DisableUnwinder, self).__init__("disable unwinder", gdb.COMMAND_STACK)
+
+ def invoke(self, arg, from_tty):
+ """GDB calls this to perform the command."""
+ do_enable_unwinder(arg, False)
+
+
+def register_unwinder_commands():
+ """Installs the unwinder commands."""
+ InfoUnwinder()
+ EnableUnwinder()
+ DisableUnwinder()
+
+
+register_unwinder_commands()
diff --git a/share/gdb/python/gdb/command/xmethods.py b/share/gdb/python/gdb/command/xmethods.py
new file mode 100644
index 0000000..4bf8969
--- /dev/null
+++ b/share/gdb/python/gdb/command/xmethods.py
@@ -0,0 +1,270 @@
+# Xmethod commands.
+# Copyright 2013-2023 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/>.
+
+import gdb
+import re
+
+"""GDB commands for working with xmethods."""
+
+
+def validate_xm_regexp(part_name, regexp):
+ try:
+ return re.compile(regexp)
+ except SyntaxError:
+ raise SyntaxError("Invalid %s regexp: %s", part_name, regexp)
+
+
+def parse_xm_command_args(arg):
+ """Parses the arguments passed to a xmethod command.
+
+ Arguments:
+ arg: The argument string passed to a xmethod command.
+
+ Returns:
+ A 3-tuple: (<locus matching regular expression>,
+ <matcher matching regular expression>,
+ <name matching regular experession>)
+ """
+ argv = gdb.string_to_argv(arg)
+ argc = len(argv)
+ if argc > 2:
+ raise SyntaxError("Too many arguments to command.")
+ locus_regexp = ""
+ matcher_name_regexp = ""
+ xm_name_regexp = None
+ if argc >= 1:
+ locus_regexp = argv[0]
+ if argc == 2:
+ parts = argv[1].split(";", 1)
+ matcher_name_regexp = parts[0]
+ if len(parts) > 1:
+ xm_name_regexp = parts[1]
+ if xm_name_regexp:
+ name_re = validate_xm_regexp("xmethod name", xm_name_regexp)
+ else:
+ name_re = None
+ return (
+ validate_xm_regexp("locus", locus_regexp),
+ validate_xm_regexp("matcher name", matcher_name_regexp),
+ name_re,
+ )
+
+
+def get_global_method_matchers(locus_re, matcher_re):
+ """Returns a dict of matching globally registered xmethods.
+
+ Arguments:
+ locus_re: Even though only globally registered xmethods are
+ looked up, they will be looked up only if 'global' matches
+ LOCUS_RE.
+ matcher_re: The regular expression matching the names of xmethods.
+
+ Returns:
+ A dict of matching globally registered xmethod matchers. The only
+ key in the dict will be 'global'.
+ """
+ locus_str = "global"
+ xm_dict = {locus_str: []}
+ if locus_re.match("global"):
+ xm_dict[locus_str].extend([m for m in gdb.xmethods if matcher_re.match(m.name)])
+ return xm_dict
+
+
+def get_method_matchers_in_loci(loci, locus_re, matcher_re):
+ """Returns a dict of matching registered xmethods in the LOCI.
+
+ Arguments:
+ loci: The list of loci to lookup matching xmethods in.
+ locus_re: If a locus is an objfile, then xmethod matchers will be
+ looked up in it only if its filename matches the regular
+ expression LOCUS_RE. If a locus is the current progspace,
+ then xmethod matchers will be looked up in it only if the
+ string "progspace" matches LOCUS_RE.
+ matcher_re: The regular expression to match the xmethod matcher
+ names.
+
+ Returns:
+ A dict of matching xmethod matchers. The keys of the dict are the
+ filenames of the loci the xmethod matchers belong to.
+ """
+ xm_dict = {}
+ for locus in loci:
+ if isinstance(locus, gdb.Progspace):
+ if not locus_re.match("progspace"):
+ continue
+ locus_type = "progspace"
+ else:
+ if not locus_re.match(locus.filename):
+ continue
+ locus_type = "objfile"
+ locus_str = "%s %s" % (locus_type, locus.filename)
+ xm_dict[locus_str] = [m for m in locus.xmethods if matcher_re.match(m.name)]
+ return xm_dict
+
+
+def print_xm_info(xm_dict, name_re):
+ """Print a dictionary of xmethods."""
+
+ def get_status_string(m):
+ if not m.enabled:
+ return " [disabled]"
+ else:
+ return ""
+
+ if not xm_dict:
+ return
+ for locus_str in xm_dict:
+ if not xm_dict[locus_str]:
+ continue
+ print("Xmethods in %s:" % locus_str)
+ for matcher in xm_dict[locus_str]:
+ print(" %s%s" % (matcher.name, get_status_string(matcher)))
+ if not matcher.methods:
+ continue
+ for m in matcher.methods:
+ if name_re is None or name_re.match(m.name):
+ print(" %s%s" % (m.name, get_status_string(m)))
+
+
+def set_xm_status1(xm_dict, name_re, status):
+ """Set the status (enabled/disabled) of a dictionary of xmethods."""
+ for locus_str, matchers in xm_dict.items():
+ for matcher in matchers:
+ if not name_re:
+ # If the name regex is missing, then set the status of the
+ # matcher and move on.
+ matcher.enabled = status
+ continue
+ if not matcher.methods:
+ # The methods attribute could be None. Move on.
+ continue
+ for m in matcher.methods:
+ if name_re.match(m.name):
+ m.enabled = status
+
+
+def set_xm_status(arg, status):
+ """Set the status (enabled/disabled) of xmethods matching ARG.
+ This is a helper function for enable/disable commands. ARG is the
+ argument string passed to the commands.
+ """
+ locus_re, matcher_re, name_re = parse_xm_command_args(arg)
+ set_xm_status1(get_global_method_matchers(locus_re, matcher_re), name_re, status)
+ set_xm_status1(
+ get_method_matchers_in_loci([gdb.current_progspace()], locus_re, matcher_re),
+ name_re,
+ status,
+ )
+ set_xm_status1(
+ get_method_matchers_in_loci(gdb.objfiles(), locus_re, matcher_re),
+ name_re,
+ status,
+ )
+
+
+class InfoXMethod(gdb.Command):
+ """GDB command to list registered xmethod matchers.
+
+ Usage: info xmethod [LOCUS-REGEXP [NAME-REGEXP]]
+
+ LOCUS-REGEXP is a regular expression matching the location of the
+ xmethod matchers. If it is omitted, all registered xmethod matchers
+ from all loci are listed. A locus could be 'global', a regular expression
+ matching the current program space's filename, or a regular expression
+ matching filenames of objfiles. Locus could be 'progspace' to specify that
+ only xmethods from the current progspace should be listed.
+
+ NAME-REGEXP is a regular expression matching the names of xmethod
+ matchers. If this omitted for a specified locus, then all registered
+ xmethods in the locus are listed. To list only a certain xmethods
+ managed by a single matcher, the name regexp can be specified as
+ matcher-name-regexp;xmethod-name-regexp."""
+
+ def __init__(self):
+ super(InfoXMethod, self).__init__("info xmethod", gdb.COMMAND_DATA)
+
+ def invoke(self, arg, from_tty):
+ locus_re, matcher_re, name_re = parse_xm_command_args(arg)
+ print_xm_info(get_global_method_matchers(locus_re, matcher_re), name_re)
+ print_xm_info(
+ get_method_matchers_in_loci(
+ [gdb.current_progspace()], locus_re, matcher_re
+ ),
+ name_re,
+ )
+ print_xm_info(
+ get_method_matchers_in_loci(gdb.objfiles(), locus_re, matcher_re), name_re
+ )
+
+
+class EnableXMethod(gdb.Command):
+ """GDB command to enable a specified (group of) xmethod(s).
+
+ Usage: enable xmethod [LOCUS-REGEXP [NAME-REGEXP]]
+
+ LOCUS-REGEXP is a regular expression matching the location of the
+ xmethod matchers. If it is omitted, all registered xmethods matchers
+ from all loci are enabled. A locus could be 'global', a regular expression
+ matching the current program space's filename, or a regular expression
+ matching filenames of objfiles. Locus could be 'progspace' to specify that
+ only xmethods from the current progspace should be enabled.
+
+ NAME-REGEXP is a regular expression matching the names of xmethods
+ within a given locus. If this omitted for a specified locus, then all
+ registered xmethod matchers in the locus are enabled. To enable only
+ a certain xmethods managed by a single matcher, the name regexp can be
+ specified as matcher-name-regexp;xmethod-name-regexp."""
+
+ def __init__(self):
+ super(EnableXMethod, self).__init__("enable xmethod", gdb.COMMAND_DATA)
+
+ def invoke(self, arg, from_tty):
+ set_xm_status(arg, True)
+
+
+class DisableXMethod(gdb.Command):
+ """GDB command to disable a specified (group of) xmethod(s).
+
+ Usage: disable xmethod [LOCUS-REGEXP [NAME-REGEXP]]
+
+ LOCUS-REGEXP is a regular expression matching the location of the
+ xmethod matchers. If it is omitted, all registered xmethod matchers
+ from all loci are disabled. A locus could be 'global', a regular
+ expression matching the current program space's filename, or a regular
+ expression filenames of objfiles. Locus could be 'progspace' to specify
+ that only xmethods from the current progspace should be disabled.
+
+ NAME-REGEXP is a regular expression matching the names of xmethods
+ within a given locus. If this omitted for a specified locus, then all
+ registered xmethod matchers in the locus are disabled. To disable
+ only a certain xmethods managed by a single matcher, the name regexp
+ can be specified as matcher-name-regexp;xmethod-name-regexp."""
+
+ def __init__(self):
+ super(DisableXMethod, self).__init__("disable xmethod", gdb.COMMAND_DATA)
+
+ def invoke(self, arg, from_tty):
+ set_xm_status(arg, False)
+
+
+def register_xmethod_commands():
+ """Installs the xmethod commands."""
+ InfoXMethod()
+ EnableXMethod()
+ DisableXMethod()
+
+
+register_xmethod_commands()
diff --git a/share/gdb/python/gdb/disassembler.py b/share/gdb/python/gdb/disassembler.py
new file mode 100644
index 0000000..88f65f5
--- /dev/null
+++ b/share/gdb/python/gdb/disassembler.py
@@ -0,0 +1,178 @@
+# Copyright (C) 2021-2023 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/>.
+
+"""Disassembler related module."""
+
+import gdb
+import _gdb.disassembler
+
+# Re-export everything from the _gdb.disassembler module, which is
+# defined within GDB's C++ code.
+from _gdb.disassembler import *
+
+# Module global dictionary of gdb.disassembler.Disassembler objects.
+# The keys of this dictionary are bfd architecture names, or the
+# special value None.
+#
+# When a request to disassemble comes in we first lookup the bfd
+# architecture name from the gdbarch, if that name exists in this
+# dictionary then we use that Disassembler object.
+#
+# If there's no architecture specific disassembler then we look for
+# the key None in this dictionary, and if that key exists, we use that
+# disassembler.
+#
+# If none of the above checks found a suitable disassembler, then no
+# disassembly is performed in Python.
+_disassemblers_dict = {}
+
+
+class Disassembler(object):
+ """A base class from which all user implemented disassemblers must
+ inherit."""
+
+ def __init__(self, name):
+ """Constructor. Takes a name, which should be a string, which can be
+ used to identify this disassembler in diagnostic messages."""
+ self.name = name
+
+ def __call__(self, info):
+ """A default implementation of __call__. All sub-classes must
+ override this method. Calling this default implementation will throw
+ a NotImplementedError exception."""
+ raise NotImplementedError("Disassembler.__call__")
+
+
+def register_disassembler(disassembler, architecture=None):
+ """Register a disassembler. DISASSEMBLER is a sub-class of
+ gdb.disassembler.Disassembler. ARCHITECTURE is either None or a
+ string, the name of an architecture known to GDB.
+
+ DISASSEMBLER is registered as a disassembler for ARCHITECTURE, or
+ all architectures when ARCHITECTURE is None.
+
+ Returns the previous disassembler registered with this
+ ARCHITECTURE value.
+ """
+
+ if not isinstance(disassembler, Disassembler) and disassembler is not None:
+ raise TypeError("disassembler should sub-class gdb.disassembler.Disassembler")
+
+ old = None
+ if architecture in _disassemblers_dict:
+ old = _disassemblers_dict[architecture]
+ del _disassemblers_dict[architecture]
+ if disassembler is not None:
+ _disassemblers_dict[architecture] = disassembler
+
+ # Call the private _set_enabled function within the
+ # _gdb.disassembler module. This function sets a global flag
+ # within GDB's C++ code that enables or dissables the Python
+ # disassembler functionality, this improves performance of the
+ # disassembler by avoiding unneeded calls into Python when we know
+ # that no disassemblers are registered.
+ _gdb.disassembler._set_enabled(len(_disassemblers_dict) > 0)
+ return old
+
+
+def _print_insn(info):
+ """This function is called by GDB when it wants to disassemble an
+ instruction. INFO describes the instruction to be
+ disassembled."""
+
+ def lookup_disassembler(arch):
+ try:
+ name = arch.name()
+ if name is None:
+ return None
+ if name in _disassemblers_dict:
+ return _disassemblers_dict[name]
+ if None in _disassemblers_dict:
+ return _disassemblers_dict[None]
+ return None
+ except:
+ # It's pretty unlikely this exception case will ever
+ # trigger, one situation would be if the user somehow
+ # corrupted the _disassemblers_dict variable such that it
+ # was no longer a dictionary.
+ return None
+
+ disassembler = lookup_disassembler(info.architecture)
+ if disassembler is None:
+ return None
+ return disassembler(info)
+
+
+class maint_info_py_disassemblers_cmd(gdb.Command):
+ """
+ List all registered Python disassemblers.
+
+ List the name of all registered Python disassemblers, next to the
+ name of the architecture for which the disassembler is registered.
+
+ The global Python disassembler is listed next to the string
+ 'GLOBAL'.
+
+ The disassembler that matches the architecture of the currently
+ selected inferior will be marked, this is an indication of which
+ disassembler will be invoked if any disassembly is performed in
+ the current inferior.
+ """
+
+ def __init__(self):
+ super().__init__("maintenance info python-disassemblers", gdb.COMMAND_USER)
+
+ def invoke(self, args, from_tty):
+ # If no disassemblers are registered, tell the user.
+ if len(_disassemblers_dict) == 0:
+ print("No Python disassemblers registered.")
+ return
+
+ # Figure out the longest architecture name, so we can
+ # correctly format the table of results.
+ longest_arch_name = 0
+ for architecture in _disassemblers_dict:
+ if architecture is not None:
+ name = _disassemblers_dict[architecture].name
+ if len(name) > longest_arch_name:
+ longest_arch_name = len(name)
+
+ # Figure out the name of the current architecture. There
+ # should always be a current inferior, but if, somehow, there
+ # isn't, then leave curr_arch as the empty string, which will
+ # not then match agaisnt any architecture in the dictionary.
+ curr_arch = ""
+ if gdb.selected_inferior() is not None:
+ curr_arch = gdb.selected_inferior().architecture().name()
+
+ # Now print the dictionary of registered disassemblers out to
+ # the user.
+ match_tag = "\t(Matches current architecture)"
+ fmt_len = max(longest_arch_name, len("Architecture"))
+ format_string = "{:" + str(fmt_len) + "s} {:s}"
+ print(format_string.format("Architecture", "Disassember Name"))
+ for architecture in _disassemblers_dict:
+ if architecture is not None:
+ name = _disassemblers_dict[architecture].name
+ if architecture == curr_arch:
+ name += match_tag
+ match_tag = ""
+ print(format_string.format(architecture, name))
+ if None in _disassemblers_dict:
+ name = _disassemblers_dict[None].name + match_tag
+ print(format_string.format("GLOBAL", name))
+
+
+maint_info_py_disassemblers_cmd()
diff --git a/share/gdb/python/gdb/frames.py b/share/gdb/python/gdb/frames.py
new file mode 100644
index 0000000..5f8119c
--- /dev/null
+++ b/share/gdb/python/gdb/frames.py
@@ -0,0 +1,233 @@
+# Frame-filter commands.
+# Copyright (C) 2013-2023 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/>.
+
+"""Internal functions for working with frame-filters."""
+
+import gdb
+from gdb.FrameIterator import FrameIterator
+from gdb.FrameDecorator import FrameDecorator
+import itertools
+import collections
+
+
+def get_priority(filter_item):
+ """Internal worker function to return the frame-filter's priority
+ from a frame filter object. This is a fail free function as it is
+ used in sorting and filtering. If a badly implemented frame
+ filter does not implement the priority attribute, return zero
+ (otherwise sorting/filtering will fail and prevent other frame
+ filters from executing).
+
+ Arguments:
+ filter_item: An object conforming to the frame filter
+ interface.
+
+ Returns:
+ The priority of the frame filter from the "priority"
+ attribute, or zero.
+ """
+ # Do not fail here, as the sort will fail. If a filter has not
+ # (incorrectly) set a priority, set it to zero.
+ return getattr(filter_item, "priority", 0)
+
+
+def set_priority(filter_item, priority):
+ """Internal worker function to set the frame-filter's priority.
+
+ Arguments:
+ filter_item: An object conforming to the frame filter
+ interface.
+ priority: The priority to assign as an integer.
+ """
+
+ filter_item.priority = priority
+
+
+def get_enabled(filter_item):
+ """Internal worker function to return a filter's enabled state
+ from a frame filter object. This is a fail free function as it is
+ used in sorting and filtering. If a badly implemented frame
+ filter does not implement the enabled attribute, return False
+ (otherwise sorting/filtering will fail and prevent other frame
+ filters from executing).
+
+ Arguments:
+ filter_item: An object conforming to the frame filter
+ interface.
+
+ Returns:
+ The enabled state of the frame filter from the "enabled"
+ attribute, or False.
+ """
+
+ # If the filter class is badly implemented when called from the
+ # Python filter command, do not cease filter operations, just set
+ # enabled to False.
+ return getattr(filter_item, "enabled", False)
+
+
+def set_enabled(filter_item, state):
+ """Internal Worker function to set the frame-filter's enabled
+ state.
+
+ Arguments:
+ filter_item: An object conforming to the frame filter
+ interface.
+ state: True or False, depending on desired state.
+ """
+
+ filter_item.enabled = state
+
+
+def return_list(name):
+ """Internal Worker function to return the frame filter
+ dictionary, depending on the name supplied as an argument. If the
+ name is not "all", "global" or "progspace", it is assumed to name
+ an object-file.
+
+ Arguments:
+ name: The name of the list, as specified by GDB user commands.
+
+ Returns:
+ A dictionary object for a single specified dictionary, or a
+ list containing all the items for "all"
+
+ Raises:
+ gdb.GdbError: A dictionary of that name cannot be found.
+ """
+
+ # If all dictionaries are wanted in the case of "all" we
+ # cannot return a combined dictionary as keys() may clash in
+ # between different dictionaries. As we just want all the frame
+ # filters to enable/disable them all, just return the combined
+ # items() as a chained iterator of dictionary values.
+ if name == "all":
+ glob = gdb.frame_filters.values()
+ prog = gdb.current_progspace().frame_filters.values()
+ return_iter = itertools.chain(glob, prog)
+ for objfile in gdb.objfiles():
+ return_iter = itertools.chain(return_iter, objfile.frame_filters.values())
+
+ return return_iter
+
+ if name == "global":
+ return gdb.frame_filters
+ else:
+ if name == "progspace":
+ cp = gdb.current_progspace()
+ return cp.frame_filters
+ else:
+ for objfile in gdb.objfiles():
+ if name == objfile.filename:
+ return objfile.frame_filters
+
+ msg = "Cannot find frame-filter dictionary for '" + name + "'"
+ raise gdb.GdbError(msg)
+
+
+def _sort_list():
+ """Internal Worker function to merge all known frame-filter
+ lists, prune any filters with the state set to "disabled", and
+ sort the list on the frame-filter's "priority" attribute.
+
+ Returns:
+ sorted_list: A sorted, pruned list of frame filters to
+ execute.
+ """
+
+ all_filters = return_list("all")
+ sorted_frame_filters = sorted(all_filters, key=get_priority, reverse=True)
+
+ sorted_frame_filters = filter(get_enabled, sorted_frame_filters)
+
+ return sorted_frame_filters
+
+
+def execute_frame_filters(frame, frame_low, frame_high):
+ """Internal function called from GDB that will execute the chain
+ of frame filters. Each filter is executed in priority order.
+ After the execution completes, slice the iterator to frame_low -
+ frame_high range.
+
+ Arguments:
+ frame: The initial frame.
+
+ frame_low: The low range of the slice. If this is a negative
+ integer then it indicates a backward slice (ie bt -4) which
+ counts backward from the last frame in the backtrace.
+
+ frame_high: The high range of the slice. If this is -1 then
+ it indicates all frames until the end of the stack from
+ frame_low.
+
+ Returns:
+ frame_iterator: The sliced iterator after all frame
+ filters have had a change to execute, or None if no frame
+ filters are registered.
+ """
+
+ # Get a sorted list of frame filters.
+ sorted_list = list(_sort_list())
+
+ # Check to see if there are any frame-filters. If not, just
+ # return None and let default backtrace printing occur.
+ if len(sorted_list) == 0:
+ return None
+
+ frame_iterator = FrameIterator(frame)
+
+ # Apply a basic frame decorator to all gdb.Frames. This unifies
+ # the interface. Python 3.x moved the itertools.imap
+ # functionality to map(), so check if it is available.
+ if hasattr(itertools, "imap"):
+ frame_iterator = itertools.imap(FrameDecorator, frame_iterator)
+ else:
+ frame_iterator = map(FrameDecorator, frame_iterator)
+
+ for ff in sorted_list:
+ frame_iterator = ff.filter(frame_iterator)
+
+ # Slicing
+
+ # Is this a slice from the end of the backtrace, ie bt -2?
+ if frame_low < 0:
+ count = 0
+ slice_length = abs(frame_low)
+ # We cannot use MAXLEN argument for deque as it is 2.6 onwards
+ # and some GDB versions might be < 2.6.
+ sliced = collections.deque()
+
+ for frame_item in frame_iterator:
+ if count >= slice_length:
+ sliced.popleft()
+ count = count + 1
+ sliced.append(frame_item)
+
+ return iter(sliced)
+
+ # -1 for frame_high means until the end of the backtrace. Set to
+ # None if that is the case, to indicate to itertools.islice to
+ # slice to the end of the iterator.
+ if frame_high == -1:
+ frame_high = None
+ else:
+ # As frames start from 0, add one to frame_high so islice
+ # correctly finds the end
+ frame_high = frame_high + 1
+
+ sliced = itertools.islice(frame_iterator, frame_low, frame_high)
+
+ return sliced
diff --git a/share/gdb/python/gdb/function/__init__.py b/share/gdb/python/gdb/function/__init__.py
new file mode 100644
index 0000000..34496c1
--- /dev/null
+++ b/share/gdb/python/gdb/function/__init__.py
@@ -0,0 +1,14 @@
+# Copyright (C) 2012-2023 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/>.
diff --git a/share/gdb/python/gdb/function/as_string.py b/share/gdb/python/gdb/function/as_string.py
new file mode 100644
index 0000000..4bd6579
--- /dev/null
+++ b/share/gdb/python/gdb/function/as_string.py
@@ -0,0 +1,38 @@
+# Copyright (C) 2016-2023 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/>.
+
+import gdb
+
+
+class _AsString(gdb.Function):
+ """Return the string representation of a value.
+
+ Usage: $_as_string (VALUE)
+
+ Arguments:
+
+ VALUE: any value
+
+ Returns:
+ The string representation of the value."""
+
+ def __init__(self):
+ super(_AsString, self).__init__("_as_string")
+
+ def invoke(self, val):
+ return str(val)
+
+
+_AsString()
diff --git a/share/gdb/python/gdb/function/caller_is.py b/share/gdb/python/gdb/function/caller_is.py
new file mode 100644
index 0000000..220b222
--- /dev/null
+++ b/share/gdb/python/gdb/function/caller_is.py
@@ -0,0 +1,157 @@
+# Caller-is functions.
+# Copyright (C) 2008-2023 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/>.
+
+import gdb
+import re
+
+
+class CallerIs(gdb.Function):
+ """Check the calling function's name.
+
+ Usage: $_caller_is (NAME [, NUMBER-OF-FRAMES])
+
+ Arguments:
+
+ NAME: The name of the function to search for.
+
+ NUMBER-OF-FRAMES: How many stack frames to traverse back from the currently
+ selected frame to compare with. If the value is greater than the depth of
+ the stack from that point then the result is False.
+ The default is 1.
+
+ Returns:
+ True if the function's name at the specified frame is equal to NAME."""
+
+ def __init__(self):
+ super(CallerIs, self).__init__("_caller_is")
+
+ def invoke(self, name, nframes=1):
+ if nframes < 0:
+ raise ValueError("nframes must be >= 0")
+ frame = gdb.selected_frame()
+ while nframes > 0:
+ frame = frame.older()
+ if frame is None:
+ return False
+ nframes = nframes - 1
+ return frame.name() == name.string()
+
+
+class CallerMatches(gdb.Function):
+ """Compare the calling function's name with a regexp.
+
+ Usage: $_caller_matches (REGEX [, NUMBER-OF-FRAMES])
+
+ Arguments:
+
+ REGEX: The regular expression to compare the function's name with.
+
+ NUMBER-OF-FRAMES: How many stack frames to traverse back from the currently
+ selected frame to compare with. If the value is greater than the depth of
+ the stack from that point then the result is False.
+ The default is 1.
+
+ Returns:
+ True if the function's name at the specified frame matches REGEX."""
+
+ def __init__(self):
+ super(CallerMatches, self).__init__("_caller_matches")
+
+ def invoke(self, name, nframes=1):
+ if nframes < 0:
+ raise ValueError("nframes must be >= 0")
+ frame = gdb.selected_frame()
+ while nframes > 0:
+ frame = frame.older()
+ if frame is None:
+ return False
+ nframes = nframes - 1
+ return re.match(name.string(), frame.name()) is not None
+
+
+class AnyCallerIs(gdb.Function):
+ """Check all calling function's names.
+
+ Usage: $_any_caller_is (NAME [, NUMBER-OF-FRAMES])
+
+ Arguments:
+
+ NAME: The name of the function to search for.
+
+ NUMBER-OF-FRAMES: How many stack frames to traverse back from the currently
+ selected frame to compare with. If the value is greater than the depth of
+ the stack from that point then the result is False.
+ The default is 1.
+
+ Returns:
+ True if any function's name is equal to NAME."""
+
+ def __init__(self):
+ super(AnyCallerIs, self).__init__("_any_caller_is")
+
+ def invoke(self, name, nframes=1):
+ if nframes < 0:
+ raise ValueError("nframes must be >= 0")
+ frame = gdb.selected_frame()
+ while nframes >= 0:
+ if frame.name() == name.string():
+ return True
+ frame = frame.older()
+ if frame is None:
+ return False
+ nframes = nframes - 1
+ return False
+
+
+class AnyCallerMatches(gdb.Function):
+ """Compare all calling function's names with a regexp.
+
+ Usage: $_any_caller_matches (REGEX [, NUMBER-OF-FRAMES])
+
+ Arguments:
+
+ REGEX: The regular expression to compare the function's name with.
+
+ NUMBER-OF-FRAMES: How many stack frames to traverse back from the currently
+ selected frame to compare with. If the value is greater than the depth of
+ the stack from that point then the result is False.
+ The default is 1.
+
+ Returns:
+ True if any function's name matches REGEX."""
+
+ def __init__(self):
+ super(AnyCallerMatches, self).__init__("_any_caller_matches")
+
+ def invoke(self, name, nframes=1):
+ if nframes < 0:
+ raise ValueError("nframes must be >= 0")
+ frame = gdb.selected_frame()
+ name_re = re.compile(name.string())
+ while nframes >= 0:
+ if name_re.match(frame.name()) is not None:
+ return True
+ frame = frame.older()
+ if frame is None:
+ return False
+ nframes = nframes - 1
+ return False
+
+
+CallerIs()
+CallerMatches()
+AnyCallerIs()
+AnyCallerMatches()
diff --git a/share/gdb/python/gdb/function/strfns.py b/share/gdb/python/gdb/function/strfns.py
new file mode 100644
index 0000000..7dc464b
--- /dev/null
+++ b/share/gdb/python/gdb/function/strfns.py
@@ -0,0 +1,104 @@
+# Useful gdb string convenience functions.
+# Copyright (C) 2012-2023 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/>.
+
+"""$_memeq, $_strlen, $_streq, $_regex"""
+
+import gdb
+import re
+
+
+class _MemEq(gdb.Function):
+ """$_memeq - compare bytes of memory.
+
+ Usage: $_memeq (A, B, LEN)
+
+ Returns:
+ True if LEN bytes at A and B compare equally."""
+
+ def __init__(self):
+ super(_MemEq, self).__init__("_memeq")
+
+ def invoke(self, a, b, length):
+ if length < 0:
+ raise ValueError("length must be non-negative")
+ if length == 0:
+ return True
+ # The argument(s) to vector are [low_bound,]high_bound.
+ byte_vector = gdb.lookup_type("char").vector(length - 1)
+ ptr_byte_vector = byte_vector.pointer()
+ a_ptr = a.reinterpret_cast(ptr_byte_vector)
+ b_ptr = b.reinterpret_cast(ptr_byte_vector)
+ return a_ptr.dereference() == b_ptr.dereference()
+
+
+class _StrLen(gdb.Function):
+ """$_strlen - compute string length.
+
+ Usage: $_strlen (A)
+
+ Returns:
+ Length of string A, assumed to be a string in the current language."""
+
+ def __init__(self):
+ super(_StrLen, self).__init__("_strlen")
+
+ def invoke(self, a):
+ s = a.string()
+ return len(s)
+
+
+class _StrEq(gdb.Function):
+ """$_streq - check string equality.
+
+ Usage: $_streq (A, B)
+
+ Returns:
+ True if A and B are identical strings in the current language.
+
+ Example (amd64-linux):
+ catch syscall open
+ cond $bpnum $_streq((char*) $rdi, "foo")"""
+
+ def __init__(self):
+ super(_StrEq, self).__init__("_streq")
+
+ def invoke(self, a, b):
+ return a.string() == b.string()
+
+
+class _RegEx(gdb.Function):
+ """$_regex - check if a string matches a regular expression.
+
+ Usage: $_regex (STRING, REGEX)
+
+ Returns:
+ True if string STRING (in the current language) matches the
+ regular expression REGEX."""
+
+ def __init__(self):
+ super(_RegEx, self).__init__("_regex")
+
+ def invoke(self, string, regex):
+ s = string.string()
+ r = re.compile(regex.string())
+ return bool(r.match(s))
+
+
+# GDB will import us automagically via gdb/__init__.py.
+_MemEq()
+_StrLen()
+_StrEq()
+_RegEx()
diff --git a/share/gdb/python/gdb/printer/__init__.py b/share/gdb/python/gdb/printer/__init__.py
new file mode 100644
index 0000000..b25b7ea
--- /dev/null
+++ b/share/gdb/python/gdb/printer/__init__.py
@@ -0,0 +1,14 @@
+# Copyright (C) 2014-2023 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/>.
diff --git a/share/gdb/python/gdb/printer/bound_registers.py b/share/gdb/python/gdb/printer/bound_registers.py
new file mode 100644
index 0000000..e156675
--- /dev/null
+++ b/share/gdb/python/gdb/printer/bound_registers.py
@@ -0,0 +1,40 @@
+# Pretty-printers for bounds registers.
+# Copyright (C) 2013-2023 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/>.
+
+import sys
+
+import gdb.printing
+
+
+class MpxBound128Printer:
+ """Adds size field to a mpx __gdb_builtin_type_bound128 type."""
+
+ def __init__(self, val):
+ self.val = val
+
+ def to_string(self):
+ upper = self.val["ubound"]
+ lower = self.val["lbound"]
+ size = upper - lower
+ if size > -1:
+ size = size + 1
+ result = "{lbound = %s, ubound = %s} : size %s" % (lower, upper, size)
+ return result
+
+
+gdb.printing.add_builtin_pretty_printer(
+ "mpx_bound128", "^builtin_type_bound128", MpxBound128Printer
+)
diff --git a/share/gdb/python/gdb/printing.py b/share/gdb/python/gdb/printing.py
new file mode 100644
index 0000000..d6b7b85
--- /dev/null
+++ b/share/gdb/python/gdb/printing.py
@@ -0,0 +1,285 @@
+# Pretty-printer utilities.
+# Copyright (C) 2010-2023 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/>.
+
+"""Utilities for working with pretty-printers."""
+
+import gdb
+import gdb.types
+import re
+import sys
+
+
+class PrettyPrinter(object):
+ """A basic pretty-printer.
+
+ Attributes:
+ name: A unique string among all printers for the context in which
+ it is defined (objfile, progspace, or global(gdb)), and should
+ meaningfully describe what can be pretty-printed.
+ E.g., "StringPiece" or "protobufs".
+ subprinters: An iterable object with each element having a `name'
+ attribute, and, potentially, "enabled" attribute.
+ Or this is None if there are no subprinters.
+ enabled: A boolean indicating if the printer is enabled.
+
+ Subprinters are for situations where "one" pretty-printer is actually a
+ collection of several printers. E.g., The libstdc++ pretty-printer has
+ a pretty-printer for each of several different types, based on regexps.
+ """
+
+ # While one might want to push subprinters into the subclass, it's
+ # present here to formalize such support to simplify
+ # commands/pretty_printers.py.
+
+ def __init__(self, name, subprinters=None):
+ self.name = name
+ self.subprinters = subprinters
+ self.enabled = True
+
+ def __call__(self, val):
+ # The subclass must define this.
+ raise NotImplementedError("PrettyPrinter __call__")
+
+
+class SubPrettyPrinter(object):
+ """Baseclass for sub-pretty-printers.
+
+ Sub-pretty-printers needn't use this, but it formalizes what's needed.
+
+ Attributes:
+ name: The name of the subprinter.
+ enabled: A boolean indicating if the subprinter is enabled.
+ """
+
+ def __init__(self, name):
+ self.name = name
+ self.enabled = True
+
+
+def register_pretty_printer(obj, printer, replace=False):
+ """Register pretty-printer PRINTER with OBJ.
+
+ The printer is added to the front of the search list, thus one can override
+ an existing printer if one needs to. Use a different name when overriding
+ an existing printer, otherwise an exception will be raised; multiple
+ printers with the same name are disallowed.
+
+ Arguments:
+ obj: Either an objfile, progspace, or None (in which case the printer
+ is registered globally).
+ printer: Either a function of one argument (old way) or any object
+ which has attributes: name, enabled, __call__.
+ replace: If True replace any existing copy of the printer.
+ Otherwise if the printer already exists raise an exception.
+
+ Returns:
+ Nothing.
+
+ Raises:
+ TypeError: A problem with the type of the printer.
+ ValueError: The printer's name contains a semicolon ";".
+ RuntimeError: A printer with the same name is already registered.
+
+ If the caller wants the printer to be listable and disableable, it must
+ follow the PrettyPrinter API. This applies to the old way (functions) too.
+ If printer is an object, __call__ is a method of two arguments:
+ self, and the value to be pretty-printed. See PrettyPrinter.
+ """
+
+ # Watch for both __name__ and name.
+ # Functions get the former for free, but we don't want to use an
+ # attribute named __foo__ for pretty-printers-as-objects.
+ # If printer has both, we use `name'.
+ if not hasattr(printer, "__name__") and not hasattr(printer, "name"):
+ raise TypeError("printer missing attribute: name")
+ if hasattr(printer, "name") and not hasattr(printer, "enabled"):
+ raise TypeError("printer missing attribute: enabled")
+ if not hasattr(printer, "__call__"):
+ raise TypeError("printer missing attribute: __call__")
+
+ if hasattr(printer, "name"):
+ name = printer.name
+ else:
+ name = printer.__name__
+ if obj is None or obj is gdb:
+ if gdb.parameter("verbose"):
+ gdb.write("Registering global %s pretty-printer ...\n" % name)
+ obj = gdb
+ else:
+ if gdb.parameter("verbose"):
+ gdb.write(
+ "Registering %s pretty-printer for %s ...\n" % (name, obj.filename)
+ )
+
+ # Printers implemented as functions are old-style. In order to not risk
+ # breaking anything we do not check __name__ here.
+ if hasattr(printer, "name"):
+ if not isinstance(printer.name, str):
+ raise TypeError("printer name is not a string")
+ # If printer provides a name, make sure it doesn't contain ";".
+ # Semicolon is used by the info/enable/disable pretty-printer commands
+ # to delimit subprinters.
+ if printer.name.find(";") >= 0:
+ raise ValueError("semicolon ';' in printer name")
+ # Also make sure the name is unique.
+ # Alas, we can't do the same for functions and __name__, they could
+ # all have a canonical name like "lookup_function".
+ # PERF: gdb records printers in a list, making this inefficient.
+ i = 0
+ for p in obj.pretty_printers:
+ if hasattr(p, "name") and p.name == printer.name:
+ if replace:
+ del obj.pretty_printers[i]
+ break
+ else:
+ raise RuntimeError(
+ "pretty-printer already registered: %s" % printer.name
+ )
+ i = i + 1
+
+ obj.pretty_printers.insert(0, printer)
+
+
+class RegexpCollectionPrettyPrinter(PrettyPrinter):
+ """Class for implementing a collection of regular-expression based pretty-printers.
+
+ Intended usage:
+
+ pretty_printer = RegexpCollectionPrettyPrinter("my_library")
+ pretty_printer.add_printer("myclass1", "^myclass1$", MyClass1Printer)
+ ...
+ pretty_printer.add_printer("myclassN", "^myclassN$", MyClassNPrinter)
+ register_pretty_printer(obj, pretty_printer)
+ """
+
+ class RegexpSubprinter(SubPrettyPrinter):
+ def __init__(self, name, regexp, gen_printer):
+ super(RegexpCollectionPrettyPrinter.RegexpSubprinter, self).__init__(name)
+ self.regexp = regexp
+ self.gen_printer = gen_printer
+ self.compiled_re = re.compile(regexp)
+
+ def __init__(self, name):
+ super(RegexpCollectionPrettyPrinter, self).__init__(name, [])
+
+ def add_printer(self, name, regexp, gen_printer):
+ """Add a printer to the list.
+
+ The printer is added to the end of the list.
+
+ Arguments:
+ name: The name of the subprinter.
+ regexp: The regular expression, as a string.
+ gen_printer: A function/method that given a value returns an
+ object to pretty-print it.
+
+ Returns:
+ Nothing.
+ """
+
+ # NOTE: A previous version made the name of each printer the regexp.
+ # That makes it awkward to pass to the enable/disable commands (it's
+ # cumbersome to make a regexp of a regexp). So now the name is a
+ # separate parameter.
+
+ self.subprinters.append(self.RegexpSubprinter(name, regexp, gen_printer))
+
+ def __call__(self, val):
+ """Lookup the pretty-printer for the provided value."""
+
+ # Get the type name.
+ typename = gdb.types.get_basic_type(val.type).tag
+ if not typename:
+ typename = val.type.name
+ if not typename:
+ return None
+
+ # Iterate over table of type regexps to determine
+ # if a printer is registered for that type.
+ # Return an instantiation of the printer if found.
+ for printer in self.subprinters:
+ if printer.enabled and printer.compiled_re.search(typename):
+ return printer.gen_printer(val)
+
+ # Cannot find a pretty printer. Return None.
+ return None
+
+
+# A helper class for printing enum types. This class is instantiated
+# with a list of enumerators to print a particular Value.
+class _EnumInstance:
+ def __init__(self, enumerators, val):
+ self.enumerators = enumerators
+ self.val = val
+
+ def to_string(self):
+ flag_list = []
+ v = int(self.val)
+ any_found = False
+ for (e_name, e_value) in self.enumerators:
+ if v & e_value != 0:
+ flag_list.append(e_name)
+ v = v & ~e_value
+ any_found = True
+ if not any_found or v != 0:
+ # Leftover value.
+ flag_list.append("<unknown: 0x%x>" % v)
+ return "0x%x [%s]" % (int(self.val), " | ".join(flag_list))
+
+
+class FlagEnumerationPrinter(PrettyPrinter):
+ """A pretty-printer which can be used to print a flag-style enumeration.
+ A flag-style enumeration is one where the enumerators are or'd
+ together to create values. The new printer will print these
+ symbolically using '|' notation. The printer must be registered
+ manually. This printer is most useful when an enum is flag-like,
+ but has some overlap. GDB's built-in printing will not handle
+ this case, but this printer will attempt to."""
+
+ def __init__(self, enum_type):
+ super(FlagEnumerationPrinter, self).__init__(enum_type)
+ self.initialized = False
+
+ def __call__(self, val):
+ if not self.initialized:
+ self.initialized = True
+ flags = gdb.lookup_type(self.name)
+ self.enumerators = []
+ for field in flags.fields():
+ self.enumerators.append((field.name, field.enumval))
+ # Sorting the enumerators by value usually does the right
+ # thing.
+ self.enumerators.sort(key=lambda x: x[1])
+
+ if self.enabled:
+ return _EnumInstance(self.enumerators, val)
+ else:
+ return None
+
+
+# Builtin pretty-printers.
+# The set is defined as empty, and files in printing/*.py add their printers
+# to this with add_builtin_pretty_printer.
+
+_builtin_pretty_printers = RegexpCollectionPrettyPrinter("builtin")
+
+register_pretty_printer(None, _builtin_pretty_printers)
+
+# Add a builtin pretty-printer.
+
+
+def add_builtin_pretty_printer(name, regexp, printer):
+ _builtin_pretty_printers.add_printer(name, regexp, printer)
diff --git a/share/gdb/python/gdb/prompt.py b/share/gdb/python/gdb/prompt.py
new file mode 100644
index 0000000..9bbfcb9
--- /dev/null
+++ b/share/gdb/python/gdb/prompt.py
@@ -0,0 +1,163 @@
+# Extended prompt utilities.
+# Copyright (C) 2011-2023 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/>.
+
+""" Extended prompt library functions."""
+
+import gdb
+import os
+
+
+def _prompt_pwd(ignore):
+ "The current working directory."
+ return os.getcwd()
+
+
+def _prompt_object_attr(func, what, attr, nattr):
+ """Internal worker for fetching GDB attributes."""
+ if attr is None:
+ attr = nattr
+ try:
+ obj = func()
+ except gdb.error:
+ return "<no %s>" % what
+ if hasattr(obj, attr):
+ result = getattr(obj, attr)
+ if callable(result):
+ result = result()
+ return result
+ else:
+ return "<no attribute %s on current %s>" % (attr, what)
+
+
+def _prompt_frame(attr):
+ "The selected frame; an argument names a frame parameter."
+ return _prompt_object_attr(gdb.selected_frame, "frame", attr, "name")
+
+
+def _prompt_thread(attr):
+ "The selected thread; an argument names a thread parameter."
+ return _prompt_object_attr(gdb.selected_thread, "thread", attr, "num")
+
+
+def _prompt_version(attr):
+ "The version of GDB."
+ return gdb.VERSION
+
+
+def _prompt_esc(attr):
+ "The ESC character."
+ return "\033"
+
+
+def _prompt_bs(attr):
+ "A backslash."
+ return "\\"
+
+
+def _prompt_n(attr):
+ "A newline."
+ return "\n"
+
+
+def _prompt_r(attr):
+ "A carriage return."
+ return "\r"
+
+
+def _prompt_param(attr):
+ "A parameter's value; the argument names the parameter."
+ return gdb.parameter(attr)
+
+
+def _prompt_noprint_begin(attr):
+ "Begins a sequence of non-printing characters."
+ return "\001"
+
+
+def _prompt_noprint_end(attr):
+ "Ends a sequence of non-printing characters."
+ return "\002"
+
+
+prompt_substitutions = {
+ "e": _prompt_esc,
+ "\\": _prompt_bs,
+ "n": _prompt_n,
+ "r": _prompt_r,
+ "v": _prompt_version,
+ "w": _prompt_pwd,
+ "f": _prompt_frame,
+ "t": _prompt_thread,
+ "p": _prompt_param,
+ "[": _prompt_noprint_begin,
+ "]": _prompt_noprint_end,
+}
+
+
+def prompt_help():
+ """Generate help dynamically from the __doc__ strings of attribute
+ functions."""
+
+ result = ""
+ keys = sorted(prompt_substitutions.keys())
+ for key in keys:
+ result += " \\%s\t%s\n" % (key, prompt_substitutions[key].__doc__)
+ result += """
+A substitution can be used in a simple form, like "\\f".
+An argument can also be passed to it, like "\\f{name}".
+The meaning of the argument depends on the particular substitution."""
+ return result
+
+
+def substitute_prompt(prompt):
+ "Perform substitutions on PROMPT."
+
+ result = ""
+ plen = len(prompt)
+ i = 0
+ while i < plen:
+ if prompt[i] == "\\":
+ i = i + 1
+ if i >= plen:
+ break
+ cmdch = prompt[i]
+
+ if cmdch in prompt_substitutions:
+ cmd = prompt_substitutions[cmdch]
+
+ if i + 1 < plen and prompt[i + 1] == "{":
+ j = i + 1
+ while j < plen and prompt[j] != "}":
+ j = j + 1
+ # Just ignore formatting errors.
+ if j >= plen or prompt[j] != "}":
+ arg = None
+ else:
+ arg = prompt[i + 2 : j]
+ i = j
+ else:
+ arg = None
+ result += str(cmd(arg))
+ else:
+ # Unrecognized escapes are turned into the escaped
+ # character itself.
+ result += prompt[i]
+ else:
+ result += prompt[i]
+
+ i = i + 1
+
+ return result
diff --git a/share/gdb/python/gdb/styling.py b/share/gdb/python/gdb/styling.py
new file mode 100644
index 0000000..8540ab2
--- /dev/null
+++ b/share/gdb/python/gdb/styling.py
@@ -0,0 +1,101 @@
+# Styling related hooks.
+# Copyright (C) 2010-2023 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/>.
+
+"""Utilities for styling."""
+
+import gdb
+
+try:
+ from pygments import formatters, lexers, highlight
+ from pygments.token import Error, Comment, Text
+ from pygments.filters import TokenMergeFilter
+
+ _formatter = None
+
+ def get_formatter():
+ global _formatter
+ if _formatter is None:
+ _formatter = formatters.TerminalFormatter()
+ return _formatter
+
+ def colorize(filename, contents):
+ # Don't want any errors.
+ try:
+ lexer = lexers.get_lexer_for_filename(filename, stripnl=False)
+ formatter = get_formatter()
+ return highlight(contents, lexer, formatter).encode(
+ gdb.host_charset(), "backslashreplace"
+ )
+ except:
+ return None
+
+ class HandleNasmComments(TokenMergeFilter):
+ @staticmethod
+ def fix_comments(lexer, stream):
+ in_comment = False
+ for ttype, value in stream:
+ if ttype is Error and value == "#":
+ in_comment = True
+ if in_comment:
+ if ttype is Text and value == "\n":
+ in_comment = False
+ else:
+ ttype = Comment.Single
+ yield ttype, value
+
+ def filter(self, lexer, stream):
+ f = HandleNasmComments.fix_comments
+ return super().filter(lexer, f(lexer, stream))
+
+ _asm_lexers = {}
+
+ def __get_asm_lexer(gdbarch):
+ lexer_type = "asm"
+ try:
+ # For an i386 based architecture, in 'intel' mode, use the nasm
+ # lexer.
+ flavor = gdb.parameter("disassembly-flavor")
+ if flavor == "intel" and gdbarch.name()[:4] == "i386":
+ lexer_type = "nasm"
+ except:
+ # If GDB is built without i386 support then attempting to fetch
+ # the 'disassembly-flavor' parameter will throw an error, which we
+ # ignore.
+ pass
+
+ global _asm_lexers
+ if lexer_type not in _asm_lexers:
+ _asm_lexers[lexer_type] = lexers.get_lexer_by_name(lexer_type)
+ _asm_lexers[lexer_type].add_filter(HandleNasmComments())
+ _asm_lexers[lexer_type].add_filter("raiseonerror")
+ return _asm_lexers[lexer_type]
+
+ def colorize_disasm(content, gdbarch):
+ # Don't want any errors.
+ try:
+ lexer = __get_asm_lexer(gdbarch)
+ formatter = get_formatter()
+ return highlight(content, lexer, formatter).rstrip().encode()
+ except:
+ return content
+
+except:
+
+ def colorize(filename, contents):
+ return None
+
+ def colorize_disasm(content, gdbarch):
+ return None
diff --git a/share/gdb/python/gdb/types.py b/share/gdb/python/gdb/types.py
new file mode 100644
index 0000000..dcec301
--- /dev/null
+++ b/share/gdb/python/gdb/types.py
@@ -0,0 +1,183 @@
+# Type utilities.
+# Copyright (C) 2010-2023 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/>.
+
+"""Utilities for working with gdb.Types."""
+
+import gdb
+
+
+def get_basic_type(type_):
+ """Return the "basic" type of a type.
+
+ Arguments:
+ type_: The type to reduce to its basic type.
+
+ Returns:
+ type_ with const/volatile is stripped away,
+ and typedefs/references converted to the underlying type.
+ """
+
+ while (
+ type_.code == gdb.TYPE_CODE_REF
+ or type_.code == gdb.TYPE_CODE_RVALUE_REF
+ or type_.code == gdb.TYPE_CODE_TYPEDEF
+ ):
+ if type_.code == gdb.TYPE_CODE_REF or type_.code == gdb.TYPE_CODE_RVALUE_REF:
+ type_ = type_.target()
+ else:
+ type_ = type_.strip_typedefs()
+ return type_.unqualified()
+
+
+def has_field(type_, field):
+ """Return True if a type has the specified field.
+
+ Arguments:
+ type_: The type to examine.
+ It must be one of gdb.TYPE_CODE_STRUCT, gdb.TYPE_CODE_UNION.
+ field: The name of the field to look up.
+
+ Returns:
+ True if the field is present either in type_ or any baseclass.
+
+ Raises:
+ TypeError: The type is not a struct or union.
+ """
+
+ type_ = get_basic_type(type_)
+ if type_.code != gdb.TYPE_CODE_STRUCT and type_.code != gdb.TYPE_CODE_UNION:
+ raise TypeError("not a struct or union")
+ for f in type_.fields():
+ if f.is_base_class:
+ if has_field(f.type, field):
+ return True
+ else:
+ # NOTE: f.name could be None
+ if f.name == field:
+ return True
+ return False
+
+
+def make_enum_dict(enum_type):
+ """Return a dictionary from a program's enum type.
+
+ Arguments:
+ enum_type: The enum to compute the dictionary for.
+
+ Returns:
+ The dictionary of the enum.
+
+ Raises:
+ TypeError: The type is not an enum.
+ """
+
+ if enum_type.code != gdb.TYPE_CODE_ENUM:
+ raise TypeError("not an enum type")
+ enum_dict = {}
+ for field in enum_type.fields():
+ # The enum's value is stored in "enumval".
+ enum_dict[field.name] = field.enumval
+ return enum_dict
+
+
+def deep_items(type_):
+ """Return an iterator that recursively traverses anonymous fields.
+
+ Arguments:
+ type_: The type to traverse. It should be one of
+ gdb.TYPE_CODE_STRUCT or gdb.TYPE_CODE_UNION.
+
+ Returns:
+ an iterator similar to gdb.Type.iteritems(), i.e., it returns
+ pairs of key, value, but for any anonymous struct or union
+ field that field is traversed recursively, depth-first.
+ """
+ for k, v in type_.iteritems():
+ if k:
+ yield k, v
+ else:
+ for i in deep_items(v.type):
+ yield i
+
+
+class TypePrinter(object):
+ """The base class for type printers.
+
+ Instances of this type can be used to substitute type names during
+ 'ptype'.
+
+ A type printer must have at least 'name' and 'enabled' attributes,
+ and supply an 'instantiate' method.
+
+ The 'instantiate' method must either return None, or return an
+ object which has a 'recognize' method. This method must accept a
+ gdb.Type argument and either return None, meaning that the type
+ was not recognized, or a string naming the type.
+ """
+
+ def __init__(self, name):
+ self.name = name
+ self.enabled = True
+
+ def instantiate(self):
+ return None
+
+
+# Helper function for computing the list of type recognizers.
+def _get_some_type_recognizers(result, plist):
+ for printer in plist:
+ if printer.enabled:
+ inst = printer.instantiate()
+ if inst is not None:
+ result.append(inst)
+ return None
+
+
+def get_type_recognizers():
+ "Return a list of the enabled type recognizers for the current context."
+ result = []
+
+ # First try the objfiles.
+ for objfile in gdb.objfiles():
+ _get_some_type_recognizers(result, objfile.type_printers)
+ # Now try the program space.
+ _get_some_type_recognizers(result, gdb.current_progspace().type_printers)
+ # Finally, globals.
+ _get_some_type_recognizers(result, gdb.type_printers)
+
+ return result
+
+
+def apply_type_recognizers(recognizers, type_obj):
+ """Apply the given list of type recognizers to the type TYPE_OBJ.
+ If any recognizer in the list recognizes TYPE_OBJ, returns the name
+ given by the recognizer. Otherwise, this returns None."""
+ for r in recognizers:
+ result = r.recognize(type_obj)
+ if result is not None:
+ return result
+ return None
+
+
+def register_type_printer(locus, printer):
+ """Register a type printer.
+ PRINTER is the type printer instance.
+ LOCUS is either an objfile, a program space, or None, indicating
+ global registration."""
+
+ if locus is None:
+ locus = gdb
+ locus.type_printers.insert(0, printer)
diff --git a/share/gdb/python/gdb/unwinder.py b/share/gdb/python/gdb/unwinder.py
new file mode 100644
index 0000000..a854d8d
--- /dev/null
+++ b/share/gdb/python/gdb/unwinder.py
@@ -0,0 +1,95 @@
+# Copyright (C) 2015-2023 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/>.
+
+"""Unwinder class and register_unwinder function."""
+
+import gdb
+
+
+class Unwinder(object):
+ """Base class (or a template) for frame unwinders written in Python.
+
+ An unwinder has a single method __call__ and the attributes
+ described below.
+
+ Attributes:
+ name: The name of the unwinder.
+ enabled: A boolean indicating whether the unwinder is enabled.
+ """
+
+ def __init__(self, name):
+ """Constructor.
+
+ Args:
+ name: An identifying name for the unwinder.
+ """
+ self.name = name
+ self.enabled = True
+
+ def __call__(self, pending_frame):
+ """GDB calls this method to unwind a frame.
+
+ Arguments:
+ pending_frame: gdb.PendingFrame instance.
+
+ Returns:
+ gdb.UnwindInfo instance.
+ """
+ raise NotImplementedError("Unwinder __call__.")
+
+
+def register_unwinder(locus, unwinder, replace=False):
+ """Register unwinder in given locus.
+
+ The unwinder is prepended to the locus's unwinders list. Unwinder
+ name should be unique.
+
+ Arguments:
+ locus: Either an objfile, progspace, or None (in which case
+ the unwinder is registered globally).
+ unwinder: An object of a gdb.Unwinder subclass
+ replace: If True, replaces existing unwinder with the same name.
+ Otherwise, raises exception if unwinder with the same
+ name already exists.
+
+ Returns:
+ Nothing.
+
+ Raises:
+ RuntimeError: Unwinder name is not unique
+ TypeError: Bad locus type
+ """
+ if locus is None:
+ if gdb.parameter("verbose"):
+ gdb.write("Registering global %s unwinder ...\n" % unwinder.name)
+ locus = gdb
+ elif isinstance(locus, gdb.Objfile) or isinstance(locus, gdb.Progspace):
+ if gdb.parameter("verbose"):
+ gdb.write(
+ "Registering %s unwinder for %s ...\n" % (unwinder.name, locus.filename)
+ )
+ else:
+ raise TypeError("locus should be gdb.Objfile or gdb.Progspace or None")
+
+ i = 0
+ for needle in locus.frame_unwinders:
+ if needle.name == unwinder.name:
+ if replace:
+ del locus.frame_unwinders[i]
+ else:
+ raise RuntimeError("Unwinder %s already exists." % unwinder.name)
+ i += 1
+ locus.frame_unwinders.insert(0, unwinder)
+ gdb.invalidate_cached_frames()
diff --git a/share/gdb/python/gdb/xmethod.py b/share/gdb/python/gdb/xmethod.py
new file mode 100644
index 0000000..ab6cd28
--- /dev/null
+++ b/share/gdb/python/gdb/xmethod.py
@@ -0,0 +1,274 @@
+# Python side of the support for xmethods.
+# Copyright (C) 2013-2023 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/>.
+
+"""Utilities for defining xmethods"""
+
+import gdb
+import re
+import sys
+
+
+class XMethod(object):
+ """Base class (or a template) for an xmethod description.
+
+ Currently, the description requires only the 'name' and 'enabled'
+ attributes. Description objects are managed by 'XMethodMatcher'
+ objects (see below). Note that this is only a template for the
+ interface of the XMethodMatcher.methods objects. One could use
+ this class or choose to use an object which supports this exact same
+ interface. Also, an XMethodMatcher can choose not use it 'methods'
+ attribute. In such cases this class (or an equivalent) is not used.
+
+ Attributes:
+ name: The name of the xmethod.
+ enabled: A boolean indicating if the xmethod is enabled.
+ """
+
+ def __init__(self, name):
+ self.name = name
+ self.enabled = True
+
+
+class XMethodMatcher(object):
+ """Abstract base class for matching an xmethod.
+
+ When looking for xmethods, GDB invokes the `match' method of a
+ registered xmethod matcher to match the object type and method name.
+ The `match' method in concrete classes derived from this class should
+ return an `XMethodWorker' object, or a list of `XMethodWorker'
+ objects if there is a match (see below for 'XMethodWorker' class).
+
+ Attributes:
+ name: The name of the matcher.
+ enabled: A boolean indicating if the matcher is enabled.
+ methods: A sequence of objects of type 'XMethod', or objects
+ which have at least the attributes of an 'XMethod' object.
+ This list is used by the 'enable'/'disable'/'info' commands to
+ enable/disable/list the xmethods registered with GDB. See
+ the 'match' method below to know how this sequence is used.
+ This attribute is None if the matcher chooses not have any
+ xmethods managed by it.
+ """
+
+ def __init__(self, name):
+ """
+ Args:
+ name: An identifying name for the xmethod or the group of
+ xmethods returned by the `match' method.
+ """
+ self.name = name
+ self.enabled = True
+ self.methods = None
+
+ def match(self, class_type, method_name):
+ """Match class type and method name.
+
+ In derived classes, it should return an XMethodWorker object, or a
+ sequence of 'XMethodWorker' objects. Only those xmethod workers
+ whose corresponding 'XMethod' descriptor object is enabled should be
+ returned.
+
+ Args:
+ class_type: The class type (gdb.Type object) to match.
+ method_name: The name (string) of the method to match.
+ """
+ raise NotImplementedError("XMethodMatcher match")
+
+
+class XMethodWorker(object):
+ """Base class for all xmethod workers defined in Python.
+
+ An xmethod worker is an object which matches the method arguments, and
+ invokes the method when GDB wants it to. Internally, GDB first invokes the
+ 'get_arg_types' method to perform overload resolution. If GDB selects to
+ invoke this Python xmethod, then it invokes it via the overridden
+ '__call__' method. The 'get_result_type' method is used to implement
+ 'ptype' on the xmethod.
+
+ Derived classes should override the 'get_arg_types', 'get_result_type'
+ and '__call__' methods.
+ """
+
+ def get_arg_types(self):
+ """Return arguments types of an xmethod.
+
+ A sequence of gdb.Type objects corresponding to the arguments of the
+ xmethod are returned. If the xmethod takes no arguments, then 'None'
+ or an empty sequence is returned. If the xmethod takes only a single
+ argument, then a gdb.Type object or a sequence with a single gdb.Type
+ element is returned.
+ """
+ raise NotImplementedError("XMethodWorker get_arg_types")
+
+ def get_result_type(self, *args):
+ """Return the type of the result of the xmethod.
+
+ Args:
+ args: Arguments to the method. Each element of the tuple is a
+ gdb.Value object. The first element is the 'this' pointer
+ value. These are the same arguments passed to '__call__'.
+
+ Returns:
+ A gdb.Type object representing the type of the result of the
+ xmethod.
+ """
+ raise NotImplementedError("XMethodWorker get_result_type")
+
+ def __call__(self, *args):
+ """Invoke the xmethod.
+
+ Args:
+ args: Arguments to the method. Each element of the tuple is a
+ gdb.Value object. The first element is the 'this' pointer
+ value.
+
+ Returns:
+ A gdb.Value corresponding to the value returned by the xmethod.
+ Returns 'None' if the method does not return anything.
+ """
+ raise NotImplementedError("XMethodWorker __call__")
+
+
+class SimpleXMethodMatcher(XMethodMatcher):
+ """A utility class to implement simple xmethod mathers and workers.
+
+ See the __init__ method below for information on how instances of this
+ class can be used.
+
+ For simple classes and methods, one can choose to use this class. For
+ complex xmethods, which need to replace/implement template methods on
+ possibly template classes, one should implement their own xmethod
+ matchers and workers. See py-xmethods.py in testsuite/gdb.python
+ directory of the GDB source tree for examples.
+ """
+
+ class SimpleXMethodWorker(XMethodWorker):
+ def __init__(self, method_function, arg_types):
+ self._arg_types = arg_types
+ self._method_function = method_function
+
+ def get_arg_types(self):
+ return self._arg_types
+
+ def __call__(self, *args):
+ return self._method_function(*args)
+
+ def __init__(
+ self, name, class_matcher, method_matcher, method_function, *arg_types
+ ):
+ """
+ Args:
+ name: Name of the xmethod matcher.
+ class_matcher: A regular expression used to match the name of the
+ class whose method this xmethod is implementing/replacing.
+ method_matcher: A regular expression used to match the name of the
+ method this xmethod is implementing/replacing.
+ method_function: A Python callable which would be called via the
+ 'invoke' method of the worker returned by the objects of this
+ class. This callable should accept the object (*this) as the
+ first argument followed by the rest of the arguments to the
+ method. All arguments to this function should be gdb.Value
+ objects.
+ arg_types: The gdb.Type objects corresponding to the arguments that
+ this xmethod takes. It can be None, or an empty sequence,
+ or a single gdb.Type object, or a sequence of gdb.Type objects.
+ """
+ XMethodMatcher.__init__(self, name)
+ assert callable(method_function), (
+ "The 'method_function' argument to 'SimpleXMethodMatcher' "
+ "__init__ method should be a callable."
+ )
+ self._method_function = method_function
+ self._class_matcher = class_matcher
+ self._method_matcher = method_matcher
+ self._arg_types = arg_types
+
+ def match(self, class_type, method_name):
+ cm = re.match(self._class_matcher, str(class_type.unqualified().tag))
+ mm = re.match(self._method_matcher, method_name)
+ if cm and mm:
+ return SimpleXMethodMatcher.SimpleXMethodWorker(
+ self._method_function, self._arg_types
+ )
+
+
+# A helper function for register_xmethod_matcher which returns an error
+# object if MATCHER is not having the requisite attributes in the proper
+# format.
+
+
+def _validate_xmethod_matcher(matcher):
+ if not hasattr(matcher, "match"):
+ return TypeError("Xmethod matcher is missing method: match")
+ if not hasattr(matcher, "name"):
+ return TypeError("Xmethod matcher is missing attribute: name")
+ if not hasattr(matcher, "enabled"):
+ return TypeError("Xmethod matcher is missing attribute: enabled")
+ if not isinstance(matcher.name, str):
+ return TypeError("Attribute 'name' of xmethod matcher is not a " "string")
+ if matcher.name.find(";") >= 0:
+ return ValueError("Xmethod matcher name cannot contain ';' in it")
+
+
+# A helper function for register_xmethod_matcher which looks up an
+# xmethod matcher with NAME in LOCUS. Returns the index of the xmethod
+# matcher in 'xmethods' sequence attribute of the LOCUS. If NAME is not
+# found in LOCUS, then -1 is returned.
+
+
+def _lookup_xmethod_matcher(locus, name):
+ for i in range(0, len(locus.xmethods)):
+ if locus.xmethods[i].name == name:
+ return i
+ return -1
+
+
+def register_xmethod_matcher(locus, matcher, replace=False):
+ """Registers a xmethod matcher MATCHER with a LOCUS.
+
+ Arguments:
+ locus: The locus in which the xmethods should be registered.
+ It can be 'None' to indicate that the xmethods should be
+ registered globally. Or, it could be a gdb.Objfile or a
+ gdb.Progspace object in which the xmethods should be
+ registered.
+ matcher: The xmethod matcher to register with the LOCUS. It
+ should be an instance of 'XMethodMatcher' class.
+ replace: If True, replace any existing xmethod matcher with the
+ same name in the locus. Otherwise, if a matcher with the same name
+ exists in the locus, raise an exception.
+ """
+ err = _validate_xmethod_matcher(matcher)
+ if err:
+ raise err
+ if not locus:
+ locus = gdb
+ if locus == gdb:
+ locus_name = "global"
+ else:
+ locus_name = locus.filename
+ index = _lookup_xmethod_matcher(locus, matcher.name)
+ if index >= 0:
+ if replace:
+ del locus.xmethods[index]
+ else:
+ raise RuntimeError(
+ "Xmethod matcher already registered with "
+ "%s: %s" % (locus_name, matcher.name)
+ )
+ if gdb.parameter("verbose"):
+ gdb.write("Registering xmethod matcher '%s' with %s' ...\n")
+ locus.xmethods.insert(0, matcher)
diff --git a/share/gdb/syscalls/aarch64-linux.xml b/share/gdb/syscalls/aarch64-linux.xml
new file mode 100644
index 0000000..e1cf148
--- /dev/null
+++ b/share/gdb/syscalls/aarch64-linux.xml
@@ -0,0 +1,269 @@
+<?xml version="1.0"?>
+<!DOCTYPE syscalls_info SYSTEM "gdb-syscalls.dtd">
+<!-- Copyright (C) 2015-2023 Free Software Foundation, Inc.
+
+ Copying and distribution of this file, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved. This file is offered as-is,
+ without any warranty. -->
+<syscalls_info>
+ <syscall name="io_setup" number="0"/>
+ <syscall name="io_destroy" number="1"/>
+ <syscall name="io_submit" number="2"/>
+ <syscall name="io_cancel" number="3"/>
+ <syscall name="io_getevents" number="4"/>
+ <syscall name="setxattr" number="5" groups="file"/>
+ <syscall name="lsetxattr" number="6" groups="file"/>
+ <syscall name="fsetxattr" number="7" groups="descriptor"/>
+ <syscall name="getxattr" number="8" groups="file"/>
+ <syscall name="lgetxattr" number="9" groups="file"/>
+ <syscall name="fgetxattr" number="10" groups="descriptor"/>
+ <syscall name="listxattr" number="11" groups="file"/>
+ <syscall name="llistxattr" number="12" groups="file"/>
+ <syscall name="flistxattr" number="13" groups="descriptor"/>
+ <syscall name="removexattr" number="14" groups="file"/>
+ <syscall name="lremovexattr" number="15" groups="file"/>
+ <syscall name="fremovexattr" number="16" groups="descriptor"/>
+ <syscall name="getcwd" number="17" groups="file"/>
+ <syscall name="lookup_dcookie" number="18"/>
+ <syscall name="eventfd2" number="19" groups="descriptor"/>
+ <syscall name="epoll_create1" number="20" groups="descriptor"/>
+ <syscall name="epoll_ctl" number="21" groups="descriptor"/>
+ <syscall name="epoll_pwait" number="22" groups="descriptor"/>
+ <syscall name="dup" number="23" groups="descriptor"/>
+ <syscall name="dup3" number="24" groups="descriptor"/>
+ <syscall name="fcntl" number="25" groups="descriptor"/>
+ <syscall name="inotify_init1" number="26" groups="descriptor"/>
+ <syscall name="inotify_add_watch" number="27" groups="descriptor"/>
+ <syscall name="inotify_rm_watch" number="28" groups="descriptor"/>
+ <syscall name="ioctl" number="29" groups="descriptor"/>
+ <syscall name="ioprio_set" number="30"/>
+ <syscall name="ioprio_get" number="31"/>
+ <syscall name="flock" number="32" groups="descriptor"/>
+ <syscall name="mknodat" number="33" groups="descriptor,file"/>
+ <syscall name="mkdirat" number="34" groups="descriptor,file"/>
+ <syscall name="unlinkat" number="35" groups="descriptor,file"/>
+ <syscall name="symlinkat" number="36" groups="descriptor,file"/>
+ <syscall name="linkat" number="37" groups="descriptor,file"/>
+ <syscall name="renameat" number="38" groups="descriptor,file"/>
+ <syscall name="umount2" number="39" groups="file"/>
+ <syscall name="mount" number="40" groups="file"/>
+ <syscall name="pivot_root" number="41" groups="file"/>
+ <syscall name="nfsservctl" number="42"/>
+ <syscall name="statfs" number="43" groups="file"/>
+ <syscall name="fstatfs" number="44" groups="descriptor"/>
+ <syscall name="truncate" number="45" groups="file"/>
+ <syscall name="ftruncate" number="46" groups="descriptor"/>
+ <syscall name="fallocate" number="47" groups="descriptor"/>
+ <syscall name="faccessat" number="48" groups="descriptor,file"/>
+ <syscall name="chdir" number="49" groups="file"/>
+ <syscall name="fchdir" number="50" groups="descriptor"/>
+ <syscall name="chroot" number="51" groups="file"/>
+ <syscall name="fchmod" number="52" groups="descriptor"/>
+ <syscall name="fchmodat" number="53" groups="descriptor,file"/>
+ <syscall name="fchownat" number="54" groups="descriptor,file"/>
+ <syscall name="fchown" number="55" groups="descriptor"/>
+ <syscall name="openat" number="56" groups="descriptor,file"/>
+ <syscall name="close" number="57" groups="descriptor"/>
+ <syscall name="vhangup" number="58"/>
+ <syscall name="pipe2" number="59" groups="descriptor"/>
+ <syscall name="quotactl" number="60" groups="file"/>
+ <syscall name="getdents64" number="61" groups="descriptor"/>
+ <syscall name="lseek" number="62" groups="descriptor"/>
+ <syscall name="read" number="63" groups="descriptor"/>
+ <syscall name="write" number="64" groups="descriptor"/>
+ <syscall name="readv" number="65" groups="descriptor"/>
+ <syscall name="writev" number="66" groups="descriptor"/>
+ <syscall name="pread64" number="67" groups="descriptor"/>
+ <syscall name="pwrite64" number="68" groups="descriptor"/>
+ <syscall name="preadv" number="69" groups="descriptor"/>
+ <syscall name="pwritev" number="70" groups="descriptor"/>
+ <syscall name="sendfile" number="71" groups="descriptor,network"/>
+ <syscall name="pselect6" number="72" groups="descriptor"/>
+ <syscall name="ppoll" number="73" groups="descriptor"/>
+ <syscall name="signalfd4" number="74" groups="descriptor,signal"/>
+ <syscall name="vmsplice" number="75" groups="descriptor"/>
+ <syscall name="splice" number="76" groups="descriptor"/>
+ <syscall name="tee" number="77" groups="descriptor"/>
+ <syscall name="readlinkat" number="78" groups="descriptor,file"/>
+ <syscall name="newfstatat" number="79" groups="descriptor,file"/>
+ <syscall name="fstat" number="80" groups="descriptor"/>
+ <syscall name="sync" number="81"/>
+ <syscall name="fsync" number="82" groups="descriptor"/>
+ <syscall name="fdatasync" number="83" groups="descriptor"/>
+ <syscall name="sync_file_range" number="84" groups="descriptor"/>
+ <syscall name="timerfd_create" number="85" groups="descriptor"/>
+ <syscall name="timerfd_settime" number="86" groups="descriptor"/>
+ <syscall name="timerfd_gettime" number="87" groups="descriptor"/>
+ <syscall name="utimensat" number="88" groups="descriptor,file"/>
+ <syscall name="acct" number="89" groups="file"/>
+ <syscall name="capget" number="90"/>
+ <syscall name="capset" number="91"/>
+ <syscall name="personality" number="92"/>
+ <syscall name="exit" number="93" groups="process"/>
+ <syscall name="exit_group" number="94" groups="process"/>
+ <syscall name="waitid" number="95" groups="process"/>
+ <syscall name="set_tid_address" number="96"/>
+ <syscall name="unshare" number="97" groups="process"/>
+ <syscall name="futex" number="98"/>
+ <syscall name="set_robust_list" number="99"/>
+ <syscall name="get_robust_list" number="100"/>
+ <syscall name="nanosleep" number="101"/>
+ <syscall name="getitimer" number="102"/>
+ <syscall name="setitimer" number="103"/>
+ <syscall name="kexec_load" number="104"/>
+ <syscall name="init_module" number="105"/>
+ <syscall name="delete_module" number="106"/>
+ <syscall name="timer_create" number="107"/>
+ <syscall name="timer_gettime" number="108"/>
+ <syscall name="timer_getoverrun" number="109"/>
+ <syscall name="timer_settime" number="110"/>
+ <syscall name="timer_delete" number="111"/>
+ <syscall name="clock_settime" number="112"/>
+ <syscall name="clock_gettime" number="113"/>
+ <syscall name="clock_getres" number="114"/>
+ <syscall name="clock_nanosleep" number="115"/>
+ <syscall name="syslog" number="116"/>
+ <syscall name="ptrace" number="117"/>
+ <syscall name="sched_setparam" number="118"/>
+ <syscall name="sched_setscheduler" number="119"/>
+ <syscall name="sched_getscheduler" number="120"/>
+ <syscall name="sched_getparam" number="121"/>
+ <syscall name="sched_setaffinity" number="122"/>
+ <syscall name="sched_getaffinity" number="123"/>
+ <syscall name="sched_yield" number="124"/>
+ <syscall name="sched_get_priority_max" number="125"/>
+ <syscall name="sched_get_priority_min" number="126"/>
+ <syscall name="sched_rr_get_interval" number="127"/>
+ <syscall name="restart_syscall" number="128"/>
+ <syscall name="kill" number="129" groups="signal"/>
+ <syscall name="tkill" number="130" groups="signal"/>
+ <syscall name="tgkill" number="131" groups="signal"/>
+ <syscall name="sigaltstack" number="132" groups="signal"/>
+ <syscall name="rt_sigsuspend" number="133" groups="signal"/>
+ <syscall name="rt_sigaction" number="134" groups="signal"/>
+ <syscall name="rt_sigprocmask" number="135" groups="signal"/>
+ <syscall name="rt_sigpending" number="136" groups="signal"/>
+ <syscall name="rt_sigtimedwait" number="137" groups="signal"/>
+ <syscall name="rt_sigqueueinfo" number="138" groups="signal"/>
+ <syscall name="rt_sigreturn" number="139" groups="signal"/>
+ <syscall name="setpriority" number="140"/>
+ <syscall name="getpriority" number="141"/>
+ <syscall name="reboot" number="142"/>
+ <syscall name="setregid" number="143"/>
+ <syscall name="setgid" number="144"/>
+ <syscall name="setreuid" number="145"/>
+ <syscall name="setuid" number="146"/>
+ <syscall name="setresuid" number="147"/>
+ <syscall name="getresuid" number="148"/>
+ <syscall name="setresgid" number="149"/>
+ <syscall name="getresgid" number="150"/>
+ <syscall name="setfsuid" number="151"/>
+ <syscall name="setfsgid" number="152"/>
+ <syscall name="times" number="153"/>
+ <syscall name="setpgid" number="154"/>
+ <syscall name="getpgid" number="155"/>
+ <syscall name="getsid" number="156"/>
+ <syscall name="setsid" number="157"/>
+ <syscall name="getgroups" number="158"/>
+ <syscall name="setgroups" number="159"/>
+ <syscall name="uname" number="160"/>
+ <syscall name="sethostname" number="161"/>
+ <syscall name="setdomainname" number="162"/>
+ <syscall name="getrlimit" number="163"/>
+ <syscall name="setrlimit" number="164"/>
+ <syscall name="getrusage" number="165"/>
+ <syscall name="umask" number="166"/>
+ <syscall name="prctl" number="167"/>
+ <syscall name="getcpu" number="168"/>
+ <syscall name="gettimeofday" number="169"/>
+ <syscall name="settimeofday" number="170"/>
+ <syscall name="adjtimex" number="171"/>
+ <syscall name="getpid" number="172"/>
+ <syscall name="getppid" number="173"/>
+ <syscall name="getuid" number="174"/>
+ <syscall name="geteuid" number="175"/>
+ <syscall name="getgid" number="176"/>
+ <syscall name="getegid" number="177"/>
+ <syscall name="gettid" number="178"/>
+ <syscall name="sysinfo" number="179"/>
+ <syscall name="mq_open" number="180"/>
+ <syscall name="mq_unlink" number="181"/>
+ <syscall name="mq_timedsend" number="182"/>
+ <syscall name="mq_timedreceive" number="183"/>
+ <syscall name="mq_notify" number="184"/>
+ <syscall name="mq_getsetattr" number="185"/>
+ <syscall name="msgget" number="186" groups="ipc"/>
+ <syscall name="msgctl" number="187" groups="ipc"/>
+ <syscall name="msgrcv" number="188" groups="ipc"/>
+ <syscall name="msgsnd" number="189" groups="ipc"/>
+ <syscall name="semget" number="190" groups="ipc"/>
+ <syscall name="semctl" number="191" groups="ipc"/>
+ <syscall name="semtimedop" number="192" groups="ipc"/>
+ <syscall name="semop" number="193" groups="ipc"/>
+ <syscall name="shmget" number="194" groups="ipc"/>
+ <syscall name="shmctl" number="195" groups="ipc"/>
+ <syscall name="shmat" number="196" groups="ipc,memory"/>
+ <syscall name="shmdt" number="197" groups="ipc,memory"/>
+ <syscall name="socket" number="198" groups="network"/>
+ <syscall name="socketpair" number="199" groups="network"/>
+ <syscall name="bind" number="200" groups="network"/>
+ <syscall name="listen" number="201" groups="network"/>
+ <syscall name="accept" number="202" groups="network"/>
+ <syscall name="connect" number="203" groups="network"/>
+ <syscall name="getsockname" number="204" groups="network"/>
+ <syscall name="getpeername" number="205" groups="network"/>
+ <syscall name="sendto" number="206" groups="network"/>
+ <syscall name="recvfrom" number="207" groups="network"/>
+ <syscall name="setsockopt" number="208" groups="network"/>
+ <syscall name="getsockopt" number="209" groups="network"/>
+ <syscall name="shutdown" number="210" groups="network"/>
+ <syscall name="sendmsg" number="211" groups="network"/>
+ <syscall name="recvmsg" number="212" groups="network"/>
+ <syscall name="readahead" number="213" groups="descriptor"/>
+ <syscall name="brk" number="214" groups="memory"/>
+ <syscall name="munmap" number="215" groups="memory"/>
+ <syscall name="mremap" number="216" groups="memory"/>
+ <syscall name="add_key" number="217"/>
+ <syscall name="request_key" number="218"/>
+ <syscall name="keyctl" number="219"/>
+ <syscall name="clone" number="220" groups="process"/>
+ <syscall name="execve" number="221" groups="file,process"/>
+ <syscall name="mmap" number="222" groups="descriptor,memory"/>
+ <syscall name="fadvise64" number="223" groups="descriptor"/>
+ <syscall name="swapon" number="224" groups="file"/>
+ <syscall name="swapoff" number="225" groups="file"/>
+ <syscall name="mprotect" number="226" groups="memory"/>
+ <syscall name="msync" number="227" groups="memory"/>
+ <syscall name="mlock" number="228" groups="memory"/>
+ <syscall name="munlock" number="229" groups="memory"/>
+ <syscall name="mlockall" number="230" groups="memory"/>
+ <syscall name="munlockall" number="231" groups="memory"/>
+ <syscall name="mincore" number="232" groups="memory"/>
+ <syscall name="madvise" number="233" groups="memory"/>
+ <syscall name="remap_file_pages" number="234" groups="memory"/>
+ <syscall name="mbind" number="235" groups="memory"/>
+ <syscall name="get_mempolicy" number="236" groups="memory"/>
+ <syscall name="set_mempolicy" number="237" groups="memory"/>
+ <syscall name="migrate_pages" number="238" groups="memory"/>
+ <syscall name="move_pages" number="239" groups="memory"/>
+ <syscall name="rt_tgsigqueueinfo" number="240" groups="process,signal"/>
+ <syscall name="perf_event_open" number="241" groups="descriptor"/>
+ <syscall name="accept4" number="242" groups="network"/>
+ <syscall name="recvmmsg" number="243" groups="network"/>
+ <syscall name="arch_specific_syscall" number="244"/>
+ <syscall name="wait4" number="260" groups="process"/>
+ <syscall name="prlimit64" number="261"/>
+ <syscall name="fanotify_init" number="262" groups="descriptor"/>
+ <syscall name="fanotify_mark" number="263" groups="descriptor,file"/>
+ <syscall name="name_to_handle_at" number="264" groups="descriptor,file"/>
+ <syscall name="open_by_handle_at" number="265" groups="descriptor"/>
+ <syscall name="clock_adjtime" number="266"/>
+ <syscall name="syncfs" number="267" groups="descriptor"/>
+ <syscall name="setns" number="268" groups="descriptor"/>
+ <syscall name="sendmmsg" number="269" groups="network"/>
+ <syscall name="process_vm_readv" number="270"/>
+ <syscall name="process_vm_writev" number="271"/>
+ <syscall name="kcmp" number="272"/>
+ <syscall name="syscalls" number="273"/>
+</syscalls_info>
diff --git a/share/gdb/syscalls/amd64-linux.xml b/share/gdb/syscalls/amd64-linux.xml
new file mode 100644
index 0000000..c0fba0f
--- /dev/null
+++ b/share/gdb/syscalls/amd64-linux.xml
@@ -0,0 +1,376 @@
+<?xml version="1.0"?>
+<!DOCTYPE syscalls_info SYSTEM "gdb-syscalls.dtd">
+<!-- Copyright (C) 2009-2023 Free Software Foundation, Inc.
+
+ Copying and distribution of this file, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved. -->
+<!-- This file was generated using the following file:
+
+ arch/x86/entry/syscalls/syscall_64.tbl
+
+ The file mentioned above belongs to the Linux Kernel. -->
+<syscalls_info>
+ <syscall name="read" number="0" groups="descriptor"/>
+ <syscall name="write" number="1" groups="descriptor"/>
+ <syscall name="open" number="2" groups="descriptor,file"/>
+ <syscall name="close" number="3" groups="descriptor"/>
+ <syscall name="stat" number="4" groups="file"/>
+ <syscall name="fstat" number="5" groups="descriptor"/>
+ <syscall name="lstat" number="6" groups="file"/>
+ <syscall name="poll" number="7" groups="descriptor"/>
+ <syscall name="lseek" number="8" groups="descriptor"/>
+ <syscall name="mmap" number="9" groups="descriptor,memory"/>
+ <syscall name="mprotect" number="10" groups="memory"/>
+ <syscall name="munmap" number="11" groups="memory"/>
+ <syscall name="brk" number="12" groups="memory"/>
+ <syscall name="rt_sigaction" number="13" groups="signal"/>
+ <syscall name="rt_sigprocmask" number="14" groups="signal"/>
+ <syscall name="rt_sigreturn" number="15" groups="signal"/>
+ <syscall name="ioctl" number="16" groups="descriptor"/>
+ <syscall name="pread64" number="17" groups="descriptor"/>
+ <syscall name="pwrite64" number="18" groups="descriptor"/>
+ <syscall name="readv" number="19" groups="descriptor"/>
+ <syscall name="writev" number="20" groups="descriptor"/>
+ <syscall name="access" number="21" groups="file"/>
+ <syscall name="pipe" number="22" groups="descriptor"/>
+ <syscall name="select" number="23" groups="descriptor"/>
+ <syscall name="sched_yield" number="24"/>
+ <syscall name="mremap" number="25" groups="memory"/>
+ <syscall name="msync" number="26" groups="memory"/>
+ <syscall name="mincore" number="27" groups="memory"/>
+ <syscall name="madvise" number="28" groups="memory"/>
+ <syscall name="shmget" number="29" groups="ipc"/>
+ <syscall name="shmat" number="30" groups="ipc,memory"/>
+ <syscall name="shmctl" number="31" groups="ipc"/>
+ <syscall name="dup" number="32" groups="descriptor"/>
+ <syscall name="dup2" number="33" groups="descriptor"/>
+ <syscall name="pause" number="34" groups="signal"/>
+ <syscall name="nanosleep" number="35"/>
+ <syscall name="getitimer" number="36"/>
+ <syscall name="alarm" number="37"/>
+ <syscall name="setitimer" number="38"/>
+ <syscall name="getpid" number="39"/>
+ <syscall name="sendfile" number="40" groups="descriptor,network"/>
+ <syscall name="socket" number="41" groups="network"/>
+ <syscall name="connect" number="42" groups="network"/>
+ <syscall name="accept" number="43" groups="network"/>
+ <syscall name="sendto" number="44" groups="network"/>
+ <syscall name="recvfrom" number="45" groups="network"/>
+ <syscall name="sendmsg" number="46" groups="network"/>
+ <syscall name="recvmsg" number="47" groups="network"/>
+ <syscall name="shutdown" number="48" groups="network"/>
+ <syscall name="bind" number="49" groups="network"/>
+ <syscall name="listen" number="50" groups="network"/>
+ <syscall name="getsockname" number="51" groups="network"/>
+ <syscall name="getpeername" number="52" groups="network"/>
+ <syscall name="socketpair" number="53" groups="network"/>
+ <syscall name="setsockopt" number="54" groups="network"/>
+ <syscall name="getsockopt" number="55" groups="network"/>
+ <syscall name="clone" number="56" groups="process"/>
+ <syscall name="fork" number="57" groups="process"/>
+ <syscall name="vfork" number="58" groups="process"/>
+ <syscall name="execve" number="59" groups="file,process"/>
+ <syscall name="exit" number="60" groups="process"/>
+ <syscall name="wait4" number="61" groups="process"/>
+ <syscall name="kill" number="62" groups="signal"/>
+ <syscall name="uname" number="63"/>
+ <syscall name="semget" number="64" groups="ipc"/>
+ <syscall name="semop" number="65" groups="ipc"/>
+ <syscall name="semctl" number="66" groups="ipc"/>
+ <syscall name="shmdt" number="67" groups="ipc,memory"/>
+ <syscall name="msgget" number="68" groups="ipc"/>
+ <syscall name="msgsnd" number="69" groups="ipc"/>
+ <syscall name="msgrcv" number="70" groups="ipc"/>
+ <syscall name="msgctl" number="71" groups="ipc"/>
+ <syscall name="fcntl" number="72" groups="descriptor"/>
+ <syscall name="flock" number="73" groups="descriptor"/>
+ <syscall name="fsync" number="74" groups="descriptor"/>
+ <syscall name="fdatasync" number="75" groups="descriptor"/>
+ <syscall name="truncate" number="76" groups="file"/>
+ <syscall name="ftruncate" number="77" groups="descriptor"/>
+ <syscall name="getdents" number="78" groups="descriptor"/>
+ <syscall name="getcwd" number="79" groups="file"/>
+ <syscall name="chdir" number="80" groups="file"/>
+ <syscall name="fchdir" number="81" groups="descriptor"/>
+ <syscall name="rename" number="82" groups="file"/>
+ <syscall name="mkdir" number="83" groups="file"/>
+ <syscall name="rmdir" number="84" groups="file"/>
+ <syscall name="creat" number="85" groups="descriptor,file"/>
+ <syscall name="link" number="86" groups="file"/>
+ <syscall name="unlink" number="87" groups="file"/>
+ <syscall name="symlink" number="88" groups="file"/>
+ <syscall name="readlink" number="89" groups="file"/>
+ <syscall name="chmod" number="90" groups="file"/>
+ <syscall name="fchmod" number="91" groups="descriptor"/>
+ <syscall name="chown" number="92" groups="file"/>
+ <syscall name="fchown" number="93" groups="descriptor"/>
+ <syscall name="lchown" number="94" groups="file"/>
+ <syscall name="umask" number="95"/>
+ <syscall name="gettimeofday" number="96"/>
+ <syscall name="getrlimit" number="97"/>
+ <syscall name="getrusage" number="98"/>
+ <syscall name="sysinfo" number="99"/>
+ <syscall name="times" number="100"/>
+ <syscall name="ptrace" number="101"/>
+ <syscall name="getuid" number="102"/>
+ <syscall name="syslog" number="103"/>
+ <syscall name="getgid" number="104"/>
+ <syscall name="setuid" number="105"/>
+ <syscall name="setgid" number="106"/>
+ <syscall name="geteuid" number="107"/>
+ <syscall name="getegid" number="108"/>
+ <syscall name="setpgid" number="109"/>
+ <syscall name="getppid" number="110"/>
+ <syscall name="getpgrp" number="111"/>
+ <syscall name="setsid" number="112"/>
+ <syscall name="setreuid" number="113"/>
+ <syscall name="setregid" number="114"/>
+ <syscall name="getgroups" number="115"/>
+ <syscall name="setgroups" number="116"/>
+ <syscall name="setresuid" number="117"/>
+ <syscall name="getresuid" number="118"/>
+ <syscall name="setresgid" number="119"/>
+ <syscall name="getresgid" number="120"/>
+ <syscall name="getpgid" number="121"/>
+ <syscall name="setfsuid" number="122"/>
+ <syscall name="setfsgid" number="123"/>
+ <syscall name="getsid" number="124"/>
+ <syscall name="capget" number="125"/>
+ <syscall name="capset" number="126"/>
+ <syscall name="rt_sigpending" number="127" groups="signal"/>
+ <syscall name="rt_sigtimedwait" number="128" groups="signal"/>
+ <syscall name="rt_sigqueueinfo" number="129" groups="signal"/>
+ <syscall name="rt_sigsuspend" number="130" groups="signal"/>
+ <syscall name="sigaltstack" number="131" groups="signal"/>
+ <syscall name="utime" number="132" groups="file"/>
+ <syscall name="mknod" number="133" groups="file"/>
+ <syscall name="uselib" number="134" groups="file"/>
+ <syscall name="personality" number="135"/>
+ <syscall name="ustat" number="136"/>
+ <syscall name="statfs" number="137" groups="file"/>
+ <syscall name="fstatfs" number="138" groups="descriptor"/>
+ <syscall name="sysfs" number="139"/>
+ <syscall name="getpriority" number="140"/>
+ <syscall name="setpriority" number="141"/>
+ <syscall name="sched_setparam" number="142"/>
+ <syscall name="sched_getparam" number="143"/>
+ <syscall name="sched_setscheduler" number="144"/>
+ <syscall name="sched_getscheduler" number="145"/>
+ <syscall name="sched_get_priority_max" number="146"/>
+ <syscall name="sched_get_priority_min" number="147"/>
+ <syscall name="sched_rr_get_interval" number="148"/>
+ <syscall name="mlock" number="149" groups="memory"/>
+ <syscall name="munlock" number="150" groups="memory"/>
+ <syscall name="mlockall" number="151" groups="memory"/>
+ <syscall name="munlockall" number="152" groups="memory"/>
+ <syscall name="vhangup" number="153"/>
+ <syscall name="modify_ldt" number="154"/>
+ <syscall name="pivot_root" number="155" groups="file"/>
+ <syscall name="_sysctl" number="156"/>
+ <syscall name="prctl" number="157"/>
+ <syscall name="arch_prctl" number="158" groups="process"/>
+ <syscall name="adjtimex" number="159"/>
+ <syscall name="setrlimit" number="160"/>
+ <syscall name="chroot" number="161" groups="file"/>
+ <syscall name="sync" number="162"/>
+ <syscall name="acct" number="163" groups="file"/>
+ <syscall name="settimeofday" number="164"/>
+ <syscall name="mount" number="165" groups="file"/>
+ <syscall name="umount2" number="166" groups="file"/>
+ <syscall name="swapon" number="167" groups="file"/>
+ <syscall name="swapoff" number="168" groups="file"/>
+ <syscall name="reboot" number="169"/>
+ <syscall name="sethostname" number="170"/>
+ <syscall name="setdomainname" number="171"/>
+ <syscall name="iopl" number="172"/>
+ <syscall name="ioperm" number="173"/>
+ <syscall name="create_module" number="174"/>
+ <syscall name="init_module" number="175"/>
+ <syscall name="delete_module" number="176"/>
+ <syscall name="get_kernel_syms" number="177"/>
+ <syscall name="query_module" number="178"/>
+ <syscall name="quotactl" number="179" groups="file"/>
+ <syscall name="nfsservctl" number="180"/>
+ <syscall name="getpmsg" number="181"/>
+ <syscall name="putpmsg" number="182"/>
+ <syscall name="afs_syscall" number="183"/>
+ <syscall name="tuxcall" number="184"/>
+ <syscall name="security" number="185"/>
+ <syscall name="gettid" number="186"/>
+ <syscall name="readahead" number="187" groups="descriptor"/>
+ <syscall name="setxattr" number="188" groups="file"/>
+ <syscall name="lsetxattr" number="189" groups="file"/>
+ <syscall name="fsetxattr" number="190" groups="descriptor"/>
+ <syscall name="getxattr" number="191" groups="file"/>
+ <syscall name="lgetxattr" number="192" groups="file"/>
+ <syscall name="fgetxattr" number="193" groups="descriptor"/>
+ <syscall name="listxattr" number="194" groups="file"/>
+ <syscall name="llistxattr" number="195" groups="file"/>
+ <syscall name="flistxattr" number="196" groups="descriptor"/>
+ <syscall name="removexattr" number="197" groups="file"/>
+ <syscall name="lremovexattr" number="198" groups="file"/>
+ <syscall name="fremovexattr" number="199" groups="descriptor"/>
+ <syscall name="tkill" number="200" groups="signal"/>
+ <syscall name="time" number="201"/>
+ <syscall name="futex" number="202"/>
+ <syscall name="sched_setaffinity" number="203"/>
+ <syscall name="sched_getaffinity" number="204"/>
+ <syscall name="set_thread_area" number="205"/>
+ <syscall name="io_setup" number="206"/>
+ <syscall name="io_destroy" number="207"/>
+ <syscall name="io_getevents" number="208"/>
+ <syscall name="io_submit" number="209"/>
+ <syscall name="io_cancel" number="210"/>
+ <syscall name="get_thread_area" number="211"/>
+ <syscall name="lookup_dcookie" number="212"/>
+ <syscall name="epoll_create" number="213" groups="descriptor"/>
+ <syscall name="epoll_ctl_old" number="214"/>
+ <syscall name="epoll_wait_old" number="215"/>
+ <syscall name="remap_file_pages" number="216" groups="memory"/>
+ <syscall name="getdents64" number="217" groups="descriptor"/>
+ <syscall name="set_tid_address" number="218"/>
+ <syscall name="restart_syscall" number="219"/>
+ <syscall name="semtimedop" number="220" groups="ipc"/>
+ <syscall name="fadvise64" number="221" groups="descriptor"/>
+ <syscall name="timer_create" number="222"/>
+ <syscall name="timer_settime" number="223"/>
+ <syscall name="timer_gettime" number="224"/>
+ <syscall name="timer_getoverrun" number="225"/>
+ <syscall name="timer_delete" number="226"/>
+ <syscall name="clock_settime" number="227"/>
+ <syscall name="clock_gettime" number="228"/>
+ <syscall name="clock_getres" number="229"/>
+ <syscall name="clock_nanosleep" number="230"/>
+ <syscall name="exit_group" number="231" groups="process"/>
+ <syscall name="epoll_wait" number="232" groups="descriptor"/>
+ <syscall name="epoll_ctl" number="233" groups="descriptor"/>
+ <syscall name="tgkill" number="234" groups="signal"/>
+ <syscall name="utimes" number="235" groups="file"/>
+ <syscall name="vserver" number="236"/>
+ <syscall name="mbind" number="237" groups="memory"/>
+ <syscall name="set_mempolicy" number="238" groups="memory"/>
+ <syscall name="get_mempolicy" number="239" groups="memory"/>
+ <syscall name="mq_open" number="240"/>
+ <syscall name="mq_unlink" number="241"/>
+ <syscall name="mq_timedsend" number="242"/>
+ <syscall name="mq_timedreceive" number="243"/>
+ <syscall name="mq_notify" number="244"/>
+ <syscall name="mq_getsetattr" number="245"/>
+ <syscall name="kexec_load" number="246"/>
+ <syscall name="waitid" number="247" groups="process"/>
+ <syscall name="add_key" number="248"/>
+ <syscall name="request_key" number="249"/>
+ <syscall name="keyctl" number="250"/>
+ <syscall name="ioprio_set" number="251"/>
+ <syscall name="ioprio_get" number="252"/>
+ <syscall name="inotify_init" number="253" groups="descriptor"/>
+ <syscall name="inotify_add_watch" number="254" groups="descriptor"/>
+ <syscall name="inotify_rm_watch" number="255" groups="descriptor"/>
+ <syscall name="migrate_pages" number="256" groups="memory"/>
+ <syscall name="openat" number="257" groups="descriptor,file"/>
+ <syscall name="mkdirat" number="258" groups="descriptor,file"/>
+ <syscall name="mknodat" number="259" groups="descriptor,file"/>
+ <syscall name="fchownat" number="260" groups="descriptor,file"/>
+ <syscall name="futimesat" number="261" groups="descriptor,file"/>
+ <syscall name="newfstatat" number="262" groups="descriptor,file"/>
+ <syscall name="unlinkat" number="263" groups="descriptor,file"/>
+ <syscall name="renameat" number="264" groups="descriptor,file"/>
+ <syscall name="linkat" number="265" groups="descriptor,file"/>
+ <syscall name="symlinkat" number="266" groups="descriptor,file"/>
+ <syscall name="readlinkat" number="267" groups="descriptor,file"/>
+ <syscall name="fchmodat" number="268" groups="descriptor,file"/>
+ <syscall name="faccessat" number="269" groups="descriptor,file"/>
+ <syscall name="pselect6" number="270" groups="descriptor"/>
+ <syscall name="ppoll" number="271" groups="descriptor"/>
+ <syscall name="unshare" number="272" groups="process"/>
+ <syscall name="set_robust_list" number="273"/>
+ <syscall name="get_robust_list" number="274"/>
+ <syscall name="splice" number="275" groups="descriptor"/>
+ <syscall name="tee" number="276" groups="descriptor"/>
+ <syscall name="sync_file_range" number="277" groups="descriptor"/>
+ <syscall name="vmsplice" number="278" groups="descriptor"/>
+ <syscall name="move_pages" number="279" groups="memory"/>
+ <syscall name="utimensat" number="280" groups="descriptor,file"/>
+ <syscall name="epoll_pwait" number="281" groups="descriptor"/>
+ <syscall name="signalfd" number="282" groups="descriptor,signal"/>
+ <syscall name="timerfd_create" number="283" groups="descriptor"/>
+ <syscall name="eventfd" number="284" groups="descriptor"/>
+ <syscall name="fallocate" number="285" groups="descriptor"/>
+ <syscall name="timerfd_settime" number="286" groups="descriptor"/>
+ <syscall name="timerfd_gettime" number="287" groups="descriptor"/>
+ <syscall name="accept4" number="288" groups="network"/>
+ <syscall name="signalfd4" number="289" groups="descriptor,signal"/>
+ <syscall name="eventfd2" number="290" groups="descriptor"/>
+ <syscall name="epoll_create1" number="291" groups="descriptor"/>
+ <syscall name="dup3" number="292" groups="descriptor"/>
+ <syscall name="pipe2" number="293" groups="descriptor"/>
+ <syscall name="inotify_init1" number="294" groups="descriptor"/>
+ <syscall name="preadv" number="295" groups="descriptor"/>
+ <syscall name="pwritev" number="296" groups="descriptor"/>
+ <syscall name="rt_tgsigqueueinfo" number="297" groups="process,signal"/>
+ <syscall name="perf_event_open" number="298" groups="descriptor"/>
+ <syscall name="recvmmsg" number="299" groups="network"/>
+ <syscall name="fanotify_init" number="300" groups="descriptor"/>
+ <syscall name="fanotify_mark" number="301" groups="descriptor,file"/>
+ <syscall name="prlimit64" number="302"/>
+ <syscall name="name_to_handle_at" number="303" groups="descriptor,file"/>
+ <syscall name="open_by_handle_at" number="304" groups="descriptor"/>
+ <syscall name="clock_adjtime" number="305"/>
+ <syscall name="syncfs" number="306" groups="descriptor"/>
+ <syscall name="sendmmsg" number="307" groups="network"/>
+ <syscall name="setns" number="308" groups="descriptor"/>
+ <syscall name="getcpu" number="309"/>
+ <syscall name="process_vm_readv" number="310"/>
+ <syscall name="process_vm_writev" number="311"/>
+ <syscall name="kcmp" number="312"/>
+ <syscall name="finit_module" number="313" groups="descriptor"/>
+ <syscall name="sched_setattr" number="314"/>
+ <syscall name="sched_getattr" number="315"/>
+ <syscall name="renameat2" number="316"/>
+ <syscall name="seccomp" number="317"/>
+ <syscall name="getrandom" number="318"/>
+ <syscall name="memfd_create" number="319"/>
+ <syscall name="kexec_file_load" number="320"/>
+ <syscall name="bpf" number="321"/>
+ <syscall name="execveat" number="322"/>
+ <syscall name="userfaultfd" number="323"/>
+ <syscall name="membarrier" number="324"/>
+ <syscall name="mlock2" number="325"/>
+ <syscall name="copy_file_range" number="326"/>
+ <syscall name="preadv2" number="327"/>
+ <syscall name="pwritev2" number="328"/>
+ <syscall name="pkey_mprotect" number="329"/>
+ <syscall name="pkey_alloc" number="330"/>
+ <syscall name="pkey_free" number="331"/>
+ <syscall name="statx" number="332"/>
+ <syscall name="io_pgetevents" number="333"/>
+ <syscall name="rseq" number="334"/>
+ <syscall name="pidfd_send_signal" number="424"/>
+ <syscall name="io_uring_setup" number="425"/>
+ <syscall name="io_uring_enter" number="426"/>
+ <syscall name="io_uring_register" number="427"/>
+ <syscall name="open_tree" number="428"/>
+ <syscall name="move_mount" number="429"/>
+ <syscall name="fsopen" number="430"/>
+ <syscall name="fsconfig" number="431"/>
+ <syscall name="fsmount" number="432"/>
+ <syscall name="fspick" number="433"/>
+ <syscall name="pidfd_open" number="434"/>
+ <syscall name="clone3" number="435"/>
+ <syscall name="close_range" number="436"/>
+ <syscall name="openat2" number="437"/>
+ <syscall name="pidfd_getfd" number="438"/>
+ <syscall name="faccessat2" number="439"/>
+ <syscall name="process_madvise" number="440"/>
+ <syscall name="epoll_pwait2" number="441"/>
+ <syscall name="mount_setattr" number="442"/>
+ <syscall name="quotactl_fd" number="443"/>
+ <syscall name="landlock_create_ruleset" number="444"/>
+ <syscall name="landlock_add_rule" number="445"/>
+ <syscall name="landlock_restrict_self" number="446"/>
+ <syscall name="memfd_secret" number="447"/>
+ <syscall name="process_mrelease" number="448"/>
+ <syscall name="futex_waitv" number="449"/>
+ <syscall name="set_mempolicy_home_node" number="450"/>
+</syscalls_info>
diff --git a/share/gdb/syscalls/arm-linux.xml b/share/gdb/syscalls/arm-linux.xml
new file mode 100644
index 0000000..419da0f
--- /dev/null
+++ b/share/gdb/syscalls/arm-linux.xml
@@ -0,0 +1,395 @@
+<?xml version="1.0"?>
+<!DOCTYPE syscalls_info SYSTEM "gdb-syscalls.dtd">
+<!-- Copyright (C) 2009-2023 Free Software Foundation, Inc.
+
+ Copying and distribution of this file, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved. This file is offered as-is,
+ without any warranty. -->
+<!-- This file was generated using the following file:
+
+ linux/arch/arm/include/uapi/asm/unistd.h
+
+ The file mentioned above belongs to the Linux Kernel.
+ Some small hand-edits were made. -->
+<syscalls_info>
+ <syscall name="restart_syscall" number="0"/>
+ <syscall name="exit" number="1" groups="process"/>
+ <syscall name="fork" number="2" groups="process"/>
+ <syscall name="read" number="3" groups="descriptor"/>
+ <syscall name="write" number="4" groups="descriptor"/>
+ <syscall name="open" number="5" groups="descriptor,file"/>
+ <syscall name="close" number="6" groups="descriptor"/>
+ <syscall name="waitpid" number="7" groups="process"/> <!-- removed -->
+ <syscall name="creat" number="8" groups="descriptor,file"/>
+ <syscall name="link" number="9" groups="file"/>
+ <syscall name="unlink" number="10" groups="file"/>
+ <syscall name="execve" number="11" groups="file,process"/>
+ <syscall name="chdir" number="12" groups="file"/>
+ <syscall name="time" number="13"/>
+ <syscall name="mknod" number="14" groups="file"/>
+ <syscall name="chmod" number="15" groups="file"/>
+ <syscall name="lchown" number="16" groups="file"/>
+ <syscall name="break" number="17" groups="memory"/> <!-- removed -->
+ <syscall name="oldstat" number="18" groups="file"/> <!-- removed -->
+ <syscall name="lseek" number="19" groups="descriptor"/>
+ <syscall name="getpid" number="20"/>
+ <syscall name="mount" number="21" groups="file"/>
+ <syscall name="umount" number="22" groups="file"/>
+ <syscall name="setuid" number="23"/>
+ <syscall name="getuid" number="24"/>
+ <syscall name="stime" number="25"/>
+ <syscall name="ptrace" number="26"/>
+ <syscall name="alarm" number="27"/>
+ <syscall name="oldfstat" number="28" groups="descriptor"/> <!-- removed -->
+ <syscall name="pause" number="29" groups="signal"/>
+ <syscall name="utime" number="30" groups="file"/>
+ <syscall name="stty" number="31"/> <!-- removed -->
+ <syscall name="gtty" number="32"/> <!-- removed -->
+ <syscall name="access" number="33" groups="file"/>
+ <syscall name="nice" number="34"/>
+ <syscall name="ftime" number="35"/> <!-- removed -->
+ <syscall name="sync" number="36"/>
+ <syscall name="kill" number="37" groups="signal"/>
+ <syscall name="rename" number="38" groups="file"/>
+ <syscall name="mkdir" number="39" groups="file"/>
+ <syscall name="rmdir" number="40" groups="file"/>
+ <syscall name="dup" number="41" groups="descriptor"/>
+ <syscall name="pipe" number="42" groups="descriptor"/>
+ <syscall name="times" number="43"/>
+ <syscall name="prof" number="44"/> <!-- removed -->
+ <syscall name="brk" number="45" groups="memory"/>
+ <syscall name="setgid" number="46"/>
+ <syscall name="getgid" number="47"/>
+ <syscall name="signal" number="48" groups="signal"/> <!-- removed -->
+ <syscall name="geteuid" number="49"/>
+ <syscall name="getegid" number="50"/>
+ <syscall name="acct" number="51" groups="file"/>
+ <syscall name="umount2" number="52" groups="file"/>
+ <syscall name="lock" number="53"/> <!-- removed -->
+ <syscall name="ioctl" number="54" groups="descriptor"/>
+ <syscall name="fcntl" number="55" groups="descriptor"/>
+ <syscall name="mpx" number="56"/> <!-- removed -->
+ <syscall name="setpgid" number="57"/>
+ <syscall name="ulimit" number="58"/> <!-- removed -->
+ <syscall name="oldolduname" number="59"/> <!-- removed -->
+ <syscall name="umask" number="60"/>
+ <syscall name="chroot" number="61" groups="file"/>
+ <syscall name="ustat" number="62"/>
+ <syscall name="dup2" number="63" groups="descriptor"/>
+ <syscall name="getppid" number="64"/>
+ <syscall name="getpgrp" number="65"/>
+ <syscall name="setsid" number="66"/>
+ <syscall name="sigaction" number="67" groups="signal"/>
+ <syscall name="sgetmask" number="68" groups="signal"/> <!-- removed -->
+ <syscall name="ssetmask" number="69" groups="signal"/> <!-- removed -->
+ <syscall name="setreuid" number="70"/>
+ <syscall name="setregid" number="71"/>
+ <syscall name="sigsuspend" number="72" groups="signal"/>
+ <syscall name="sigpending" number="73" groups="signal"/>
+ <syscall name="sethostname" number="74"/>
+ <syscall name="setrlimit" number="75"/>
+ <syscall name="getrlimit" number="76"/>
+ <syscall name="getrusage" number="77"/>
+ <syscall name="gettimeofday" number="78"/>
+ <syscall name="settimeofday" number="79"/>
+ <syscall name="getgroups" number="80"/>
+ <syscall name="setgroups" number="81"/>
+ <syscall name="select" number="82" groups="descriptor"/>
+ <syscall name="symlink" number="83" groups="file"/>
+ <syscall name="oldlstat" number="84" groups="file"/> <!-- removed -->
+ <syscall name="readlink" number="85" groups="file"/>
+ <syscall name="uselib" number="86" groups="file"/>
+ <syscall name="swapon" number="87" groups="file"/>
+ <syscall name="reboot" number="88"/>
+ <syscall name="readdir" number="89" groups="descriptor"/>
+ <syscall name="mmap" number="90" groups="descriptor,memory"/>
+ <syscall name="munmap" number="91" groups="memory"/>
+ <syscall name="truncate" number="92" groups="file"/>
+ <syscall name="ftruncate" number="93" groups="descriptor"/>
+ <syscall name="fchmod" number="94" groups="descriptor"/>
+ <syscall name="fchown" number="95" groups="descriptor"/>
+ <syscall name="getpriority" number="96"/>
+ <syscall name="setpriority" number="97"/>
+ <syscall name="profil" number="98"/> <!-- removed -->
+ <syscall name="statfs" number="99" groups="file"/>
+ <syscall name="fstatfs" number="100" groups="descriptor"/>
+ <syscall name="ioperm" number="101"/> <!-- removed -->
+ <syscall name="socketcall" number="102" groups="descriptor"/>
+ <syscall name="syslog" number="103"/>
+ <syscall name="setitimer" number="104"/>
+ <syscall name="getitimer" number="105"/>
+ <syscall name="stat" number="106" groups="file"/>
+ <syscall name="lstat" number="107" groups="file"/>
+ <syscall name="fstat" number="108" groups="descriptor"/>
+ <syscall name="olduname" number="109"/> <!-- removed -->
+ <syscall name="iopl" number="110"/> <!-- removed -->
+ <syscall name="vhangup" number="111"/>
+ <syscall name="idle" number="112"/> <!-- removed -->
+ <syscall name="syscall" number="113"/>
+ <syscall name="wait4" number="114" groups="process"/>
+ <syscall name="swapoff" number="115" groups="file"/>
+ <syscall name="sysinfo" number="116"/>
+ <syscall name="ipc" number="117" groups="ipc"/>
+ <syscall name="fsync" number="118" groups="descriptor"/>
+ <syscall name="sigreturn" number="119" groups="signal"/>
+ <syscall name="clone" number="120" groups="process"/>
+ <syscall name="setdomainname" number="121"/>
+ <syscall name="uname" number="122"/>
+ <syscall name="modify_ldt" number="123"/> <!-- removed -->
+ <syscall name="adjtimex" number="124"/>
+ <syscall name="mprotect" number="125" groups="memory"/>
+ <syscall name="sigprocmask" number="126" groups="signal"/>
+ <syscall name="create_module" number="127"/> <!-- removed -->
+ <syscall name="init_module" number="128"/>
+ <syscall name="delete_module" number="129"/>
+ <syscall name="get_kernel_syms" number="130"/> <!-- removed -->
+ <syscall name="quotactl" number="131" groups="file"/>
+ <syscall name="getpgid" number="132"/>
+ <syscall name="fchdir" number="133" groups="descriptor"/>
+ <syscall name="bdflush" number="134"/>
+ <syscall name="sysfs" number="135"/>
+ <syscall name="personality" number="136"/>
+ <syscall name="afs_syscall" number="137"/> <!-- removed -->
+ <syscall name="setfsuid" number="138"/>
+ <syscall name="setfsgid" number="139"/>
+ <syscall name="_llseek" number="140" groups="descriptor"/>
+ <syscall name="getdents" number="141" groups="descriptor"/>
+ <syscall name="_newselect" number="142" groups="descriptor"/>
+ <syscall name="flock" number="143" groups="descriptor"/>
+ <syscall name="msync" number="144" groups="memory"/>
+ <syscall name="readv" number="145" groups="descriptor"/>
+ <syscall name="writev" number="146" groups="descriptor"/>
+ <syscall name="getsid" number="147"/>
+ <syscall name="fdatasync" number="148" groups="descriptor"/>
+ <syscall name="_sysctl" number="149"/>
+ <syscall name="mlock" number="150" groups="memory"/>
+ <syscall name="munlock" number="151" groups="memory"/>
+ <syscall name="mlockall" number="152" groups="memory"/>
+ <syscall name="munlockall" number="153" groups="memory"/>
+ <syscall name="sched_setparam" number="154"/>
+ <syscall name="sched_getparam" number="155"/>
+ <syscall name="sched_setscheduler" number="156"/>
+ <syscall name="sched_getscheduler" number="157"/>
+ <syscall name="sched_yield" number="158"/>
+ <syscall name="sched_get_priority_max" number="159"/>
+ <syscall name="sched_get_priority_min" number="160"/>
+ <syscall name="sched_rr_get_interval" number="161"/>
+ <syscall name="nanosleep" number="162"/>
+ <syscall name="mremap" number="163" groups="memory"/>
+ <syscall name="setresuid" number="164"/>
+ <syscall name="getresuid" number="165"/>
+ <syscall name="vm86" number="166"/> <!-- removed -->
+ <syscall name="query_module" number="167"/> <!-- removed -->
+ <syscall name="poll" number="168" groups="descriptor"/>
+ <syscall name="nfsservctl" number="169"/>
+ <syscall name="setresgid" number="170"/>
+ <syscall name="getresgid" number="171"/>
+ <syscall name="prctl" number="172"/>
+ <syscall name="rt_sigreturn" number="173" groups="signal"/>
+ <syscall name="rt_sigaction" number="174" groups="signal"/>
+ <syscall name="rt_sigprocmask" number="175" groups="signal"/>
+ <syscall name="rt_sigpending" number="176" groups="signal"/>
+ <syscall name="rt_sigtimedwait" number="177" groups="signal"/>
+ <syscall name="rt_sigqueueinfo" number="178" groups="signal"/>
+ <syscall name="rt_sigsuspend" number="179" groups="signal"/>
+ <syscall name="pread64" number="180" groups="descriptor"/>
+ <syscall name="pwrite64" number="181" groups="descriptor"/>
+ <syscall name="chown" number="182" groups="file"/>
+ <syscall name="getcwd" number="183" groups="file"/>
+ <syscall name="capget" number="184"/>
+ <syscall name="capset" number="185"/>
+ <syscall name="sigaltstack" number="186" groups="signal"/>
+ <syscall name="sendfile" number="187" groups="descriptor,network"/>
+ <syscall name="vfork" number="190" groups="process"/>
+ <syscall name="ugetrlimit" number="191"/>
+ <syscall name="mmap2" number="192" groups="descriptor,memory"/>
+ <syscall name="truncate64" number="193" groups="file"/>
+ <syscall name="ftruncate64" number="194" groups="descriptor"/>
+ <syscall name="stat64" number="195" groups="file"/>
+ <syscall name="lstat64" number="196" groups="file"/>
+ <syscall name="fstat64" number="197" groups="descriptor"/>
+ <syscall name="lchown32" number="198" groups="file"/>
+ <syscall name="getuid32" number="199"/>
+ <syscall name="getgid32" number="200"/>
+ <syscall name="geteuid32" number="201"/>
+ <syscall name="getegid32" number="202"/>
+ <syscall name="setreuid32" number="203"/>
+ <syscall name="setregid32" number="204"/>
+ <syscall name="getgroups32" number="205"/>
+ <syscall name="setgroups32" number="206"/>
+ <syscall name="fchown32" number="207" groups="descriptor"/>
+ <syscall name="setresuid32" number="208"/>
+ <syscall name="getresuid32" number="209"/>
+ <syscall name="setresgid32" number="210"/>
+ <syscall name="getresgid32" number="211"/>
+ <syscall name="chown32" number="212" groups="file"/>
+ <syscall name="setuid32" number="213"/>
+ <syscall name="setgid32" number="214"/>
+ <syscall name="setfsuid32" number="215"/>
+ <syscall name="setfsgid32" number="216"/>
+ <syscall name="getdents64" number="217" groups="descriptor"/>
+ <syscall name="pivot_root" number="218" groups="file"/>
+ <syscall name="mincore" number="219" groups="memory"/>
+ <syscall name="madvise" number="220" groups="memory"/>
+ <syscall name="fcntl64" number="221" groups="descriptor"/>
+ <syscall name="gettid" number="224"/>
+ <syscall name="readahead" number="225" groups="descriptor"/>
+ <syscall name="setxattr" number="226" groups="file"/>
+ <syscall name="lsetxattr" number="227" groups="file"/>
+ <syscall name="fsetxattr" number="228" groups="descriptor"/>
+ <syscall name="getxattr" number="229" groups="file"/>
+ <syscall name="lgetxattr" number="230" groups="file"/>
+ <syscall name="fgetxattr" number="231" groups="descriptor"/>
+ <syscall name="listxattr" number="232" groups="file"/>
+ <syscall name="llistxattr" number="233" groups="file"/>
+ <syscall name="flistxattr" number="234" groups="descriptor"/>
+ <syscall name="removexattr" number="235" groups="file"/>
+ <syscall name="lremovexattr" number="236" groups="file"/>
+ <syscall name="fremovexattr" number="237" groups="descriptor"/>
+ <syscall name="tkill" number="238" groups="signal"/>
+ <syscall name="sendfile64" number="239" groups="descriptor,network"/>
+ <syscall name="futex" number="240"/>
+ <syscall name="sched_setaffinity" number="241"/>
+ <syscall name="sched_getaffinity" number="242"/>
+ <syscall name="io_setup" number="243"/>
+ <syscall name="io_destroy" number="244"/>
+ <syscall name="io_getevents" number="245"/>
+ <syscall name="io_submit" number="246"/>
+ <syscall name="io_cancel" number="247"/>
+ <syscall name="exit_group" number="248" groups="process"/>
+ <syscall name="lookup_dcookie" number="249"/>
+ <syscall name="epoll_create" number="250" groups="descriptor"/>
+ <syscall name="epoll_ctl" number="251" groups="descriptor"/>
+ <syscall name="epoll_wait" number="252" groups="descriptor"/>
+ <syscall name="remap_file_pages" number="253" groups="memory"/>
+ <syscall name="set_tid_address" number="256"/>
+ <syscall name="timer_create" number="257"/>
+ <syscall name="timer_settime" number="258"/>
+ <syscall name="timer_gettime" number="259"/>
+ <syscall name="timer_getoverrun" number="260"/>
+ <syscall name="timer_delete" number="261"/>
+ <syscall name="clock_settime" number="262"/>
+ <syscall name="clock_gettime" number="263"/>
+ <syscall name="clock_getres" number="264"/>
+ <syscall name="clock_nanosleep" number="265"/>
+ <syscall name="statfs64" number="266" groups="file"/>
+ <syscall name="fstatfs64" number="267" groups="descriptor"/>
+ <syscall name="tgkill" number="268" groups="signal"/>
+ <syscall name="utimes" number="269" groups="file"/>
+ <syscall name="arm_fadvise64_64" number="270"/>
+ <syscall name="pciconfig_iobase" number="271"/>
+ <syscall name="pciconfig_read" number="272"/>
+ <syscall name="pciconfig_write" number="273"/>
+ <syscall name="mq_open" number="274"/>
+ <syscall name="mq_unlink" number="275"/>
+ <syscall name="mq_timedsend" number="276"/>
+ <syscall name="mq_timedreceive" number="277"/>
+ <syscall name="mq_notify" number="278"/>
+ <syscall name="mq_getsetattr" number="279"/>
+ <syscall name="waitid" number="280" groups="process"/>
+ <syscall name="socket" number="281" groups="network"/>
+ <syscall name="bind" number="282" groups="network"/>
+ <syscall name="connect" number="283" groups="network"/>
+ <syscall name="listen" number="284" groups="network"/>
+ <syscall name="accept" number="285" groups="network"/>
+ <syscall name="getsockname" number="286" groups="network"/>
+ <syscall name="getpeername" number="287" groups="network"/>
+ <syscall name="socketpair" number="288" groups="network"/>
+ <syscall name="send" number="289" groups="network"/>
+ <syscall name="sendto" number="290" groups="network"/>
+ <syscall name="recv" number="291" groups="network"/>
+ <syscall name="recvfrom" number="292" groups="network"/>
+ <syscall name="shutdown" number="293" groups="network"/>
+ <syscall name="setsockopt" number="294" groups="network"/>
+ <syscall name="getsockopt" number="295" groups="network"/>
+ <syscall name="sendmsg" number="296" groups="network"/>
+ <syscall name="recvmsg" number="297" groups="network"/>
+ <syscall name="semop" number="298" groups="ipc"/>
+ <syscall name="semget" number="299" groups="ipc"/>
+ <syscall name="semctl" number="300" groups="ipc"/>
+ <syscall name="msgsnd" number="301" groups="ipc"/>
+ <syscall name="msgrcv" number="302" groups="ipc"/>
+ <syscall name="msgget" number="303" groups="ipc"/>
+ <syscall name="msgctl" number="304" groups="ipc"/>
+ <syscall name="shmat" number="305" groups="ipc,memory"/>
+ <syscall name="shmdt" number="306" groups="ipc,memory"/>
+ <syscall name="shmget" number="307" groups="ipc"/>
+ <syscall name="shmctl" number="308" groups="ipc"/>
+ <syscall name="add_key" number="309"/>
+ <syscall name="request_key" number="310"/>
+ <syscall name="keyctl" number="311"/>
+ <syscall name="semtimedop" number="312" groups="ipc"/>
+ <syscall name="vserver" number="313"/>
+ <syscall name="ioprio_set" number="314"/>
+ <syscall name="ioprio_get" number="315"/>
+ <syscall name="inotify_init" number="316" groups="descriptor"/>
+ <syscall name="inotify_add_watch" number="317" groups="descriptor"/>
+ <syscall name="inotify_rm_watch" number="318" groups="descriptor"/>
+ <syscall name="mbind" number="319" groups="memory"/>
+ <syscall name="get_mempolicy" number="320" groups="memory"/>
+ <syscall name="set_mempolicy" number="321" groups="memory"/>
+ <syscall name="openat" number="322" groups="descriptor,file"/>
+ <syscall name="mkdirat" number="323" groups="descriptor,file"/>
+ <syscall name="mknodat" number="324" groups="descriptor,file"/>
+ <syscall name="fchownat" number="325" groups="descriptor,file"/>
+ <syscall name="futimesat" number="326" groups="descriptor,file"/>
+ <syscall name="fstatat64" number="327" groups="descriptor,file"/>
+ <syscall name="unlinkat" number="328" groups="descriptor,file"/>
+ <syscall name="renameat" number="329" groups="descriptor,file"/>
+ <syscall name="linkat" number="330" groups="descriptor,file"/>
+ <syscall name="symlinkat" number="331" groups="descriptor,file"/>
+ <syscall name="readlinkat" number="332" groups="descriptor,file"/>
+ <syscall name="fchmodat" number="333" groups="descriptor,file"/>
+ <syscall name="faccessat" number="334" groups="descriptor,file"/>
+ <syscall name="pselect6" number="335" groups="descriptor"/>
+ <syscall name="ppoll" number="336" groups="descriptor"/>
+ <syscall name="unshare" number="337" groups="process"/>
+ <syscall name="set_robust_list" number="338"/>
+ <syscall name="get_robust_list" number="339"/>
+ <syscall name="splice" number="340" groups="descriptor"/>
+ <syscall name="arm_sync_file_range" number="341"/>
+ <syscall name="tee" number="342" groups="descriptor"/>
+ <syscall name="vmsplice" number="343" groups="descriptor"/>
+ <syscall name="move_pages" number="344" groups="memory"/>
+ <syscall name="getcpu" number="345"/>
+ <syscall name="epoll_pwait" number="346" groups="descriptor"/>
+ <syscall name="kexec_load" number="347"/>
+ <syscall name="utimensat" number="348" groups="descriptor,file"/>
+ <syscall name="signalfd" number="349" groups="descriptor,signal"/>
+ <syscall name="timerfd_create" number="350" groups="descriptor"/>
+ <syscall name="eventfd" number="351" groups="descriptor"/>
+ <syscall name="fallocate" number="352" groups="descriptor"/>
+ <syscall name="timerfd_settime" number="353" groups="descriptor"/>
+ <syscall name="timerfd_gettime" number="354" groups="descriptor"/>
+ <syscall name="signalfd4" number="355" groups="descriptor,signal"/>
+ <syscall name="eventfd2" number="356" groups="descriptor"/>
+ <syscall name="epoll_create1" number="357" groups="descriptor"/>
+ <syscall name="dup3" number="358" groups="descriptor"/>
+ <syscall name="pipe2" number="359" groups="descriptor"/>
+ <syscall name="inotify_init1" number="360" groups="descriptor"/>
+ <syscall name="preadv" number="361" groups="descriptor"/>
+ <syscall name="pwritev" number="362" groups="descriptor"/>
+ <syscall name="rt_tgsigqueueinfo" number="363" groups="process,signal"/>
+ <syscall name="perf_event_open" number="364" groups="descriptor"/>
+ <syscall name="recvmmsg" number="365" groups="network"/>
+ <syscall name="accept4" number="366" groups="network"/>
+ <syscall name="fanotify_init" number="367" groups="descriptor"/>
+ <syscall name="fanotify_mark" number="368" groups="descriptor,file"/>
+ <syscall name="prlimit64" number="369"/>
+ <syscall name="name_to_handle_at" number="370" groups="descriptor,file"/>
+ <syscall name="open_by_handle_at" number="371" groups="descriptor"/>
+ <syscall name="clock_adjtime" number="372"/>
+ <syscall name="syncfs" number="373" groups="descriptor"/>
+ <syscall name="sendmmsg" number="374" groups="network"/>
+ <syscall name="setns" number="375" groups="descriptor"/>
+ <syscall name="process_vm_readv" number="376"/>
+ <syscall name="process_vm_writev" number="377"/>
+ <syscall name="kcmp" number="378"/>
+ <syscall name="finit_module" number="379" groups="descriptor"/>
+ <syscall name="ARM_breakpoint" number="983041"/>
+ <syscall name="ARM_cacheflush" number="983042"/>
+ <syscall name="ARM_usr26" number="983043"/>
+ <syscall name="ARM_usr32" number="983044"/>
+ <syscall name="ARM_set_tls" number="983045"/>
+</syscalls_info>
diff --git a/share/gdb/syscalls/freebsd.xml b/share/gdb/syscalls/freebsd.xml
new file mode 100644
index 0000000..0764ac2
--- /dev/null
+++ b/share/gdb/syscalls/freebsd.xml
@@ -0,0 +1,487 @@
+<?xml version="1.0"?> <!-- THIS FILE IS GENERATED -*- buffer-read-only: t -*- -->
+<!-- vi:set ro: -->
+<!-- Copyright (C) 2009-2023 Free Software Foundation, Inc.
+
+ Copying and distribution of this file, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved. -->
+
+<!DOCTYPE feature SYSTEM "gdb-syscalls.dtd">
+
+<!-- This file was generated using the following file:
+
+ /usr/src/sys/sys/syscall.h
+
+ The file mentioned above belongs to the FreeBSD Kernel. -->
+
+<syscalls_info>
+ <syscall name="syscall" number="0"/>
+ <syscall name="exit" number="1"/>
+ <syscall name="fork" number="2"/>
+ <syscall name="read" number="3"/>
+ <syscall name="write" number="4"/>
+ <syscall name="open" number="5"/>
+ <syscall name="close" number="6"/>
+ <syscall name="wait4" number="7"/>
+ <syscall name="link" number="9"/>
+ <syscall name="unlink" number="10"/>
+ <syscall name="execv" number="11"/>
+ <syscall name="chdir" number="12"/>
+ <syscall name="fchdir" number="13"/>
+ <syscall name="freebsd11_mknod" number="14" alias="mknod"/>
+ <syscall name="chmod" number="15"/>
+ <syscall name="chown" number="16"/>
+ <syscall name="break" number="17"/>
+ <syscall name="freebsd4_getfsstat" number="18" alias="getfsstat"/>
+ <syscall name="getpid" number="20"/>
+ <syscall name="mount" number="21"/>
+ <syscall name="unmount" number="22"/>
+ <syscall name="setuid" number="23"/>
+ <syscall name="getuid" number="24"/>
+ <syscall name="geteuid" number="25"/>
+ <syscall name="ptrace" number="26"/>
+ <syscall name="recvmsg" number="27"/>
+ <syscall name="sendmsg" number="28"/>
+ <syscall name="recvfrom" number="29"/>
+ <syscall name="accept" number="30"/>
+ <syscall name="getpeername" number="31"/>
+ <syscall name="getsockname" number="32"/>
+ <syscall name="access" number="33"/>
+ <syscall name="chflags" number="34"/>
+ <syscall name="fchflags" number="35"/>
+ <syscall name="sync" number="36"/>
+ <syscall name="kill" number="37"/>
+ <syscall name="getppid" number="39"/>
+ <syscall name="dup" number="41"/>
+ <syscall name="freebsd10_pipe" number="42" alias="pipe"/>
+ <syscall name="getegid" number="43"/>
+ <syscall name="profil" number="44"/>
+ <syscall name="ktrace" number="45"/>
+ <syscall name="getgid" number="47"/>
+ <syscall name="getlogin" number="49"/>
+ <syscall name="setlogin" number="50"/>
+ <syscall name="acct" number="51"/>
+ <syscall name="sigaltstack" number="53"/>
+ <syscall name="ioctl" number="54"/>
+ <syscall name="reboot" number="55"/>
+ <syscall name="revoke" number="56"/>
+ <syscall name="symlink" number="57"/>
+ <syscall name="readlink" number="58"/>
+ <syscall name="execve" number="59"/>
+ <syscall name="umask" number="60"/>
+ <syscall name="chroot" number="61"/>
+ <syscall name="msync" number="65"/>
+ <syscall name="vfork" number="66"/>
+ <syscall name="vread" number="67"/>
+ <syscall name="vwrite" number="68"/>
+ <syscall name="sbrk" number="69"/>
+ <syscall name="sstk" number="70"/>
+ <syscall name="freebsd11_vadvise" number="72" alias="vadvise"/>
+ <syscall name="munmap" number="73"/>
+ <syscall name="mprotect" number="74"/>
+ <syscall name="madvise" number="75"/>
+ <syscall name="vhangup" number="76"/>
+ <syscall name="vlimit" number="77"/>
+ <syscall name="mincore" number="78"/>
+ <syscall name="getgroups" number="79"/>
+ <syscall name="setgroups" number="80"/>
+ <syscall name="getpgrp" number="81"/>
+ <syscall name="setpgid" number="82"/>
+ <syscall name="setitimer" number="83"/>
+ <syscall name="swapon" number="85"/>
+ <syscall name="getitimer" number="86"/>
+ <syscall name="getdtablesize" number="89"/>
+ <syscall name="dup2" number="90"/>
+ <syscall name="fcntl" number="92"/>
+ <syscall name="select" number="93"/>
+ <syscall name="fsync" number="95"/>
+ <syscall name="setpriority" number="96"/>
+ <syscall name="socket" number="97"/>
+ <syscall name="connect" number="98"/>
+ <syscall name="getpriority" number="100"/>
+ <syscall name="bind" number="104"/>
+ <syscall name="setsockopt" number="105"/>
+ <syscall name="listen" number="106"/>
+ <syscall name="vtimes" number="107"/>
+ <syscall name="vtrace" number="115"/>
+ <syscall name="gettimeofday" number="116"/>
+ <syscall name="getrusage" number="117"/>
+ <syscall name="getsockopt" number="118"/>
+ <syscall name="readv" number="120"/>
+ <syscall name="writev" number="121"/>
+ <syscall name="settimeofday" number="122"/>
+ <syscall name="fchown" number="123"/>
+ <syscall name="fchmod" number="124"/>
+ <syscall name="setreuid" number="126"/>
+ <syscall name="setregid" number="127"/>
+ <syscall name="rename" number="128"/>
+ <syscall name="flock" number="131"/>
+ <syscall name="mkfifo" number="132"/>
+ <syscall name="sendto" number="133"/>
+ <syscall name="shutdown" number="134"/>
+ <syscall name="socketpair" number="135"/>
+ <syscall name="mkdir" number="136"/>
+ <syscall name="rmdir" number="137"/>
+ <syscall name="utimes" number="138"/>
+ <syscall name="adjtime" number="140"/>
+ <syscall name="setsid" number="147"/>
+ <syscall name="quotactl" number="148"/>
+ <syscall name="nlm_syscall" number="154"/>
+ <syscall name="nfssvc" number="155"/>
+ <syscall name="freebsd4_statfs" number="157" alias="statfs"/>
+ <syscall name="freebsd4_fstatfs" number="158" alias="fstatfs"/>
+ <syscall name="lgetfh" number="160"/>
+ <syscall name="getfh" number="161"/>
+ <syscall name="freebsd4_getdomainname" number="162" alias="getdomainname"/>
+ <syscall name="freebsd4_setdomainname" number="163" alias="setdomainname"/>
+ <syscall name="freebsd4_uname" number="164" alias="uname"/>
+ <syscall name="sysarch" number="165"/>
+ <syscall name="rtprio" number="166"/>
+ <syscall name="semsys" number="169"/>
+ <syscall name="msgsys" number="170"/>
+ <syscall name="shmsys" number="171"/>
+ <syscall name="freebsd6_pread" number="173" alias="pread"/>
+ <syscall name="freebsd6_pwrite" number="174" alias="pwrite"/>
+ <syscall name="setfib" number="175"/>
+ <syscall name="ntp_adjtime" number="176"/>
+ <syscall name="setgid" number="181"/>
+ <syscall name="setegid" number="182"/>
+ <syscall name="seteuid" number="183"/>
+ <syscall name="lfs_bmapv" number="184"/>
+ <syscall name="lfs_markv" number="185"/>
+ <syscall name="lfs_segclean" number="186"/>
+ <syscall name="lfs_segwait" number="187"/>
+ <syscall name="freebsd11_stat" number="188" alias="stat"/>
+ <syscall name="freebsd11_fstat" number="189" alias="fstat"/>
+ <syscall name="freebsd11_lstat" number="190" alias="lstat"/>
+ <syscall name="pathconf" number="191"/>
+ <syscall name="fpathconf" number="192"/>
+ <syscall name="getrlimit" number="194"/>
+ <syscall name="setrlimit" number="195"/>
+ <syscall name="freebsd11_getdirentries" number="196" alias="getdirentries"/>
+ <syscall name="freebsd6_mmap" number="197" alias="mmap"/>
+ <syscall name="__syscall" number="198"/>
+ <syscall name="freebsd6_lseek" number="199" alias="lseek"/>
+ <syscall name="freebsd6_truncate" number="200" alias="truncate"/>
+ <syscall name="freebsd6_ftruncate" number="201" alias="ftruncate"/>
+ <syscall name="__sysctl" number="202"/>
+ <syscall name="mlock" number="203"/>
+ <syscall name="munlock" number="204"/>
+ <syscall name="undelete" number="205"/>
+ <syscall name="futimes" number="206"/>
+ <syscall name="getpgid" number="207"/>
+ <syscall name="poll" number="209"/>
+ <syscall name="freebsd7___semctl" number="220" alias="__semctl"/>
+ <syscall name="semget" number="221"/>
+ <syscall name="semop" number="222"/>
+ <syscall name="semconfig" number="223"/>
+ <syscall name="freebsd7_msgctl" number="224" alias="msgctl"/>
+ <syscall name="msgget" number="225"/>
+ <syscall name="msgsnd" number="226"/>
+ <syscall name="msgrcv" number="227"/>
+ <syscall name="shmat" number="228"/>
+ <syscall name="freebsd7_shmctl" number="229" alias="shmctl"/>
+ <syscall name="shmdt" number="230"/>
+ <syscall name="shmget" number="231"/>
+ <syscall name="clock_gettime" number="232"/>
+ <syscall name="clock_settime" number="233"/>
+ <syscall name="clock_getres" number="234"/>
+ <syscall name="ktimer_create" number="235"/>
+ <syscall name="ktimer_delete" number="236"/>
+ <syscall name="ktimer_settime" number="237"/>
+ <syscall name="ktimer_gettime" number="238"/>
+ <syscall name="ktimer_getoverrun" number="239"/>
+ <syscall name="nanosleep" number="240"/>
+ <syscall name="ffclock_getcounter" number="241"/>
+ <syscall name="ffclock_setestimate" number="242"/>
+ <syscall name="ffclock_getestimate" number="243"/>
+ <syscall name="clock_nanosleep" number="244"/>
+ <syscall name="clock_getcpuclockid2" number="247"/>
+ <syscall name="ntp_gettime" number="248"/>
+ <syscall name="minherit" number="250"/>
+ <syscall name="rfork" number="251"/>
+ <syscall name="openbsd_poll" number="252"/>
+ <syscall name="issetugid" number="253"/>
+ <syscall name="lchown" number="254"/>
+ <syscall name="aio_read" number="255"/>
+ <syscall name="aio_write" number="256"/>
+ <syscall name="lio_listio" number="257"/>
+ <syscall name="freebsd11_getdents" number="272" alias="getdents"/>
+ <syscall name="lchmod" number="274"/>
+ <syscall name="netbsd_lchown" number="275"/>
+ <syscall name="lutimes" number="276"/>
+ <syscall name="netbsd_msync" number="277"/>
+ <syscall name="freebsd11_nstat" number="278" alias="nstat"/>
+ <syscall name="freebsd11_nfstat" number="279" alias="nfstat"/>
+ <syscall name="freebsd11_nlstat" number="280" alias="nlstat"/>
+ <syscall name="preadv" number="289"/>
+ <syscall name="pwritev" number="290"/>
+ <syscall name="freebsd4_fhstatfs" number="297" alias="fhstatfs"/>
+ <syscall name="fhopen" number="298"/>
+ <syscall name="freebsd11_fhstat" number="299" alias="fhstat"/>
+ <syscall name="modnext" number="300"/>
+ <syscall name="modstat" number="301"/>
+ <syscall name="modfnext" number="302"/>
+ <syscall name="modfind" number="303"/>
+ <syscall name="kldload" number="304"/>
+ <syscall name="kldunload" number="305"/>
+ <syscall name="kldfind" number="306"/>
+ <syscall name="kldnext" number="307"/>
+ <syscall name="kldstat" number="308"/>
+ <syscall name="kldfirstmod" number="309"/>
+ <syscall name="getsid" number="310"/>
+ <syscall name="setresuid" number="311"/>
+ <syscall name="setresgid" number="312"/>
+ <syscall name="signanosleep" number="313"/>
+ <syscall name="aio_return" number="314"/>
+ <syscall name="aio_suspend" number="315"/>
+ <syscall name="aio_cancel" number="316"/>
+ <syscall name="aio_error" number="317"/>
+ <syscall name="freebsd6_aio_read" number="318" alias="aio_read"/>
+ <syscall name="freebsd6_aio_write" number="319" alias="aio_write"/>
+ <syscall name="freebsd6_lio_listio" number="320" alias="lio_listio"/>
+ <syscall name="yield" number="321"/>
+ <syscall name="thr_sleep" number="322"/>
+ <syscall name="thr_wakeup" number="323"/>
+ <syscall name="mlockall" number="324"/>
+ <syscall name="munlockall" number="325"/>
+ <syscall name="__getcwd" number="326"/>
+ <syscall name="sched_setparam" number="327"/>
+ <syscall name="sched_getparam" number="328"/>
+ <syscall name="sched_setscheduler" number="329"/>
+ <syscall name="sched_getscheduler" number="330"/>
+ <syscall name="sched_yield" number="331"/>
+ <syscall name="sched_get_priority_max" number="332"/>
+ <syscall name="sched_get_priority_min" number="333"/>
+ <syscall name="sched_rr_get_interval" number="334"/>
+ <syscall name="utrace" number="335"/>
+ <syscall name="freebsd4_sendfile" number="336" alias="sendfile"/>
+ <syscall name="kldsym" number="337"/>
+ <syscall name="jail" number="338"/>
+ <syscall name="nnpfs_syscall" number="339"/>
+ <syscall name="sigprocmask" number="340"/>
+ <syscall name="sigsuspend" number="341"/>
+ <syscall name="freebsd4_sigaction" number="342" alias="sigaction"/>
+ <syscall name="sigpending" number="343"/>
+ <syscall name="freebsd4_sigreturn" number="344" alias="sigreturn"/>
+ <syscall name="sigtimedwait" number="345"/>
+ <syscall name="sigwaitinfo" number="346"/>
+ <syscall name="__acl_get_file" number="347"/>
+ <syscall name="__acl_set_file" number="348"/>
+ <syscall name="__acl_get_fd" number="349"/>
+ <syscall name="__acl_set_fd" number="350"/>
+ <syscall name="__acl_delete_file" number="351"/>
+ <syscall name="__acl_delete_fd" number="352"/>
+ <syscall name="__acl_aclcheck_file" number="353"/>
+ <syscall name="__acl_aclcheck_fd" number="354"/>
+ <syscall name="extattrctl" number="355"/>
+ <syscall name="extattr_set_file" number="356"/>
+ <syscall name="extattr_get_file" number="357"/>
+ <syscall name="extattr_delete_file" number="358"/>
+ <syscall name="aio_waitcomplete" number="359"/>
+ <syscall name="getresuid" number="360"/>
+ <syscall name="getresgid" number="361"/>
+ <syscall name="kqueue" number="362"/>
+ <syscall name="freebsd11_kevent" number="363" alias="kevent"/>
+ <syscall name="__cap_get_proc" number="364"/>
+ <syscall name="__cap_set_proc" number="365"/>
+ <syscall name="__cap_get_fd" number="366"/>
+ <syscall name="__cap_get_file" number="367"/>
+ <syscall name="__cap_set_fd" number="368"/>
+ <syscall name="__cap_set_file" number="369"/>
+ <syscall name="extattr_set_fd" number="371"/>
+ <syscall name="extattr_get_fd" number="372"/>
+ <syscall name="extattr_delete_fd" number="373"/>
+ <syscall name="__setugid" number="374"/>
+ <syscall name="nfsclnt" number="375"/>
+ <syscall name="eaccess" number="376"/>
+ <syscall name="afs3_syscall" number="377"/>
+ <syscall name="nmount" number="378"/>
+ <syscall name="kse_exit" number="379"/>
+ <syscall name="kse_wakeup" number="380"/>
+ <syscall name="kse_create" number="381"/>
+ <syscall name="kse_thr_interrupt" number="382"/>
+ <syscall name="kse_release" number="383"/>
+ <syscall name="__mac_get_proc" number="384"/>
+ <syscall name="__mac_set_proc" number="385"/>
+ <syscall name="__mac_get_fd" number="386"/>
+ <syscall name="__mac_get_file" number="387"/>
+ <syscall name="__mac_set_fd" number="388"/>
+ <syscall name="__mac_set_file" number="389"/>
+ <syscall name="kenv" number="390"/>
+ <syscall name="lchflags" number="391"/>
+ <syscall name="uuidgen" number="392"/>
+ <syscall name="sendfile" number="393"/>
+ <syscall name="mac_syscall" number="394"/>
+ <syscall name="freebsd11_getfsstat" number="395" alias="getfsstat"/>
+ <syscall name="freebsd11_statfs" number="396" alias="statfs"/>
+ <syscall name="freebsd11_fstatfs" number="397" alias="fstatfs"/>
+ <syscall name="freebsd11_fhstatfs" number="398" alias="fhstatfs"/>
+ <syscall name="ksem_close" number="400"/>
+ <syscall name="ksem_post" number="401"/>
+ <syscall name="ksem_wait" number="402"/>
+ <syscall name="ksem_trywait" number="403"/>
+ <syscall name="ksem_init" number="404"/>
+ <syscall name="ksem_open" number="405"/>
+ <syscall name="ksem_unlink" number="406"/>
+ <syscall name="ksem_getvalue" number="407"/>
+ <syscall name="ksem_destroy" number="408"/>
+ <syscall name="__mac_get_pid" number="409"/>
+ <syscall name="__mac_get_link" number="410"/>
+ <syscall name="__mac_set_link" number="411"/>
+ <syscall name="extattr_set_link" number="412"/>
+ <syscall name="extattr_get_link" number="413"/>
+ <syscall name="extattr_delete_link" number="414"/>
+ <syscall name="__mac_execve" number="415"/>
+ <syscall name="sigaction" number="416"/>
+ <syscall name="sigreturn" number="417"/>
+ <syscall name="getcontext" number="421"/>
+ <syscall name="setcontext" number="422"/>
+ <syscall name="swapcontext" number="423"/>
+ <syscall name="swapoff" number="424"/>
+ <syscall name="__acl_get_link" number="425"/>
+ <syscall name="__acl_set_link" number="426"/>
+ <syscall name="__acl_delete_link" number="427"/>
+ <syscall name="__acl_aclcheck_link" number="428"/>
+ <syscall name="sigwait" number="429"/>
+ <syscall name="thr_create" number="430"/>
+ <syscall name="thr_exit" number="431"/>
+ <syscall name="thr_self" number="432"/>
+ <syscall name="thr_kill" number="433"/>
+ <syscall name="jail_attach" number="436"/>
+ <syscall name="extattr_list_fd" number="437"/>
+ <syscall name="extattr_list_file" number="438"/>
+ <syscall name="extattr_list_link" number="439"/>
+ <syscall name="kse_switchin" number="440"/>
+ <syscall name="ksem_timedwait" number="441"/>
+ <syscall name="thr_suspend" number="442"/>
+ <syscall name="thr_wake" number="443"/>
+ <syscall name="kldunloadf" number="444"/>
+ <syscall name="audit" number="445"/>
+ <syscall name="auditon" number="446"/>
+ <syscall name="getauid" number="447"/>
+ <syscall name="setauid" number="448"/>
+ <syscall name="getaudit" number="449"/>
+ <syscall name="setaudit" number="450"/>
+ <syscall name="getaudit_addr" number="451"/>
+ <syscall name="setaudit_addr" number="452"/>
+ <syscall name="auditctl" number="453"/>
+ <syscall name="_umtx_op" number="454"/>
+ <syscall name="thr_new" number="455"/>
+ <syscall name="sigqueue" number="456"/>
+ <syscall name="kmq_open" number="457"/>
+ <syscall name="kmq_setattr" number="458"/>
+ <syscall name="kmq_timedreceive" number="459"/>
+ <syscall name="kmq_timedsend" number="460"/>
+ <syscall name="kmq_notify" number="461"/>
+ <syscall name="kmq_unlink" number="462"/>
+ <syscall name="abort2" number="463"/>
+ <syscall name="thr_set_name" number="464"/>
+ <syscall name="aio_fsync" number="465"/>
+ <syscall name="rtprio_thread" number="466"/>
+ <syscall name="sctp_peeloff" number="471"/>
+ <syscall name="sctp_generic_sendmsg" number="472"/>
+ <syscall name="sctp_generic_sendmsg_iov" number="473"/>
+ <syscall name="sctp_generic_recvmsg" number="474"/>
+ <syscall name="pread" number="475"/>
+ <syscall name="pwrite" number="476"/>
+ <syscall name="mmap" number="477"/>
+ <syscall name="lseek" number="478"/>
+ <syscall name="truncate" number="479"/>
+ <syscall name="ftruncate" number="480"/>
+ <syscall name="thr_kill2" number="481"/>
+ <syscall name="freebsd12_shm_open" number="482" alias="shm_open"/>
+ <syscall name="shm_unlink" number="483"/>
+ <syscall name="cpuset" number="484"/>
+ <syscall name="cpuset_setid" number="485"/>
+ <syscall name="cpuset_getid" number="486"/>
+ <syscall name="cpuset_getaffinity" number="487"/>
+ <syscall name="cpuset_setaffinity" number="488"/>
+ <syscall name="faccessat" number="489"/>
+ <syscall name="fchmodat" number="490"/>
+ <syscall name="fchownat" number="491"/>
+ <syscall name="fexecve" number="492"/>
+ <syscall name="freebsd11_fstatat" number="493" alias="fstatat"/>
+ <syscall name="futimesat" number="494"/>
+ <syscall name="linkat" number="495"/>
+ <syscall name="mkdirat" number="496"/>
+ <syscall name="mkfifoat" number="497"/>
+ <syscall name="freebsd11_mknodat" number="498" alias="mknodat"/>
+ <syscall name="openat" number="499"/>
+ <syscall name="readlinkat" number="500"/>
+ <syscall name="renameat" number="501"/>
+ <syscall name="symlinkat" number="502"/>
+ <syscall name="unlinkat" number="503"/>
+ <syscall name="posix_openpt" number="504"/>
+ <syscall name="gssd_syscall" number="505"/>
+ <syscall name="jail_get" number="506"/>
+ <syscall name="jail_set" number="507"/>
+ <syscall name="jail_remove" number="508"/>
+ <syscall name="freebsd12_closefrom" number="509" alias="closefrom"/>
+ <syscall name="__semctl" number="510"/>
+ <syscall name="msgctl" number="511"/>
+ <syscall name="shmctl" number="512"/>
+ <syscall name="lpathconf" number="513"/>
+ <syscall name="cap_new" number="514"/>
+ <syscall name="__cap_rights_get" number="515"/>
+ <syscall name="cap_enter" number="516"/>
+ <syscall name="cap_getmode" number="517"/>
+ <syscall name="pdfork" number="518"/>
+ <syscall name="pdkill" number="519"/>
+ <syscall name="pdgetpid" number="520"/>
+ <syscall name="pselect" number="522"/>
+ <syscall name="getloginclass" number="523"/>
+ <syscall name="setloginclass" number="524"/>
+ <syscall name="rctl_get_racct" number="525"/>
+ <syscall name="rctl_get_rules" number="526"/>
+ <syscall name="rctl_get_limits" number="527"/>
+ <syscall name="rctl_add_rule" number="528"/>
+ <syscall name="rctl_remove_rule" number="529"/>
+ <syscall name="posix_fallocate" number="530"/>
+ <syscall name="posix_fadvise" number="531"/>
+ <syscall name="wait6" number="532"/>
+ <syscall name="cap_rights_limit" number="533"/>
+ <syscall name="cap_ioctls_limit" number="534"/>
+ <syscall name="cap_ioctls_get" number="535"/>
+ <syscall name="cap_fcntls_limit" number="536"/>
+ <syscall name="cap_fcntls_get" number="537"/>
+ <syscall name="bindat" number="538"/>
+ <syscall name="connectat" number="539"/>
+ <syscall name="chflagsat" number="540"/>
+ <syscall name="accept4" number="541"/>
+ <syscall name="pipe2" number="542"/>
+ <syscall name="aio_mlock" number="543"/>
+ <syscall name="procctl" number="544"/>
+ <syscall name="ppoll" number="545"/>
+ <syscall name="futimens" number="546"/>
+ <syscall name="utimensat" number="547"/>
+ <syscall name="numa_getaffinity" number="548"/>
+ <syscall name="numa_setaffinity" number="549"/>
+ <syscall name="fdatasync" number="550"/>
+ <syscall name="fstat" number="551"/>
+ <syscall name="fstatat" number="552"/>
+ <syscall name="fhstat" number="553"/>
+ <syscall name="getdirentries" number="554"/>
+ <syscall name="statfs" number="555"/>
+ <syscall name="fstatfs" number="556"/>
+ <syscall name="getfsstat" number="557"/>
+ <syscall name="fhstatfs" number="558"/>
+ <syscall name="mknodat" number="559"/>
+ <syscall name="kevent" number="560"/>
+ <syscall name="cpuset_getdomain" number="561"/>
+ <syscall name="cpuset_setdomain" number="562"/>
+ <syscall name="getrandom" number="563"/>
+ <syscall name="getfhat" number="564"/>
+ <syscall name="fhlink" number="565"/>
+ <syscall name="fhlinkat" number="566"/>
+ <syscall name="fhreadlink" number="567"/>
+ <syscall name="funlinkat" number="568"/>
+ <syscall name="copy_file_range" number="569"/>
+ <syscall name="__sysctlbyname" number="570"/>
+ <syscall name="shm_open2" number="571"/>
+ <syscall name="shm_rename" number="572"/>
+ <syscall name="sigfastblock" number="573"/>
+ <syscall name="__realpathat" number="574"/>
+ <syscall name="close_range" number="575"/>
+ <syscall name="rpctls_syscall" number="576"/>
+</syscalls_info>
diff --git a/share/gdb/syscalls/gdb-syscalls.dtd b/share/gdb/syscalls/gdb-syscalls.dtd
new file mode 100644
index 0000000..4f80ff2
--- /dev/null
+++ b/share/gdb/syscalls/gdb-syscalls.dtd
@@ -0,0 +1,16 @@
+<!-- Copyright (C) 2009-2023 Free Software Foundation, Inc.
+
+ Copying and distribution of this file, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved. -->
+
+<!-- The root element of a syscall info is <syscalls-info>. -->
+
+<!ELEMENT syscalls-info (syscall*)>
+
+<!ELEMENT syscall EMPTY>
+<!ATTLIST syscall
+ name CDATA #REQUIRED
+ number CDATA #REQUIRED
+ alias CDATA #IMPLIED
+ groups CDATA #IMPLIED>
diff --git a/share/gdb/syscalls/i386-linux.xml b/share/gdb/syscalls/i386-linux.xml
new file mode 100644
index 0000000..531e898
--- /dev/null
+++ b/share/gdb/syscalls/i386-linux.xml
@@ -0,0 +1,454 @@
+<?xml version="1.0"?>
+<!DOCTYPE syscalls_info SYSTEM "gdb-syscalls.dtd">
+<!-- Copyright (C) 2009-2023 Free Software Foundation, Inc.
+
+ Copying and distribution of this file, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved. -->
+<!-- This file was generated using the following file:
+
+ arch/x86/entry/syscalls/syscall_32.tbl
+
+ The file mentioned above belongs to the Linux Kernel. -->
+<syscalls_info>
+ <syscall name="restart_syscall" number="0"/>
+ <syscall name="exit" number="1" groups="process"/>
+ <syscall name="fork" number="2" groups="process"/>
+ <syscall name="read" number="3" groups="descriptor"/>
+ <syscall name="write" number="4" groups="descriptor"/>
+ <syscall name="open" number="5" groups="descriptor,file"/>
+ <syscall name="close" number="6" groups="descriptor"/>
+ <syscall name="waitpid" number="7" groups="process"/>
+ <syscall name="creat" number="8" groups="descriptor,file"/>
+ <syscall name="link" number="9" groups="file"/>
+ <syscall name="unlink" number="10" groups="file"/>
+ <syscall name="execve" number="11" groups="file,process"/>
+ <syscall name="chdir" number="12" groups="file"/>
+ <syscall name="time" number="13"/>
+ <syscall name="mknod" number="14" groups="file"/>
+ <syscall name="chmod" number="15" groups="file"/>
+ <syscall name="lchown" number="16" groups="file"/>
+ <syscall name="break" number="17" groups="memory"/>
+ <syscall name="oldstat" number="18" groups="file"/>
+ <syscall name="lseek" number="19" groups="descriptor"/>
+ <syscall name="getpid" number="20"/>
+ <syscall name="mount" number="21" groups="file"/>
+ <syscall name="umount" number="22" groups="file"/>
+ <syscall name="setuid" number="23"/>
+ <syscall name="getuid" number="24"/>
+ <syscall name="stime" number="25"/>
+ <syscall name="ptrace" number="26"/>
+ <syscall name="alarm" number="27"/>
+ <syscall name="oldfstat" number="28" groups="descriptor"/>
+ <syscall name="pause" number="29" groups="signal"/>
+ <syscall name="utime" number="30" groups="file"/>
+ <syscall name="stty" number="31"/>
+ <syscall name="gtty" number="32"/>
+ <syscall name="access" number="33" groups="file"/>
+ <syscall name="nice" number="34"/>
+ <syscall name="ftime" number="35"/>
+ <syscall name="sync" number="36"/>
+ <syscall name="kill" number="37" groups="signal"/>
+ <syscall name="rename" number="38" groups="file"/>
+ <syscall name="mkdir" number="39" groups="file"/>
+ <syscall name="rmdir" number="40" groups="file"/>
+ <syscall name="dup" number="41" groups="descriptor"/>
+ <syscall name="pipe" number="42" groups="descriptor"/>
+ <syscall name="times" number="43"/>
+ <syscall name="prof" number="44"/>
+ <syscall name="brk" number="45" groups="memory"/>
+ <syscall name="setgid" number="46"/>
+ <syscall name="getgid" number="47"/>
+ <syscall name="signal" number="48" groups="signal"/>
+ <syscall name="geteuid" number="49"/>
+ <syscall name="getegid" number="50"/>
+ <syscall name="acct" number="51" groups="file"/>
+ <syscall name="umount2" number="52" groups="file"/>
+ <syscall name="lock" number="53"/>
+ <syscall name="ioctl" number="54" groups="descriptor"/>
+ <syscall name="fcntl" number="55" groups="descriptor"/>
+ <syscall name="mpx" number="56"/>
+ <syscall name="setpgid" number="57"/>
+ <syscall name="ulimit" number="58"/>
+ <syscall name="oldolduname" number="59"/>
+ <syscall name="umask" number="60"/>
+ <syscall name="chroot" number="61" groups="file"/>
+ <syscall name="ustat" number="62"/>
+ <syscall name="dup2" number="63" groups="descriptor"/>
+ <syscall name="getppid" number="64"/>
+ <syscall name="getpgrp" number="65"/>
+ <syscall name="setsid" number="66"/>
+ <syscall name="sigaction" number="67" groups="signal"/>
+ <syscall name="sgetmask" number="68" groups="signal"/>
+ <syscall name="ssetmask" number="69" groups="signal"/>
+ <syscall name="setreuid" number="70"/>
+ <syscall name="setregid" number="71"/>
+ <syscall name="sigsuspend" number="72" groups="signal"/>
+ <syscall name="sigpending" number="73" groups="signal"/>
+ <syscall name="sethostname" number="74"/>
+ <syscall name="setrlimit" number="75"/>
+ <syscall name="getrlimit" number="76"/>
+ <syscall name="getrusage" number="77"/>
+ <syscall name="gettimeofday" number="78"/>
+ <syscall name="settimeofday" number="79"/>
+ <syscall name="getgroups" number="80"/>
+ <syscall name="setgroups" number="81"/>
+ <syscall name="select" number="82" groups="descriptor"/>
+ <syscall name="symlink" number="83" groups="file"/>
+ <syscall name="oldlstat" number="84" groups="file"/>
+ <syscall name="readlink" number="85" groups="file"/>
+ <syscall name="uselib" number="86" groups="file"/>
+ <syscall name="swapon" number="87" groups="file"/>
+ <syscall name="reboot" number="88"/>
+ <syscall name="readdir" number="89" groups="descriptor"/>
+ <syscall name="mmap" number="90" groups="descriptor,memory"/>
+ <syscall name="munmap" number="91" groups="memory"/>
+ <syscall name="truncate" number="92" groups="file"/>
+ <syscall name="ftruncate" number="93" groups="descriptor"/>
+ <syscall name="fchmod" number="94" groups="descriptor"/>
+ <syscall name="fchown" number="95" groups="descriptor"/>
+ <syscall name="getpriority" number="96"/>
+ <syscall name="setpriority" number="97"/>
+ <syscall name="profil" number="98"/>
+ <syscall name="statfs" number="99" groups="file"/>
+ <syscall name="fstatfs" number="100" groups="descriptor"/>
+ <syscall name="ioperm" number="101"/>
+ <syscall name="socketcall" number="102" groups="descriptor"/>
+ <syscall name="syslog" number="103"/>
+ <syscall name="setitimer" number="104"/>
+ <syscall name="getitimer" number="105"/>
+ <syscall name="stat" number="106" groups="file"/>
+ <syscall name="lstat" number="107" groups="file"/>
+ <syscall name="fstat" number="108" groups="descriptor"/>
+ <syscall name="olduname" number="109"/>
+ <syscall name="iopl" number="110"/>
+ <syscall name="vhangup" number="111"/>
+ <syscall name="idle" number="112"/>
+ <syscall name="vm86old" number="113"/>
+ <syscall name="wait4" number="114" groups="process"/>
+ <syscall name="swapoff" number="115" groups="file"/>
+ <syscall name="sysinfo" number="116"/>
+ <syscall name="ipc" number="117" groups="ipc"/>
+ <syscall name="fsync" number="118" groups="descriptor"/>
+ <syscall name="sigreturn" number="119" groups="signal"/>
+ <syscall name="clone" number="120" groups="process"/>
+ <syscall name="setdomainname" number="121"/>
+ <syscall name="uname" number="122"/>
+ <syscall name="modify_ldt" number="123"/>
+ <syscall name="adjtimex" number="124"/>
+ <syscall name="mprotect" number="125" groups="memory"/>
+ <syscall name="sigprocmask" number="126" groups="signal"/>
+ <syscall name="create_module" number="127"/>
+ <syscall name="init_module" number="128"/>
+ <syscall name="delete_module" number="129"/>
+ <syscall name="get_kernel_syms" number="130"/>
+ <syscall name="quotactl" number="131" groups="file"/>
+ <syscall name="getpgid" number="132"/>
+ <syscall name="fchdir" number="133" groups="descriptor"/>
+ <syscall name="bdflush" number="134"/>
+ <syscall name="sysfs" number="135"/>
+ <syscall name="personality" number="136"/>
+ <syscall name="afs_syscall" number="137"/>
+ <syscall name="setfsuid" number="138"/>
+ <syscall name="setfsgid" number="139"/>
+ <syscall name="_llseek" number="140" groups="descriptor"/>
+ <syscall name="getdents" number="141" groups="descriptor"/>
+ <syscall name="_newselect" number="142" groups="descriptor"/>
+ <syscall name="flock" number="143" groups="descriptor"/>
+ <syscall name="msync" number="144" groups="memory"/>
+ <syscall name="readv" number="145" groups="descriptor"/>
+ <syscall name="writev" number="146" groups="descriptor"/>
+ <syscall name="getsid" number="147"/>
+ <syscall name="fdatasync" number="148" groups="descriptor"/>
+ <syscall name="_sysctl" number="149"/>
+ <syscall name="mlock" number="150" groups="memory"/>
+ <syscall name="munlock" number="151" groups="memory"/>
+ <syscall name="mlockall" number="152" groups="memory"/>
+ <syscall name="munlockall" number="153" groups="memory"/>
+ <syscall name="sched_setparam" number="154"/>
+ <syscall name="sched_getparam" number="155"/>
+ <syscall name="sched_setscheduler" number="156"/>
+ <syscall name="sched_getscheduler" number="157"/>
+ <syscall name="sched_yield" number="158"/>
+ <syscall name="sched_get_priority_max" number="159"/>
+ <syscall name="sched_get_priority_min" number="160"/>
+ <syscall name="sched_rr_get_interval" number="161"/>
+ <syscall name="nanosleep" number="162"/>
+ <syscall name="mremap" number="163" groups="memory"/>
+ <syscall name="setresuid" number="164"/>
+ <syscall name="getresuid" number="165"/>
+ <syscall name="vm86" number="166"/>
+ <syscall name="query_module" number="167"/>
+ <syscall name="poll" number="168" groups="descriptor"/>
+ <syscall name="nfsservctl" number="169"/>
+ <syscall name="setresgid" number="170"/>
+ <syscall name="getresgid" number="171"/>
+ <syscall name="prctl" number="172"/>
+ <syscall name="rt_sigreturn" number="173" groups="signal"/>
+ <syscall name="rt_sigaction" number="174" groups="signal"/>
+ <syscall name="rt_sigprocmask" number="175" groups="signal"/>
+ <syscall name="rt_sigpending" number="176" groups="signal"/>
+ <syscall name="rt_sigtimedwait" number="177" groups="signal"/>
+ <syscall name="rt_sigqueueinfo" number="178" groups="signal"/>
+ <syscall name="rt_sigsuspend" number="179" groups="signal"/>
+ <syscall name="pread64" number="180" groups="descriptor"/>
+ <syscall name="pwrite64" number="181" groups="descriptor"/>
+ <syscall name="chown" number="182" groups="file"/>
+ <syscall name="getcwd" number="183" groups="file"/>
+ <syscall name="capget" number="184"/>
+ <syscall name="capset" number="185"/>
+ <syscall name="sigaltstack" number="186" groups="signal"/>
+ <syscall name="sendfile" number="187" groups="descriptor,network"/>
+ <syscall name="getpmsg" number="188"/>
+ <syscall name="putpmsg" number="189"/>
+ <syscall name="vfork" number="190" groups="process"/>
+ <syscall name="ugetrlimit" number="191"/>
+ <syscall name="mmap2" number="192" groups="descriptor,memory"/>
+ <syscall name="truncate64" number="193" groups="file"/>
+ <syscall name="ftruncate64" number="194" groups="descriptor"/>
+ <syscall name="stat64" number="195" groups="file"/>
+ <syscall name="lstat64" number="196" groups="file"/>
+ <syscall name="fstat64" number="197" groups="descriptor"/>
+ <syscall name="lchown32" number="198" groups="file"/>
+ <syscall name="getuid32" number="199"/>
+ <syscall name="getgid32" number="200"/>
+ <syscall name="geteuid32" number="201"/>
+ <syscall name="getegid32" number="202"/>
+ <syscall name="setreuid32" number="203"/>
+ <syscall name="setregid32" number="204"/>
+ <syscall name="getgroups32" number="205"/>
+ <syscall name="setgroups32" number="206"/>
+ <syscall name="fchown32" number="207" groups="descriptor"/>
+ <syscall name="setresuid32" number="208"/>
+ <syscall name="getresuid32" number="209"/>
+ <syscall name="setresgid32" number="210"/>
+ <syscall name="getresgid32" number="211"/>
+ <syscall name="chown32" number="212" groups="file"/>
+ <syscall name="setuid32" number="213"/>
+ <syscall name="setgid32" number="214"/>
+ <syscall name="setfsuid32" number="215"/>
+ <syscall name="setfsgid32" number="216"/>
+ <syscall name="pivot_root" number="217" groups="file"/>
+ <syscall name="mincore" number="218" groups="memory"/>
+ <syscall name="madvise" number="219" groups="memory"/>
+ <syscall name="getdents64" number="220" groups="descriptor"/>
+ <syscall name="fcntl64" number="221" groups="descriptor"/>
+ <syscall name="gettid" number="224"/>
+ <syscall name="readahead" number="225" groups="descriptor"/>
+ <syscall name="setxattr" number="226" groups="file"/>
+ <syscall name="lsetxattr" number="227" groups="file"/>
+ <syscall name="fsetxattr" number="228" groups="descriptor"/>
+ <syscall name="getxattr" number="229" groups="file"/>
+ <syscall name="lgetxattr" number="230" groups="file"/>
+ <syscall name="fgetxattr" number="231" groups="descriptor"/>
+ <syscall name="listxattr" number="232" groups="file"/>
+ <syscall name="llistxattr" number="233" groups="file"/>
+ <syscall name="flistxattr" number="234" groups="descriptor"/>
+ <syscall name="removexattr" number="235" groups="file"/>
+ <syscall name="lremovexattr" number="236" groups="file"/>
+ <syscall name="fremovexattr" number="237" groups="descriptor"/>
+ <syscall name="tkill" number="238" groups="signal"/>
+ <syscall name="sendfile64" number="239" groups="descriptor,network"/>
+ <syscall name="futex" number="240"/>
+ <syscall name="sched_setaffinity" number="241"/>
+ <syscall name="sched_getaffinity" number="242"/>
+ <syscall name="set_thread_area" number="243"/>
+ <syscall name="get_thread_area" number="244"/>
+ <syscall name="io_setup" number="245"/>
+ <syscall name="io_destroy" number="246"/>
+ <syscall name="io_getevents" number="247"/>
+ <syscall name="io_submit" number="248"/>
+ <syscall name="io_cancel" number="249"/>
+ <syscall name="fadvise64" number="250" groups="descriptor"/>
+ <syscall name="exit_group" number="252" groups="process"/>
+ <syscall name="lookup_dcookie" number="253"/>
+ <syscall name="epoll_create" number="254" groups="descriptor"/>
+ <syscall name="epoll_ctl" number="255" groups="descriptor"/>
+ <syscall name="epoll_wait" number="256" groups="descriptor"/>
+ <syscall name="remap_file_pages" number="257" groups="memory"/>
+ <syscall name="set_tid_address" number="258"/>
+ <syscall name="timer_create" number="259"/>
+ <syscall name="timer_settime" number="260"/>
+ <syscall name="timer_gettime" number="261"/>
+ <syscall name="timer_getoverrun" number="262"/>
+ <syscall name="timer_delete" number="263"/>
+ <syscall name="clock_settime" number="264"/>
+ <syscall name="clock_gettime" number="265"/>
+ <syscall name="clock_getres" number="266"/>
+ <syscall name="clock_nanosleep" number="267"/>
+ <syscall name="statfs64" number="268" groups="file"/>
+ <syscall name="fstatfs64" number="269" groups="descriptor"/>
+ <syscall name="tgkill" number="270" groups="signal"/>
+ <syscall name="utimes" number="271" groups="file"/>
+ <syscall name="fadvise64_64" number="272" groups="descriptor"/>
+ <syscall name="vserver" number="273"/>
+ <syscall name="mbind" number="274" groups="memory"/>
+ <syscall name="get_mempolicy" number="275" groups="memory"/>
+ <syscall name="set_mempolicy" number="276" groups="memory"/>
+ <syscall name="mq_open" number="277"/>
+ <syscall name="mq_unlink" number="278"/>
+ <syscall name="mq_timedsend" number="279"/>
+ <syscall name="mq_timedreceive" number="280"/>
+ <syscall name="mq_notify" number="281"/>
+ <syscall name="mq_getsetattr" number="282"/>
+ <syscall name="kexec_load" number="283"/>
+ <syscall name="waitid" number="284" groups="process"/>
+ <syscall name="add_key" number="286"/>
+ <syscall name="request_key" number="287"/>
+ <syscall name="keyctl" number="288"/>
+ <syscall name="ioprio_set" number="289"/>
+ <syscall name="ioprio_get" number="290"/>
+ <syscall name="inotify_init" number="291" groups="descriptor"/>
+ <syscall name="inotify_add_watch" number="292" groups="descriptor"/>
+ <syscall name="inotify_rm_watch" number="293" groups="descriptor"/>
+ <syscall name="migrate_pages" number="294" groups="memory"/>
+ <syscall name="openat" number="295" groups="descriptor,file"/>
+ <syscall name="mkdirat" number="296" groups="descriptor,file"/>
+ <syscall name="mknodat" number="297" groups="descriptor,file"/>
+ <syscall name="fchownat" number="298" groups="descriptor,file"/>
+ <syscall name="futimesat" number="299" groups="descriptor,file"/>
+ <syscall name="fstatat64" number="300" groups="descriptor,file"/>
+ <syscall name="unlinkat" number="301" groups="descriptor,file"/>
+ <syscall name="renameat" number="302" groups="descriptor,file"/>
+ <syscall name="linkat" number="303" groups="descriptor,file"/>
+ <syscall name="symlinkat" number="304" groups="descriptor,file"/>
+ <syscall name="readlinkat" number="305" groups="descriptor,file"/>
+ <syscall name="fchmodat" number="306" groups="descriptor,file"/>
+ <syscall name="faccessat" number="307" groups="descriptor,file"/>
+ <syscall name="pselect6" number="308" groups="descriptor"/>
+ <syscall name="ppoll" number="309" groups="descriptor"/>
+ <syscall name="unshare" number="310" groups="process"/>
+ <syscall name="set_robust_list" number="311"/>
+ <syscall name="get_robust_list" number="312"/>
+ <syscall name="splice" number="313" groups="descriptor"/>
+ <syscall name="sync_file_range" number="314" groups="descriptor"/>
+ <syscall name="tee" number="315" groups="descriptor"/>
+ <syscall name="vmsplice" number="316" groups="descriptor"/>
+ <syscall name="move_pages" number="317" groups="memory"/>
+ <syscall name="getcpu" number="318"/>
+ <syscall name="epoll_pwait" number="319" groups="descriptor"/>
+ <syscall name="utimensat" number="320" groups="descriptor,file"/>
+ <syscall name="signalfd" number="321" groups="descriptor,signal"/>
+ <syscall name="timerfd_create" number="322" groups="descriptor"/>
+ <syscall name="eventfd" number="323" groups="descriptor"/>
+ <syscall name="fallocate" number="324" groups="descriptor"/>
+ <syscall name="timerfd_settime" number="325" groups="descriptor"/>
+ <syscall name="timerfd_gettime" number="326" groups="descriptor"/>
+ <syscall name="signalfd4" number="327" groups="descriptor,signal"/>
+ <syscall name="eventfd2" number="328" groups="descriptor"/>
+ <syscall name="epoll_create1" number="329" groups="descriptor"/>
+ <syscall name="dup3" number="330" groups="descriptor"/>
+ <syscall name="pipe2" number="331" groups="descriptor"/>
+ <syscall name="inotify_init1" number="332" groups="descriptor"/>
+ <syscall name="preadv" number="333" groups="descriptor"/>
+ <syscall name="pwritev" number="334" groups="descriptor"/>
+ <syscall name="rt_tgsigqueueinfo" number="335" groups="process,signal"/>
+ <syscall name="perf_event_open" number="336" groups="descriptor"/>
+ <syscall name="recvmmsg" number="337" groups="network"/>
+ <syscall name="fanotify_init" number="338" groups="descriptor"/>
+ <syscall name="fanotify_mark" number="339" groups="descriptor,file"/>
+ <syscall name="prlimit64" number="340"/>
+ <syscall name="name_to_handle_at" number="341" groups="descriptor,file"/>
+ <syscall name="open_by_handle_at" number="342" groups="descriptor"/>
+ <syscall name="clock_adjtime" number="343"/>
+ <syscall name="syncfs" number="344" groups="descriptor"/>
+ <syscall name="sendmmsg" number="345" groups="network"/>
+ <syscall name="setns" number="346" groups="descriptor"/>
+ <syscall name="process_vm_readv" number="347"/>
+ <syscall name="process_vm_writev" number="348"/>
+ <syscall name="kcmp" number="349"/>
+ <syscall name="finit_module" number="350" groups="descriptor"/>
+ <syscall name="sched_setattr" number="351"/>
+ <syscall name="sched_getattr" number="352"/>
+ <syscall name="renameat2" number="353"/>
+ <syscall name="seccomp" number="354"/>
+ <syscall name="getrandom" number="355"/>
+ <syscall name="memfd_create" number="356"/>
+ <syscall name="bpf" number="357"/>
+ <syscall name="execveat" number="358"/>
+ <syscall name="socket" number="359" groups="network"/>
+ <syscall name="socketpair" number="360" groups="network"/>
+ <syscall name="bind" number="361" groups="network"/>
+ <syscall name="connect" number="362" groups="network"/>
+ <syscall name="listen" number="363" groups="network"/>
+ <syscall name="accept4" number="364" groups="network"/>
+ <syscall name="getsockopt" number="365" groups="network"/>
+ <syscall name="setsockopt" number="366" groups="network"/>
+ <syscall name="getsockname" number="367" groups="network"/>
+ <syscall name="getpeername" number="368" groups="network"/>
+ <syscall name="sendto" number="369" groups="network"/>
+ <syscall name="sendmsg" number="370" groups="network"/>
+ <syscall name="recvfrom" number="371" groups="network"/>
+ <syscall name="recvmsg" number="372" groups="network"/>
+ <syscall name="shutdown" number="373" groups="network"/>
+ <syscall name="userfaultfd" number="374"/>
+ <syscall name="membarrier" number="375"/>
+ <syscall name="mlock2" number="376"/>
+ <syscall name="copy_file_range" number="377"/>
+ <syscall name="preadv2" number="378"/>
+ <syscall name="pwritev2" number="379"/>
+ <syscall name="pkey_mprotect" number="380"/>
+ <syscall name="pkey_alloc" number="381"/>
+ <syscall name="pkey_free" number="382"/>
+ <syscall name="statx" number="383"/>
+ <syscall name="arch_prctl" number="384" groups="process"/>
+ <syscall name="io_pgetevents" number="385"/>
+ <syscall name="rseq" number="386"/>
+ <syscall name="semget" number="393" groups="ipc"/>
+ <syscall name="semctl" number="394" groups="ipc"/>
+ <syscall name="shmget" number="395" groups="ipc"/>
+ <syscall name="shmctl" number="396" groups="ipc"/>
+ <syscall name="shmat" number="397" groups="ipc,memory"/>
+ <syscall name="shmdt" number="398" groups="ipc,memory"/>
+ <syscall name="msgget" number="399" groups="ipc"/>
+ <syscall name="msgsnd" number="400" groups="ipc"/>
+ <syscall name="msgrcv" number="401" groups="ipc"/>
+ <syscall name="msgctl" number="402" groups="ipc"/>
+ <syscall name="clock_gettime64" number="403"/>
+ <syscall name="clock_settime64" number="404"/>
+ <syscall name="clock_adjtime64" number="405"/>
+ <syscall name="clock_getres_time64" number="406"/>
+ <syscall name="clock_nanosleep_time64" number="407"/>
+ <syscall name="timer_gettime64" number="408"/>
+ <syscall name="timer_settime64" number="409"/>
+ <syscall name="timerfd_gettime64" number="410"/>
+ <syscall name="timerfd_settime64" number="411"/>
+ <syscall name="utimensat_time64" number="412"/>
+ <syscall name="pselect6_time64" number="413"/>
+ <syscall name="ppoll_time64" number="414"/>
+ <syscall name="io_pgetevents_time64" number="416"/>
+ <syscall name="recvmmsg_time64" number="417"/>
+ <syscall name="mq_timedsend_time64" number="418"/>
+ <syscall name="mq_timedreceive_time64" number="419"/>
+ <syscall name="semtimedop_time64" number="420"/>
+ <syscall name="rt_sigtimedwait_time64" number="421"/>
+ <syscall name="futex_time64" number="422"/>
+ <syscall name="sched_rr_get_interval_time64" number="423"/>
+ <syscall name="pidfd_send_signal" number="424"/>
+ <syscall name="io_uring_setup" number="425"/>
+ <syscall name="io_uring_enter" number="426"/>
+ <syscall name="io_uring_register" number="427"/>
+ <syscall name="open_tree" number="428"/>
+ <syscall name="move_mount" number="429"/>
+ <syscall name="fsopen" number="430"/>
+ <syscall name="fsconfig" number="431"/>
+ <syscall name="fsmount" number="432"/>
+ <syscall name="fspick" number="433"/>
+ <syscall name="pidfd_open" number="434"/>
+ <syscall name="clone3" number="435"/>
+ <syscall name="close_range" number="436"/>
+ <syscall name="openat2" number="437"/>
+ <syscall name="pidfd_getfd" number="438"/>
+ <syscall name="faccessat2" number="439"/>
+ <syscall name="process_madvise" number="440"/>
+ <syscall name="epoll_pwait2" number="441"/>
+ <syscall name="mount_setattr" number="442"/>
+ <syscall name="quotactl_fd" number="443"/>
+ <syscall name="landlock_create_ruleset" number="444"/>
+ <syscall name="landlock_add_rule" number="445"/>
+ <syscall name="landlock_restrict_self" number="446"/>
+ <syscall name="memfd_secret" number="447"/>
+ <syscall name="process_mrelease" number="448"/>
+ <syscall name="futex_waitv" number="449"/>
+ <syscall name="set_mempolicy_home_node" number="450"/>
+</syscalls_info>
diff --git a/share/gdb/syscalls/mips-n32-linux.xml b/share/gdb/syscalls/mips-n32-linux.xml
new file mode 100644
index 0000000..9247b5c
--- /dev/null
+++ b/share/gdb/syscalls/mips-n32-linux.xml
@@ -0,0 +1,390 @@
+<?xml version="1.0"?>
+<!DOCTYPE syscalls_info SYSTEM "gdb-syscalls.dtd">
+<!-- Copyright (C) 2011-2023 Free Software Foundation, Inc.
+
+ Copying and distribution of this file, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved. -->
+<!-- This file was generated using the following file:
+
+ arch/mips/kernel/syscalls/syscall_n32.tbl
+
+ The file mentioned above belongs to the Linux Kernel. -->
+<syscalls_info>
+ <syscall name="read" number="6000" groups="descriptor"/>
+ <syscall name="write" number="6001" groups="descriptor"/>
+ <syscall name="open" number="6002" groups="descriptor,file"/>
+ <syscall name="close" number="6003" groups="descriptor"/>
+ <syscall name="stat" number="6004" groups="file"/>
+ <syscall name="fstat" number="6005" groups="descriptor"/>
+ <syscall name="lstat" number="6006" groups="file"/>
+ <syscall name="poll" number="6007" groups="descriptor"/>
+ <syscall name="lseek" number="6008" groups="descriptor"/>
+ <syscall name="mmap" number="6009" groups="descriptor,memory"/>
+ <syscall name="mprotect" number="6010" groups="memory"/>
+ <syscall name="munmap" number="6011" groups="memory"/>
+ <syscall name="brk" number="6012" groups="memory"/>
+ <syscall name="rt_sigaction" number="6013" groups="signal"/>
+ <syscall name="rt_sigprocmask" number="6014" groups="signal"/>
+ <syscall name="ioctl" number="6015" groups="descriptor"/>
+ <syscall name="pread64" number="6016" groups="descriptor"/>
+ <syscall name="pwrite64" number="6017" groups="descriptor"/>
+ <syscall name="readv" number="6018" groups="descriptor"/>
+ <syscall name="writev" number="6019" groups="descriptor"/>
+ <syscall name="access" number="6020" groups="file"/>
+ <syscall name="pipe" number="6021" groups="descriptor"/>
+ <syscall name="_newselect" number="6022" groups="descriptor"/>
+ <syscall name="sched_yield" number="6023"/>
+ <syscall name="mremap" number="6024" groups="memory"/>
+ <syscall name="msync" number="6025" groups="memory"/>
+ <syscall name="mincore" number="6026" groups="memory"/>
+ <syscall name="madvise" number="6027" groups="memory"/>
+ <syscall name="shmget" number="6028" groups="ipc"/>
+ <syscall name="shmat" number="6029" groups="ipc,memory"/>
+ <syscall name="shmctl" number="6030" groups="ipc"/>
+ <syscall name="dup" number="6031" groups="descriptor"/>
+ <syscall name="dup2" number="6032" groups="descriptor"/>
+ <syscall name="pause" number="6033" groups="signal"/>
+ <syscall name="nanosleep" number="6034"/>
+ <syscall name="getitimer" number="6035"/>
+ <syscall name="setitimer" number="6036"/>
+ <syscall name="alarm" number="6037"/>
+ <syscall name="getpid" number="6038"/>
+ <syscall name="sendfile" number="6039" groups="descriptor,network"/>
+ <syscall name="socket" number="6040" groups="network"/>
+ <syscall name="connect" number="6041" groups="network"/>
+ <syscall name="accept" number="6042" groups="network"/>
+ <syscall name="sendto" number="6043" groups="network"/>
+ <syscall name="recvfrom" number="6044" groups="network"/>
+ <syscall name="sendmsg" number="6045" groups="network"/>
+ <syscall name="recvmsg" number="6046" groups="network"/>
+ <syscall name="shutdown" number="6047" groups="network"/>
+ <syscall name="bind" number="6048" groups="network"/>
+ <syscall name="listen" number="6049" groups="network"/>
+ <syscall name="getsockname" number="6050" groups="network"/>
+ <syscall name="getpeername" number="6051" groups="network"/>
+ <syscall name="socketpair" number="6052" groups="network"/>
+ <syscall name="setsockopt" number="6053" groups="network"/>
+ <syscall name="getsockopt" number="6054" groups="network"/>
+ <syscall name="clone" number="6055" groups="process"/>
+ <syscall name="fork" number="6056" groups="process"/>
+ <syscall name="execve" number="6057" groups="file,process"/>
+ <syscall name="exit" number="6058" groups="process"/>
+ <syscall name="wait4" number="6059" groups="process"/>
+ <syscall name="kill" number="6060" groups="signal"/>
+ <syscall name="uname" number="6061"/>
+ <syscall name="semget" number="6062" groups="ipc"/>
+ <syscall name="semop" number="6063" groups="ipc"/>
+ <syscall name="semctl" number="6064" groups="ipc"/>
+ <syscall name="shmdt" number="6065" groups="ipc,memory"/>
+ <syscall name="msgget" number="6066" groups="ipc"/>
+ <syscall name="msgsnd" number="6067" groups="ipc"/>
+ <syscall name="msgrcv" number="6068" groups="ipc"/>
+ <syscall name="msgctl" number="6069" groups="ipc"/>
+ <syscall name="fcntl" number="6070" groups="descriptor"/>
+ <syscall name="flock" number="6071" groups="descriptor"/>
+ <syscall name="fsync" number="6072" groups="descriptor"/>
+ <syscall name="fdatasync" number="6073" groups="descriptor"/>
+ <syscall name="truncate" number="6074" groups="file"/>
+ <syscall name="ftruncate" number="6075" groups="descriptor"/>
+ <syscall name="getdents" number="6076" groups="descriptor"/>
+ <syscall name="getcwd" number="6077" groups="file"/>
+ <syscall name="chdir" number="6078" groups="file"/>
+ <syscall name="fchdir" number="6079" groups="descriptor"/>
+ <syscall name="rename" number="6080" groups="file"/>
+ <syscall name="mkdir" number="6081" groups="file"/>
+ <syscall name="rmdir" number="6082" groups="file"/>
+ <syscall name="creat" number="6083" groups="descriptor,file"/>
+ <syscall name="link" number="6084" groups="file"/>
+ <syscall name="unlink" number="6085" groups="file"/>
+ <syscall name="symlink" number="6086" groups="file"/>
+ <syscall name="readlink" number="6087" groups="file"/>
+ <syscall name="chmod" number="6088" groups="file"/>
+ <syscall name="fchmod" number="6089" groups="descriptor"/>
+ <syscall name="chown" number="6090" groups="file"/>
+ <syscall name="fchown" number="6091" groups="descriptor"/>
+ <syscall name="lchown" number="6092" groups="file"/>
+ <syscall name="umask" number="6093"/>
+ <syscall name="gettimeofday" number="6094"/>
+ <syscall name="getrlimit" number="6095"/>
+ <syscall name="getrusage" number="6096"/>
+ <syscall name="sysinfo" number="6097"/>
+ <syscall name="times" number="6098"/>
+ <syscall name="ptrace" number="6099"/>
+ <syscall name="getuid" number="6100"/>
+ <syscall name="syslog" number="6101"/>
+ <syscall name="getgid" number="6102"/>
+ <syscall name="setuid" number="6103"/>
+ <syscall name="setgid" number="6104"/>
+ <syscall name="geteuid" number="6105"/>
+ <syscall name="getegid" number="6106"/>
+ <syscall name="setpgid" number="6107"/>
+ <syscall name="getppid" number="6108"/>
+ <syscall name="getpgrp" number="6109"/>
+ <syscall name="setsid" number="6110"/>
+ <syscall name="setreuid" number="6111"/>
+ <syscall name="setregid" number="6112"/>
+ <syscall name="getgroups" number="6113"/>
+ <syscall name="setgroups" number="6114"/>
+ <syscall name="setresuid" number="6115"/>
+ <syscall name="getresuid" number="6116"/>
+ <syscall name="setresgid" number="6117"/>
+ <syscall name="getresgid" number="6118"/>
+ <syscall name="getpgid" number="6119"/>
+ <syscall name="setfsuid" number="6120"/>
+ <syscall name="setfsgid" number="6121"/>
+ <syscall name="getsid" number="6122"/>
+ <syscall name="capget" number="6123"/>
+ <syscall name="capset" number="6124"/>
+ <syscall name="rt_sigpending" number="6125" groups="signal"/>
+ <syscall name="rt_sigtimedwait" number="6126" groups="signal"/>
+ <syscall name="rt_sigqueueinfo" number="6127" groups="signal"/>
+ <syscall name="rt_sigsuspend" number="6128" groups="signal"/>
+ <syscall name="sigaltstack" number="6129" groups="signal"/>
+ <syscall name="utime" number="6130" groups="file"/>
+ <syscall name="mknod" number="6131" groups="file"/>
+ <syscall name="personality" number="6132"/>
+ <syscall name="ustat" number="6133"/>
+ <syscall name="statfs" number="6134" groups="file"/>
+ <syscall name="fstatfs" number="6135" groups="descriptor"/>
+ <syscall name="sysfs" number="6136"/>
+ <syscall name="getpriority" number="6137"/>
+ <syscall name="setpriority" number="6138"/>
+ <syscall name="sched_setparam" number="6139"/>
+ <syscall name="sched_getparam" number="6140"/>
+ <syscall name="sched_setscheduler" number="6141"/>
+ <syscall name="sched_getscheduler" number="6142"/>
+ <syscall name="sched_get_priority_max" number="6143"/>
+ <syscall name="sched_get_priority_min" number="6144"/>
+ <syscall name="sched_rr_get_interval" number="6145"/>
+ <syscall name="mlock" number="6146" groups="memory"/>
+ <syscall name="munlock" number="6147" groups="memory"/>
+ <syscall name="mlockall" number="6148" groups="memory"/>
+ <syscall name="munlockall" number="6149" groups="memory"/>
+ <syscall name="vhangup" number="6150"/>
+ <syscall name="pivot_root" number="6151" groups="file"/>
+ <syscall name="_sysctl" number="6152"/>
+ <syscall name="prctl" number="6153"/>
+ <syscall name="adjtimex" number="6154"/>
+ <syscall name="setrlimit" number="6155"/>
+ <syscall name="chroot" number="6156" groups="file"/>
+ <syscall name="sync" number="6157"/>
+ <syscall name="acct" number="6158" groups="file"/>
+ <syscall name="settimeofday" number="6159"/>
+ <syscall name="mount" number="6160" groups="file"/>
+ <syscall name="umount2" number="6161" groups="file"/>
+ <syscall name="swapon" number="6162" groups="file"/>
+ <syscall name="swapoff" number="6163" groups="file"/>
+ <syscall name="reboot" number="6164"/>
+ <syscall name="sethostname" number="6165"/>
+ <syscall name="setdomainname" number="6166"/>
+ <syscall name="create_module" number="6167"/>
+ <syscall name="init_module" number="6168"/>
+ <syscall name="delete_module" number="6169"/>
+ <syscall name="get_kernel_syms" number="6170"/>
+ <syscall name="query_module" number="6171"/>
+ <syscall name="quotactl" number="6172" groups="file"/>
+ <syscall name="nfsservctl" number="6173"/>
+ <syscall name="getpmsg" number="6174"/>
+ <syscall name="putpmsg" number="6175"/>
+ <syscall name="afs_syscall" number="6176"/>
+ <syscall name="gettid" number="6178"/>
+ <syscall name="readahead" number="6179" groups="descriptor"/>
+ <syscall name="setxattr" number="6180" groups="file"/>
+ <syscall name="lsetxattr" number="6181" groups="file"/>
+ <syscall name="fsetxattr" number="6182" groups="descriptor"/>
+ <syscall name="getxattr" number="6183" groups="file"/>
+ <syscall name="lgetxattr" number="6184" groups="file"/>
+ <syscall name="fgetxattr" number="6185" groups="descriptor"/>
+ <syscall name="listxattr" number="6186" groups="file"/>
+ <syscall name="llistxattr" number="6187" groups="file"/>
+ <syscall name="flistxattr" number="6188" groups="descriptor"/>
+ <syscall name="removexattr" number="6189" groups="file"/>
+ <syscall name="lremovexattr" number="6190" groups="file"/>
+ <syscall name="fremovexattr" number="6191" groups="descriptor"/>
+ <syscall name="tkill" number="6192" groups="signal"/>
+ <syscall name="futex" number="6194"/>
+ <syscall name="sched_setaffinity" number="6195"/>
+ <syscall name="sched_getaffinity" number="6196"/>
+ <syscall name="cacheflush" number="6197"/>
+ <syscall name="cachectl" number="6198"/>
+ <syscall name="sysmips" number="6199"/>
+ <syscall name="io_setup" number="6200"/>
+ <syscall name="io_destroy" number="6201"/>
+ <syscall name="io_getevents" number="6202"/>
+ <syscall name="io_submit" number="6203"/>
+ <syscall name="io_cancel" number="6204"/>
+ <syscall name="exit_group" number="6205" groups="process"/>
+ <syscall name="lookup_dcookie" number="6206"/>
+ <syscall name="epoll_create" number="6207" groups="descriptor"/>
+ <syscall name="epoll_ctl" number="6208" groups="descriptor"/>
+ <syscall name="epoll_wait" number="6209" groups="descriptor"/>
+ <syscall name="remap_file_pages" number="6210" groups="memory"/>
+ <syscall name="rt_sigreturn" number="6211" groups="signal"/>
+ <syscall name="fcntl64" number="6212" groups="descriptor"/>
+ <syscall name="set_tid_address" number="6213"/>
+ <syscall name="restart_syscall" number="6214"/>
+ <syscall name="semtimedop" number="6215" groups="ipc"/>
+ <syscall name="fadvise64" number="6216" groups="descriptor"/>
+ <syscall name="statfs64" number="6217" groups="file"/>
+ <syscall name="fstatfs64" number="6218" groups="descriptor"/>
+ <syscall name="sendfile64" number="6219" groups="descriptor,network"/>
+ <syscall name="timer_create" number="6220"/>
+ <syscall name="timer_settime" number="6221"/>
+ <syscall name="timer_gettime" number="6222"/>
+ <syscall name="timer_getoverrun" number="6223"/>
+ <syscall name="timer_delete" number="6224"/>
+ <syscall name="clock_settime" number="6225"/>
+ <syscall name="clock_gettime" number="6226"/>
+ <syscall name="clock_getres" number="6227"/>
+ <syscall name="clock_nanosleep" number="6228"/>
+ <syscall name="tgkill" number="6229" groups="signal"/>
+ <syscall name="utimes" number="6230" groups="file"/>
+ <syscall name="mbind" number="6231" groups="memory"/>
+ <syscall name="get_mempolicy" number="6232" groups="memory"/>
+ <syscall name="set_mempolicy" number="6233" groups="memory"/>
+ <syscall name="mq_open" number="6234"/>
+ <syscall name="mq_unlink" number="6235"/>
+ <syscall name="mq_timedsend" number="6236"/>
+ <syscall name="mq_timedreceive" number="6237"/>
+ <syscall name="mq_notify" number="6238"/>
+ <syscall name="mq_getsetattr" number="6239"/>
+ <syscall name="vserver" number="6240"/>
+ <syscall name="waitid" number="6241" groups="process"/>
+ <syscall name="add_key" number="6243"/>
+ <syscall name="request_key" number="6244"/>
+ <syscall name="keyctl" number="6245"/>
+ <syscall name="set_thread_area" number="6246"/>
+ <syscall name="inotify_init" number="6247" groups="descriptor"/>
+ <syscall name="inotify_add_watch" number="6248" groups="descriptor"/>
+ <syscall name="inotify_rm_watch" number="6249" groups="descriptor"/>
+ <syscall name="migrate_pages" number="6250" groups="memory"/>
+ <syscall name="openat" number="6251" groups="descriptor,file"/>
+ <syscall name="mkdirat" number="6252" groups="descriptor,file"/>
+ <syscall name="mknodat" number="6253" groups="descriptor,file"/>
+ <syscall name="fchownat" number="6254" groups="descriptor,file"/>
+ <syscall name="futimesat" number="6255" groups="descriptor,file"/>
+ <syscall name="newfstatat" number="6256" groups="descriptor,file"/>
+ <syscall name="unlinkat" number="6257" groups="descriptor,file"/>
+ <syscall name="renameat" number="6258" groups="descriptor,file"/>
+ <syscall name="linkat" number="6259" groups="descriptor,file"/>
+ <syscall name="symlinkat" number="6260" groups="descriptor,file"/>
+ <syscall name="readlinkat" number="6261" groups="descriptor,file"/>
+ <syscall name="fchmodat" number="6262" groups="descriptor,file"/>
+ <syscall name="faccessat" number="6263" groups="descriptor,file"/>
+ <syscall name="pselect6" number="6264" groups="descriptor"/>
+ <syscall name="ppoll" number="6265" groups="descriptor"/>
+ <syscall name="unshare" number="6266" groups="process"/>
+ <syscall name="splice" number="6267" groups="descriptor"/>
+ <syscall name="sync_file_range" number="6268" groups="descriptor"/>
+ <syscall name="tee" number="6269" groups="descriptor"/>
+ <syscall name="vmsplice" number="6270" groups="descriptor"/>
+ <syscall name="move_pages" number="6271" groups="memory"/>
+ <syscall name="set_robust_list" number="6272"/>
+ <syscall name="get_robust_list" number="6273"/>
+ <syscall name="kexec_load" number="6274"/>
+ <syscall name="getcpu" number="6275"/>
+ <syscall name="epoll_pwait" number="6276" groups="descriptor"/>
+ <syscall name="ioprio_set" number="6277"/>
+ <syscall name="ioprio_get" number="6278"/>
+ <syscall name="utimensat" number="6279" groups="descriptor,file"/>
+ <syscall name="signalfd" number="6280" groups="descriptor,signal"/>
+ <syscall name="timerfd" number="6281" groups="descriptor"/>
+ <syscall name="eventfd" number="6282" groups="descriptor"/>
+ <syscall name="fallocate" number="6283" groups="descriptor"/>
+ <syscall name="timerfd_create" number="6284" groups="descriptor"/>
+ <syscall name="timerfd_gettime" number="6285" groups="descriptor"/>
+ <syscall name="timerfd_settime" number="6286" groups="descriptor"/>
+ <syscall name="signalfd4" number="6287" groups="descriptor,signal"/>
+ <syscall name="eventfd2" number="6288" groups="descriptor"/>
+ <syscall name="epoll_create1" number="6289" groups="descriptor"/>
+ <syscall name="dup3" number="6290" groups="descriptor"/>
+ <syscall name="pipe2" number="6291" groups="descriptor"/>
+ <syscall name="inotify_init1" number="6292" groups="descriptor"/>
+ <syscall name="preadv" number="6293" groups="descriptor"/>
+ <syscall name="pwritev" number="6294" groups="descriptor"/>
+ <syscall name="rt_tgsigqueueinfo" number="6295" groups="process,signal"/>
+ <syscall name="perf_event_open" number="6296" groups="descriptor"/>
+ <syscall name="accept4" number="6297" groups="network"/>
+ <syscall name="recvmmsg" number="6298" groups="network"/>
+ <syscall name="getdents64" number="6299" groups="descriptor"/>
+ <syscall name="fanotify_init" number="6300" groups="descriptor"/>
+ <syscall name="fanotify_mark" number="6301" groups="descriptor,file"/>
+ <syscall name="prlimit64" number="6302"/>
+ <syscall name="name_to_handle_at" number="6303" groups="descriptor,file"/>
+ <syscall name="open_by_handle_at" number="6304" groups="descriptor"/>
+ <syscall name="clock_adjtime" number="6305"/>
+ <syscall name="syncfs" number="6306" groups="descriptor"/>
+ <syscall name="sendmmsg" number="6307" groups="network"/>
+ <syscall name="setns" number="6308" groups="descriptor"/>
+ <syscall name="process_vm_readv" number="6309"/>
+ <syscall name="process_vm_writev" number="6310"/>
+ <syscall name="kcmp" number="6311"/>
+ <syscall name="finit_module" number="6312" groups="descriptor"/>
+ <syscall name="sched_setattr" number="6313"/>
+ <syscall name="sched_getattr" number="6314"/>
+ <syscall name="renameat2" number="6315"/>
+ <syscall name="seccomp" number="6316"/>
+ <syscall name="getrandom" number="6317"/>
+ <syscall name="memfd_create" number="6318"/>
+ <syscall name="bpf" number="6319"/>
+ <syscall name="execveat" number="6320"/>
+ <syscall name="userfaultfd" number="6321"/>
+ <syscall name="membarrier" number="6322"/>
+ <syscall name="mlock2" number="6323"/>
+ <syscall name="copy_file_range" number="6324"/>
+ <syscall name="preadv2" number="6325"/>
+ <syscall name="pwritev2" number="6326"/>
+ <syscall name="pkey_mprotect" number="6327"/>
+ <syscall name="pkey_alloc" number="6328"/>
+ <syscall name="pkey_free" number="6329"/>
+ <syscall name="statx" number="6330"/>
+ <syscall name="rseq" number="6331"/>
+ <syscall name="io_pgetevents" number="6332"/>
+ <syscall name="clock_gettime64" number="6403"/>
+ <syscall name="clock_settime64" number="6404"/>
+ <syscall name="clock_adjtime64" number="6405"/>
+ <syscall name="clock_getres_time64" number="6406"/>
+ <syscall name="clock_nanosleep_time64" number="6407"/>
+ <syscall name="timer_gettime64" number="6408"/>
+ <syscall name="timer_settime64" number="6409"/>
+ <syscall name="timerfd_gettime64" number="6410"/>
+ <syscall name="timerfd_settime64" number="6411"/>
+ <syscall name="utimensat_time64" number="6412"/>
+ <syscall name="pselect6_time64" number="6413"/>
+ <syscall name="ppoll_time64" number="6414"/>
+ <syscall name="io_pgetevents_time64" number="6416"/>
+ <syscall name="recvmmsg_time64" number="6417"/>
+ <syscall name="mq_timedsend_time64" number="6418"/>
+ <syscall name="mq_timedreceive_time64" number="6419"/>
+ <syscall name="semtimedop_time64" number="6420"/>
+ <syscall name="rt_sigtimedwait_time64" number="6421"/>
+ <syscall name="futex_time64" number="6422"/>
+ <syscall name="sched_rr_get_interval_time64" number="6423"/>
+ <syscall name="pidfd_send_signal" number="6424"/>
+ <syscall name="io_uring_setup" number="6425"/>
+ <syscall name="io_uring_enter" number="6426"/>
+ <syscall name="io_uring_register" number="6427"/>
+ <syscall name="open_tree" number="6428"/>
+ <syscall name="move_mount" number="6429"/>
+ <syscall name="fsopen" number="6430"/>
+ <syscall name="fsconfig" number="6431"/>
+ <syscall name="fsmount" number="6432"/>
+ <syscall name="fspick" number="6433"/>
+ <syscall name="pidfd_open" number="6434"/>
+ <syscall name="clone3" number="6435"/>
+ <syscall name="close_range" number="6436"/>
+ <syscall name="openat2" number="6437"/>
+ <syscall name="pidfd_getfd" number="6438"/>
+ <syscall name="faccessat2" number="6439"/>
+ <syscall name="process_madvise" number="6440"/>
+ <syscall name="epoll_pwait2" number="6441"/>
+ <syscall name="mount_setattr" number="6442"/>
+ <syscall name="quotactl_fd" number="6443"/>
+ <syscall name="landlock_create_ruleset" number="6444"/>
+ <syscall name="landlock_add_rule" number="6445"/>
+ <syscall name="landlock_restrict_self" number="6446"/>
+ <syscall name="process_mrelease" number="6448"/>
+ <syscall name="futex_waitv" number="6449"/>
+ <syscall name="set_mempolicy_home_node" number="6450"/>
+</syscalls_info>
diff --git a/share/gdb/syscalls/mips-n64-linux.xml b/share/gdb/syscalls/mips-n64-linux.xml
new file mode 100644
index 0000000..d6583a1
--- /dev/null
+++ b/share/gdb/syscalls/mips-n64-linux.xml
@@ -0,0 +1,365 @@
+<?xml version="1.0"?>
+<!DOCTYPE syscalls_info SYSTEM "gdb-syscalls.dtd">
+<!-- Copyright (C) 2011-2023 Free Software Foundation, Inc.
+
+ Copying and distribution of this file, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved. -->
+<!-- This file was generated using the following file:
+
+ arch/mips/kernel/syscalls/syscall_n64.tbl
+
+ The file mentioned above belongs to the Linux Kernel. -->
+<syscalls_info>
+ <syscall name="read" number="5000" groups="descriptor"/>
+ <syscall name="write" number="5001" groups="descriptor"/>
+ <syscall name="open" number="5002" groups="descriptor,file"/>
+ <syscall name="close" number="5003" groups="descriptor"/>
+ <syscall name="stat" number="5004" groups="file"/>
+ <syscall name="fstat" number="5005" groups="descriptor"/>
+ <syscall name="lstat" number="5006" groups="file"/>
+ <syscall name="poll" number="5007" groups="descriptor"/>
+ <syscall name="lseek" number="5008" groups="descriptor"/>
+ <syscall name="mmap" number="5009" groups="descriptor,memory"/>
+ <syscall name="mprotect" number="5010" groups="memory"/>
+ <syscall name="munmap" number="5011" groups="memory"/>
+ <syscall name="brk" number="5012" groups="memory"/>
+ <syscall name="rt_sigaction" number="5013" groups="signal"/>
+ <syscall name="rt_sigprocmask" number="5014" groups="signal"/>
+ <syscall name="ioctl" number="5015" groups="descriptor"/>
+ <syscall name="pread64" number="5016" groups="descriptor"/>
+ <syscall name="pwrite64" number="5017" groups="descriptor"/>
+ <syscall name="readv" number="5018" groups="descriptor"/>
+ <syscall name="writev" number="5019" groups="descriptor"/>
+ <syscall name="access" number="5020" groups="file"/>
+ <syscall name="pipe" number="5021" groups="descriptor"/>
+ <syscall name="_newselect" number="5022" groups="descriptor"/>
+ <syscall name="sched_yield" number="5023"/>
+ <syscall name="mremap" number="5024" groups="memory"/>
+ <syscall name="msync" number="5025" groups="memory"/>
+ <syscall name="mincore" number="5026" groups="memory"/>
+ <syscall name="madvise" number="5027" groups="memory"/>
+ <syscall name="shmget" number="5028" groups="ipc"/>
+ <syscall name="shmat" number="5029" groups="ipc,memory"/>
+ <syscall name="shmctl" number="5030" groups="ipc"/>
+ <syscall name="dup" number="5031" groups="descriptor"/>
+ <syscall name="dup2" number="5032" groups="descriptor"/>
+ <syscall name="pause" number="5033" groups="signal"/>
+ <syscall name="nanosleep" number="5034"/>
+ <syscall name="getitimer" number="5035"/>
+ <syscall name="setitimer" number="5036"/>
+ <syscall name="alarm" number="5037"/>
+ <syscall name="getpid" number="5038"/>
+ <syscall name="sendfile" number="5039" groups="descriptor,network"/>
+ <syscall name="socket" number="5040" groups="network"/>
+ <syscall name="connect" number="5041" groups="network"/>
+ <syscall name="accept" number="5042" groups="network"/>
+ <syscall name="sendto" number="5043" groups="network"/>
+ <syscall name="recvfrom" number="5044" groups="network"/>
+ <syscall name="sendmsg" number="5045" groups="network"/>
+ <syscall name="recvmsg" number="5046" groups="network"/>
+ <syscall name="shutdown" number="5047" groups="network"/>
+ <syscall name="bind" number="5048" groups="network"/>
+ <syscall name="listen" number="5049" groups="network"/>
+ <syscall name="getsockname" number="5050" groups="network"/>
+ <syscall name="getpeername" number="5051" groups="network"/>
+ <syscall name="socketpair" number="5052" groups="network"/>
+ <syscall name="setsockopt" number="5053" groups="network"/>
+ <syscall name="getsockopt" number="5054" groups="network"/>
+ <syscall name="clone" number="5055" groups="process"/>
+ <syscall name="fork" number="5056" groups="process"/>
+ <syscall name="execve" number="5057" groups="file,process"/>
+ <syscall name="exit" number="5058" groups="process"/>
+ <syscall name="wait4" number="5059" groups="process"/>
+ <syscall name="kill" number="5060" groups="signal"/>
+ <syscall name="uname" number="5061"/>
+ <syscall name="semget" number="5062" groups="ipc"/>
+ <syscall name="semop" number="5063" groups="ipc"/>
+ <syscall name="semctl" number="5064" groups="ipc"/>
+ <syscall name="shmdt" number="5065" groups="ipc,memory"/>
+ <syscall name="msgget" number="5066" groups="ipc"/>
+ <syscall name="msgsnd" number="5067" groups="ipc"/>
+ <syscall name="msgrcv" number="5068" groups="ipc"/>
+ <syscall name="msgctl" number="5069" groups="ipc"/>
+ <syscall name="fcntl" number="5070" groups="descriptor"/>
+ <syscall name="flock" number="5071" groups="descriptor"/>
+ <syscall name="fsync" number="5072" groups="descriptor"/>
+ <syscall name="fdatasync" number="5073" groups="descriptor"/>
+ <syscall name="truncate" number="5074" groups="file"/>
+ <syscall name="ftruncate" number="5075" groups="descriptor"/>
+ <syscall name="getdents" number="5076" groups="descriptor"/>
+ <syscall name="getcwd" number="5077" groups="file"/>
+ <syscall name="chdir" number="5078" groups="file"/>
+ <syscall name="fchdir" number="5079" groups="descriptor"/>
+ <syscall name="rename" number="5080" groups="file"/>
+ <syscall name="mkdir" number="5081" groups="file"/>
+ <syscall name="rmdir" number="5082" groups="file"/>
+ <syscall name="creat" number="5083" groups="descriptor,file"/>
+ <syscall name="link" number="5084" groups="file"/>
+ <syscall name="unlink" number="5085" groups="file"/>
+ <syscall name="symlink" number="5086" groups="file"/>
+ <syscall name="readlink" number="5087" groups="file"/>
+ <syscall name="chmod" number="5088" groups="file"/>
+ <syscall name="fchmod" number="5089" groups="descriptor"/>
+ <syscall name="chown" number="5090" groups="file"/>
+ <syscall name="fchown" number="5091" groups="descriptor"/>
+ <syscall name="lchown" number="5092" groups="file"/>
+ <syscall name="umask" number="5093"/>
+ <syscall name="gettimeofday" number="5094"/>
+ <syscall name="getrlimit" number="5095"/>
+ <syscall name="getrusage" number="5096"/>
+ <syscall name="sysinfo" number="5097"/>
+ <syscall name="times" number="5098"/>
+ <syscall name="ptrace" number="5099"/>
+ <syscall name="getuid" number="5100"/>
+ <syscall name="syslog" number="5101"/>
+ <syscall name="getgid" number="5102"/>
+ <syscall name="setuid" number="5103"/>
+ <syscall name="setgid" number="5104"/>
+ <syscall name="geteuid" number="5105"/>
+ <syscall name="getegid" number="5106"/>
+ <syscall name="setpgid" number="5107"/>
+ <syscall name="getppid" number="5108"/>
+ <syscall name="getpgrp" number="5109"/>
+ <syscall name="setsid" number="5110"/>
+ <syscall name="setreuid" number="5111"/>
+ <syscall name="setregid" number="5112"/>
+ <syscall name="getgroups" number="5113"/>
+ <syscall name="setgroups" number="5114"/>
+ <syscall name="setresuid" number="5115"/>
+ <syscall name="getresuid" number="5116"/>
+ <syscall name="setresgid" number="5117"/>
+ <syscall name="getresgid" number="5118"/>
+ <syscall name="getpgid" number="5119"/>
+ <syscall name="setfsuid" number="5120"/>
+ <syscall name="setfsgid" number="5121"/>
+ <syscall name="getsid" number="5122"/>
+ <syscall name="capget" number="5123"/>
+ <syscall name="capset" number="5124"/>
+ <syscall name="rt_sigpending" number="5125" groups="signal"/>
+ <syscall name="rt_sigtimedwait" number="5126" groups="signal"/>
+ <syscall name="rt_sigqueueinfo" number="5127" groups="signal"/>
+ <syscall name="rt_sigsuspend" number="5128" groups="signal"/>
+ <syscall name="sigaltstack" number="5129" groups="signal"/>
+ <syscall name="utime" number="5130" groups="file"/>
+ <syscall name="mknod" number="5131" groups="file"/>
+ <syscall name="personality" number="5132"/>
+ <syscall name="ustat" number="5133"/>
+ <syscall name="statfs" number="5134" groups="file"/>
+ <syscall name="fstatfs" number="5135" groups="descriptor"/>
+ <syscall name="sysfs" number="5136"/>
+ <syscall name="getpriority" number="5137"/>
+ <syscall name="setpriority" number="5138"/>
+ <syscall name="sched_setparam" number="5139"/>
+ <syscall name="sched_getparam" number="5140"/>
+ <syscall name="sched_setscheduler" number="5141"/>
+ <syscall name="sched_getscheduler" number="5142"/>
+ <syscall name="sched_get_priority_max" number="5143"/>
+ <syscall name="sched_get_priority_min" number="5144"/>
+ <syscall name="sched_rr_get_interval" number="5145"/>
+ <syscall name="mlock" number="5146" groups="memory"/>
+ <syscall name="munlock" number="5147" groups="memory"/>
+ <syscall name="mlockall" number="5148" groups="memory"/>
+ <syscall name="munlockall" number="5149" groups="memory"/>
+ <syscall name="vhangup" number="5150"/>
+ <syscall name="pivot_root" number="5151" groups="file"/>
+ <syscall name="_sysctl" number="5152"/>
+ <syscall name="prctl" number="5153"/>
+ <syscall name="adjtimex" number="5154"/>
+ <syscall name="setrlimit" number="5155"/>
+ <syscall name="chroot" number="5156" groups="file"/>
+ <syscall name="sync" number="5157"/>
+ <syscall name="acct" number="5158" groups="file"/>
+ <syscall name="settimeofday" number="5159"/>
+ <syscall name="mount" number="5160" groups="file"/>
+ <syscall name="umount2" number="5161" groups="file"/>
+ <syscall name="swapon" number="5162" groups="file"/>
+ <syscall name="swapoff" number="5163" groups="file"/>
+ <syscall name="reboot" number="5164"/>
+ <syscall name="sethostname" number="5165"/>
+ <syscall name="setdomainname" number="5166"/>
+ <syscall name="create_module" number="5167"/>
+ <syscall name="init_module" number="5168"/>
+ <syscall name="delete_module" number="5169"/>
+ <syscall name="get_kernel_syms" number="5170"/>
+ <syscall name="query_module" number="5171"/>
+ <syscall name="quotactl" number="5172" groups="file"/>
+ <syscall name="nfsservctl" number="5173"/>
+ <syscall name="getpmsg" number="5174"/>
+ <syscall name="putpmsg" number="5175"/>
+ <syscall name="afs_syscall" number="5176"/>
+ <syscall name="gettid" number="5178"/>
+ <syscall name="readahead" number="5179" groups="descriptor"/>
+ <syscall name="setxattr" number="5180" groups="file"/>
+ <syscall name="lsetxattr" number="5181" groups="file"/>
+ <syscall name="fsetxattr" number="5182" groups="descriptor"/>
+ <syscall name="getxattr" number="5183" groups="file"/>
+ <syscall name="lgetxattr" number="5184" groups="file"/>
+ <syscall name="fgetxattr" number="5185" groups="descriptor"/>
+ <syscall name="listxattr" number="5186" groups="file"/>
+ <syscall name="llistxattr" number="5187" groups="file"/>
+ <syscall name="flistxattr" number="5188" groups="descriptor"/>
+ <syscall name="removexattr" number="5189" groups="file"/>
+ <syscall name="lremovexattr" number="5190" groups="file"/>
+ <syscall name="fremovexattr" number="5191" groups="descriptor"/>
+ <syscall name="tkill" number="5192" groups="signal"/>
+ <syscall name="futex" number="5194"/>
+ <syscall name="sched_setaffinity" number="5195"/>
+ <syscall name="sched_getaffinity" number="5196"/>
+ <syscall name="cacheflush" number="5197"/>
+ <syscall name="cachectl" number="5198"/>
+ <syscall name="sysmips" number="5199"/>
+ <syscall name="io_setup" number="5200"/>
+ <syscall name="io_destroy" number="5201"/>
+ <syscall name="io_getevents" number="5202"/>
+ <syscall name="io_submit" number="5203"/>
+ <syscall name="io_cancel" number="5204"/>
+ <syscall name="exit_group" number="5205" groups="process"/>
+ <syscall name="lookup_dcookie" number="5206"/>
+ <syscall name="epoll_create" number="5207" groups="descriptor"/>
+ <syscall name="epoll_ctl" number="5208" groups="descriptor"/>
+ <syscall name="epoll_wait" number="5209" groups="descriptor"/>
+ <syscall name="remap_file_pages" number="5210" groups="memory"/>
+ <syscall name="rt_sigreturn" number="5211" groups="signal"/>
+ <syscall name="set_tid_address" number="5212"/>
+ <syscall name="restart_syscall" number="5213"/>
+ <syscall name="semtimedop" number="5214" groups="ipc"/>
+ <syscall name="fadvise64" number="5215" groups="descriptor"/>
+ <syscall name="timer_create" number="5216"/>
+ <syscall name="timer_settime" number="5217"/>
+ <syscall name="timer_gettime" number="5218"/>
+ <syscall name="timer_getoverrun" number="5219"/>
+ <syscall name="timer_delete" number="5220"/>
+ <syscall name="clock_settime" number="5221"/>
+ <syscall name="clock_gettime" number="5222"/>
+ <syscall name="clock_getres" number="5223"/>
+ <syscall name="clock_nanosleep" number="5224"/>
+ <syscall name="tgkill" number="5225" groups="signal"/>
+ <syscall name="utimes" number="5226" groups="file"/>
+ <syscall name="mbind" number="5227" groups="memory"/>
+ <syscall name="get_mempolicy" number="5228" groups="memory"/>
+ <syscall name="set_mempolicy" number="5229" groups="memory"/>
+ <syscall name="mq_open" number="5230"/>
+ <syscall name="mq_unlink" number="5231"/>
+ <syscall name="mq_timedsend" number="5232"/>
+ <syscall name="mq_timedreceive" number="5233"/>
+ <syscall name="mq_notify" number="5234"/>
+ <syscall name="mq_getsetattr" number="5235"/>
+ <syscall name="vserver" number="5236"/>
+ <syscall name="waitid" number="5237" groups="process"/>
+ <syscall name="add_key" number="5239"/>
+ <syscall name="request_key" number="5240"/>
+ <syscall name="keyctl" number="5241"/>
+ <syscall name="set_thread_area" number="5242"/>
+ <syscall name="inotify_init" number="5243" groups="descriptor"/>
+ <syscall name="inotify_add_watch" number="5244" groups="descriptor"/>
+ <syscall name="inotify_rm_watch" number="5245" groups="descriptor"/>
+ <syscall name="migrate_pages" number="5246" groups="memory"/>
+ <syscall name="openat" number="5247" groups="descriptor,file"/>
+ <syscall name="mkdirat" number="5248" groups="descriptor,file"/>
+ <syscall name="mknodat" number="5249" groups="descriptor,file"/>
+ <syscall name="fchownat" number="5250" groups="descriptor,file"/>
+ <syscall name="futimesat" number="5251" groups="descriptor,file"/>
+ <syscall name="newfstatat" number="5252" groups="descriptor,file"/>
+ <syscall name="unlinkat" number="5253" groups="descriptor,file"/>
+ <syscall name="renameat" number="5254" groups="descriptor,file"/>
+ <syscall name="linkat" number="5255" groups="descriptor,file"/>
+ <syscall name="symlinkat" number="5256" groups="descriptor,file"/>
+ <syscall name="readlinkat" number="5257" groups="descriptor,file"/>
+ <syscall name="fchmodat" number="5258" groups="descriptor,file"/>
+ <syscall name="faccessat" number="5259" groups="descriptor,file"/>
+ <syscall name="pselect6" number="5260" groups="descriptor"/>
+ <syscall name="ppoll" number="5261" groups="descriptor"/>
+ <syscall name="unshare" number="5262" groups="process"/>
+ <syscall name="splice" number="5263" groups="descriptor"/>
+ <syscall name="sync_file_range" number="5264" groups="descriptor"/>
+ <syscall name="tee" number="5265" groups="descriptor"/>
+ <syscall name="vmsplice" number="5266" groups="descriptor"/>
+ <syscall name="move_pages" number="5267" groups="memory"/>
+ <syscall name="set_robust_list" number="5268"/>
+ <syscall name="get_robust_list" number="5269"/>
+ <syscall name="kexec_load" number="5270"/>
+ <syscall name="getcpu" number="5271"/>
+ <syscall name="epoll_pwait" number="5272" groups="descriptor"/>
+ <syscall name="ioprio_set" number="5273"/>
+ <syscall name="ioprio_get" number="5274"/>
+ <syscall name="utimensat" number="5275" groups="descriptor,file"/>
+ <syscall name="signalfd" number="5276" groups="descriptor,signal"/>
+ <syscall name="timerfd" number="5277" groups="descriptor"/>
+ <syscall name="eventfd" number="5278" groups="descriptor"/>
+ <syscall name="fallocate" number="5279" groups="descriptor"/>
+ <syscall name="timerfd_create" number="5280" groups="descriptor"/>
+ <syscall name="timerfd_gettime" number="5281" groups="descriptor"/>
+ <syscall name="timerfd_settime" number="5282" groups="descriptor"/>
+ <syscall name="signalfd4" number="5283" groups="descriptor,signal"/>
+ <syscall name="eventfd2" number="5284" groups="descriptor"/>
+ <syscall name="epoll_create1" number="5285" groups="descriptor"/>
+ <syscall name="dup3" number="5286" groups="descriptor"/>
+ <syscall name="pipe2" number="5287" groups="descriptor"/>
+ <syscall name="inotify_init1" number="5288" groups="descriptor"/>
+ <syscall name="preadv" number="5289" groups="descriptor"/>
+ <syscall name="pwritev" number="5290" groups="descriptor"/>
+ <syscall name="rt_tgsigqueueinfo" number="5291" groups="process,signal"/>
+ <syscall name="perf_event_open" number="5292" groups="descriptor"/>
+ <syscall name="accept4" number="5293" groups="network"/>
+ <syscall name="recvmmsg" number="5294" groups="network"/>
+ <syscall name="fanotify_init" number="5295" groups="descriptor"/>
+ <syscall name="fanotify_mark" number="5296" groups="descriptor,file"/>
+ <syscall name="prlimit64" number="5297"/>
+ <syscall name="name_to_handle_at" number="5298" groups="descriptor,file"/>
+ <syscall name="open_by_handle_at" number="5299" groups="descriptor"/>
+ <syscall name="clock_adjtime" number="5300"/>
+ <syscall name="syncfs" number="5301" groups="descriptor"/>
+ <syscall name="sendmmsg" number="5302" groups="network"/>
+ <syscall name="setns" number="5303" groups="descriptor"/>
+ <syscall name="process_vm_readv" number="5304"/>
+ <syscall name="process_vm_writev" number="5305"/>
+ <syscall name="kcmp" number="5306"/>
+ <syscall name="finit_module" number="5307" groups="descriptor"/>
+ <syscall name="getdents64" number="5308" groups="descriptor"/>
+ <syscall name="sched_setattr" number="5309"/>
+ <syscall name="sched_getattr" number="5310"/>
+ <syscall name="renameat2" number="5311"/>
+ <syscall name="seccomp" number="5312"/>
+ <syscall name="getrandom" number="5313"/>
+ <syscall name="memfd_create" number="5314"/>
+ <syscall name="bpf" number="5315"/>
+ <syscall name="execveat" number="5316"/>
+ <syscall name="userfaultfd" number="5317"/>
+ <syscall name="membarrier" number="5318"/>
+ <syscall name="mlock2" number="5319"/>
+ <syscall name="copy_file_range" number="5320"/>
+ <syscall name="preadv2" number="5321"/>
+ <syscall name="pwritev2" number="5322"/>
+ <syscall name="pkey_mprotect" number="5323"/>
+ <syscall name="pkey_alloc" number="5324"/>
+ <syscall name="pkey_free" number="5325"/>
+ <syscall name="statx" number="5326"/>
+ <syscall name="rseq" number="5327"/>
+ <syscall name="io_pgetevents" number="5328"/>
+ <syscall name="pidfd_send_signal" number="5424"/>
+ <syscall name="io_uring_setup" number="5425"/>
+ <syscall name="io_uring_enter" number="5426"/>
+ <syscall name="io_uring_register" number="5427"/>
+ <syscall name="open_tree" number="5428"/>
+ <syscall name="move_mount" number="5429"/>
+ <syscall name="fsopen" number="5430"/>
+ <syscall name="fsconfig" number="5431"/>
+ <syscall name="fsmount" number="5432"/>
+ <syscall name="fspick" number="5433"/>
+ <syscall name="pidfd_open" number="5434"/>
+ <syscall name="clone3" number="5435"/>
+ <syscall name="close_range" number="5436"/>
+ <syscall name="openat2" number="5437"/>
+ <syscall name="pidfd_getfd" number="5438"/>
+ <syscall name="faccessat2" number="5439"/>
+ <syscall name="process_madvise" number="5440"/>
+ <syscall name="epoll_pwait2" number="5441"/>
+ <syscall name="mount_setattr" number="5442"/>
+ <syscall name="quotactl_fd" number="5443"/>
+ <syscall name="landlock_create_ruleset" number="5444"/>
+ <syscall name="landlock_add_rule" number="5445"/>
+ <syscall name="landlock_restrict_self" number="5446"/>
+ <syscall name="process_mrelease" number="5448"/>
+ <syscall name="futex_waitv" number="5449"/>
+</syscalls_info>
diff --git a/share/gdb/syscalls/mips-o32-linux.xml b/share/gdb/syscalls/mips-o32-linux.xml
new file mode 100644
index 0000000..98235db
--- /dev/null
+++ b/share/gdb/syscalls/mips-o32-linux.xml
@@ -0,0 +1,430 @@
+<?xml version="1.0"?>
+<!DOCTYPE syscalls_info SYSTEM "gdb-syscalls.dtd">
+<!-- Copyright (C) 2011-2023 Free Software Foundation, Inc.
+
+ Copying and distribution of this file, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved. -->
+<!-- This file was generated using the following file:
+
+ arch/mips/kernel/syscalls/syscall_o32.tbl
+
+ The file mentioned above belongs to the Linux Kernel. -->
+<syscalls_info>
+ <syscall name="syscall" number="4000"/>
+ <syscall name="exit" number="4001" groups="process"/>
+ <syscall name="fork" number="4002" groups="process"/>
+ <syscall name="read" number="4003" groups="descriptor"/>
+ <syscall name="write" number="4004" groups="descriptor"/>
+ <syscall name="open" number="4005" groups="descriptor,file"/>
+ <syscall name="close" number="4006" groups="descriptor"/>
+ <syscall name="waitpid" number="4007" groups="process"/>
+ <syscall name="creat" number="4008" groups="descriptor,file"/>
+ <syscall name="link" number="4009" groups="file"/>
+ <syscall name="unlink" number="4010" groups="file"/>
+ <syscall name="execve" number="4011" groups="file,process"/>
+ <syscall name="chdir" number="4012" groups="file"/>
+ <syscall name="time" number="4013"/>
+ <syscall name="mknod" number="4014" groups="file"/>
+ <syscall name="chmod" number="4015" groups="file"/>
+ <syscall name="lchown" number="4016" groups="file"/>
+ <syscall name="break" number="4017" groups="memory"/>
+ <syscall name="lseek" number="4019" groups="descriptor"/>
+ <syscall name="getpid" number="4020"/>
+ <syscall name="mount" number="4021" groups="file"/>
+ <syscall name="umount" number="4022" groups="file"/>
+ <syscall name="setuid" number="4023"/>
+ <syscall name="getuid" number="4024"/>
+ <syscall name="stime" number="4025"/>
+ <syscall name="ptrace" number="4026"/>
+ <syscall name="alarm" number="4027"/>
+ <syscall name="pause" number="4029" groups="signal"/>
+ <syscall name="utime" number="4030" groups="file"/>
+ <syscall name="stty" number="4031"/>
+ <syscall name="gtty" number="4032"/>
+ <syscall name="access" number="4033" groups="file"/>
+ <syscall name="nice" number="4034"/>
+ <syscall name="ftime" number="4035"/>
+ <syscall name="sync" number="4036"/>
+ <syscall name="kill" number="4037" groups="signal"/>
+ <syscall name="rename" number="4038" groups="file"/>
+ <syscall name="mkdir" number="4039" groups="file"/>
+ <syscall name="rmdir" number="4040" groups="file"/>
+ <syscall name="dup" number="4041" groups="descriptor"/>
+ <syscall name="pipe" number="4042" groups="descriptor"/>
+ <syscall name="times" number="4043"/>
+ <syscall name="prof" number="4044"/>
+ <syscall name="brk" number="4045" groups="memory"/>
+ <syscall name="setgid" number="4046"/>
+ <syscall name="getgid" number="4047"/>
+ <syscall name="signal" number="4048" groups="signal"/>
+ <syscall name="geteuid" number="4049"/>
+ <syscall name="getegid" number="4050"/>
+ <syscall name="acct" number="4051" groups="file"/>
+ <syscall name="umount2" number="4052" groups="file"/>
+ <syscall name="lock" number="4053"/>
+ <syscall name="ioctl" number="4054" groups="descriptor"/>
+ <syscall name="fcntl" number="4055" groups="descriptor"/>
+ <syscall name="mpx" number="4056"/>
+ <syscall name="setpgid" number="4057"/>
+ <syscall name="ulimit" number="4058"/>
+ <syscall name="umask" number="4060"/>
+ <syscall name="chroot" number="4061" groups="file"/>
+ <syscall name="ustat" number="4062"/>
+ <syscall name="dup2" number="4063" groups="descriptor"/>
+ <syscall name="getppid" number="4064"/>
+ <syscall name="getpgrp" number="4065"/>
+ <syscall name="setsid" number="4066"/>
+ <syscall name="sigaction" number="4067" groups="signal"/>
+ <syscall name="sgetmask" number="4068" groups="signal"/>
+ <syscall name="ssetmask" number="4069" groups="signal"/>
+ <syscall name="setreuid" number="4070"/>
+ <syscall name="setregid" number="4071"/>
+ <syscall name="sigsuspend" number="4072" groups="signal"/>
+ <syscall name="sigpending" number="4073" groups="signal"/>
+ <syscall name="sethostname" number="4074"/>
+ <syscall name="setrlimit" number="4075"/>
+ <syscall name="getrlimit" number="4076"/>
+ <syscall name="getrusage" number="4077"/>
+ <syscall name="gettimeofday" number="4078"/>
+ <syscall name="settimeofday" number="4079"/>
+ <syscall name="getgroups" number="4080"/>
+ <syscall name="setgroups" number="4081"/>
+ <syscall name="symlink" number="4083" groups="file"/>
+ <syscall name="readlink" number="4085" groups="file"/>
+ <syscall name="uselib" number="4086" groups="file"/>
+ <syscall name="swapon" number="4087" groups="file"/>
+ <syscall name="reboot" number="4088"/>
+ <syscall name="readdir" number="4089" groups="descriptor"/>
+ <syscall name="mmap" number="4090" groups="descriptor,memory"/>
+ <syscall name="munmap" number="4091" groups="memory"/>
+ <syscall name="truncate" number="4092" groups="file"/>
+ <syscall name="ftruncate" number="4093" groups="descriptor"/>
+ <syscall name="fchmod" number="4094" groups="descriptor"/>
+ <syscall name="fchown" number="4095" groups="descriptor"/>
+ <syscall name="getpriority" number="4096"/>
+ <syscall name="setpriority" number="4097"/>
+ <syscall name="profil" number="4098"/>
+ <syscall name="statfs" number="4099" groups="file"/>
+ <syscall name="fstatfs" number="4100" groups="descriptor"/>
+ <syscall name="ioperm" number="4101"/>
+ <syscall name="socketcall" number="4102" groups="descriptor"/>
+ <syscall name="syslog" number="4103"/>
+ <syscall name="setitimer" number="4104"/>
+ <syscall name="getitimer" number="4105"/>
+ <syscall name="stat" number="4106" groups="file"/>
+ <syscall name="lstat" number="4107" groups="file"/>
+ <syscall name="fstat" number="4108" groups="descriptor"/>
+ <syscall name="iopl" number="4110"/>
+ <syscall name="vhangup" number="4111"/>
+ <syscall name="idle" number="4112"/>
+ <syscall name="vm86" number="4113"/>
+ <syscall name="wait4" number="4114" groups="process"/>
+ <syscall name="swapoff" number="4115" groups="file"/>
+ <syscall name="sysinfo" number="4116"/>
+ <syscall name="ipc" number="4117" groups="ipc"/>
+ <syscall name="fsync" number="4118" groups="descriptor"/>
+ <syscall name="sigreturn" number="4119" groups="signal"/>
+ <syscall name="clone" number="4120" groups="process"/>
+ <syscall name="setdomainname" number="4121"/>
+ <syscall name="uname" number="4122"/>
+ <syscall name="modify_ldt" number="4123"/>
+ <syscall name="adjtimex" number="4124"/>
+ <syscall name="mprotect" number="4125" groups="memory"/>
+ <syscall name="sigprocmask" number="4126" groups="signal"/>
+ <syscall name="create_module" number="4127"/>
+ <syscall name="init_module" number="4128"/>
+ <syscall name="delete_module" number="4129"/>
+ <syscall name="get_kernel_syms" number="4130"/>
+ <syscall name="quotactl" number="4131" groups="file"/>
+ <syscall name="getpgid" number="4132"/>
+ <syscall name="fchdir" number="4133" groups="descriptor"/>
+ <syscall name="bdflush" number="4134"/>
+ <syscall name="sysfs" number="4135"/>
+ <syscall name="personality" number="4136"/>
+ <syscall name="afs_syscall" number="4137"/>
+ <syscall name="setfsuid" number="4138"/>
+ <syscall name="setfsgid" number="4139"/>
+ <syscall name="_llseek" number="4140" groups="descriptor"/>
+ <syscall name="getdents" number="4141" groups="descriptor"/>
+ <syscall name="_newselect" number="4142" groups="descriptor"/>
+ <syscall name="flock" number="4143" groups="descriptor"/>
+ <syscall name="msync" number="4144" groups="memory"/>
+ <syscall name="readv" number="4145" groups="descriptor"/>
+ <syscall name="writev" number="4146" groups="descriptor"/>
+ <syscall name="cacheflush" number="4147"/>
+ <syscall name="cachectl" number="4148"/>
+ <syscall name="sysmips" number="4149"/>
+ <syscall name="getsid" number="4151"/>
+ <syscall name="fdatasync" number="4152" groups="descriptor"/>
+ <syscall name="_sysctl" number="4153"/>
+ <syscall name="mlock" number="4154" groups="memory"/>
+ <syscall name="munlock" number="4155" groups="memory"/>
+ <syscall name="mlockall" number="4156" groups="memory"/>
+ <syscall name="munlockall" number="4157" groups="memory"/>
+ <syscall name="sched_setparam" number="4158"/>
+ <syscall name="sched_getparam" number="4159"/>
+ <syscall name="sched_setscheduler" number="4160"/>
+ <syscall name="sched_getscheduler" number="4161"/>
+ <syscall name="sched_yield" number="4162"/>
+ <syscall name="sched_get_priority_max" number="4163"/>
+ <syscall name="sched_get_priority_min" number="4164"/>
+ <syscall name="sched_rr_get_interval" number="4165"/>
+ <syscall name="nanosleep" number="4166"/>
+ <syscall name="mremap" number="4167" groups="memory"/>
+ <syscall name="accept" number="4168" groups="network"/>
+ <syscall name="bind" number="4169" groups="network"/>
+ <syscall name="connect" number="4170" groups="network"/>
+ <syscall name="getpeername" number="4171" groups="network"/>
+ <syscall name="getsockname" number="4172" groups="network"/>
+ <syscall name="getsockopt" number="4173" groups="network"/>
+ <syscall name="listen" number="4174" groups="network"/>
+ <syscall name="recv" number="4175" groups="network"/>
+ <syscall name="recvfrom" number="4176" groups="network"/>
+ <syscall name="recvmsg" number="4177" groups="network"/>
+ <syscall name="send" number="4178" groups="network"/>
+ <syscall name="sendmsg" number="4179" groups="network"/>
+ <syscall name="sendto" number="4180" groups="network"/>
+ <syscall name="setsockopt" number="4181" groups="network"/>
+ <syscall name="shutdown" number="4182" groups="network"/>
+ <syscall name="socket" number="4183" groups="network"/>
+ <syscall name="socketpair" number="4184" groups="network"/>
+ <syscall name="setresuid" number="4185"/>
+ <syscall name="getresuid" number="4186"/>
+ <syscall name="query_module" number="4187"/>
+ <syscall name="poll" number="4188" groups="descriptor"/>
+ <syscall name="nfsservctl" number="4189"/>
+ <syscall name="setresgid" number="4190"/>
+ <syscall name="getresgid" number="4191"/>
+ <syscall name="prctl" number="4192"/>
+ <syscall name="rt_sigreturn" number="4193" groups="signal"/>
+ <syscall name="rt_sigaction" number="4194" groups="signal"/>
+ <syscall name="rt_sigprocmask" number="4195" groups="signal"/>
+ <syscall name="rt_sigpending" number="4196" groups="signal"/>
+ <syscall name="rt_sigtimedwait" number="4197" groups="signal"/>
+ <syscall name="rt_sigqueueinfo" number="4198" groups="signal"/>
+ <syscall name="rt_sigsuspend" number="4199" groups="signal"/>
+ <syscall name="pread64" number="4200" groups="descriptor"/>
+ <syscall name="pwrite64" number="4201" groups="descriptor"/>
+ <syscall name="chown" number="4202" groups="file"/>
+ <syscall name="getcwd" number="4203" groups="file"/>
+ <syscall name="capget" number="4204"/>
+ <syscall name="capset" number="4205"/>
+ <syscall name="sigaltstack" number="4206" groups="signal"/>
+ <syscall name="sendfile" number="4207" groups="descriptor,network"/>
+ <syscall name="getpmsg" number="4208"/>
+ <syscall name="putpmsg" number="4209"/>
+ <syscall name="mmap2" number="4210" groups="descriptor,memory"/>
+ <syscall name="truncate64" number="4211" groups="file"/>
+ <syscall name="ftruncate64" number="4212" groups="descriptor"/>
+ <syscall name="stat64" number="4213" groups="file"/>
+ <syscall name="lstat64" number="4214" groups="file"/>
+ <syscall name="fstat64" number="4215" groups="descriptor"/>
+ <syscall name="pivot_root" number="4216" groups="file"/>
+ <syscall name="mincore" number="4217" groups="memory"/>
+ <syscall name="madvise" number="4218" groups="memory"/>
+ <syscall name="getdents64" number="4219" groups="descriptor"/>
+ <syscall name="fcntl64" number="4220" groups="descriptor"/>
+ <syscall name="gettid" number="4222"/>
+ <syscall name="readahead" number="4223" groups="descriptor"/>
+ <syscall name="setxattr" number="4224" groups="file"/>
+ <syscall name="lsetxattr" number="4225" groups="file"/>
+ <syscall name="fsetxattr" number="4226" groups="descriptor"/>
+ <syscall name="getxattr" number="4227" groups="file"/>
+ <syscall name="lgetxattr" number="4228" groups="file"/>
+ <syscall name="fgetxattr" number="4229" groups="descriptor"/>
+ <syscall name="listxattr" number="4230" groups="file"/>
+ <syscall name="llistxattr" number="4231" groups="file"/>
+ <syscall name="flistxattr" number="4232" groups="descriptor"/>
+ <syscall name="removexattr" number="4233" groups="file"/>
+ <syscall name="lremovexattr" number="4234" groups="file"/>
+ <syscall name="fremovexattr" number="4235" groups="descriptor"/>
+ <syscall name="tkill" number="4236" groups="signal"/>
+ <syscall name="sendfile64" number="4237" groups="descriptor,network"/>
+ <syscall name="futex" number="4238"/>
+ <syscall name="sched_setaffinity" number="4239"/>
+ <syscall name="sched_getaffinity" number="4240"/>
+ <syscall name="io_setup" number="4241"/>
+ <syscall name="io_destroy" number="4242"/>
+ <syscall name="io_getevents" number="4243"/>
+ <syscall name="io_submit" number="4244"/>
+ <syscall name="io_cancel" number="4245"/>
+ <syscall name="exit_group" number="4246" groups="process"/>
+ <syscall name="lookup_dcookie" number="4247"/>
+ <syscall name="epoll_create" number="4248" groups="descriptor"/>
+ <syscall name="epoll_ctl" number="4249" groups="descriptor"/>
+ <syscall name="epoll_wait" number="4250" groups="descriptor"/>
+ <syscall name="remap_file_pages" number="4251" groups="memory"/>
+ <syscall name="set_tid_address" number="4252"/>
+ <syscall name="restart_syscall" number="4253"/>
+ <syscall name="fadvise64" number="4254" groups="descriptor"/>
+ <syscall name="statfs64" number="4255" groups="file"/>
+ <syscall name="fstatfs64" number="4256" groups="descriptor"/>
+ <syscall name="timer_create" number="4257"/>
+ <syscall name="timer_settime" number="4258"/>
+ <syscall name="timer_gettime" number="4259"/>
+ <syscall name="timer_getoverrun" number="4260"/>
+ <syscall name="timer_delete" number="4261"/>
+ <syscall name="clock_settime" number="4262"/>
+ <syscall name="clock_gettime" number="4263"/>
+ <syscall name="clock_getres" number="4264"/>
+ <syscall name="clock_nanosleep" number="4265"/>
+ <syscall name="tgkill" number="4266" groups="signal"/>
+ <syscall name="utimes" number="4267" groups="file"/>
+ <syscall name="mbind" number="4268" groups="memory"/>
+ <syscall name="get_mempolicy" number="4269" groups="memory"/>
+ <syscall name="set_mempolicy" number="4270" groups="memory"/>
+ <syscall name="mq_open" number="4271"/>
+ <syscall name="mq_unlink" number="4272"/>
+ <syscall name="mq_timedsend" number="4273"/>
+ <syscall name="mq_timedreceive" number="4274"/>
+ <syscall name="mq_notify" number="4275"/>
+ <syscall name="mq_getsetattr" number="4276"/>
+ <syscall name="vserver" number="4277"/>
+ <syscall name="waitid" number="4278" groups="process"/>
+ <syscall name="add_key" number="4280"/>
+ <syscall name="request_key" number="4281"/>
+ <syscall name="keyctl" number="4282"/>
+ <syscall name="set_thread_area" number="4283"/>
+ <syscall name="inotify_init" number="4284" groups="descriptor"/>
+ <syscall name="inotify_add_watch" number="4285" groups="descriptor"/>
+ <syscall name="inotify_rm_watch" number="4286" groups="descriptor"/>
+ <syscall name="migrate_pages" number="4287" groups="memory"/>
+ <syscall name="openat" number="4288" groups="descriptor,file"/>
+ <syscall name="mkdirat" number="4289" groups="descriptor,file"/>
+ <syscall name="mknodat" number="4290" groups="descriptor,file"/>
+ <syscall name="fchownat" number="4291" groups="descriptor,file"/>
+ <syscall name="futimesat" number="4292" groups="descriptor,file"/>
+ <syscall name="fstatat64" number="4293" groups="descriptor,file"/>
+ <syscall name="unlinkat" number="4294" groups="descriptor,file"/>
+ <syscall name="renameat" number="4295" groups="descriptor,file"/>
+ <syscall name="linkat" number="4296" groups="descriptor,file"/>
+ <syscall name="symlinkat" number="4297" groups="descriptor,file"/>
+ <syscall name="readlinkat" number="4298" groups="descriptor,file"/>
+ <syscall name="fchmodat" number="4299" groups="descriptor,file"/>
+ <syscall name="faccessat" number="4300" groups="descriptor,file"/>
+ <syscall name="pselect6" number="4301" groups="descriptor"/>
+ <syscall name="ppoll" number="4302" groups="descriptor"/>
+ <syscall name="unshare" number="4303" groups="process"/>
+ <syscall name="splice" number="4304" groups="descriptor"/>
+ <syscall name="sync_file_range" number="4305" groups="descriptor"/>
+ <syscall name="tee" number="4306" groups="descriptor"/>
+ <syscall name="vmsplice" number="4307" groups="descriptor"/>
+ <syscall name="move_pages" number="4308" groups="memory"/>
+ <syscall name="set_robust_list" number="4309"/>
+ <syscall name="get_robust_list" number="4310"/>
+ <syscall name="kexec_load" number="4311"/>
+ <syscall name="getcpu" number="4312"/>
+ <syscall name="epoll_pwait" number="4313" groups="descriptor"/>
+ <syscall name="ioprio_set" number="4314"/>
+ <syscall name="ioprio_get" number="4315"/>
+ <syscall name="utimensat" number="4316" groups="descriptor,file"/>
+ <syscall name="signalfd" number="4317" groups="descriptor,signal"/>
+ <syscall name="timerfd" number="4318" groups="descriptor"/>
+ <syscall name="eventfd" number="4319" groups="descriptor"/>
+ <syscall name="fallocate" number="4320" groups="descriptor"/>
+ <syscall name="timerfd_create" number="4321" groups="descriptor"/>
+ <syscall name="timerfd_gettime" number="4322" groups="descriptor"/>
+ <syscall name="timerfd_settime" number="4323" groups="descriptor"/>
+ <syscall name="signalfd4" number="4324" groups="descriptor,signal"/>
+ <syscall name="eventfd2" number="4325" groups="descriptor"/>
+ <syscall name="epoll_create1" number="4326" groups="descriptor"/>
+ <syscall name="dup3" number="4327" groups="descriptor"/>
+ <syscall name="pipe2" number="4328" groups="descriptor"/>
+ <syscall name="inotify_init1" number="4329" groups="descriptor"/>
+ <syscall name="preadv" number="4330" groups="descriptor"/>
+ <syscall name="pwritev" number="4331" groups="descriptor"/>
+ <syscall name="rt_tgsigqueueinfo" number="4332" groups="process,signal"/>
+ <syscall name="perf_event_open" number="4333" groups="descriptor"/>
+ <syscall name="accept4" number="4334" groups="network"/>
+ <syscall name="recvmmsg" number="4335" groups="network"/>
+ <syscall name="fanotify_init" number="4336" groups="descriptor"/>
+ <syscall name="fanotify_mark" number="4337" groups="descriptor,file"/>
+ <syscall name="prlimit64" number="4338"/>
+ <syscall name="name_to_handle_at" number="4339" groups="descriptor,file"/>
+ <syscall name="open_by_handle_at" number="4340" groups="descriptor"/>
+ <syscall name="clock_adjtime" number="4341"/>
+ <syscall name="syncfs" number="4342" groups="descriptor"/>
+ <syscall name="sendmmsg" number="4343" groups="network"/>
+ <syscall name="setns" number="4344" groups="descriptor"/>
+ <syscall name="process_vm_readv" number="4345"/>
+ <syscall name="process_vm_writev" number="4346"/>
+ <syscall name="kcmp" number="4347"/>
+ <syscall name="finit_module" number="4348" groups="descriptor"/>
+ <syscall name="sched_setattr" number="4349"/>
+ <syscall name="sched_getattr" number="4350"/>
+ <syscall name="renameat2" number="4351"/>
+ <syscall name="seccomp" number="4352"/>
+ <syscall name="getrandom" number="4353"/>
+ <syscall name="memfd_create" number="4354"/>
+ <syscall name="bpf" number="4355"/>
+ <syscall name="execveat" number="4356"/>
+ <syscall name="userfaultfd" number="4357"/>
+ <syscall name="membarrier" number="4358"/>
+ <syscall name="mlock2" number="4359"/>
+ <syscall name="copy_file_range" number="4360"/>
+ <syscall name="preadv2" number="4361"/>
+ <syscall name="pwritev2" number="4362"/>
+ <syscall name="pkey_mprotect" number="4363"/>
+ <syscall name="pkey_alloc" number="4364"/>
+ <syscall name="pkey_free" number="4365"/>
+ <syscall name="statx" number="4366"/>
+ <syscall name="rseq" number="4367"/>
+ <syscall name="io_pgetevents" number="4368"/>
+ <syscall name="semget" number="4393" groups="ipc"/>
+ <syscall name="semctl" number="4394" groups="ipc"/>
+ <syscall name="shmget" number="4395" groups="ipc"/>
+ <syscall name="shmctl" number="4396" groups="ipc"/>
+ <syscall name="shmat" number="4397" groups="ipc,memory"/>
+ <syscall name="shmdt" number="4398" groups="ipc,memory"/>
+ <syscall name="msgget" number="4399" groups="ipc"/>
+ <syscall name="msgsnd" number="4400" groups="ipc"/>
+ <syscall name="msgrcv" number="4401" groups="ipc"/>
+ <syscall name="msgctl" number="4402" groups="ipc"/>
+ <syscall name="clock_gettime64" number="4403"/>
+ <syscall name="clock_settime64" number="4404"/>
+ <syscall name="clock_adjtime64" number="4405"/>
+ <syscall name="clock_getres_time64" number="4406"/>
+ <syscall name="clock_nanosleep_time64" number="4407"/>
+ <syscall name="timer_gettime64" number="4408"/>
+ <syscall name="timer_settime64" number="4409"/>
+ <syscall name="timerfd_gettime64" number="4410"/>
+ <syscall name="timerfd_settime64" number="4411"/>
+ <syscall name="utimensat_time64" number="4412"/>
+ <syscall name="pselect6_time64" number="4413"/>
+ <syscall name="ppoll_time64" number="4414"/>
+ <syscall name="io_pgetevents_time64" number="4416"/>
+ <syscall name="recvmmsg_time64" number="4417"/>
+ <syscall name="mq_timedsend_time64" number="4418"/>
+ <syscall name="mq_timedreceive_time64" number="4419"/>
+ <syscall name="semtimedop_time64" number="4420"/>
+ <syscall name="rt_sigtimedwait_time64" number="4421"/>
+ <syscall name="futex_time64" number="4422"/>
+ <syscall name="sched_rr_get_interval_time64" number="4423"/>
+ <syscall name="pidfd_send_signal" number="4424"/>
+ <syscall name="io_uring_setup" number="4425"/>
+ <syscall name="io_uring_enter" number="4426"/>
+ <syscall name="io_uring_register" number="4427"/>
+ <syscall name="open_tree" number="4428"/>
+ <syscall name="move_mount" number="4429"/>
+ <syscall name="fsopen" number="4430"/>
+ <syscall name="fsconfig" number="4431"/>
+ <syscall name="fsmount" number="4432"/>
+ <syscall name="fspick" number="4433"/>
+ <syscall name="pidfd_open" number="4434"/>
+ <syscall name="clone3" number="4435"/>
+ <syscall name="close_range" number="4436"/>
+ <syscall name="openat2" number="4437"/>
+ <syscall name="pidfd_getfd" number="4438"/>
+ <syscall name="faccessat2" number="4439"/>
+ <syscall name="process_madvise" number="4440"/>
+ <syscall name="epoll_pwait2" number="4441"/>
+ <syscall name="mount_setattr" number="4442"/>
+ <syscall name="quotactl_fd" number="4443"/>
+ <syscall name="landlock_create_ruleset" number="4444"/>
+ <syscall name="landlock_add_rule" number="4445"/>
+ <syscall name="landlock_restrict_self" number="4446"/>
+ <syscall name="process_mrelease" number="4448"/>
+ <syscall name="futex_waitv" number="4449"/>
+ <syscall name="set_mempolicy_home_node" number="4450"/>
+</syscalls_info>
diff --git a/share/gdb/syscalls/netbsd.xml b/share/gdb/syscalls/netbsd.xml
new file mode 100644
index 0000000..deaae50
--- /dev/null
+++ b/share/gdb/syscalls/netbsd.xml
@@ -0,0 +1,477 @@
+<?xml version="1.0"?> <!-- THIS FILE IS GENERATED -*- buffer-read-only: t -*- -->
+<!-- vi:set ro: -->
+<!-- Copyright (C) 2020-2023 Free Software Foundation, Inc.
+
+ Copying and distribution of this file, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved. -->
+
+<!DOCTYPE feature SYSTEM "gdb-syscalls.dtd">
+
+<!-- This file was generated using the following file:
+
+ /usr/src/sys/sys/syscall.h
+
+ The file mentioned above belongs to the NetBSD Kernel. -->
+
+<syscalls_info>
+ <syscall name="exit" number="1"/>
+ <syscall name="fork" number="2"/>
+ <syscall name="read" number="3"/>
+ <syscall name="write" number="4"/>
+ <syscall name="open" number="5"/>
+ <syscall name="close" number="6"/>
+ <syscall name="compat_50_wait4" number="7"/>
+ <syscall name="compat_43_ocreat" number="8"/>
+ <syscall name="link" number="9"/>
+ <syscall name="unlink" number="10"/>
+ <syscall name="execv" number="11"/>
+ <syscall name="chdir" number="12"/>
+ <syscall name="fchdir" number="13"/>
+ <syscall name="compat_50_mknod" number="14"/>
+ <syscall name="chmod" number="15"/>
+ <syscall name="chown" number="16"/>
+ <syscall name="break" number="17"/>
+ <syscall name="compat_20_getfsstat" number="18"/>
+ <syscall name="compat_43_olseek" number="19"/>
+ <syscall name="getpid" number="20"/>
+ <syscall name="compat_40_mount" number="21"/>
+ <syscall name="unmount" number="22"/>
+ <syscall name="setuid" number="23"/>
+ <syscall name="getuid" number="24"/>
+ <syscall name="geteuid" number="25"/>
+ <syscall name="ptrace" number="26"/>
+ <syscall name="recvmsg" number="27"/>
+ <syscall name="sendmsg" number="28"/>
+ <syscall name="recvfrom" number="29"/>
+ <syscall name="accept" number="30"/>
+ <syscall name="getpeername" number="31"/>
+ <syscall name="getsockname" number="32"/>
+ <syscall name="access" number="33"/>
+ <syscall name="chflags" number="34"/>
+ <syscall name="fchflags" number="35"/>
+ <syscall name="sync" number="36"/>
+ <syscall name="kill" number="37"/>
+ <syscall name="compat_43_stat43" number="38"/>
+ <syscall name="getppid" number="39"/>
+ <syscall name="compat_43_lstat43" number="40"/>
+ <syscall name="dup" number="41"/>
+ <syscall name="pipe" number="42"/>
+ <syscall name="getegid" number="43"/>
+ <syscall name="profil" number="44"/>
+ <syscall name="ktrace" number="45"/>
+ <syscall name="compat_13_sigaction13" number="46"/>
+ <syscall name="getgid" number="47"/>
+ <syscall name="compat_13_sigprocmask13" number="48"/>
+ <syscall name="__getlogin" number="49"/>
+ <syscall name="__setlogin" number="50"/>
+ <syscall name="acct" number="51"/>
+ <syscall name="compat_13_sigpending13" number="52"/>
+ <syscall name="compat_13_sigaltstack13" number="53"/>
+ <syscall name="ioctl" number="54"/>
+ <syscall name="compat_12_oreboot" number="55"/>
+ <syscall name="revoke" number="56"/>
+ <syscall name="symlink" number="57"/>
+ <syscall name="readlink" number="58"/>
+ <syscall name="execve" number="59"/>
+ <syscall name="umask" number="60"/>
+ <syscall name="chroot" number="61"/>
+ <syscall name="compat_43_fstat43" number="62"/>
+ <syscall name="compat_43_ogetkerninfo" number="63"/>
+ <syscall name="compat_43_ogetpagesize" number="64"/>
+ <syscall name="compat_12_msync" number="65"/>
+ <syscall name="vfork" number="66"/>
+ <syscall name="vread" number="67"/>
+ <syscall name="vwrite" number="68"/>
+ <syscall name="sbrk" number="69"/>
+ <syscall name="sstk" number="70"/>
+ <syscall name="compat_43_ommap" number="71"/>
+ <syscall name="vadvise" number="72"/>
+ <syscall name="munmap" number="73"/>
+ <syscall name="mprotect" number="74"/>
+ <syscall name="madvise" number="75"/>
+ <syscall name="vhangup" number="76"/>
+ <syscall name="vlimit" number="77"/>
+ <syscall name="mincore" number="78"/>
+ <syscall name="getgroups" number="79"/>
+ <syscall name="setgroups" number="80"/>
+ <syscall name="getpgrp" number="81"/>
+ <syscall name="setpgid" number="82"/>
+ <syscall name="compat_50_setitimer" number="83"/>
+ <syscall name="compat_43_owait" number="84"/>
+ <syscall name="compat_12_oswapon" number="85"/>
+ <syscall name="compat_50_getitimer" number="86"/>
+ <syscall name="compat_43_ogethostname" number="87"/>
+ <syscall name="compat_43_osethostname" number="88"/>
+ <syscall name="compat_43_ogetdtablesize" number="89"/>
+ <syscall name="dup2" number="90"/>
+ <syscall name="getrandom" number="91"/>
+ <syscall name="fcntl" number="92"/>
+ <syscall name="compat_50_select" number="93"/>
+ <syscall name="fsync" number="95"/>
+ <syscall name="setpriority" number="96"/>
+ <syscall name="compat_30_socket" number="97"/>
+ <syscall name="connect" number="98"/>
+ <syscall name="compat_43_oaccept" number="99"/>
+ <syscall name="getpriority" number="100"/>
+ <syscall name="compat_43_osend" number="101"/>
+ <syscall name="compat_43_orecv" number="102"/>
+ <syscall name="compat_13_sigreturn13" number="103"/>
+ <syscall name="bind" number="104"/>
+ <syscall name="setsockopt" number="105"/>
+ <syscall name="listen" number="106"/>
+ <syscall name="vtimes" number="107"/>
+ <syscall name="compat_43_osigvec" number="108"/>
+ <syscall name="compat_43_osigblock" number="109"/>
+ <syscall name="compat_43_osigsetmask" number="110"/>
+ <syscall name="compat_13_sigsuspend13" number="111"/>
+ <syscall name="compat_43_osigstack" number="112"/>
+ <syscall name="compat_43_orecvmsg" number="113"/>
+ <syscall name="compat_43_osendmsg" number="114"/>
+ <syscall name="vtrace" number="115"/>
+ <syscall name="compat_50_gettimeofday" number="116"/>
+ <syscall name="compat_50_getrusage" number="117"/>
+ <syscall name="getsockopt" number="118"/>
+ <syscall name="resuba" number="119"/>
+ <syscall name="readv" number="120"/>
+ <syscall name="writev" number="121"/>
+ <syscall name="compat_50_settimeofday" number="122"/>
+ <syscall name="fchown" number="123"/>
+ <syscall name="fchmod" number="124"/>
+ <syscall name="compat_43_orecvfrom" number="125"/>
+ <syscall name="setreuid" number="126"/>
+ <syscall name="setregid" number="127"/>
+ <syscall name="rename" number="128"/>
+ <syscall name="compat_43_otruncate" number="129"/>
+ <syscall name="compat_43_oftruncate" number="130"/>
+ <syscall name="flock" number="131"/>
+ <syscall name="mkfifo" number="132"/>
+ <syscall name="sendto" number="133"/>
+ <syscall name="shutdown" number="134"/>
+ <syscall name="socketpair" number="135"/>
+ <syscall name="mkdir" number="136"/>
+ <syscall name="rmdir" number="137"/>
+ <syscall name="compat_50_utimes" number="138"/>
+ <syscall name="compat_50_adjtime" number="140"/>
+ <syscall name="compat_43_ogetpeername" number="141"/>
+ <syscall name="compat_43_ogethostid" number="142"/>
+ <syscall name="compat_43_osethostid" number="143"/>
+ <syscall name="compat_43_ogetrlimit" number="144"/>
+ <syscall name="compat_43_osetrlimit" number="145"/>
+ <syscall name="compat_43_okillpg" number="146"/>
+ <syscall name="setsid" number="147"/>
+ <syscall name="compat_50_quotactl" number="148"/>
+ <syscall name="compat_43_oquota" number="149"/>
+ <syscall name="compat_43_ogetsockname" number="150"/>
+ <syscall name="nfssvc" number="155"/>
+ <syscall name="compat_43_ogetdirentries" number="156"/>
+ <syscall name="compat_20_statfs" number="157"/>
+ <syscall name="compat_20_fstatfs" number="158"/>
+ <syscall name="compat_30_getfh" number="161"/>
+ <syscall name="compat_09_ogetdomainname" number="162"/>
+ <syscall name="compat_09_osetdomainname" number="163"/>
+ <syscall name="compat_09_ouname" number="164"/>
+ <syscall name="sysarch" number="165"/>
+ <syscall name="__futex" number="166"/>
+ <syscall name="__futex_set_robust_list" number="167"/>
+ <syscall name="__futex_get_robust_list" number="168"/>
+ <syscall name="compat_10_osemsys" number="169"/>
+ <syscall name="compat_10_omsgsys" number="170"/>
+ <syscall name="compat_10_oshmsys" number="171"/>
+ <syscall name="pread" number="173"/>
+ <syscall name="pwrite" number="174"/>
+ <syscall name="compat_30_ntp_gettime" number="175"/>
+ <syscall name="ntp_adjtime" number="176"/>
+ <syscall name="setgid" number="181"/>
+ <syscall name="setegid" number="182"/>
+ <syscall name="seteuid" number="183"/>
+ <syscall name="lfs_bmapv" number="184"/>
+ <syscall name="lfs_markv" number="185"/>
+ <syscall name="lfs_segclean" number="186"/>
+ <syscall name="compat_50_lfs_segwait" number="187"/>
+ <syscall name="compat_12_stat12" number="188"/>
+ <syscall name="compat_12_fstat12" number="189"/>
+ <syscall name="compat_12_lstat12" number="190"/>
+ <syscall name="pathconf" number="191"/>
+ <syscall name="fpathconf" number="192"/>
+ <syscall name="getsockopt2" number="193"/>
+ <syscall name="getrlimit" number="194"/>
+ <syscall name="setrlimit" number="195"/>
+ <syscall name="compat_12_getdirentries" number="196"/>
+ <syscall name="mmap" number="197"/>
+ <syscall name="lseek" number="199"/>
+ <syscall name="truncate" number="200"/>
+ <syscall name="ftruncate" number="201"/>
+ <syscall name="__sysctl" number="202"/>
+ <syscall name="mlock" number="203"/>
+ <syscall name="munlock" number="204"/>
+ <syscall name="undelete" number="205"/>
+ <syscall name="compat_50_futimes" number="206"/>
+ <syscall name="getpgid" number="207"/>
+ <syscall name="reboot" number="208"/>
+ <syscall name="poll" number="209"/>
+ <syscall name="afssys" number="210"/>
+ <syscall name="compat_14___semctl" number="220"/>
+ <syscall name="semget" number="221"/>
+ <syscall name="semop" number="222"/>
+ <syscall name="semconfig" number="223"/>
+ <syscall name="compat_14_msgctl" number="224"/>
+ <syscall name="msgget" number="225"/>
+ <syscall name="msgsnd" number="226"/>
+ <syscall name="msgrcv" number="227"/>
+ <syscall name="shmat" number="228"/>
+ <syscall name="compat_14_shmctl" number="229"/>
+ <syscall name="shmdt" number="230"/>
+ <syscall name="shmget" number="231"/>
+ <syscall name="compat_50_clock_gettime" number="232"/>
+ <syscall name="compat_50_clock_settime" number="233"/>
+ <syscall name="compat_50_clock_getres" number="234"/>
+ <syscall name="timer_create" number="235"/>
+ <syscall name="timer_delete" number="236"/>
+ <syscall name="compat_50_timer_settime" number="237"/>
+ <syscall name="compat_50_timer_gettime" number="238"/>
+ <syscall name="timer_getoverrun" number="239"/>
+ <syscall name="compat_50_nanosleep" number="240"/>
+ <syscall name="fdatasync" number="241"/>
+ <syscall name="mlockall" number="242"/>
+ <syscall name="munlockall" number="243"/>
+ <syscall name="compat_50___sigtimedwait" number="244"/>
+ <syscall name="sigqueueinfo" number="245"/>
+ <syscall name="modctl" number="246"/>
+ <syscall name="_ksem_init" number="247"/>
+ <syscall name="_ksem_open" number="248"/>
+ <syscall name="_ksem_unlink" number="249"/>
+ <syscall name="_ksem_close" number="250"/>
+ <syscall name="_ksem_post" number="251"/>
+ <syscall name="_ksem_wait" number="252"/>
+ <syscall name="_ksem_trywait" number="253"/>
+ <syscall name="_ksem_getvalue" number="254"/>
+ <syscall name="_ksem_destroy" number="255"/>
+ <syscall name="_ksem_timedwait" number="256"/>
+ <syscall name="mq_open" number="257"/>
+ <syscall name="mq_close" number="258"/>
+ <syscall name="mq_unlink" number="259"/>
+ <syscall name="mq_getattr" number="260"/>
+ <syscall name="mq_setattr" number="261"/>
+ <syscall name="mq_notify" number="262"/>
+ <syscall name="mq_send" number="263"/>
+ <syscall name="mq_receive" number="264"/>
+ <syscall name="compat_50_mq_timedsend" number="265"/>
+ <syscall name="compat_50_mq_timedreceive" number="266"/>
+ <syscall name="__posix_rename" number="270"/>
+ <syscall name="swapctl" number="271"/>
+ <syscall name="compat_30_getdents" number="272"/>
+ <syscall name="minherit" number="273"/>
+ <syscall name="lchmod" number="274"/>
+ <syscall name="lchown" number="275"/>
+ <syscall name="compat_50_lutimes" number="276"/>
+ <syscall name="__msync13" number="277"/>
+ <syscall name="compat_30___stat13" number="278"/>
+ <syscall name="compat_30___fstat13" number="279"/>
+ <syscall name="compat_30___lstat13" number="280"/>
+ <syscall name="__sigaltstack14" number="281"/>
+ <syscall name="__vfork14" number="282"/>
+ <syscall name="__posix_chown" number="283"/>
+ <syscall name="__posix_fchown" number="284"/>
+ <syscall name="__posix_lchown" number="285"/>
+ <syscall name="getsid" number="286"/>
+ <syscall name="__clone" number="287"/>
+ <syscall name="fktrace" number="288"/>
+ <syscall name="preadv" number="289"/>
+ <syscall name="pwritev" number="290"/>
+ <syscall name="compat_16___sigaction14" number="291"/>
+ <syscall name="__sigpending14" number="292"/>
+ <syscall name="__sigprocmask14" number="293"/>
+ <syscall name="__sigsuspend14" number="294"/>
+ <syscall name="compat_16___sigreturn14" number="295"/>
+ <syscall name="__getcwd" number="296"/>
+ <syscall name="fchroot" number="297"/>
+ <syscall name="compat_30_fhopen" number="298"/>
+ <syscall name="compat_30_fhstat" number="299"/>
+ <syscall name="compat_20_fhstatfs" number="300"/>
+ <syscall name="compat_50_____semctl13" number="301"/>
+ <syscall name="compat_50___msgctl13" number="302"/>
+ <syscall name="compat_50___shmctl13" number="303"/>
+ <syscall name="lchflags" number="304"/>
+ <syscall name="issetugid" number="305"/>
+ <syscall name="utrace" number="306"/>
+ <syscall name="getcontext" number="307"/>
+ <syscall name="setcontext" number="308"/>
+ <syscall name="_lwp_create" number="309"/>
+ <syscall name="_lwp_exit" number="310"/>
+ <syscall name="_lwp_self" number="311"/>
+ <syscall name="_lwp_wait" number="312"/>
+ <syscall name="_lwp_suspend" number="313"/>
+ <syscall name="_lwp_continue" number="314"/>
+ <syscall name="_lwp_wakeup" number="315"/>
+ <syscall name="_lwp_getprivate" number="316"/>
+ <syscall name="_lwp_setprivate" number="317"/>
+ <syscall name="_lwp_kill" number="318"/>
+ <syscall name="_lwp_detach" number="319"/>
+ <syscall name="compat_50__lwp_park" number="320"/>
+ <syscall name="_lwp_unpark" number="321"/>
+ <syscall name="_lwp_unpark_all" number="322"/>
+ <syscall name="_lwp_setname" number="323"/>
+ <syscall name="_lwp_getname" number="324"/>
+ <syscall name="_lwp_ctl" number="325"/>
+ <syscall name="compat_60_sa_register" number="330"/>
+ <syscall name="compat_60_sa_stacks" number="331"/>
+ <syscall name="compat_60_sa_enable" number="332"/>
+ <syscall name="compat_60_sa_setconcurrency" number="333"/>
+ <syscall name="compat_60_sa_yield" number="334"/>
+ <syscall name="compat_60_sa_preempt" number="335"/>
+ <syscall name="sys_sa_unblockyield" number="336"/>
+ <syscall name="__sigaction_sigtramp" number="340"/>
+ <syscall name="sys_pmc_get_info" number="341"/>
+ <syscall name="sys_pmc_control" number="342"/>
+ <syscall name="rasctl" number="343"/>
+ <syscall name="kqueue" number="344"/>
+ <syscall name="compat_50_kevent" number="345"/>
+ <syscall name="_sched_setparam" number="346"/>
+ <syscall name="_sched_getparam" number="347"/>
+ <syscall name="_sched_setaffinity" number="348"/>
+ <syscall name="_sched_getaffinity" number="349"/>
+ <syscall name="sched_yield" number="350"/>
+ <syscall name="_sched_protect" number="351"/>
+ <syscall name="fsync_range" number="354"/>
+ <syscall name="uuidgen" number="355"/>
+ <syscall name="compat_90_getvfsstat" number="356"/>
+ <syscall name="compat_90_statvfs1" number="357"/>
+ <syscall name="compat_90_fstatvfs1" number="358"/>
+ <syscall name="compat_30_fhstatvfs1" number="359"/>
+ <syscall name="extattrctl" number="360"/>
+ <syscall name="extattr_set_file" number="361"/>
+ <syscall name="extattr_get_file" number="362"/>
+ <syscall name="extattr_delete_file" number="363"/>
+ <syscall name="extattr_set_fd" number="364"/>
+ <syscall name="extattr_get_fd" number="365"/>
+ <syscall name="extattr_delete_fd" number="366"/>
+ <syscall name="extattr_set_link" number="367"/>
+ <syscall name="extattr_get_link" number="368"/>
+ <syscall name="extattr_delete_link" number="369"/>
+ <syscall name="extattr_list_fd" number="370"/>
+ <syscall name="extattr_list_file" number="371"/>
+ <syscall name="extattr_list_link" number="372"/>
+ <syscall name="compat_50_pselect" number="373"/>
+ <syscall name="compat_50_pollts" number="374"/>
+ <syscall name="setxattr" number="375"/>
+ <syscall name="lsetxattr" number="376"/>
+ <syscall name="fsetxattr" number="377"/>
+ <syscall name="getxattr" number="378"/>
+ <syscall name="lgetxattr" number="379"/>
+ <syscall name="fgetxattr" number="380"/>
+ <syscall name="listxattr" number="381"/>
+ <syscall name="llistxattr" number="382"/>
+ <syscall name="flistxattr" number="383"/>
+ <syscall name="removexattr" number="384"/>
+ <syscall name="lremovexattr" number="385"/>
+ <syscall name="fremovexattr" number="386"/>
+ <syscall name="compat_50___stat30" number="387"/>
+ <syscall name="compat_50___fstat30" number="388"/>
+ <syscall name="compat_50___lstat30" number="389"/>
+ <syscall name="__getdents30" number="390"/>
+ <syscall name="compat_30___fhstat30" number="392"/>
+ <syscall name="compat_50___ntp_gettime30" number="393"/>
+ <syscall name="__socket30" number="394"/>
+ <syscall name="__getfh30" number="395"/>
+ <syscall name="__fhopen40" number="396"/>
+ <syscall name="compat_90_fhstatvfs1" number="397"/>
+ <syscall name="compat_50___fhstat40" number="398"/>
+ <syscall name="aio_cancel" number="399"/>
+ <syscall name="aio_error" number="400"/>
+ <syscall name="aio_fsync" number="401"/>
+ <syscall name="aio_read" number="402"/>
+ <syscall name="aio_return" number="403"/>
+ <syscall name="compat_50_aio_suspend" number="404"/>
+ <syscall name="aio_write" number="405"/>
+ <syscall name="lio_listio" number="406"/>
+ <syscall name="__mount50" number="410"/>
+ <syscall name="mremap" number="411"/>
+ <syscall name="pset_create" number="412"/>
+ <syscall name="pset_destroy" number="413"/>
+ <syscall name="pset_assign" number="414"/>
+ <syscall name="_pset_bind" number="415"/>
+ <syscall name="__posix_fadvise50" number="416"/>
+ <syscall name="__select50" number="417"/>
+ <syscall name="__gettimeofday50" number="418"/>
+ <syscall name="__settimeofday50" number="419"/>
+ <syscall name="__utimes50" number="420"/>
+ <syscall name="__adjtime50" number="421"/>
+ <syscall name="__lfs_segwait50" number="422"/>
+ <syscall name="__futimes50" number="423"/>
+ <syscall name="__lutimes50" number="424"/>
+ <syscall name="__setitimer50" number="425"/>
+ <syscall name="__getitimer50" number="426"/>
+ <syscall name="__clock_gettime50" number="427"/>
+ <syscall name="__clock_settime50" number="428"/>
+ <syscall name="__clock_getres50" number="429"/>
+ <syscall name="__nanosleep50" number="430"/>
+ <syscall name="____sigtimedwait50" number="431"/>
+ <syscall name="__mq_timedsend50" number="432"/>
+ <syscall name="__mq_timedreceive50" number="433"/>
+ <syscall name="compat_60__lwp_park" number="434"/>
+ <syscall name="__kevent50" number="435"/>
+ <syscall name="__pselect50" number="436"/>
+ <syscall name="__pollts50" number="437"/>
+ <syscall name="__aio_suspend50" number="438"/>
+ <syscall name="__stat50" number="439"/>
+ <syscall name="__fstat50" number="440"/>
+ <syscall name="__lstat50" number="441"/>
+ <syscall name="____semctl50" number="442"/>
+ <syscall name="__shmctl50" number="443"/>
+ <syscall name="__msgctl50" number="444"/>
+ <syscall name="__getrusage50" number="445"/>
+ <syscall name="__timer_settime50" number="446"/>
+ <syscall name="__timer_gettime50" number="447"/>
+ <syscall name="__ntp_gettime50" number="448"/>
+ <syscall name="__wait450" number="449"/>
+ <syscall name="__mknod50" number="450"/>
+ <syscall name="__fhstat50" number="451"/>
+ <syscall name="pipe2" number="453"/>
+ <syscall name="dup3" number="454"/>
+ <syscall name="kqueue1" number="455"/>
+ <syscall name="paccept" number="456"/>
+ <syscall name="linkat" number="457"/>
+ <syscall name="renameat" number="458"/>
+ <syscall name="mkfifoat" number="459"/>
+ <syscall name="mknodat" number="460"/>
+ <syscall name="mkdirat" number="461"/>
+ <syscall name="faccessat" number="462"/>
+ <syscall name="fchmodat" number="463"/>
+ <syscall name="fchownat" number="464"/>
+ <syscall name="fexecve" number="465"/>
+ <syscall name="fstatat" number="466"/>
+ <syscall name="utimensat" number="467"/>
+ <syscall name="openat" number="468"/>
+ <syscall name="readlinkat" number="469"/>
+ <syscall name="symlinkat" number="470"/>
+ <syscall name="unlinkat" number="471"/>
+ <syscall name="futimens" number="472"/>
+ <syscall name="__quotactl" number="473"/>
+ <syscall name="posix_spawn" number="474"/>
+ <syscall name="recvmmsg" number="475"/>
+ <syscall name="sendmmsg" number="476"/>
+ <syscall name="clock_nanosleep" number="477"/>
+ <syscall name="___lwp_park60" number="478"/>
+ <syscall name="posix_fallocate" number="479"/>
+ <syscall name="fdiscard" number="480"/>
+ <syscall name="wait6" number="481"/>
+ <syscall name="clock_getcpuclockid2" number="482"/>
+ <syscall name="__getvfsstat90" number="483"/>
+ <syscall name="__statvfs190" number="484"/>
+ <syscall name="__fstatvfs190" number="485"/>
+ <syscall name="__fhstatvfs190" number="486"/>
+ <syscall name="__acl_get_link" number="487"/>
+ <syscall name="__acl_set_link" number="488"/>
+ <syscall name="__acl_delete_link" number="489"/>
+ <syscall name="__acl_aclcheck_link" number="490"/>
+ <syscall name="__acl_get_file" number="491"/>
+ <syscall name="__acl_set_file" number="492"/>
+ <syscall name="__acl_get_fd" number="493"/>
+ <syscall name="__acl_set_fd" number="494"/>
+ <syscall name="__acl_delete_file" number="495"/>
+ <syscall name="__acl_delete_fd" number="496"/>
+ <syscall name="__acl_aclcheck_file" number="497"/>
+ <syscall name="__acl_aclcheck_fd" number="498"/>
+ <syscall name="lpathconf" number="499"/>
+</syscalls_info>
diff --git a/share/gdb/syscalls/ppc-linux.xml b/share/gdb/syscalls/ppc-linux.xml
new file mode 100644
index 0000000..c4a79e8
--- /dev/null
+++ b/share/gdb/syscalls/ppc-linux.xml
@@ -0,0 +1,445 @@
+<?xml version="1.0"?>
+<!DOCTYPE syscalls_info SYSTEM "gdb-syscalls.dtd">
+<!-- Copyright (C) 2009-2023 Free Software Foundation, Inc.
+
+ Copying and distribution of this file, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved. -->
+<!-- This file was generated using the following file:
+
+ arch/powerpc/kernel/syscalls/syscall.tbl
+
+ The file mentioned above belongs to the Linux Kernel. -->
+<syscalls_info>
+ <syscall name="restart_syscall" number="0"/>
+ <syscall name="exit" number="1" groups="process"/>
+ <syscall name="fork" number="2" groups="process"/>
+ <syscall name="read" number="3" groups="descriptor"/>
+ <syscall name="write" number="4" groups="descriptor"/>
+ <syscall name="open" number="5" groups="descriptor,file"/>
+ <syscall name="close" number="6" groups="descriptor"/>
+ <syscall name="waitpid" number="7" groups="process"/>
+ <syscall name="creat" number="8" groups="descriptor,file"/>
+ <syscall name="link" number="9" groups="file"/>
+ <syscall name="unlink" number="10" groups="file"/>
+ <syscall name="execve" number="11" groups="file,process"/>
+ <syscall name="chdir" number="12" groups="file"/>
+ <syscall name="time" number="13"/>
+ <syscall name="mknod" number="14" groups="file"/>
+ <syscall name="chmod" number="15" groups="file"/>
+ <syscall name="lchown" number="16" groups="file"/>
+ <syscall name="break" number="17" groups="memory"/>
+ <syscall name="oldstat" number="18" groups="file"/>
+ <syscall name="lseek" number="19" groups="descriptor"/>
+ <syscall name="getpid" number="20"/>
+ <syscall name="mount" number="21" groups="file"/>
+ <syscall name="umount" number="22" groups="file"/>
+ <syscall name="setuid" number="23"/>
+ <syscall name="getuid" number="24"/>
+ <syscall name="stime" number="25"/>
+ <syscall name="ptrace" number="26"/>
+ <syscall name="alarm" number="27"/>
+ <syscall name="oldfstat" number="28" groups="descriptor"/>
+ <syscall name="pause" number="29" groups="signal"/>
+ <syscall name="utime" number="30" groups="file"/>
+ <syscall name="stty" number="31"/>
+ <syscall name="gtty" number="32"/>
+ <syscall name="access" number="33" groups="file"/>
+ <syscall name="nice" number="34"/>
+ <syscall name="ftime" number="35"/>
+ <syscall name="sync" number="36"/>
+ <syscall name="kill" number="37" groups="signal"/>
+ <syscall name="rename" number="38" groups="file"/>
+ <syscall name="mkdir" number="39" groups="file"/>
+ <syscall name="rmdir" number="40" groups="file"/>
+ <syscall name="dup" number="41" groups="descriptor"/>
+ <syscall name="pipe" number="42" groups="descriptor"/>
+ <syscall name="times" number="43"/>
+ <syscall name="prof" number="44"/>
+ <syscall name="brk" number="45" groups="memory"/>
+ <syscall name="setgid" number="46"/>
+ <syscall name="getgid" number="47"/>
+ <syscall name="signal" number="48" groups="signal"/>
+ <syscall name="geteuid" number="49"/>
+ <syscall name="getegid" number="50"/>
+ <syscall name="acct" number="51" groups="file"/>
+ <syscall name="umount2" number="52" groups="file"/>
+ <syscall name="lock" number="53"/>
+ <syscall name="ioctl" number="54" groups="descriptor"/>
+ <syscall name="fcntl" number="55" groups="descriptor"/>
+ <syscall name="mpx" number="56"/>
+ <syscall name="setpgid" number="57"/>
+ <syscall name="ulimit" number="58"/>
+ <syscall name="oldolduname" number="59"/>
+ <syscall name="umask" number="60"/>
+ <syscall name="chroot" number="61" groups="file"/>
+ <syscall name="ustat" number="62"/>
+ <syscall name="dup2" number="63" groups="descriptor"/>
+ <syscall name="getppid" number="64"/>
+ <syscall name="getpgrp" number="65"/>
+ <syscall name="setsid" number="66"/>
+ <syscall name="sigaction" number="67" groups="signal"/>
+ <syscall name="sgetmask" number="68" groups="signal"/>
+ <syscall name="ssetmask" number="69" groups="signal"/>
+ <syscall name="setreuid" number="70"/>
+ <syscall name="setregid" number="71"/>
+ <syscall name="sigsuspend" number="72" groups="signal"/>
+ <syscall name="sigpending" number="73" groups="signal"/>
+ <syscall name="sethostname" number="74"/>
+ <syscall name="setrlimit" number="75"/>
+ <syscall name="getrlimit" number="76"/>
+ <syscall name="getrusage" number="77"/>
+ <syscall name="gettimeofday" number="78"/>
+ <syscall name="settimeofday" number="79"/>
+ <syscall name="getgroups" number="80"/>
+ <syscall name="setgroups" number="81"/>
+ <syscall name="select" number="82" groups="descriptor"/>
+ <syscall name="symlink" number="83" groups="file"/>
+ <syscall name="oldlstat" number="84" groups="file"/>
+ <syscall name="readlink" number="85" groups="file"/>
+ <syscall name="uselib" number="86" groups="file"/>
+ <syscall name="swapon" number="87" groups="file"/>
+ <syscall name="reboot" number="88"/>
+ <syscall name="readdir" number="89" groups="descriptor"/>
+ <syscall name="mmap" number="90" groups="descriptor,memory"/>
+ <syscall name="munmap" number="91" groups="memory"/>
+ <syscall name="truncate" number="92" groups="file"/>
+ <syscall name="ftruncate" number="93" groups="descriptor"/>
+ <syscall name="fchmod" number="94" groups="descriptor"/>
+ <syscall name="fchown" number="95" groups="descriptor"/>
+ <syscall name="getpriority" number="96"/>
+ <syscall name="setpriority" number="97"/>
+ <syscall name="profil" number="98"/>
+ <syscall name="statfs" number="99" groups="file"/>
+ <syscall name="fstatfs" number="100" groups="descriptor"/>
+ <syscall name="ioperm" number="101"/>
+ <syscall name="socketcall" number="102" groups="descriptor"/>
+ <syscall name="syslog" number="103"/>
+ <syscall name="setitimer" number="104"/>
+ <syscall name="getitimer" number="105"/>
+ <syscall name="stat" number="106" groups="file"/>
+ <syscall name="lstat" number="107" groups="file"/>
+ <syscall name="fstat" number="108" groups="descriptor"/>
+ <syscall name="olduname" number="109"/>
+ <syscall name="iopl" number="110"/>
+ <syscall name="vhangup" number="111"/>
+ <syscall name="idle" number="112"/>
+ <syscall name="vm86" number="113"/>
+ <syscall name="wait4" number="114" groups="process"/>
+ <syscall name="swapoff" number="115" groups="file"/>
+ <syscall name="sysinfo" number="116"/>
+ <syscall name="ipc" number="117" groups="ipc"/>
+ <syscall name="fsync" number="118" groups="descriptor"/>
+ <syscall name="sigreturn" number="119" groups="signal"/>
+ <syscall name="clone" number="120" groups="process"/>
+ <syscall name="setdomainname" number="121"/>
+ <syscall name="uname" number="122"/>
+ <syscall name="modify_ldt" number="123"/>
+ <syscall name="adjtimex" number="124"/>
+ <syscall name="mprotect" number="125" groups="memory"/>
+ <syscall name="sigprocmask" number="126" groups="signal"/>
+ <syscall name="create_module" number="127"/>
+ <syscall name="init_module" number="128"/>
+ <syscall name="delete_module" number="129"/>
+ <syscall name="get_kernel_syms" number="130"/>
+ <syscall name="quotactl" number="131" groups="file"/>
+ <syscall name="getpgid" number="132"/>
+ <syscall name="fchdir" number="133" groups="descriptor"/>
+ <syscall name="bdflush" number="134"/>
+ <syscall name="sysfs" number="135"/>
+ <syscall name="personality" number="136"/>
+ <syscall name="afs_syscall" number="137"/>
+ <syscall name="setfsuid" number="138"/>
+ <syscall name="setfsgid" number="139"/>
+ <syscall name="_llseek" number="140" groups="descriptor"/>
+ <syscall name="getdents" number="141" groups="descriptor"/>
+ <syscall name="_newselect" number="142" groups="descriptor"/>
+ <syscall name="flock" number="143" groups="descriptor"/>
+ <syscall name="msync" number="144" groups="memory"/>
+ <syscall name="readv" number="145" groups="descriptor"/>
+ <syscall name="writev" number="146" groups="descriptor"/>
+ <syscall name="getsid" number="147"/>
+ <syscall name="fdatasync" number="148" groups="descriptor"/>
+ <syscall name="_sysctl" number="149"/>
+ <syscall name="mlock" number="150" groups="memory"/>
+ <syscall name="munlock" number="151" groups="memory"/>
+ <syscall name="mlockall" number="152" groups="memory"/>
+ <syscall name="munlockall" number="153" groups="memory"/>
+ <syscall name="sched_setparam" number="154"/>
+ <syscall name="sched_getparam" number="155"/>
+ <syscall name="sched_setscheduler" number="156"/>
+ <syscall name="sched_getscheduler" number="157"/>
+ <syscall name="sched_yield" number="158"/>
+ <syscall name="sched_get_priority_max" number="159"/>
+ <syscall name="sched_get_priority_min" number="160"/>
+ <syscall name="sched_rr_get_interval" number="161"/>
+ <syscall name="nanosleep" number="162"/>
+ <syscall name="mremap" number="163" groups="memory"/>
+ <syscall name="setresuid" number="164"/>
+ <syscall name="getresuid" number="165"/>
+ <syscall name="query_module" number="166"/>
+ <syscall name="poll" number="167" groups="descriptor"/>
+ <syscall name="nfsservctl" number="168"/>
+ <syscall name="setresgid" number="169"/>
+ <syscall name="getresgid" number="170"/>
+ <syscall name="prctl" number="171"/>
+ <syscall name="rt_sigreturn" number="172" groups="signal"/>
+ <syscall name="rt_sigaction" number="173" groups="signal"/>
+ <syscall name="rt_sigprocmask" number="174" groups="signal"/>
+ <syscall name="rt_sigpending" number="175" groups="signal"/>
+ <syscall name="rt_sigtimedwait" number="176" groups="signal"/>
+ <syscall name="rt_sigqueueinfo" number="177" groups="signal"/>
+ <syscall name="rt_sigsuspend" number="178" groups="signal"/>
+ <syscall name="pread64" number="179" groups="descriptor"/>
+ <syscall name="pwrite64" number="180" groups="descriptor"/>
+ <syscall name="chown" number="181" groups="file"/>
+ <syscall name="getcwd" number="182" groups="file"/>
+ <syscall name="capget" number="183"/>
+ <syscall name="capset" number="184"/>
+ <syscall name="sigaltstack" number="185" groups="signal"/>
+ <syscall name="sendfile" number="186" groups="descriptor,network"/>
+ <syscall name="getpmsg" number="187"/>
+ <syscall name="putpmsg" number="188"/>
+ <syscall name="vfork" number="189" groups="process"/>
+ <syscall name="ugetrlimit" number="190"/>
+ <syscall name="readahead" number="191" groups="descriptor"/>
+ <syscall name="mmap2" number="192" groups="descriptor,memory"/>
+ <syscall name="truncate64" number="193" groups="file"/>
+ <syscall name="ftruncate64" number="194" groups="descriptor"/>
+ <syscall name="stat64" number="195" groups="file"/>
+ <syscall name="lstat64" number="196" groups="file"/>
+ <syscall name="fstat64" number="197" groups="descriptor"/>
+ <syscall name="pciconfig_read" number="198"/>
+ <syscall name="pciconfig_write" number="199"/>
+ <syscall name="pciconfig_iobase" number="200"/>
+ <syscall name="multiplexer" number="201"/>
+ <syscall name="getdents64" number="202" groups="descriptor"/>
+ <syscall name="pivot_root" number="203" groups="file"/>
+ <syscall name="fcntl64" number="204" groups="descriptor"/>
+ <syscall name="madvise" number="205" groups="memory"/>
+ <syscall name="mincore" number="206" groups="memory"/>
+ <syscall name="gettid" number="207"/>
+ <syscall name="tkill" number="208" groups="signal"/>
+ <syscall name="setxattr" number="209" groups="file"/>
+ <syscall name="lsetxattr" number="210" groups="file"/>
+ <syscall name="fsetxattr" number="211" groups="descriptor"/>
+ <syscall name="getxattr" number="212" groups="file"/>
+ <syscall name="lgetxattr" number="213" groups="file"/>
+ <syscall name="fgetxattr" number="214" groups="descriptor"/>
+ <syscall name="listxattr" number="215" groups="file"/>
+ <syscall name="llistxattr" number="216" groups="file"/>
+ <syscall name="flistxattr" number="217" groups="descriptor"/>
+ <syscall name="removexattr" number="218" groups="file"/>
+ <syscall name="lremovexattr" number="219" groups="file"/>
+ <syscall name="fremovexattr" number="220" groups="descriptor"/>
+ <syscall name="futex" number="221"/>
+ <syscall name="sched_setaffinity" number="222"/>
+ <syscall name="sched_getaffinity" number="223"/>
+ <syscall name="tuxcall" number="225"/>
+ <syscall name="sendfile64" number="226" groups="descriptor,network"/>
+ <syscall name="io_setup" number="227"/>
+ <syscall name="io_destroy" number="228"/>
+ <syscall name="io_getevents" number="229"/>
+ <syscall name="io_submit" number="230"/>
+ <syscall name="io_cancel" number="231"/>
+ <syscall name="set_tid_address" number="232"/>
+ <syscall name="fadvise64" number="233" groups="descriptor"/>
+ <syscall name="exit_group" number="234" groups="process"/>
+ <syscall name="lookup_dcookie" number="235"/>
+ <syscall name="epoll_create" number="236" groups="descriptor"/>
+ <syscall name="epoll_ctl" number="237" groups="descriptor"/>
+ <syscall name="epoll_wait" number="238" groups="descriptor"/>
+ <syscall name="remap_file_pages" number="239" groups="memory"/>
+ <syscall name="timer_create" number="240"/>
+ <syscall name="timer_settime" number="241"/>
+ <syscall name="timer_gettime" number="242"/>
+ <syscall name="timer_getoverrun" number="243"/>
+ <syscall name="timer_delete" number="244"/>
+ <syscall name="clock_settime" number="245"/>
+ <syscall name="clock_gettime" number="246"/>
+ <syscall name="clock_getres" number="247"/>
+ <syscall name="clock_nanosleep" number="248"/>
+ <syscall name="swapcontext" number="249"/>
+ <syscall name="tgkill" number="250" groups="signal"/>
+ <syscall name="utimes" number="251" groups="file"/>
+ <syscall name="statfs64" number="252" groups="file"/>
+ <syscall name="fstatfs64" number="253" groups="descriptor"/>
+ <syscall name="fadvise64_64" number="254" groups="descriptor"/>
+ <syscall name="rtas" number="255"/>
+ <syscall name="sys_debug_setcontext" number="256"/>
+ <syscall name="migrate_pages" number="258" groups="memory"/>
+ <syscall name="mbind" number="259" groups="memory"/>
+ <syscall name="get_mempolicy" number="260" groups="memory"/>
+ <syscall name="set_mempolicy" number="261" groups="memory"/>
+ <syscall name="mq_open" number="262"/>
+ <syscall name="mq_unlink" number="263"/>
+ <syscall name="mq_timedsend" number="264"/>
+ <syscall name="mq_timedreceive" number="265"/>
+ <syscall name="mq_notify" number="266"/>
+ <syscall name="mq_getsetattr" number="267"/>
+ <syscall name="kexec_load" number="268"/>
+ <syscall name="add_key" number="269"/>
+ <syscall name="request_key" number="270"/>
+ <syscall name="keyctl" number="271"/>
+ <syscall name="waitid" number="272" groups="process"/>
+ <syscall name="ioprio_set" number="273"/>
+ <syscall name="ioprio_get" number="274"/>
+ <syscall name="inotify_init" number="275" groups="descriptor"/>
+ <syscall name="inotify_add_watch" number="276" groups="descriptor"/>
+ <syscall name="inotify_rm_watch" number="277" groups="descriptor"/>
+ <syscall name="spu_run" number="278"/>
+ <syscall name="spu_create" number="279"/>
+ <syscall name="pselect6" number="280" groups="descriptor"/>
+ <syscall name="ppoll" number="281" groups="descriptor"/>
+ <syscall name="unshare" number="282" groups="process"/>
+ <syscall name="splice" number="283" groups="descriptor"/>
+ <syscall name="tee" number="284" groups="descriptor"/>
+ <syscall name="vmsplice" number="285" groups="descriptor"/>
+ <syscall name="openat" number="286" groups="descriptor,file"/>
+ <syscall name="mkdirat" number="287" groups="descriptor,file"/>
+ <syscall name="mknodat" number="288" groups="descriptor,file"/>
+ <syscall name="fchownat" number="289" groups="descriptor,file"/>
+ <syscall name="futimesat" number="290" groups="descriptor,file"/>
+ <syscall name="fstatat64" number="291" groups="descriptor,file"/>
+ <syscall name="unlinkat" number="292" groups="descriptor,file"/>
+ <syscall name="renameat" number="293" groups="descriptor,file"/>
+ <syscall name="linkat" number="294" groups="descriptor,file"/>
+ <syscall name="symlinkat" number="295" groups="descriptor,file"/>
+ <syscall name="readlinkat" number="296" groups="descriptor,file"/>
+ <syscall name="fchmodat" number="297" groups="descriptor,file"/>
+ <syscall name="faccessat" number="298" groups="descriptor,file"/>
+ <syscall name="get_robust_list" number="299"/>
+ <syscall name="set_robust_list" number="300"/>
+ <syscall name="move_pages" number="301" groups="memory"/>
+ <syscall name="getcpu" number="302"/>
+ <syscall name="epoll_pwait" number="303" groups="descriptor"/>
+ <syscall name="utimensat" number="304" groups="descriptor,file"/>
+ <syscall name="signalfd" number="305" groups="descriptor,signal"/>
+ <syscall name="timerfd_create" number="306" groups="descriptor"/>
+ <syscall name="eventfd" number="307" groups="descriptor"/>
+ <syscall name="sync_file_range2" number="308"/>
+ <syscall name="fallocate" number="309" groups="descriptor"/>
+ <syscall name="subpage_prot" number="310"/>
+ <syscall name="timerfd_settime" number="311" groups="descriptor"/>
+ <syscall name="timerfd_gettime" number="312" groups="descriptor"/>
+ <syscall name="signalfd4" number="313" groups="descriptor,signal"/>
+ <syscall name="eventfd2" number="314" groups="descriptor"/>
+ <syscall name="epoll_create1" number="315" groups="descriptor"/>
+ <syscall name="dup3" number="316" groups="descriptor"/>
+ <syscall name="pipe2" number="317" groups="descriptor"/>
+ <syscall name="inotify_init1" number="318" groups="descriptor"/>
+ <syscall name="perf_event_open" number="319" groups="descriptor"/>
+ <syscall name="preadv" number="320" groups="descriptor"/>
+ <syscall name="pwritev" number="321" groups="descriptor"/>
+ <syscall name="rt_tgsigqueueinfo" number="322" groups="process,signal"/>
+ <syscall name="fanotify_init" number="323" groups="descriptor"/>
+ <syscall name="fanotify_mark" number="324" groups="descriptor,file"/>
+ <syscall name="prlimit64" number="325"/>
+ <syscall name="socket" number="326" groups="network"/>
+ <syscall name="bind" number="327" groups="network"/>
+ <syscall name="connect" number="328" groups="network"/>
+ <syscall name="listen" number="329" groups="network"/>
+ <syscall name="accept" number="330" groups="network"/>
+ <syscall name="getsockname" number="331" groups="network"/>
+ <syscall name="getpeername" number="332" groups="network"/>
+ <syscall name="socketpair" number="333" groups="network"/>
+ <syscall name="send" number="334" groups="network"/>
+ <syscall name="sendto" number="335" groups="network"/>
+ <syscall name="recv" number="336" groups="network"/>
+ <syscall name="recvfrom" number="337" groups="network"/>
+ <syscall name="shutdown" number="338" groups="network"/>
+ <syscall name="setsockopt" number="339" groups="network"/>
+ <syscall name="getsockopt" number="340" groups="network"/>
+ <syscall name="sendmsg" number="341" groups="network"/>
+ <syscall name="recvmsg" number="342" groups="network"/>
+ <syscall name="recvmmsg" number="343" groups="network"/>
+ <syscall name="accept4" number="344" groups="network"/>
+ <syscall name="name_to_handle_at" number="345" groups="descriptor,file"/>
+ <syscall name="open_by_handle_at" number="346" groups="descriptor"/>
+ <syscall name="clock_adjtime" number="347"/>
+ <syscall name="syncfs" number="348" groups="descriptor"/>
+ <syscall name="sendmmsg" number="349" groups="network"/>
+ <syscall name="setns" number="350" groups="descriptor"/>
+ <syscall name="process_vm_readv" number="351"/>
+ <syscall name="process_vm_writev" number="352"/>
+ <syscall name="finit_module" number="353" groups="descriptor"/>
+ <syscall name="kcmp" number="354"/>
+ <syscall name="sched_setattr" number="355"/>
+ <syscall name="sched_getattr" number="356"/>
+ <syscall name="renameat2" number="357"/>
+ <syscall name="seccomp" number="358"/>
+ <syscall name="getrandom" number="359"/>
+ <syscall name="memfd_create" number="360"/>
+ <syscall name="bpf" number="361"/>
+ <syscall name="execveat" number="362"/>
+ <syscall name="switch_endian" number="363"/>
+ <syscall name="userfaultfd" number="364"/>
+ <syscall name="membarrier" number="365"/>
+ <syscall name="mlock2" number="378"/>
+ <syscall name="copy_file_range" number="379"/>
+ <syscall name="preadv2" number="380"/>
+ <syscall name="pwritev2" number="381"/>
+ <syscall name="kexec_file_load" number="382"/>
+ <syscall name="statx" number="383"/>
+ <syscall name="pkey_alloc" number="384"/>
+ <syscall name="pkey_free" number="385"/>
+ <syscall name="pkey_mprotect" number="386"/>
+ <syscall name="rseq" number="387"/>
+ <syscall name="io_pgetevents" number="388"/>
+ <syscall name="semget" number="393" groups="ipc"/>
+ <syscall name="semctl" number="394" groups="ipc"/>
+ <syscall name="shmget" number="395" groups="ipc"/>
+ <syscall name="shmctl" number="396" groups="ipc"/>
+ <syscall name="shmat" number="397" groups="ipc,memory"/>
+ <syscall name="shmdt" number="398" groups="ipc,memory"/>
+ <syscall name="msgget" number="399" groups="ipc"/>
+ <syscall name="msgsnd" number="400" groups="ipc"/>
+ <syscall name="msgrcv" number="401" groups="ipc"/>
+ <syscall name="msgctl" number="402" groups="ipc"/>
+ <syscall name="clock_gettime64" number="403"/>
+ <syscall name="clock_settime64" number="404"/>
+ <syscall name="clock_adjtime64" number="405"/>
+ <syscall name="clock_getres_time64" number="406"/>
+ <syscall name="clock_nanosleep_time64" number="407"/>
+ <syscall name="timer_gettime64" number="408"/>
+ <syscall name="timer_settime64" number="409"/>
+ <syscall name="timerfd_gettime64" number="410"/>
+ <syscall name="timerfd_settime64" number="411"/>
+ <syscall name="utimensat_time64" number="412"/>
+ <syscall name="pselect6_time64" number="413"/>
+ <syscall name="ppoll_time64" number="414"/>
+ <syscall name="io_pgetevents_time64" number="416"/>
+ <syscall name="recvmmsg_time64" number="417"/>
+ <syscall name="mq_timedsend_time64" number="418"/>
+ <syscall name="mq_timedreceive_time64" number="419"/>
+ <syscall name="semtimedop_time64" number="420"/>
+ <syscall name="rt_sigtimedwait_time64" number="421"/>
+ <syscall name="futex_time64" number="422"/>
+ <syscall name="sched_rr_get_interval_time64" number="423"/>
+ <syscall name="pidfd_send_signal" number="424"/>
+ <syscall name="io_uring_setup" number="425"/>
+ <syscall name="io_uring_enter" number="426"/>
+ <syscall name="io_uring_register" number="427"/>
+ <syscall name="open_tree" number="428"/>
+ <syscall name="move_mount" number="429"/>
+ <syscall name="fsopen" number="430"/>
+ <syscall name="fsconfig" number="431"/>
+ <syscall name="fsmount" number="432"/>
+ <syscall name="fspick" number="433"/>
+ <syscall name="pidfd_open" number="434"/>
+ <syscall name="clone3" number="435"/>
+ <syscall name="close_range" number="436"/>
+ <syscall name="openat2" number="437"/>
+ <syscall name="pidfd_getfd" number="438"/>
+ <syscall name="faccessat2" number="439"/>
+ <syscall name="process_madvise" number="440"/>
+ <syscall name="epoll_pwait2" number="441"/>
+ <syscall name="mount_setattr" number="442"/>
+ <syscall name="quotactl_fd" number="443"/>
+ <syscall name="landlock_create_ruleset" number="444"/>
+ <syscall name="landlock_add_rule" number="445"/>
+ <syscall name="landlock_restrict_self" number="446"/>
+ <syscall name="process_mrelease" number="448"/>
+ <syscall name="futex_waitv" number="449"/>
+ <syscall name="set_mempolicy_home_node" number="450"/>
+</syscalls_info>
diff --git a/share/gdb/syscalls/ppc64-linux.xml b/share/gdb/syscalls/ppc64-linux.xml
new file mode 100644
index 0000000..233c7c1
--- /dev/null
+++ b/share/gdb/syscalls/ppc64-linux.xml
@@ -0,0 +1,417 @@
+<?xml version="1.0"?>
+<!DOCTYPE syscalls_info SYSTEM "gdb-syscalls.dtd">
+<!-- Copyright (C) 2009-2023 Free Software Foundation, Inc.
+
+ Copying and distribution of this file, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved. -->
+<!-- This file was generated using the following file:
+
+ arch/powerpc/kernel/syscalls/syscall.tbl
+
+ The file mentioned above belongs to the Linux Kernel. -->
+<syscalls_info>
+ <syscall name="restart_syscall" number="0"/>
+ <syscall name="exit" number="1" groups="process"/>
+ <syscall name="fork" number="2" groups="process"/>
+ <syscall name="read" number="3" groups="descriptor"/>
+ <syscall name="write" number="4" groups="descriptor"/>
+ <syscall name="open" number="5" groups="descriptor,file"/>
+ <syscall name="close" number="6" groups="descriptor"/>
+ <syscall name="waitpid" number="7" groups="process"/>
+ <syscall name="creat" number="8" groups="descriptor,file"/>
+ <syscall name="link" number="9" groups="file"/>
+ <syscall name="unlink" number="10" groups="file"/>
+ <syscall name="execve" number="11" groups="file,process"/>
+ <syscall name="chdir" number="12" groups="file"/>
+ <syscall name="time" number="13"/>
+ <syscall name="mknod" number="14" groups="file"/>
+ <syscall name="chmod" number="15" groups="file"/>
+ <syscall name="lchown" number="16" groups="file"/>
+ <syscall name="break" number="17" groups="memory"/>
+ <syscall name="oldstat" number="18" groups="file"/>
+ <syscall name="lseek" number="19" groups="descriptor"/>
+ <syscall name="getpid" number="20"/>
+ <syscall name="mount" number="21" groups="file"/>
+ <syscall name="umount" number="22" groups="file"/>
+ <syscall name="setuid" number="23"/>
+ <syscall name="getuid" number="24"/>
+ <syscall name="stime" number="25"/>
+ <syscall name="ptrace" number="26"/>
+ <syscall name="alarm" number="27"/>
+ <syscall name="oldfstat" number="28" groups="descriptor"/>
+ <syscall name="pause" number="29" groups="signal"/>
+ <syscall name="utime" number="30" groups="file"/>
+ <syscall name="stty" number="31"/>
+ <syscall name="gtty" number="32"/>
+ <syscall name="access" number="33" groups="file"/>
+ <syscall name="nice" number="34"/>
+ <syscall name="ftime" number="35"/>
+ <syscall name="sync" number="36"/>
+ <syscall name="kill" number="37" groups="signal"/>
+ <syscall name="rename" number="38" groups="file"/>
+ <syscall name="mkdir" number="39" groups="file"/>
+ <syscall name="rmdir" number="40" groups="file"/>
+ <syscall name="dup" number="41" groups="descriptor"/>
+ <syscall name="pipe" number="42" groups="descriptor"/>
+ <syscall name="times" number="43"/>
+ <syscall name="prof" number="44"/>
+ <syscall name="brk" number="45" groups="memory"/>
+ <syscall name="setgid" number="46"/>
+ <syscall name="getgid" number="47"/>
+ <syscall name="signal" number="48" groups="signal"/>
+ <syscall name="geteuid" number="49"/>
+ <syscall name="getegid" number="50"/>
+ <syscall name="acct" number="51" groups="file"/>
+ <syscall name="umount2" number="52" groups="file"/>
+ <syscall name="lock" number="53"/>
+ <syscall name="ioctl" number="54" groups="descriptor"/>
+ <syscall name="fcntl" number="55" groups="descriptor"/>
+ <syscall name="mpx" number="56"/>
+ <syscall name="setpgid" number="57"/>
+ <syscall name="ulimit" number="58"/>
+ <syscall name="oldolduname" number="59"/>
+ <syscall name="umask" number="60"/>
+ <syscall name="chroot" number="61" groups="file"/>
+ <syscall name="ustat" number="62"/>
+ <syscall name="dup2" number="63" groups="descriptor"/>
+ <syscall name="getppid" number="64"/>
+ <syscall name="getpgrp" number="65"/>
+ <syscall name="setsid" number="66"/>
+ <syscall name="sigaction" number="67" groups="signal"/>
+ <syscall name="sgetmask" number="68" groups="signal"/>
+ <syscall name="ssetmask" number="69" groups="signal"/>
+ <syscall name="setreuid" number="70"/>
+ <syscall name="setregid" number="71"/>
+ <syscall name="sigsuspend" number="72" groups="signal"/>
+ <syscall name="sigpending" number="73" groups="signal"/>
+ <syscall name="sethostname" number="74"/>
+ <syscall name="setrlimit" number="75"/>
+ <syscall name="getrlimit" number="76"/>
+ <syscall name="getrusage" number="77"/>
+ <syscall name="gettimeofday" number="78"/>
+ <syscall name="settimeofday" number="79"/>
+ <syscall name="getgroups" number="80"/>
+ <syscall name="setgroups" number="81"/>
+ <syscall name="select" number="82" groups="descriptor"/>
+ <syscall name="symlink" number="83" groups="file"/>
+ <syscall name="oldlstat" number="84" groups="file"/>
+ <syscall name="readlink" number="85" groups="file"/>
+ <syscall name="uselib" number="86" groups="file"/>
+ <syscall name="swapon" number="87" groups="file"/>
+ <syscall name="reboot" number="88"/>
+ <syscall name="readdir" number="89" groups="descriptor"/>
+ <syscall name="mmap" number="90" groups="descriptor,memory"/>
+ <syscall name="munmap" number="91" groups="memory"/>
+ <syscall name="truncate" number="92" groups="file"/>
+ <syscall name="ftruncate" number="93" groups="descriptor"/>
+ <syscall name="fchmod" number="94" groups="descriptor"/>
+ <syscall name="fchown" number="95" groups="descriptor"/>
+ <syscall name="getpriority" number="96"/>
+ <syscall name="setpriority" number="97"/>
+ <syscall name="profil" number="98"/>
+ <syscall name="statfs" number="99" groups="file"/>
+ <syscall name="fstatfs" number="100" groups="descriptor"/>
+ <syscall name="ioperm" number="101"/>
+ <syscall name="socketcall" number="102" groups="descriptor"/>
+ <syscall name="syslog" number="103"/>
+ <syscall name="setitimer" number="104"/>
+ <syscall name="getitimer" number="105"/>
+ <syscall name="stat" number="106" groups="file"/>
+ <syscall name="lstat" number="107" groups="file"/>
+ <syscall name="fstat" number="108" groups="descriptor"/>
+ <syscall name="olduname" number="109"/>
+ <syscall name="iopl" number="110"/>
+ <syscall name="vhangup" number="111"/>
+ <syscall name="idle" number="112"/>
+ <syscall name="vm86" number="113"/>
+ <syscall name="wait4" number="114" groups="process"/>
+ <syscall name="swapoff" number="115" groups="file"/>
+ <syscall name="sysinfo" number="116"/>
+ <syscall name="ipc" number="117" groups="ipc"/>
+ <syscall name="fsync" number="118" groups="descriptor"/>
+ <syscall name="sigreturn" number="119" groups="signal"/>
+ <syscall name="clone" number="120" groups="process"/>
+ <syscall name="setdomainname" number="121"/>
+ <syscall name="uname" number="122"/>
+ <syscall name="modify_ldt" number="123"/>
+ <syscall name="adjtimex" number="124"/>
+ <syscall name="mprotect" number="125" groups="memory"/>
+ <syscall name="sigprocmask" number="126" groups="signal"/>
+ <syscall name="create_module" number="127"/>
+ <syscall name="init_module" number="128"/>
+ <syscall name="delete_module" number="129"/>
+ <syscall name="get_kernel_syms" number="130"/>
+ <syscall name="quotactl" number="131" groups="file"/>
+ <syscall name="getpgid" number="132"/>
+ <syscall name="fchdir" number="133" groups="descriptor"/>
+ <syscall name="bdflush" number="134"/>
+ <syscall name="sysfs" number="135"/>
+ <syscall name="personality" number="136"/>
+ <syscall name="afs_syscall" number="137"/>
+ <syscall name="setfsuid" number="138"/>
+ <syscall name="setfsgid" number="139"/>
+ <syscall name="_llseek" number="140" groups="descriptor"/>
+ <syscall name="getdents" number="141" groups="descriptor"/>
+ <syscall name="_newselect" number="142" groups="descriptor"/>
+ <syscall name="flock" number="143" groups="descriptor"/>
+ <syscall name="msync" number="144" groups="memory"/>
+ <syscall name="readv" number="145" groups="descriptor"/>
+ <syscall name="writev" number="146" groups="descriptor"/>
+ <syscall name="getsid" number="147"/>
+ <syscall name="fdatasync" number="148" groups="descriptor"/>
+ <syscall name="_sysctl" number="149"/>
+ <syscall name="mlock" number="150" groups="memory"/>
+ <syscall name="munlock" number="151" groups="memory"/>
+ <syscall name="mlockall" number="152" groups="memory"/>
+ <syscall name="munlockall" number="153" groups="memory"/>
+ <syscall name="sched_setparam" number="154"/>
+ <syscall name="sched_getparam" number="155"/>
+ <syscall name="sched_setscheduler" number="156"/>
+ <syscall name="sched_getscheduler" number="157"/>
+ <syscall name="sched_yield" number="158"/>
+ <syscall name="sched_get_priority_max" number="159"/>
+ <syscall name="sched_get_priority_min" number="160"/>
+ <syscall name="sched_rr_get_interval" number="161"/>
+ <syscall name="nanosleep" number="162"/>
+ <syscall name="mremap" number="163" groups="memory"/>
+ <syscall name="setresuid" number="164"/>
+ <syscall name="getresuid" number="165"/>
+ <syscall name="query_module" number="166"/>
+ <syscall name="poll" number="167" groups="descriptor"/>
+ <syscall name="nfsservctl" number="168"/>
+ <syscall name="setresgid" number="169"/>
+ <syscall name="getresgid" number="170"/>
+ <syscall name="prctl" number="171"/>
+ <syscall name="rt_sigreturn" number="172" groups="signal"/>
+ <syscall name="rt_sigaction" number="173" groups="signal"/>
+ <syscall name="rt_sigprocmask" number="174" groups="signal"/>
+ <syscall name="rt_sigpending" number="175" groups="signal"/>
+ <syscall name="rt_sigtimedwait" number="176" groups="signal"/>
+ <syscall name="rt_sigqueueinfo" number="177" groups="signal"/>
+ <syscall name="rt_sigsuspend" number="178" groups="signal"/>
+ <syscall name="pread64" number="179" groups="descriptor"/>
+ <syscall name="pwrite64" number="180" groups="descriptor"/>
+ <syscall name="chown" number="181" groups="file"/>
+ <syscall name="getcwd" number="182" groups="file"/>
+ <syscall name="capget" number="183"/>
+ <syscall name="capset" number="184"/>
+ <syscall name="sigaltstack" number="185" groups="signal"/>
+ <syscall name="sendfile" number="186" groups="descriptor,network"/>
+ <syscall name="getpmsg" number="187"/>
+ <syscall name="putpmsg" number="188"/>
+ <syscall name="vfork" number="189" groups="process"/>
+ <syscall name="ugetrlimit" number="190"/>
+ <syscall name="readahead" number="191" groups="descriptor"/>
+ <syscall name="pciconfig_read" number="198"/>
+ <syscall name="pciconfig_write" number="199"/>
+ <syscall name="pciconfig_iobase" number="200"/>
+ <syscall name="multiplexer" number="201"/>
+ <syscall name="getdents64" number="202" groups="descriptor"/>
+ <syscall name="pivot_root" number="203" groups="file"/>
+ <syscall name="madvise" number="205" groups="memory"/>
+ <syscall name="mincore" number="206" groups="memory"/>
+ <syscall name="gettid" number="207"/>
+ <syscall name="tkill" number="208" groups="signal"/>
+ <syscall name="setxattr" number="209" groups="file"/>
+ <syscall name="lsetxattr" number="210" groups="file"/>
+ <syscall name="fsetxattr" number="211" groups="descriptor"/>
+ <syscall name="getxattr" number="212" groups="file"/>
+ <syscall name="lgetxattr" number="213" groups="file"/>
+ <syscall name="fgetxattr" number="214" groups="descriptor"/>
+ <syscall name="listxattr" number="215" groups="file"/>
+ <syscall name="llistxattr" number="216" groups="file"/>
+ <syscall name="flistxattr" number="217" groups="descriptor"/>
+ <syscall name="removexattr" number="218" groups="file"/>
+ <syscall name="lremovexattr" number="219" groups="file"/>
+ <syscall name="fremovexattr" number="220" groups="descriptor"/>
+ <syscall name="futex" number="221"/>
+ <syscall name="sched_setaffinity" number="222"/>
+ <syscall name="sched_getaffinity" number="223"/>
+ <syscall name="tuxcall" number="225"/>
+ <syscall name="io_setup" number="227"/>
+ <syscall name="io_destroy" number="228"/>
+ <syscall name="io_getevents" number="229"/>
+ <syscall name="io_submit" number="230"/>
+ <syscall name="io_cancel" number="231"/>
+ <syscall name="set_tid_address" number="232"/>
+ <syscall name="fadvise64" number="233" groups="descriptor"/>
+ <syscall name="exit_group" number="234" groups="process"/>
+ <syscall name="lookup_dcookie" number="235"/>
+ <syscall name="epoll_create" number="236" groups="descriptor"/>
+ <syscall name="epoll_ctl" number="237" groups="descriptor"/>
+ <syscall name="epoll_wait" number="238" groups="descriptor"/>
+ <syscall name="remap_file_pages" number="239" groups="memory"/>
+ <syscall name="timer_create" number="240"/>
+ <syscall name="timer_settime" number="241"/>
+ <syscall name="timer_gettime" number="242"/>
+ <syscall name="timer_getoverrun" number="243"/>
+ <syscall name="timer_delete" number="244"/>
+ <syscall name="clock_settime" number="245"/>
+ <syscall name="clock_gettime" number="246"/>
+ <syscall name="clock_getres" number="247"/>
+ <syscall name="clock_nanosleep" number="248"/>
+ <syscall name="swapcontext" number="249"/>
+ <syscall name="tgkill" number="250" groups="signal"/>
+ <syscall name="utimes" number="251" groups="file"/>
+ <syscall name="statfs64" number="252" groups="file"/>
+ <syscall name="fstatfs64" number="253" groups="descriptor"/>
+ <syscall name="rtas" number="255"/>
+ <syscall name="sys_debug_setcontext" number="256"/>
+ <syscall name="migrate_pages" number="258" groups="memory"/>
+ <syscall name="mbind" number="259" groups="memory"/>
+ <syscall name="get_mempolicy" number="260" groups="memory"/>
+ <syscall name="set_mempolicy" number="261" groups="memory"/>
+ <syscall name="mq_open" number="262"/>
+ <syscall name="mq_unlink" number="263"/>
+ <syscall name="mq_timedsend" number="264"/>
+ <syscall name="mq_timedreceive" number="265"/>
+ <syscall name="mq_notify" number="266"/>
+ <syscall name="mq_getsetattr" number="267"/>
+ <syscall name="kexec_load" number="268"/>
+ <syscall name="add_key" number="269"/>
+ <syscall name="request_key" number="270"/>
+ <syscall name="keyctl" number="271"/>
+ <syscall name="waitid" number="272" groups="process"/>
+ <syscall name="ioprio_set" number="273"/>
+ <syscall name="ioprio_get" number="274"/>
+ <syscall name="inotify_init" number="275" groups="descriptor"/>
+ <syscall name="inotify_add_watch" number="276" groups="descriptor"/>
+ <syscall name="inotify_rm_watch" number="277" groups="descriptor"/>
+ <syscall name="spu_run" number="278"/>
+ <syscall name="spu_create" number="279"/>
+ <syscall name="pselect6" number="280" groups="descriptor"/>
+ <syscall name="ppoll" number="281" groups="descriptor"/>
+ <syscall name="unshare" number="282" groups="process"/>
+ <syscall name="splice" number="283" groups="descriptor"/>
+ <syscall name="tee" number="284" groups="descriptor"/>
+ <syscall name="vmsplice" number="285" groups="descriptor"/>
+ <syscall name="openat" number="286" groups="descriptor,file"/>
+ <syscall name="mkdirat" number="287" groups="descriptor,file"/>
+ <syscall name="mknodat" number="288" groups="descriptor,file"/>
+ <syscall name="fchownat" number="289" groups="descriptor,file"/>
+ <syscall name="futimesat" number="290" groups="descriptor,file"/>
+ <syscall name="newfstatat" number="291" groups="descriptor,file"/>
+ <syscall name="unlinkat" number="292" groups="descriptor,file"/>
+ <syscall name="renameat" number="293" groups="descriptor,file"/>
+ <syscall name="linkat" number="294" groups="descriptor,file"/>
+ <syscall name="symlinkat" number="295" groups="descriptor,file"/>
+ <syscall name="readlinkat" number="296" groups="descriptor,file"/>
+ <syscall name="fchmodat" number="297" groups="descriptor,file"/>
+ <syscall name="faccessat" number="298" groups="descriptor,file"/>
+ <syscall name="get_robust_list" number="299"/>
+ <syscall name="set_robust_list" number="300"/>
+ <syscall name="move_pages" number="301" groups="memory"/>
+ <syscall name="getcpu" number="302"/>
+ <syscall name="epoll_pwait" number="303" groups="descriptor"/>
+ <syscall name="utimensat" number="304" groups="descriptor,file"/>
+ <syscall name="signalfd" number="305" groups="descriptor,signal"/>
+ <syscall name="timerfd_create" number="306" groups="descriptor"/>
+ <syscall name="eventfd" number="307" groups="descriptor"/>
+ <syscall name="sync_file_range2" number="308"/>
+ <syscall name="fallocate" number="309" groups="descriptor"/>
+ <syscall name="subpage_prot" number="310"/>
+ <syscall name="timerfd_settime" number="311" groups="descriptor"/>
+ <syscall name="timerfd_gettime" number="312" groups="descriptor"/>
+ <syscall name="signalfd4" number="313" groups="descriptor,signal"/>
+ <syscall name="eventfd2" number="314" groups="descriptor"/>
+ <syscall name="epoll_create1" number="315" groups="descriptor"/>
+ <syscall name="dup3" number="316" groups="descriptor"/>
+ <syscall name="pipe2" number="317" groups="descriptor"/>
+ <syscall name="inotify_init1" number="318" groups="descriptor"/>
+ <syscall name="perf_event_open" number="319" groups="descriptor"/>
+ <syscall name="preadv" number="320" groups="descriptor"/>
+ <syscall name="pwritev" number="321" groups="descriptor"/>
+ <syscall name="rt_tgsigqueueinfo" number="322" groups="process,signal"/>
+ <syscall name="fanotify_init" number="323" groups="descriptor"/>
+ <syscall name="fanotify_mark" number="324" groups="descriptor,file"/>
+ <syscall name="prlimit64" number="325"/>
+ <syscall name="socket" number="326" groups="network"/>
+ <syscall name="bind" number="327" groups="network"/>
+ <syscall name="connect" number="328" groups="network"/>
+ <syscall name="listen" number="329" groups="network"/>
+ <syscall name="accept" number="330" groups="network"/>
+ <syscall name="getsockname" number="331" groups="network"/>
+ <syscall name="getpeername" number="332" groups="network"/>
+ <syscall name="socketpair" number="333" groups="network"/>
+ <syscall name="send" number="334" groups="network"/>
+ <syscall name="sendto" number="335" groups="network"/>
+ <syscall name="recv" number="336" groups="network"/>
+ <syscall name="recvfrom" number="337" groups="network"/>
+ <syscall name="shutdown" number="338" groups="network"/>
+ <syscall name="setsockopt" number="339" groups="network"/>
+ <syscall name="getsockopt" number="340" groups="network"/>
+ <syscall name="sendmsg" number="341" groups="network"/>
+ <syscall name="recvmsg" number="342" groups="network"/>
+ <syscall name="recvmmsg" number="343" groups="network"/>
+ <syscall name="accept4" number="344" groups="network"/>
+ <syscall name="name_to_handle_at" number="345" groups="descriptor,file"/>
+ <syscall name="open_by_handle_at" number="346" groups="descriptor"/>
+ <syscall name="clock_adjtime" number="347"/>
+ <syscall name="syncfs" number="348" groups="descriptor"/>
+ <syscall name="sendmmsg" number="349" groups="network"/>
+ <syscall name="setns" number="350" groups="descriptor"/>
+ <syscall name="process_vm_readv" number="351"/>
+ <syscall name="process_vm_writev" number="352"/>
+ <syscall name="finit_module" number="353" groups="descriptor"/>
+ <syscall name="kcmp" number="354"/>
+ <syscall name="sched_setattr" number="355"/>
+ <syscall name="sched_getattr" number="356"/>
+ <syscall name="renameat2" number="357"/>
+ <syscall name="seccomp" number="358"/>
+ <syscall name="getrandom" number="359"/>
+ <syscall name="memfd_create" number="360"/>
+ <syscall name="bpf" number="361"/>
+ <syscall name="execveat" number="362"/>
+ <syscall name="switch_endian" number="363"/>
+ <syscall name="userfaultfd" number="364"/>
+ <syscall name="membarrier" number="365"/>
+ <syscall name="mlock2" number="378"/>
+ <syscall name="copy_file_range" number="379"/>
+ <syscall name="preadv2" number="380"/>
+ <syscall name="pwritev2" number="381"/>
+ <syscall name="kexec_file_load" number="382"/>
+ <syscall name="statx" number="383"/>
+ <syscall name="pkey_alloc" number="384"/>
+ <syscall name="pkey_free" number="385"/>
+ <syscall name="pkey_mprotect" number="386"/>
+ <syscall name="rseq" number="387"/>
+ <syscall name="io_pgetevents" number="388"/>
+ <syscall name="semtimedop" number="392" groups="ipc"/>
+ <syscall name="semget" number="393" groups="ipc"/>
+ <syscall name="semctl" number="394" groups="ipc"/>
+ <syscall name="shmget" number="395" groups="ipc"/>
+ <syscall name="shmctl" number="396" groups="ipc"/>
+ <syscall name="shmat" number="397" groups="ipc,memory"/>
+ <syscall name="shmdt" number="398" groups="ipc,memory"/>
+ <syscall name="msgget" number="399" groups="ipc"/>
+ <syscall name="msgsnd" number="400" groups="ipc"/>
+ <syscall name="msgrcv" number="401" groups="ipc"/>
+ <syscall name="msgctl" number="402" groups="ipc"/>
+ <syscall name="pidfd_send_signal" number="424"/>
+ <syscall name="io_uring_setup" number="425"/>
+ <syscall name="io_uring_enter" number="426"/>
+ <syscall name="io_uring_register" number="427"/>
+ <syscall name="open_tree" number="428"/>
+ <syscall name="move_mount" number="429"/>
+ <syscall name="fsopen" number="430"/>
+ <syscall name="fsconfig" number="431"/>
+ <syscall name="fsmount" number="432"/>
+ <syscall name="fspick" number="433"/>
+ <syscall name="pidfd_open" number="434"/>
+ <syscall name="clone3" number="435"/>
+ <syscall name="close_range" number="436"/>
+ <syscall name="openat2" number="437"/>
+ <syscall name="pidfd_getfd" number="438"/>
+ <syscall name="faccessat2" number="439"/>
+ <syscall name="process_madvise" number="440"/>
+ <syscall name="epoll_pwait2" number="441"/>
+ <syscall name="mount_setattr" number="442"/>
+ <syscall name="quotactl_fd" number="443"/>
+ <syscall name="landlock_create_ruleset" number="444"/>
+ <syscall name="landlock_add_rule" number="445"/>
+ <syscall name="landlock_restrict_self" number="446"/>
+ <syscall name="process_mrelease" number="448"/>
+ <syscall name="futex_waitv" number="449"/>
+ <syscall name="set_mempolicy_home_node" number="450"/>
+</syscalls_info>
diff --git a/share/gdb/syscalls/s390-linux.xml b/share/gdb/syscalls/s390-linux.xml
new file mode 100644
index 0000000..963e458
--- /dev/null
+++ b/share/gdb/syscalls/s390-linux.xml
@@ -0,0 +1,434 @@
+<?xml version="1.0"?>
+<!DOCTYPE syscalls_info SYSTEM "gdb-syscalls.dtd">
+<!-- Copyright (C) 2009-2023 Free Software Foundation, Inc.
+
+ Copying and distribution of this file, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved. -->
+<!-- This file was generated using the following file:
+
+ arch/s390/kernel/syscalls/syscall.tbl
+
+ The file mentioned above belongs to the Linux Kernel. -->
+<syscalls_info>
+ <syscall name="exit" number="1" groups="process"/>
+ <syscall name="fork" number="2" groups="process"/>
+ <syscall name="read" number="3" groups="descriptor"/>
+ <syscall name="write" number="4" groups="descriptor"/>
+ <syscall name="open" number="5" groups="descriptor,file"/>
+ <syscall name="close" number="6" groups="descriptor"/>
+ <syscall name="restart_syscall" number="7"/>
+ <syscall name="creat" number="8" groups="descriptor,file"/>
+ <syscall name="link" number="9" groups="file"/>
+ <syscall name="unlink" number="10" groups="file"/>
+ <syscall name="execve" number="11" groups="file,process"/>
+ <syscall name="chdir" number="12" groups="file"/>
+ <syscall name="time" number="13"/>
+ <syscall name="mknod" number="14" groups="file"/>
+ <syscall name="chmod" number="15" groups="file"/>
+ <syscall name="lchown" number="16" groups="file"/>
+ <syscall name="lseek" number="19" groups="descriptor"/>
+ <syscall name="getpid" number="20"/>
+ <syscall name="mount" number="21" groups="file"/>
+ <syscall name="umount" number="22" groups="file"/>
+ <syscall name="setuid" number="23"/>
+ <syscall name="getuid" number="24"/>
+ <syscall name="stime" number="25"/>
+ <syscall name="ptrace" number="26"/>
+ <syscall name="alarm" number="27"/>
+ <syscall name="pause" number="29" groups="signal"/>
+ <syscall name="utime" number="30" groups="file"/>
+ <syscall name="access" number="33" groups="file"/>
+ <syscall name="nice" number="34"/>
+ <syscall name="sync" number="36"/>
+ <syscall name="kill" number="37" groups="signal"/>
+ <syscall name="rename" number="38" groups="file"/>
+ <syscall name="mkdir" number="39" groups="file"/>
+ <syscall name="rmdir" number="40" groups="file"/>
+ <syscall name="dup" number="41" groups="descriptor"/>
+ <syscall name="pipe" number="42" groups="descriptor"/>
+ <syscall name="times" number="43"/>
+ <syscall name="brk" number="45" groups="memory"/>
+ <syscall name="setgid" number="46"/>
+ <syscall name="getgid" number="47"/>
+ <syscall name="signal" number="48" groups="signal"/>
+ <syscall name="geteuid" number="49"/>
+ <syscall name="getegid" number="50"/>
+ <syscall name="acct" number="51" groups="file"/>
+ <syscall name="umount2" number="52" groups="file"/>
+ <syscall name="ioctl" number="54" groups="descriptor"/>
+ <syscall name="fcntl" number="55" groups="descriptor"/>
+ <syscall name="setpgid" number="57"/>
+ <syscall name="umask" number="60"/>
+ <syscall name="chroot" number="61" groups="file"/>
+ <syscall name="ustat" number="62"/>
+ <syscall name="dup2" number="63" groups="descriptor"/>
+ <syscall name="getppid" number="64"/>
+ <syscall name="getpgrp" number="65"/>
+ <syscall name="setsid" number="66"/>
+ <syscall name="sigaction" number="67" groups="signal"/>
+ <syscall name="setreuid" number="70"/>
+ <syscall name="setregid" number="71"/>
+ <syscall name="sigsuspend" number="72" groups="signal"/>
+ <syscall name="sigpending" number="73" groups="signal"/>
+ <syscall name="sethostname" number="74"/>
+ <syscall name="setrlimit" number="75"/>
+ <syscall name="getrlimit" number="76"/>
+ <syscall name="getrusage" number="77"/>
+ <syscall name="gettimeofday" number="78"/>
+ <syscall name="settimeofday" number="79"/>
+ <syscall name="getgroups" number="80"/>
+ <syscall name="setgroups" number="81"/>
+ <syscall name="symlink" number="83" groups="file"/>
+ <syscall name="readlink" number="85" groups="file"/>
+ <syscall name="uselib" number="86" groups="file"/>
+ <syscall name="swapon" number="87" groups="file"/>
+ <syscall name="reboot" number="88"/>
+ <syscall name="readdir" number="89" groups="descriptor"/>
+ <syscall name="mmap" number="90" groups="descriptor,memory"/>
+ <syscall name="munmap" number="91" groups="memory"/>
+ <syscall name="truncate" number="92" groups="file"/>
+ <syscall name="ftruncate" number="93" groups="descriptor"/>
+ <syscall name="fchmod" number="94" groups="descriptor"/>
+ <syscall name="fchown" number="95" groups="descriptor"/>
+ <syscall name="getpriority" number="96"/>
+ <syscall name="setpriority" number="97"/>
+ <syscall name="statfs" number="99" groups="file"/>
+ <syscall name="fstatfs" number="100" groups="descriptor"/>
+ <syscall name="ioperm" number="101"/>
+ <syscall name="socketcall" number="102" groups="descriptor"/>
+ <syscall name="syslog" number="103"/>
+ <syscall name="setitimer" number="104"/>
+ <syscall name="getitimer" number="105"/>
+ <syscall name="stat" number="106" groups="file"/>
+ <syscall name="lstat" number="107" groups="file"/>
+ <syscall name="fstat" number="108" groups="descriptor"/>
+ <syscall name="lookup_dcookie" number="110"/>
+ <syscall name="vhangup" number="111"/>
+ <syscall name="idle" number="112"/>
+ <syscall name="wait4" number="114" groups="process"/>
+ <syscall name="swapoff" number="115" groups="file"/>
+ <syscall name="sysinfo" number="116"/>
+ <syscall name="ipc" number="117" groups="ipc"/>
+ <syscall name="fsync" number="118" groups="descriptor"/>
+ <syscall name="sigreturn" number="119" groups="signal"/>
+ <syscall name="clone" number="120" groups="process"/>
+ <syscall name="setdomainname" number="121"/>
+ <syscall name="uname" number="122"/>
+ <syscall name="adjtimex" number="124"/>
+ <syscall name="mprotect" number="125" groups="memory"/>
+ <syscall name="sigprocmask" number="126" groups="signal"/>
+ <syscall name="create_module" number="127"/>
+ <syscall name="init_module" number="128"/>
+ <syscall name="delete_module" number="129"/>
+ <syscall name="get_kernel_syms" number="130"/>
+ <syscall name="quotactl" number="131" groups="file"/>
+ <syscall name="getpgid" number="132"/>
+ <syscall name="fchdir" number="133" groups="descriptor"/>
+ <syscall name="bdflush" number="134"/>
+ <syscall name="sysfs" number="135"/>
+ <syscall name="personality" number="136"/>
+ <syscall name="afs_syscall" number="137"/>
+ <syscall name="setfsuid" number="138"/>
+ <syscall name="setfsgid" number="139"/>
+ <syscall name="_llseek" number="140" groups="descriptor"/>
+ <syscall name="getdents" number="141" groups="descriptor"/>
+ <syscall name="_newselect" number="142" groups="descriptor"/>
+ <syscall name="flock" number="143" groups="descriptor"/>
+ <syscall name="msync" number="144" groups="memory"/>
+ <syscall name="readv" number="145" groups="descriptor"/>
+ <syscall name="writev" number="146" groups="descriptor"/>
+ <syscall name="getsid" number="147"/>
+ <syscall name="fdatasync" number="148" groups="descriptor"/>
+ <syscall name="_sysctl" number="149"/>
+ <syscall name="mlock" number="150" groups="memory"/>
+ <syscall name="munlock" number="151" groups="memory"/>
+ <syscall name="mlockall" number="152" groups="memory"/>
+ <syscall name="munlockall" number="153" groups="memory"/>
+ <syscall name="sched_setparam" number="154"/>
+ <syscall name="sched_getparam" number="155"/>
+ <syscall name="sched_setscheduler" number="156"/>
+ <syscall name="sched_getscheduler" number="157"/>
+ <syscall name="sched_yield" number="158"/>
+ <syscall name="sched_get_priority_max" number="159"/>
+ <syscall name="sched_get_priority_min" number="160"/>
+ <syscall name="sched_rr_get_interval" number="161"/>
+ <syscall name="nanosleep" number="162"/>
+ <syscall name="mremap" number="163" groups="memory"/>
+ <syscall name="setresuid" number="164"/>
+ <syscall name="getresuid" number="165"/>
+ <syscall name="query_module" number="167"/>
+ <syscall name="poll" number="168" groups="descriptor"/>
+ <syscall name="nfsservctl" number="169"/>
+ <syscall name="setresgid" number="170"/>
+ <syscall name="getresgid" number="171"/>
+ <syscall name="prctl" number="172"/>
+ <syscall name="rt_sigreturn" number="173" groups="signal"/>
+ <syscall name="rt_sigaction" number="174" groups="signal"/>
+ <syscall name="rt_sigprocmask" number="175" groups="signal"/>
+ <syscall name="rt_sigpending" number="176" groups="signal"/>
+ <syscall name="rt_sigtimedwait" number="177" groups="signal"/>
+ <syscall name="rt_sigqueueinfo" number="178" groups="signal"/>
+ <syscall name="rt_sigsuspend" number="179" groups="signal"/>
+ <syscall name="pread64" number="180" groups="descriptor"/>
+ <syscall name="pwrite64" number="181" groups="descriptor"/>
+ <syscall name="chown" number="182" groups="file"/>
+ <syscall name="getcwd" number="183" groups="file"/>
+ <syscall name="capget" number="184"/>
+ <syscall name="capset" number="185"/>
+ <syscall name="sigaltstack" number="186" groups="signal"/>
+ <syscall name="sendfile" number="187" groups="descriptor,network"/>
+ <syscall name="getpmsg" number="188"/>
+ <syscall name="putpmsg" number="189"/>
+ <syscall name="vfork" number="190" groups="process"/>
+ <syscall name="ugetrlimit" number="191"/>
+ <syscall name="mmap2" number="192" groups="descriptor,memory"/>
+ <syscall name="truncate64" number="193" groups="file"/>
+ <syscall name="ftruncate64" number="194" groups="descriptor"/>
+ <syscall name="stat64" number="195" groups="file"/>
+ <syscall name="lstat64" number="196" groups="file"/>
+ <syscall name="fstat64" number="197" groups="descriptor"/>
+ <syscall name="lchown32" number="198" groups="file"/>
+ <syscall name="getuid32" number="199"/>
+ <syscall name="getgid32" number="200"/>
+ <syscall name="geteuid32" number="201"/>
+ <syscall name="getegid32" number="202"/>
+ <syscall name="setreuid32" number="203"/>
+ <syscall name="setregid32" number="204"/>
+ <syscall name="getgroups32" number="205"/>
+ <syscall name="setgroups32" number="206"/>
+ <syscall name="fchown32" number="207" groups="descriptor"/>
+ <syscall name="setresuid32" number="208"/>
+ <syscall name="getresuid32" number="209"/>
+ <syscall name="setresgid32" number="210"/>
+ <syscall name="getresgid32" number="211"/>
+ <syscall name="chown32" number="212" groups="file"/>
+ <syscall name="setuid32" number="213"/>
+ <syscall name="setgid32" number="214"/>
+ <syscall name="setfsuid32" number="215"/>
+ <syscall name="setfsgid32" number="216"/>
+ <syscall name="pivot_root" number="217" groups="file"/>
+ <syscall name="mincore" number="218" groups="memory"/>
+ <syscall name="madvise" number="219" groups="memory"/>
+ <syscall name="getdents64" number="220" groups="descriptor"/>
+ <syscall name="fcntl64" number="221" groups="descriptor"/>
+ <syscall name="readahead" number="222" groups="descriptor"/>
+ <syscall name="sendfile64" number="223" groups="descriptor,network"/>
+ <syscall name="setxattr" number="224" groups="file"/>
+ <syscall name="lsetxattr" number="225" groups="file"/>
+ <syscall name="fsetxattr" number="226" groups="descriptor"/>
+ <syscall name="getxattr" number="227" groups="file"/>
+ <syscall name="lgetxattr" number="228" groups="file"/>
+ <syscall name="fgetxattr" number="229" groups="descriptor"/>
+ <syscall name="listxattr" number="230" groups="file"/>
+ <syscall name="llistxattr" number="231" groups="file"/>
+ <syscall name="flistxattr" number="232" groups="descriptor"/>
+ <syscall name="removexattr" number="233" groups="file"/>
+ <syscall name="lremovexattr" number="234" groups="file"/>
+ <syscall name="fremovexattr" number="235" groups="descriptor"/>
+ <syscall name="gettid" number="236"/>
+ <syscall name="tkill" number="237" groups="signal"/>
+ <syscall name="futex" number="238"/>
+ <syscall name="sched_setaffinity" number="239"/>
+ <syscall name="sched_getaffinity" number="240"/>
+ <syscall name="tgkill" number="241" groups="signal"/>
+ <syscall name="io_setup" number="243"/>
+ <syscall name="io_destroy" number="244"/>
+ <syscall name="io_getevents" number="245"/>
+ <syscall name="io_submit" number="246"/>
+ <syscall name="io_cancel" number="247"/>
+ <syscall name="exit_group" number="248" groups="process"/>
+ <syscall name="epoll_create" number="249" groups="descriptor"/>
+ <syscall name="epoll_ctl" number="250" groups="descriptor"/>
+ <syscall name="epoll_wait" number="251" groups="descriptor"/>
+ <syscall name="set_tid_address" number="252"/>
+ <syscall name="fadvise64" number="253" groups="descriptor"/>
+ <syscall name="timer_create" number="254"/>
+ <syscall name="timer_settime" number="255"/>
+ <syscall name="timer_gettime" number="256"/>
+ <syscall name="timer_getoverrun" number="257"/>
+ <syscall name="timer_delete" number="258"/>
+ <syscall name="clock_settime" number="259"/>
+ <syscall name="clock_gettime" number="260"/>
+ <syscall name="clock_getres" number="261"/>
+ <syscall name="clock_nanosleep" number="262"/>
+ <syscall name="fadvise64_64" number="264" groups="descriptor"/>
+ <syscall name="statfs64" number="265" groups="file"/>
+ <syscall name="fstatfs64" number="266" groups="descriptor"/>
+ <syscall name="remap_file_pages" number="267" groups="memory"/>
+ <syscall name="mbind" number="268" groups="memory"/>
+ <syscall name="get_mempolicy" number="269" groups="memory"/>
+ <syscall name="set_mempolicy" number="270" groups="memory"/>
+ <syscall name="mq_open" number="271"/>
+ <syscall name="mq_unlink" number="272"/>
+ <syscall name="mq_timedsend" number="273"/>
+ <syscall name="mq_timedreceive" number="274"/>
+ <syscall name="mq_notify" number="275"/>
+ <syscall name="mq_getsetattr" number="276"/>
+ <syscall name="kexec_load" number="277"/>
+ <syscall name="add_key" number="278"/>
+ <syscall name="request_key" number="279"/>
+ <syscall name="keyctl" number="280"/>
+ <syscall name="waitid" number="281" groups="process"/>
+ <syscall name="ioprio_set" number="282"/>
+ <syscall name="ioprio_get" number="283"/>
+ <syscall name="inotify_init" number="284" groups="descriptor"/>
+ <syscall name="inotify_add_watch" number="285" groups="descriptor"/>
+ <syscall name="inotify_rm_watch" number="286" groups="descriptor"/>
+ <syscall name="migrate_pages" number="287" groups="memory"/>
+ <syscall name="openat" number="288" groups="descriptor,file"/>
+ <syscall name="mkdirat" number="289" groups="descriptor,file"/>
+ <syscall name="mknodat" number="290" groups="descriptor,file"/>
+ <syscall name="fchownat" number="291" groups="descriptor,file"/>
+ <syscall name="futimesat" number="292" groups="descriptor,file"/>
+ <syscall name="fstatat64" number="293" groups="descriptor,file"/>
+ <syscall name="unlinkat" number="294" groups="descriptor,file"/>
+ <syscall name="renameat" number="295" groups="descriptor,file"/>
+ <syscall name="linkat" number="296" groups="descriptor,file"/>
+ <syscall name="symlinkat" number="297" groups="descriptor,file"/>
+ <syscall name="readlinkat" number="298" groups="descriptor,file"/>
+ <syscall name="fchmodat" number="299" groups="descriptor,file"/>
+ <syscall name="faccessat" number="300" groups="descriptor,file"/>
+ <syscall name="pselect6" number="301" groups="descriptor"/>
+ <syscall name="ppoll" number="302" groups="descriptor"/>
+ <syscall name="unshare" number="303" groups="process"/>
+ <syscall name="set_robust_list" number="304"/>
+ <syscall name="get_robust_list" number="305"/>
+ <syscall name="splice" number="306" groups="descriptor"/>
+ <syscall name="sync_file_range" number="307" groups="descriptor"/>
+ <syscall name="tee" number="308" groups="descriptor"/>
+ <syscall name="vmsplice" number="309" groups="descriptor"/>
+ <syscall name="move_pages" number="310" groups="memory"/>
+ <syscall name="getcpu" number="311"/>
+ <syscall name="epoll_pwait" number="312" groups="descriptor"/>
+ <syscall name="utimes" number="313" groups="file"/>
+ <syscall name="fallocate" number="314" groups="descriptor"/>
+ <syscall name="utimensat" number="315" groups="descriptor,file"/>
+ <syscall name="signalfd" number="316" groups="descriptor,signal"/>
+ <syscall name="timerfd" number="317" groups="descriptor"/>
+ <syscall name="eventfd" number="318" groups="descriptor"/>
+ <syscall name="timerfd_create" number="319" groups="descriptor"/>
+ <syscall name="timerfd_settime" number="320" groups="descriptor"/>
+ <syscall name="timerfd_gettime" number="321" groups="descriptor"/>
+ <syscall name="signalfd4" number="322" groups="descriptor,signal"/>
+ <syscall name="eventfd2" number="323" groups="descriptor"/>
+ <syscall name="inotify_init1" number="324" groups="descriptor"/>
+ <syscall name="pipe2" number="325" groups="descriptor"/>
+ <syscall name="dup3" number="326" groups="descriptor"/>
+ <syscall name="epoll_create1" number="327" groups="descriptor"/>
+ <syscall name="preadv" number="328" groups="descriptor"/>
+ <syscall name="pwritev" number="329" groups="descriptor"/>
+ <syscall name="rt_tgsigqueueinfo" number="330" groups="process,signal"/>
+ <syscall name="perf_event_open" number="331" groups="descriptor"/>
+ <syscall name="fanotify_init" number="332" groups="descriptor"/>
+ <syscall name="fanotify_mark" number="333" groups="descriptor,file"/>
+ <syscall name="prlimit64" number="334"/>
+ <syscall name="name_to_handle_at" number="335" groups="descriptor,file"/>
+ <syscall name="open_by_handle_at" number="336" groups="descriptor"/>
+ <syscall name="clock_adjtime" number="337"/>
+ <syscall name="syncfs" number="338" groups="descriptor"/>
+ <syscall name="setns" number="339" groups="descriptor"/>
+ <syscall name="process_vm_readv" number="340"/>
+ <syscall name="process_vm_writev" number="341"/>
+ <syscall name="s390_runtime_instr" number="342"/>
+ <syscall name="kcmp" number="343"/>
+ <syscall name="finit_module" number="344" groups="descriptor"/>
+ <syscall name="sched_setattr" number="345"/>
+ <syscall name="sched_getattr" number="346"/>
+ <syscall name="renameat2" number="347"/>
+ <syscall name="seccomp" number="348"/>
+ <syscall name="getrandom" number="349"/>
+ <syscall name="memfd_create" number="350"/>
+ <syscall name="bpf" number="351"/>
+ <syscall name="s390_pci_mmio_write" number="352"/>
+ <syscall name="s390_pci_mmio_read" number="353"/>
+ <syscall name="execveat" number="354"/>
+ <syscall name="userfaultfd" number="355"/>
+ <syscall name="membarrier" number="356"/>
+ <syscall name="recvmmsg" number="357" groups="network"/>
+ <syscall name="sendmmsg" number="358" groups="network"/>
+ <syscall name="socket" number="359" groups="network"/>
+ <syscall name="socketpair" number="360" groups="network"/>
+ <syscall name="bind" number="361" groups="network"/>
+ <syscall name="connect" number="362" groups="network"/>
+ <syscall name="listen" number="363" groups="network"/>
+ <syscall name="accept4" number="364" groups="network"/>
+ <syscall name="getsockopt" number="365" groups="network"/>
+ <syscall name="setsockopt" number="366" groups="network"/>
+ <syscall name="getsockname" number="367" groups="network"/>
+ <syscall name="getpeername" number="368" groups="network"/>
+ <syscall name="sendto" number="369" groups="network"/>
+ <syscall name="sendmsg" number="370" groups="network"/>
+ <syscall name="recvfrom" number="371" groups="network"/>
+ <syscall name="recvmsg" number="372" groups="network"/>
+ <syscall name="shutdown" number="373" groups="network"/>
+ <syscall name="mlock2" number="374"/>
+ <syscall name="copy_file_range" number="375"/>
+ <syscall name="preadv2" number="376"/>
+ <syscall name="pwritev2" number="377"/>
+ <syscall name="s390_guarded_storage" number="378"/>
+ <syscall name="statx" number="379"/>
+ <syscall name="s390_sthyi" number="380"/>
+ <syscall name="kexec_file_load" number="381"/>
+ <syscall name="io_pgetevents" number="382"/>
+ <syscall name="rseq" number="383"/>
+ <syscall name="pkey_mprotect" number="384"/>
+ <syscall name="pkey_alloc" number="385"/>
+ <syscall name="pkey_free" number="386"/>
+ <syscall name="semget" number="393" groups="ipc"/>
+ <syscall name="semctl" number="394" groups="ipc"/>
+ <syscall name="shmget" number="395" groups="ipc"/>
+ <syscall name="shmctl" number="396" groups="ipc"/>
+ <syscall name="shmat" number="397" groups="ipc,memory"/>
+ <syscall name="shmdt" number="398" groups="ipc,memory"/>
+ <syscall name="msgget" number="399" groups="ipc"/>
+ <syscall name="msgsnd" number="400" groups="ipc"/>
+ <syscall name="msgrcv" number="401" groups="ipc"/>
+ <syscall name="msgctl" number="402" groups="ipc"/>
+ <syscall name="clock_gettime64" number="403"/>
+ <syscall name="clock_settime64" number="404"/>
+ <syscall name="clock_adjtime64" number="405"/>
+ <syscall name="clock_getres_time64" number="406"/>
+ <syscall name="clock_nanosleep_time64" number="407"/>
+ <syscall name="timer_gettime64" number="408"/>
+ <syscall name="timer_settime64" number="409"/>
+ <syscall name="timerfd_gettime64" number="410"/>
+ <syscall name="timerfd_settime64" number="411"/>
+ <syscall name="utimensat_time64" number="412"/>
+ <syscall name="pselect6_time64" number="413"/>
+ <syscall name="ppoll_time64" number="414"/>
+ <syscall name="io_pgetevents_time64" number="416"/>
+ <syscall name="recvmmsg_time64" number="417"/>
+ <syscall name="mq_timedsend_time64" number="418"/>
+ <syscall name="mq_timedreceive_time64" number="419"/>
+ <syscall name="semtimedop_time64" number="420"/>
+ <syscall name="rt_sigtimedwait_time64" number="421"/>
+ <syscall name="futex_time64" number="422"/>
+ <syscall name="sched_rr_get_interval_time64" number="423"/>
+ <syscall name="pidfd_send_signal" number="424"/>
+ <syscall name="io_uring_setup" number="425"/>
+ <syscall name="io_uring_enter" number="426"/>
+ <syscall name="io_uring_register" number="427"/>
+ <syscall name="open_tree" number="428"/>
+ <syscall name="move_mount" number="429"/>
+ <syscall name="fsopen" number="430"/>
+ <syscall name="fsconfig" number="431"/>
+ <syscall name="fsmount" number="432"/>
+ <syscall name="fspick" number="433"/>
+ <syscall name="pidfd_open" number="434"/>
+ <syscall name="clone3" number="435"/>
+ <syscall name="close_range" number="436"/>
+ <syscall name="openat2" number="437"/>
+ <syscall name="pidfd_getfd" number="438"/>
+ <syscall name="faccessat2" number="439"/>
+ <syscall name="process_madvise" number="440"/>
+ <syscall name="epoll_pwait2" number="441"/>
+ <syscall name="mount_setattr" number="442"/>
+ <syscall name="quotactl_fd" number="443"/>
+ <syscall name="landlock_create_ruleset" number="444"/>
+ <syscall name="landlock_add_rule" number="445"/>
+ <syscall name="landlock_restrict_self" number="446"/>
+ <syscall name="process_mrelease" number="448"/>
+ <syscall name="futex_waitv" number="449"/>
+ <syscall name="set_mempolicy_home_node" number="450"/>
+</syscalls_info>
diff --git a/share/gdb/syscalls/s390x-linux.xml b/share/gdb/syscalls/s390x-linux.xml
new file mode 100644
index 0000000..b0f0cc4
--- /dev/null
+++ b/share/gdb/syscalls/s390x-linux.xml
@@ -0,0 +1,382 @@
+<?xml version="1.0"?>
+<!DOCTYPE syscalls_info SYSTEM "gdb-syscalls.dtd">
+<!-- Copyright (C) 2009-2023 Free Software Foundation, Inc.
+
+ Copying and distribution of this file, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved. -->
+<!-- This file was generated using the following file:
+
+ arch/s390/kernel/syscalls/syscall.tbl
+
+ The file mentioned above belongs to the Linux Kernel. -->
+<syscalls_info>
+ <syscall name="exit" number="1" groups="process"/>
+ <syscall name="fork" number="2" groups="process"/>
+ <syscall name="read" number="3" groups="descriptor"/>
+ <syscall name="write" number="4" groups="descriptor"/>
+ <syscall name="open" number="5" groups="descriptor,file"/>
+ <syscall name="close" number="6" groups="descriptor"/>
+ <syscall name="restart_syscall" number="7"/>
+ <syscall name="creat" number="8" groups="descriptor,file"/>
+ <syscall name="link" number="9" groups="file"/>
+ <syscall name="unlink" number="10" groups="file"/>
+ <syscall name="execve" number="11" groups="file,process"/>
+ <syscall name="chdir" number="12" groups="file"/>
+ <syscall name="mknod" number="14" groups="file"/>
+ <syscall name="chmod" number="15" groups="file"/>
+ <syscall name="lseek" number="19" groups="descriptor"/>
+ <syscall name="getpid" number="20"/>
+ <syscall name="mount" number="21" groups="file"/>
+ <syscall name="umount" number="22" groups="file"/>
+ <syscall name="ptrace" number="26"/>
+ <syscall name="alarm" number="27"/>
+ <syscall name="pause" number="29" groups="signal"/>
+ <syscall name="utime" number="30" groups="file"/>
+ <syscall name="access" number="33" groups="file"/>
+ <syscall name="nice" number="34"/>
+ <syscall name="sync" number="36"/>
+ <syscall name="kill" number="37" groups="signal"/>
+ <syscall name="rename" number="38" groups="file"/>
+ <syscall name="mkdir" number="39" groups="file"/>
+ <syscall name="rmdir" number="40" groups="file"/>
+ <syscall name="dup" number="41" groups="descriptor"/>
+ <syscall name="pipe" number="42" groups="descriptor"/>
+ <syscall name="times" number="43"/>
+ <syscall name="brk" number="45" groups="memory"/>
+ <syscall name="signal" number="48" groups="signal"/>
+ <syscall name="acct" number="51" groups="file"/>
+ <syscall name="umount2" number="52" groups="file"/>
+ <syscall name="ioctl" number="54" groups="descriptor"/>
+ <syscall name="fcntl" number="55" groups="descriptor"/>
+ <syscall name="setpgid" number="57"/>
+ <syscall name="umask" number="60"/>
+ <syscall name="chroot" number="61" groups="file"/>
+ <syscall name="ustat" number="62"/>
+ <syscall name="dup2" number="63" groups="descriptor"/>
+ <syscall name="getppid" number="64"/>
+ <syscall name="getpgrp" number="65"/>
+ <syscall name="setsid" number="66"/>
+ <syscall name="sigaction" number="67" groups="signal"/>
+ <syscall name="sigsuspend" number="72" groups="signal"/>
+ <syscall name="sigpending" number="73" groups="signal"/>
+ <syscall name="sethostname" number="74"/>
+ <syscall name="setrlimit" number="75"/>
+ <syscall name="getrusage" number="77"/>
+ <syscall name="gettimeofday" number="78"/>
+ <syscall name="settimeofday" number="79"/>
+ <syscall name="symlink" number="83" groups="file"/>
+ <syscall name="readlink" number="85" groups="file"/>
+ <syscall name="uselib" number="86" groups="file"/>
+ <syscall name="swapon" number="87" groups="file"/>
+ <syscall name="reboot" number="88"/>
+ <syscall name="readdir" number="89" groups="descriptor"/>
+ <syscall name="mmap" number="90" groups="descriptor,memory"/>
+ <syscall name="munmap" number="91" groups="memory"/>
+ <syscall name="truncate" number="92" groups="file"/>
+ <syscall name="ftruncate" number="93" groups="descriptor"/>
+ <syscall name="fchmod" number="94" groups="descriptor"/>
+ <syscall name="getpriority" number="96"/>
+ <syscall name="setpriority" number="97"/>
+ <syscall name="statfs" number="99" groups="file"/>
+ <syscall name="fstatfs" number="100" groups="descriptor"/>
+ <syscall name="socketcall" number="102" groups="descriptor"/>
+ <syscall name="syslog" number="103"/>
+ <syscall name="setitimer" number="104"/>
+ <syscall name="getitimer" number="105"/>
+ <syscall name="stat" number="106" groups="file"/>
+ <syscall name="lstat" number="107" groups="file"/>
+ <syscall name="fstat" number="108" groups="descriptor"/>
+ <syscall name="lookup_dcookie" number="110"/>
+ <syscall name="vhangup" number="111"/>
+ <syscall name="idle" number="112"/>
+ <syscall name="wait4" number="114" groups="process"/>
+ <syscall name="swapoff" number="115" groups="file"/>
+ <syscall name="sysinfo" number="116"/>
+ <syscall name="ipc" number="117" groups="ipc"/>
+ <syscall name="fsync" number="118" groups="descriptor"/>
+ <syscall name="sigreturn" number="119" groups="signal"/>
+ <syscall name="clone" number="120" groups="process"/>
+ <syscall name="setdomainname" number="121"/>
+ <syscall name="uname" number="122"/>
+ <syscall name="adjtimex" number="124"/>
+ <syscall name="mprotect" number="125" groups="memory"/>
+ <syscall name="sigprocmask" number="126" groups="signal"/>
+ <syscall name="create_module" number="127"/>
+ <syscall name="init_module" number="128"/>
+ <syscall name="delete_module" number="129"/>
+ <syscall name="get_kernel_syms" number="130"/>
+ <syscall name="quotactl" number="131" groups="file"/>
+ <syscall name="getpgid" number="132"/>
+ <syscall name="fchdir" number="133" groups="descriptor"/>
+ <syscall name="bdflush" number="134"/>
+ <syscall name="sysfs" number="135"/>
+ <syscall name="personality" number="136"/>
+ <syscall name="afs_syscall" number="137"/>
+ <syscall name="getdents" number="141" groups="descriptor"/>
+ <syscall name="select" number="142" groups="descriptor"/>
+ <syscall name="flock" number="143" groups="descriptor"/>
+ <syscall name="msync" number="144" groups="memory"/>
+ <syscall name="readv" number="145" groups="descriptor"/>
+ <syscall name="writev" number="146" groups="descriptor"/>
+ <syscall name="getsid" number="147"/>
+ <syscall name="fdatasync" number="148" groups="descriptor"/>
+ <syscall name="_sysctl" number="149"/>
+ <syscall name="mlock" number="150" groups="memory"/>
+ <syscall name="munlock" number="151" groups="memory"/>
+ <syscall name="mlockall" number="152" groups="memory"/>
+ <syscall name="munlockall" number="153" groups="memory"/>
+ <syscall name="sched_setparam" number="154"/>
+ <syscall name="sched_getparam" number="155"/>
+ <syscall name="sched_setscheduler" number="156"/>
+ <syscall name="sched_getscheduler" number="157"/>
+ <syscall name="sched_yield" number="158"/>
+ <syscall name="sched_get_priority_max" number="159"/>
+ <syscall name="sched_get_priority_min" number="160"/>
+ <syscall name="sched_rr_get_interval" number="161"/>
+ <syscall name="nanosleep" number="162"/>
+ <syscall name="mremap" number="163" groups="memory"/>
+ <syscall name="query_module" number="167"/>
+ <syscall name="poll" number="168" groups="descriptor"/>
+ <syscall name="nfsservctl" number="169"/>
+ <syscall name="prctl" number="172"/>
+ <syscall name="rt_sigreturn" number="173" groups="signal"/>
+ <syscall name="rt_sigaction" number="174" groups="signal"/>
+ <syscall name="rt_sigprocmask" number="175" groups="signal"/>
+ <syscall name="rt_sigpending" number="176" groups="signal"/>
+ <syscall name="rt_sigtimedwait" number="177" groups="signal"/>
+ <syscall name="rt_sigqueueinfo" number="178" groups="signal"/>
+ <syscall name="rt_sigsuspend" number="179" groups="signal"/>
+ <syscall name="pread64" number="180" groups="descriptor"/>
+ <syscall name="pwrite64" number="181" groups="descriptor"/>
+ <syscall name="getcwd" number="183" groups="file"/>
+ <syscall name="capget" number="184"/>
+ <syscall name="capset" number="185"/>
+ <syscall name="sigaltstack" number="186" groups="signal"/>
+ <syscall name="sendfile" number="187" groups="descriptor,network"/>
+ <syscall name="getpmsg" number="188"/>
+ <syscall name="putpmsg" number="189"/>
+ <syscall name="vfork" number="190" groups="process"/>
+ <syscall name="getrlimit" number="191"/>
+ <syscall name="lchown" number="198" groups="file"/>
+ <syscall name="getuid" number="199"/>
+ <syscall name="getgid" number="200"/>
+ <syscall name="geteuid" number="201"/>
+ <syscall name="getegid" number="202"/>
+ <syscall name="setreuid" number="203"/>
+ <syscall name="setregid" number="204"/>
+ <syscall name="getgroups" number="205"/>
+ <syscall name="setgroups" number="206"/>
+ <syscall name="fchown" number="207" groups="descriptor"/>
+ <syscall name="setresuid" number="208"/>
+ <syscall name="getresuid" number="209"/>
+ <syscall name="setresgid" number="210"/>
+ <syscall name="getresgid" number="211"/>
+ <syscall name="chown" number="212" groups="file"/>
+ <syscall name="setuid" number="213"/>
+ <syscall name="setgid" number="214"/>
+ <syscall name="setfsuid" number="215"/>
+ <syscall name="setfsgid" number="216"/>
+ <syscall name="pivot_root" number="217" groups="file"/>
+ <syscall name="mincore" number="218" groups="memory"/>
+ <syscall name="madvise" number="219" groups="memory"/>
+ <syscall name="getdents64" number="220" groups="descriptor"/>
+ <syscall name="readahead" number="222" groups="descriptor"/>
+ <syscall name="setxattr" number="224" groups="file"/>
+ <syscall name="lsetxattr" number="225" groups="file"/>
+ <syscall name="fsetxattr" number="226" groups="descriptor"/>
+ <syscall name="getxattr" number="227" groups="file"/>
+ <syscall name="lgetxattr" number="228" groups="file"/>
+ <syscall name="fgetxattr" number="229" groups="descriptor"/>
+ <syscall name="listxattr" number="230" groups="file"/>
+ <syscall name="llistxattr" number="231" groups="file"/>
+ <syscall name="flistxattr" number="232" groups="descriptor"/>
+ <syscall name="removexattr" number="233" groups="file"/>
+ <syscall name="lremovexattr" number="234" groups="file"/>
+ <syscall name="fremovexattr" number="235" groups="descriptor"/>
+ <syscall name="gettid" number="236"/>
+ <syscall name="tkill" number="237" groups="signal"/>
+ <syscall name="futex" number="238"/>
+ <syscall name="sched_setaffinity" number="239"/>
+ <syscall name="sched_getaffinity" number="240"/>
+ <syscall name="tgkill" number="241" groups="signal"/>
+ <syscall name="io_setup" number="243"/>
+ <syscall name="io_destroy" number="244"/>
+ <syscall name="io_getevents" number="245"/>
+ <syscall name="io_submit" number="246"/>
+ <syscall name="io_cancel" number="247"/>
+ <syscall name="exit_group" number="248" groups="process"/>
+ <syscall name="epoll_create" number="249" groups="descriptor"/>
+ <syscall name="epoll_ctl" number="250" groups="descriptor"/>
+ <syscall name="epoll_wait" number="251" groups="descriptor"/>
+ <syscall name="set_tid_address" number="252"/>
+ <syscall name="fadvise64" number="253" groups="descriptor"/>
+ <syscall name="timer_create" number="254"/>
+ <syscall name="timer_settime" number="255"/>
+ <syscall name="timer_gettime" number="256"/>
+ <syscall name="timer_getoverrun" number="257"/>
+ <syscall name="timer_delete" number="258"/>
+ <syscall name="clock_settime" number="259"/>
+ <syscall name="clock_gettime" number="260"/>
+ <syscall name="clock_getres" number="261"/>
+ <syscall name="clock_nanosleep" number="262"/>
+ <syscall name="statfs64" number="265" groups="file"/>
+ <syscall name="fstatfs64" number="266" groups="descriptor"/>
+ <syscall name="remap_file_pages" number="267" groups="memory"/>
+ <syscall name="mbind" number="268" groups="memory"/>
+ <syscall name="get_mempolicy" number="269" groups="memory"/>
+ <syscall name="set_mempolicy" number="270" groups="memory"/>
+ <syscall name="mq_open" number="271"/>
+ <syscall name="mq_unlink" number="272"/>
+ <syscall name="mq_timedsend" number="273"/>
+ <syscall name="mq_timedreceive" number="274"/>
+ <syscall name="mq_notify" number="275"/>
+ <syscall name="mq_getsetattr" number="276"/>
+ <syscall name="kexec_load" number="277"/>
+ <syscall name="add_key" number="278"/>
+ <syscall name="request_key" number="279"/>
+ <syscall name="keyctl" number="280"/>
+ <syscall name="waitid" number="281" groups="process"/>
+ <syscall name="ioprio_set" number="282"/>
+ <syscall name="ioprio_get" number="283"/>
+ <syscall name="inotify_init" number="284" groups="descriptor"/>
+ <syscall name="inotify_add_watch" number="285" groups="descriptor"/>
+ <syscall name="inotify_rm_watch" number="286" groups="descriptor"/>
+ <syscall name="migrate_pages" number="287" groups="memory"/>
+ <syscall name="openat" number="288" groups="descriptor,file"/>
+ <syscall name="mkdirat" number="289" groups="descriptor,file"/>
+ <syscall name="mknodat" number="290" groups="descriptor,file"/>
+ <syscall name="fchownat" number="291" groups="descriptor,file"/>
+ <syscall name="futimesat" number="292" groups="descriptor,file"/>
+ <syscall name="newfstatat" number="293" groups="descriptor,file"/>
+ <syscall name="unlinkat" number="294" groups="descriptor,file"/>
+ <syscall name="renameat" number="295" groups="descriptor,file"/>
+ <syscall name="linkat" number="296" groups="descriptor,file"/>
+ <syscall name="symlinkat" number="297" groups="descriptor,file"/>
+ <syscall name="readlinkat" number="298" groups="descriptor,file"/>
+ <syscall name="fchmodat" number="299" groups="descriptor,file"/>
+ <syscall name="faccessat" number="300" groups="descriptor,file"/>
+ <syscall name="pselect6" number="301" groups="descriptor"/>
+ <syscall name="ppoll" number="302" groups="descriptor"/>
+ <syscall name="unshare" number="303" groups="process"/>
+ <syscall name="set_robust_list" number="304"/>
+ <syscall name="get_robust_list" number="305"/>
+ <syscall name="splice" number="306" groups="descriptor"/>
+ <syscall name="sync_file_range" number="307" groups="descriptor"/>
+ <syscall name="tee" number="308" groups="descriptor"/>
+ <syscall name="vmsplice" number="309" groups="descriptor"/>
+ <syscall name="move_pages" number="310" groups="memory"/>
+ <syscall name="getcpu" number="311"/>
+ <syscall name="epoll_pwait" number="312" groups="descriptor"/>
+ <syscall name="utimes" number="313" groups="file"/>
+ <syscall name="fallocate" number="314" groups="descriptor"/>
+ <syscall name="utimensat" number="315" groups="descriptor,file"/>
+ <syscall name="signalfd" number="316" groups="descriptor,signal"/>
+ <syscall name="timerfd" number="317" groups="descriptor"/>
+ <syscall name="eventfd" number="318" groups="descriptor"/>
+ <syscall name="timerfd_create" number="319" groups="descriptor"/>
+ <syscall name="timerfd_settime" number="320" groups="descriptor"/>
+ <syscall name="timerfd_gettime" number="321" groups="descriptor"/>
+ <syscall name="signalfd4" number="322" groups="descriptor,signal"/>
+ <syscall name="eventfd2" number="323" groups="descriptor"/>
+ <syscall name="inotify_init1" number="324" groups="descriptor"/>
+ <syscall name="pipe2" number="325" groups="descriptor"/>
+ <syscall name="dup3" number="326" groups="descriptor"/>
+ <syscall name="epoll_create1" number="327" groups="descriptor"/>
+ <syscall name="preadv" number="328" groups="descriptor"/>
+ <syscall name="pwritev" number="329" groups="descriptor"/>
+ <syscall name="rt_tgsigqueueinfo" number="330" groups="process,signal"/>
+ <syscall name="perf_event_open" number="331" groups="descriptor"/>
+ <syscall name="fanotify_init" number="332" groups="descriptor"/>
+ <syscall name="fanotify_mark" number="333" groups="descriptor,file"/>
+ <syscall name="prlimit64" number="334"/>
+ <syscall name="name_to_handle_at" number="335" groups="descriptor,file"/>
+ <syscall name="open_by_handle_at" number="336" groups="descriptor"/>
+ <syscall name="clock_adjtime" number="337"/>
+ <syscall name="syncfs" number="338" groups="descriptor"/>
+ <syscall name="setns" number="339" groups="descriptor"/>
+ <syscall name="process_vm_readv" number="340"/>
+ <syscall name="process_vm_writev" number="341"/>
+ <syscall name="s390_runtime_instr" number="342"/>
+ <syscall name="kcmp" number="343"/>
+ <syscall name="finit_module" number="344" groups="descriptor"/>
+ <syscall name="sched_setattr" number="345"/>
+ <syscall name="sched_getattr" number="346"/>
+ <syscall name="renameat2" number="347"/>
+ <syscall name="seccomp" number="348"/>
+ <syscall name="getrandom" number="349"/>
+ <syscall name="memfd_create" number="350"/>
+ <syscall name="bpf" number="351"/>
+ <syscall name="s390_pci_mmio_write" number="352"/>
+ <syscall name="s390_pci_mmio_read" number="353"/>
+ <syscall name="execveat" number="354"/>
+ <syscall name="userfaultfd" number="355"/>
+ <syscall name="membarrier" number="356"/>
+ <syscall name="recvmmsg" number="357" groups="network"/>
+ <syscall name="sendmmsg" number="358" groups="network"/>
+ <syscall name="socket" number="359" groups="network"/>
+ <syscall name="socketpair" number="360" groups="network"/>
+ <syscall name="bind" number="361" groups="network"/>
+ <syscall name="connect" number="362" groups="network"/>
+ <syscall name="listen" number="363" groups="network"/>
+ <syscall name="accept4" number="364" groups="network"/>
+ <syscall name="getsockopt" number="365" groups="network"/>
+ <syscall name="setsockopt" number="366" groups="network"/>
+ <syscall name="getsockname" number="367" groups="network"/>
+ <syscall name="getpeername" number="368" groups="network"/>
+ <syscall name="sendto" number="369" groups="network"/>
+ <syscall name="sendmsg" number="370" groups="network"/>
+ <syscall name="recvfrom" number="371" groups="network"/>
+ <syscall name="recvmsg" number="372" groups="network"/>
+ <syscall name="shutdown" number="373" groups="network"/>
+ <syscall name="mlock2" number="374"/>
+ <syscall name="copy_file_range" number="375"/>
+ <syscall name="preadv2" number="376"/>
+ <syscall name="pwritev2" number="377"/>
+ <syscall name="s390_guarded_storage" number="378"/>
+ <syscall name="statx" number="379"/>
+ <syscall name="s390_sthyi" number="380"/>
+ <syscall name="kexec_file_load" number="381"/>
+ <syscall name="io_pgetevents" number="382"/>
+ <syscall name="rseq" number="383"/>
+ <syscall name="pkey_mprotect" number="384"/>
+ <syscall name="pkey_alloc" number="385"/>
+ <syscall name="pkey_free" number="386"/>
+ <syscall name="semtimedop" number="392" groups="ipc"/>
+ <syscall name="semget" number="393" groups="ipc"/>
+ <syscall name="semctl" number="394" groups="ipc"/>
+ <syscall name="shmget" number="395" groups="ipc"/>
+ <syscall name="shmctl" number="396" groups="ipc"/>
+ <syscall name="shmat" number="397" groups="ipc,memory"/>
+ <syscall name="shmdt" number="398" groups="ipc,memory"/>
+ <syscall name="msgget" number="399" groups="ipc"/>
+ <syscall name="msgsnd" number="400" groups="ipc"/>
+ <syscall name="msgrcv" number="401" groups="ipc"/>
+ <syscall name="msgctl" number="402" groups="ipc"/>
+ <syscall name="pidfd_send_signal" number="424"/>
+ <syscall name="io_uring_setup" number="425"/>
+ <syscall name="io_uring_enter" number="426"/>
+ <syscall name="io_uring_register" number="427"/>
+ <syscall name="open_tree" number="428"/>
+ <syscall name="move_mount" number="429"/>
+ <syscall name="fsopen" number="430"/>
+ <syscall name="fsconfig" number="431"/>
+ <syscall name="fsmount" number="432"/>
+ <syscall name="fspick" number="433"/>
+ <syscall name="pidfd_open" number="434"/>
+ <syscall name="clone3" number="435"/>
+ <syscall name="close_range" number="436"/>
+ <syscall name="openat2" number="437"/>
+ <syscall name="pidfd_getfd" number="438"/>
+ <syscall name="faccessat2" number="439"/>
+ <syscall name="process_madvise" number="440"/>
+ <syscall name="epoll_pwait2" number="441"/>
+ <syscall name="mount_setattr" number="442"/>
+ <syscall name="quotactl_fd" number="443"/>
+ <syscall name="landlock_create_ruleset" number="444"/>
+ <syscall name="landlock_add_rule" number="445"/>
+ <syscall name="landlock_restrict_self" number="446"/>
+ <syscall name="process_mrelease" number="448"/>
+ <syscall name="futex_waitv" number="449"/>
+ <syscall name="set_mempolicy_home_node" number="450"/>
+</syscalls_info>
diff --git a/share/gdb/syscalls/sparc-linux.xml b/share/gdb/syscalls/sparc-linux.xml
new file mode 100644
index 0000000..fc146fa
--- /dev/null
+++ b/share/gdb/syscalls/sparc-linux.xml
@@ -0,0 +1,433 @@
+<?xml version="1.0"?>
+<!DOCTYPE syscalls_info SYSTEM "gdb-syscalls.dtd">
+<!-- Copyright (C) 2010-2023 Free Software Foundation, Inc.
+
+ Copying and distribution of this file, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved. -->
+<!-- This file was generated using the following file:
+
+ arch/sparc/kernel/syscalls/syscall.tbl
+
+ The file mentioned above belongs to the Linux Kernel. -->
+<syscalls_info>
+ <syscall name="restart_syscall" number="0"/>
+ <syscall name="exit" number="1" groups="process"/>
+ <syscall name="fork" number="2" groups="process"/>
+ <syscall name="read" number="3" groups="descriptor"/>
+ <syscall name="write" number="4" groups="descriptor"/>
+ <syscall name="open" number="5" groups="descriptor,file"/>
+ <syscall name="close" number="6" groups="descriptor"/>
+ <syscall name="wait4" number="7" groups="process"/>
+ <syscall name="creat" number="8" groups="descriptor,file"/>
+ <syscall name="link" number="9" groups="file"/>
+ <syscall name="unlink" number="10" groups="file"/>
+ <syscall name="execv" number="11" groups="file,process"/>
+ <syscall name="chdir" number="12" groups="file"/>
+ <syscall name="chown" number="13" groups="file"/>
+ <syscall name="mknod" number="14" groups="file"/>
+ <syscall name="chmod" number="15" groups="file"/>
+ <syscall name="lchown" number="16" groups="file"/>
+ <syscall name="brk" number="17" groups="memory"/>
+ <syscall name="perfctr" number="18"/>
+ <syscall name="lseek" number="19" groups="descriptor"/>
+ <syscall name="getpid" number="20"/>
+ <syscall name="capget" number="21"/>
+ <syscall name="capset" number="22"/>
+ <syscall name="setuid" number="23"/>
+ <syscall name="getuid" number="24"/>
+ <syscall name="vmsplice" number="25" groups="descriptor"/>
+ <syscall name="ptrace" number="26"/>
+ <syscall name="alarm" number="27"/>
+ <syscall name="sigaltstack" number="28" groups="signal"/>
+ <syscall name="pause" number="29" groups="signal"/>
+ <syscall name="utime" number="30" groups="file"/>
+ <syscall name="lchown32" number="31" groups="file"/>
+ <syscall name="fchown32" number="32" groups="descriptor"/>
+ <syscall name="access" number="33" groups="file"/>
+ <syscall name="nice" number="34"/>
+ <syscall name="chown32" number="35" groups="file"/>
+ <syscall name="sync" number="36"/>
+ <syscall name="kill" number="37" groups="signal"/>
+ <syscall name="stat" number="38" groups="file"/>
+ <syscall name="sendfile" number="39" groups="descriptor,network"/>
+ <syscall name="lstat" number="40" groups="file"/>
+ <syscall name="dup" number="41" groups="descriptor"/>
+ <syscall name="pipe" number="42" groups="descriptor"/>
+ <syscall name="times" number="43"/>
+ <syscall name="getuid32" number="44"/>
+ <syscall name="umount2" number="45" groups="file"/>
+ <syscall name="setgid" number="46"/>
+ <syscall name="getgid" number="47"/>
+ <syscall name="signal" number="48" groups="signal"/>
+ <syscall name="geteuid" number="49"/>
+ <syscall name="getegid" number="50"/>
+ <syscall name="acct" number="51" groups="file"/>
+ <syscall name="getgid32" number="53"/>
+ <syscall name="ioctl" number="54" groups="descriptor"/>
+ <syscall name="reboot" number="55"/>
+ <syscall name="mmap2" number="56" groups="descriptor,memory"/>
+ <syscall name="symlink" number="57" groups="file"/>
+ <syscall name="readlink" number="58" groups="file"/>
+ <syscall name="execve" number="59" groups="file,process"/>
+ <syscall name="umask" number="60"/>
+ <syscall name="chroot" number="61" groups="file"/>
+ <syscall name="fstat" number="62" groups="descriptor"/>
+ <syscall name="fstat64" number="63" groups="descriptor"/>
+ <syscall name="getpagesize" number="64"/>
+ <syscall name="msync" number="65" groups="memory"/>
+ <syscall name="vfork" number="66" groups="process"/>
+ <syscall name="pread64" number="67" groups="descriptor"/>
+ <syscall name="pwrite64" number="68" groups="descriptor"/>
+ <syscall name="geteuid32" number="69"/>
+ <syscall name="getegid32" number="70"/>
+ <syscall name="mmap" number="71" groups="descriptor,memory"/>
+ <syscall name="setreuid32" number="72"/>
+ <syscall name="munmap" number="73" groups="memory"/>
+ <syscall name="mprotect" number="74" groups="memory"/>
+ <syscall name="madvise" number="75" groups="memory"/>
+ <syscall name="vhangup" number="76"/>
+ <syscall name="truncate64" number="77" groups="file"/>
+ <syscall name="mincore" number="78" groups="memory"/>
+ <syscall name="getgroups" number="79"/>
+ <syscall name="setgroups" number="80"/>
+ <syscall name="getpgrp" number="81"/>
+ <syscall name="setgroups32" number="82"/>
+ <syscall name="setitimer" number="83"/>
+ <syscall name="ftruncate64" number="84" groups="descriptor"/>
+ <syscall name="swapon" number="85" groups="file"/>
+ <syscall name="getitimer" number="86"/>
+ <syscall name="setuid32" number="87"/>
+ <syscall name="sethostname" number="88"/>
+ <syscall name="setgid32" number="89"/>
+ <syscall name="dup2" number="90" groups="descriptor"/>
+ <syscall name="setfsuid32" number="91"/>
+ <syscall name="fcntl" number="92" groups="descriptor"/>
+ <syscall name="select" number="93" groups="descriptor"/>
+ <syscall name="setfsgid32" number="94"/>
+ <syscall name="fsync" number="95" groups="descriptor"/>
+ <syscall name="setpriority" number="96"/>
+ <syscall name="socket" number="97" groups="network"/>
+ <syscall name="connect" number="98" groups="network"/>
+ <syscall name="accept" number="99" groups="network"/>
+ <syscall name="getpriority" number="100"/>
+ <syscall name="rt_sigreturn" number="101" groups="signal"/>
+ <syscall name="rt_sigaction" number="102" groups="signal"/>
+ <syscall name="rt_sigprocmask" number="103" groups="signal"/>
+ <syscall name="rt_sigpending" number="104" groups="signal"/>
+ <syscall name="rt_sigtimedwait" number="105" groups="signal"/>
+ <syscall name="rt_sigqueueinfo" number="106" groups="signal"/>
+ <syscall name="rt_sigsuspend" number="107" groups="signal"/>
+ <syscall name="setresuid32" number="108"/>
+ <syscall name="getresuid32" number="109"/>
+ <syscall name="setresgid32" number="110"/>
+ <syscall name="getresgid32" number="111"/>
+ <syscall name="setregid32" number="112"/>
+ <syscall name="recvmsg" number="113" groups="network"/>
+ <syscall name="sendmsg" number="114" groups="network"/>
+ <syscall name="getgroups32" number="115"/>
+ <syscall name="gettimeofday" number="116"/>
+ <syscall name="getrusage" number="117"/>
+ <syscall name="getsockopt" number="118" groups="network"/>
+ <syscall name="getcwd" number="119" groups="file"/>
+ <syscall name="readv" number="120" groups="descriptor"/>
+ <syscall name="writev" number="121" groups="descriptor"/>
+ <syscall name="settimeofday" number="122"/>
+ <syscall name="fchown" number="123" groups="descriptor"/>
+ <syscall name="fchmod" number="124" groups="descriptor"/>
+ <syscall name="recvfrom" number="125" groups="network"/>
+ <syscall name="setreuid" number="126"/>
+ <syscall name="setregid" number="127"/>
+ <syscall name="rename" number="128" groups="file"/>
+ <syscall name="truncate" number="129" groups="file"/>
+ <syscall name="ftruncate" number="130" groups="descriptor"/>
+ <syscall name="flock" number="131" groups="descriptor"/>
+ <syscall name="lstat64" number="132" groups="file"/>
+ <syscall name="sendto" number="133" groups="network"/>
+ <syscall name="shutdown" number="134" groups="network"/>
+ <syscall name="socketpair" number="135" groups="network"/>
+ <syscall name="mkdir" number="136" groups="file"/>
+ <syscall name="rmdir" number="137" groups="file"/>
+ <syscall name="utimes" number="138" groups="file"/>
+ <syscall name="stat64" number="139" groups="file"/>
+ <syscall name="sendfile64" number="140" groups="descriptor,network"/>
+ <syscall name="getpeername" number="141" groups="network"/>
+ <syscall name="futex" number="142"/>
+ <syscall name="gettid" number="143"/>
+ <syscall name="getrlimit" number="144"/>
+ <syscall name="setrlimit" number="145"/>
+ <syscall name="pivot_root" number="146" groups="file"/>
+ <syscall name="prctl" number="147"/>
+ <syscall name="pciconfig_read" number="148"/>
+ <syscall name="pciconfig_write" number="149"/>
+ <syscall name="getsockname" number="150" groups="network"/>
+ <syscall name="inotify_init" number="151" groups="descriptor"/>
+ <syscall name="inotify_add_watch" number="152" groups="descriptor"/>
+ <syscall name="poll" number="153" groups="descriptor"/>
+ <syscall name="getdents64" number="154" groups="descriptor"/>
+ <syscall name="fcntl64" number="155" groups="descriptor"/>
+ <syscall name="inotify_rm_watch" number="156" groups="descriptor"/>
+ <syscall name="statfs" number="157" groups="file"/>
+ <syscall name="fstatfs" number="158" groups="descriptor"/>
+ <syscall name="umount" number="159" groups="file"/>
+ <syscall name="sched_set_affinity" number="160"/>
+ <syscall name="sched_get_affinity" number="161"/>
+ <syscall name="getdomainname" number="162"/>
+ <syscall name="setdomainname" number="163"/>
+ <syscall name="quotactl" number="165" groups="file"/>
+ <syscall name="set_tid_address" number="166"/>
+ <syscall name="mount" number="167" groups="file"/>
+ <syscall name="ustat" number="168"/>
+ <syscall name="setxattr" number="169" groups="file"/>
+ <syscall name="lsetxattr" number="170" groups="file"/>
+ <syscall name="fsetxattr" number="171" groups="descriptor"/>
+ <syscall name="getxattr" number="172" groups="file"/>
+ <syscall name="lgetxattr" number="173" groups="file"/>
+ <syscall name="getdents" number="174" groups="descriptor"/>
+ <syscall name="setsid" number="175"/>
+ <syscall name="fchdir" number="176" groups="descriptor"/>
+ <syscall name="fgetxattr" number="177" groups="descriptor"/>
+ <syscall name="listxattr" number="178" groups="file"/>
+ <syscall name="llistxattr" number="179" groups="file"/>
+ <syscall name="flistxattr" number="180" groups="descriptor"/>
+ <syscall name="removexattr" number="181" groups="file"/>
+ <syscall name="lremovexattr" number="182" groups="file"/>
+ <syscall name="sigpending" number="183" groups="signal"/>
+ <syscall name="query_module" number="184"/>
+ <syscall name="setpgid" number="185"/>
+ <syscall name="fremovexattr" number="186" groups="descriptor"/>
+ <syscall name="tkill" number="187" groups="signal"/>
+ <syscall name="exit_group" number="188" groups="process"/>
+ <syscall name="uname" number="189"/>
+ <syscall name="init_module" number="190"/>
+ <syscall name="personality" number="191"/>
+ <syscall name="remap_file_pages" number="192" groups="memory"/>
+ <syscall name="epoll_create" number="193" groups="descriptor"/>
+ <syscall name="epoll_ctl" number="194" groups="descriptor"/>
+ <syscall name="epoll_wait" number="195" groups="descriptor"/>
+ <syscall name="ioprio_set" number="196"/>
+ <syscall name="getppid" number="197"/>
+ <syscall name="sigaction" number="198" groups="signal"/>
+ <syscall name="sgetmask" number="199" groups="signal"/>
+ <syscall name="ssetmask" number="200" groups="signal"/>
+ <syscall name="sigsuspend" number="201" groups="signal"/>
+ <syscall name="oldlstat" number="202" groups="file"/>
+ <syscall name="uselib" number="203" groups="file"/>
+ <syscall name="readdir" number="204" groups="descriptor"/>
+ <syscall name="readahead" number="205" groups="descriptor"/>
+ <syscall name="socketcall" number="206" groups="descriptor"/>
+ <syscall name="syslog" number="207"/>
+ <syscall name="lookup_dcookie" number="208"/>
+ <syscall name="fadvise64" number="209" groups="descriptor"/>
+ <syscall name="fadvise64_64" number="210" groups="descriptor"/>
+ <syscall name="tgkill" number="211" groups="signal"/>
+ <syscall name="waitpid" number="212" groups="process"/>
+ <syscall name="swapoff" number="213" groups="file"/>
+ <syscall name="sysinfo" number="214"/>
+ <syscall name="ipc" number="215" groups="ipc"/>
+ <syscall name="sigreturn" number="216" groups="signal"/>
+ <syscall name="clone" number="217" groups="process"/>
+ <syscall name="ioprio_get" number="218"/>
+ <syscall name="adjtimex" number="219"/>
+ <syscall name="sigprocmask" number="220" groups="signal"/>
+ <syscall name="create_module" number="221"/>
+ <syscall name="delete_module" number="222"/>
+ <syscall name="get_kernel_syms" number="223"/>
+ <syscall name="getpgid" number="224"/>
+ <syscall name="bdflush" number="225"/>
+ <syscall name="sysfs" number="226"/>
+ <syscall name="afs_syscall" number="227"/>
+ <syscall name="setfsuid" number="228"/>
+ <syscall name="setfsgid" number="229"/>
+ <syscall name="_newselect" number="230" groups="descriptor"/>
+ <syscall name="time" number="231"/>
+ <syscall name="splice" number="232" groups="descriptor"/>
+ <syscall name="stime" number="233"/>
+ <syscall name="statfs64" number="234" groups="file"/>
+ <syscall name="fstatfs64" number="235" groups="descriptor"/>
+ <syscall name="_llseek" number="236" groups="descriptor"/>
+ <syscall name="mlock" number="237" groups="memory"/>
+ <syscall name="munlock" number="238" groups="memory"/>
+ <syscall name="mlockall" number="239" groups="memory"/>
+ <syscall name="munlockall" number="240" groups="memory"/>
+ <syscall name="sched_setparam" number="241"/>
+ <syscall name="sched_getparam" number="242"/>
+ <syscall name="sched_setscheduler" number="243"/>
+ <syscall name="sched_getscheduler" number="244"/>
+ <syscall name="sched_yield" number="245"/>
+ <syscall name="sched_get_priority_max" number="246"/>
+ <syscall name="sched_get_priority_min" number="247"/>
+ <syscall name="sched_rr_get_interval" number="248"/>
+ <syscall name="nanosleep" number="249"/>
+ <syscall name="mremap" number="250" groups="memory"/>
+ <syscall name="_sysctl" number="251"/>
+ <syscall name="getsid" number="252"/>
+ <syscall name="fdatasync" number="253" groups="descriptor"/>
+ <syscall name="nfsservctl" number="254"/>
+ <syscall name="sync_file_range" number="255" groups="descriptor"/>
+ <syscall name="clock_settime" number="256"/>
+ <syscall name="clock_gettime" number="257"/>
+ <syscall name="clock_getres" number="258"/>
+ <syscall name="clock_nanosleep" number="259"/>
+ <syscall name="sched_getaffinity" number="260"/>
+ <syscall name="sched_setaffinity" number="261"/>
+ <syscall name="timer_settime" number="262"/>
+ <syscall name="timer_gettime" number="263"/>
+ <syscall name="timer_getoverrun" number="264"/>
+ <syscall name="timer_delete" number="265"/>
+ <syscall name="timer_create" number="266"/>
+ <syscall name="vserver" number="267"/>
+ <syscall name="io_setup" number="268"/>
+ <syscall name="io_destroy" number="269"/>
+ <syscall name="io_submit" number="270"/>
+ <syscall name="io_cancel" number="271"/>
+ <syscall name="io_getevents" number="272"/>
+ <syscall name="mq_open" number="273"/>
+ <syscall name="mq_unlink" number="274"/>
+ <syscall name="mq_timedsend" number="275"/>
+ <syscall name="mq_timedreceive" number="276"/>
+ <syscall name="mq_notify" number="277"/>
+ <syscall name="mq_getsetattr" number="278"/>
+ <syscall name="waitid" number="279" groups="process"/>
+ <syscall name="tee" number="280" groups="descriptor"/>
+ <syscall name="add_key" number="281"/>
+ <syscall name="request_key" number="282"/>
+ <syscall name="keyctl" number="283"/>
+ <syscall name="openat" number="284" groups="descriptor,file"/>
+ <syscall name="mkdirat" number="285" groups="descriptor,file"/>
+ <syscall name="mknodat" number="286" groups="descriptor,file"/>
+ <syscall name="fchownat" number="287" groups="descriptor,file"/>
+ <syscall name="futimesat" number="288" groups="descriptor,file"/>
+ <syscall name="fstatat64" number="289" groups="descriptor,file"/>
+ <syscall name="unlinkat" number="290" groups="descriptor,file"/>
+ <syscall name="renameat" number="291" groups="descriptor,file"/>
+ <syscall name="linkat" number="292" groups="descriptor,file"/>
+ <syscall name="symlinkat" number="293" groups="descriptor,file"/>
+ <syscall name="readlinkat" number="294" groups="descriptor,file"/>
+ <syscall name="fchmodat" number="295" groups="descriptor,file"/>
+ <syscall name="faccessat" number="296" groups="descriptor,file"/>
+ <syscall name="pselect6" number="297" groups="descriptor"/>
+ <syscall name="ppoll" number="298" groups="descriptor"/>
+ <syscall name="unshare" number="299" groups="process"/>
+ <syscall name="set_robust_list" number="300"/>
+ <syscall name="get_robust_list" number="301"/>
+ <syscall name="migrate_pages" number="302" groups="memory"/>
+ <syscall name="mbind" number="303" groups="memory"/>
+ <syscall name="get_mempolicy" number="304" groups="memory"/>
+ <syscall name="set_mempolicy" number="305" groups="memory"/>
+ <syscall name="kexec_load" number="306"/>
+ <syscall name="move_pages" number="307" groups="memory"/>
+ <syscall name="getcpu" number="308"/>
+ <syscall name="epoll_pwait" number="309" groups="descriptor"/>
+ <syscall name="utimensat" number="310" groups="descriptor,file"/>
+ <syscall name="signalfd" number="311" groups="descriptor,signal"/>
+ <syscall name="timerfd_create" number="312" groups="descriptor"/>
+ <syscall name="eventfd" number="313" groups="descriptor"/>
+ <syscall name="fallocate" number="314" groups="descriptor"/>
+ <syscall name="timerfd_settime" number="315" groups="descriptor"/>
+ <syscall name="timerfd_gettime" number="316" groups="descriptor"/>
+ <syscall name="signalfd4" number="317" groups="descriptor,signal"/>
+ <syscall name="eventfd2" number="318" groups="descriptor"/>
+ <syscall name="epoll_create1" number="319" groups="descriptor"/>
+ <syscall name="dup3" number="320" groups="descriptor"/>
+ <syscall name="pipe2" number="321" groups="descriptor"/>
+ <syscall name="inotify_init1" number="322" groups="descriptor"/>
+ <syscall name="accept4" number="323" groups="network"/>
+ <syscall name="preadv" number="324" groups="descriptor"/>
+ <syscall name="pwritev" number="325" groups="descriptor"/>
+ <syscall name="rt_tgsigqueueinfo" number="326" groups="process,signal"/>
+ <syscall name="perf_event_open" number="327" groups="descriptor"/>
+ <syscall name="recvmmsg" number="328" groups="network"/>
+ <syscall name="fanotify_init" number="329" groups="descriptor"/>
+ <syscall name="fanotify_mark" number="330" groups="descriptor,file"/>
+ <syscall name="prlimit64" number="331"/>
+ <syscall name="name_to_handle_at" number="332" groups="descriptor,file"/>
+ <syscall name="open_by_handle_at" number="333" groups="descriptor"/>
+ <syscall name="clock_adjtime" number="334"/>
+ <syscall name="syncfs" number="335" groups="descriptor"/>
+ <syscall name="sendmmsg" number="336" groups="network"/>
+ <syscall name="setns" number="337" groups="descriptor"/>
+ <syscall name="process_vm_readv" number="338"/>
+ <syscall name="process_vm_writev" number="339"/>
+ <syscall name="kern_features" number="340"/>
+ <syscall name="kcmp" number="341"/>
+ <syscall name="finit_module" number="342" groups="descriptor"/>
+ <syscall name="sched_setattr" number="343"/>
+ <syscall name="sched_getattr" number="344"/>
+ <syscall name="renameat2" number="345"/>
+ <syscall name="seccomp" number="346"/>
+ <syscall name="getrandom" number="347"/>
+ <syscall name="memfd_create" number="348"/>
+ <syscall name="bpf" number="349"/>
+ <syscall name="execveat" number="350"/>
+ <syscall name="membarrier" number="351"/>
+ <syscall name="userfaultfd" number="352"/>
+ <syscall name="bind" number="353" groups="network"/>
+ <syscall name="listen" number="354" groups="network"/>
+ <syscall name="setsockopt" number="355" groups="network"/>
+ <syscall name="mlock2" number="356"/>
+ <syscall name="copy_file_range" number="357"/>
+ <syscall name="preadv2" number="358"/>
+ <syscall name="pwritev2" number="359"/>
+ <syscall name="statx" number="360"/>
+ <syscall name="io_pgetevents" number="361"/>
+ <syscall name="pkey_mprotect" number="362"/>
+ <syscall name="pkey_alloc" number="363"/>
+ <syscall name="pkey_free" number="364"/>
+ <syscall name="rseq" number="365"/>
+ <syscall name="semget" number="393" groups="ipc"/>
+ <syscall name="semctl" number="394" groups="ipc"/>
+ <syscall name="shmget" number="395" groups="ipc"/>
+ <syscall name="shmctl" number="396" groups="ipc"/>
+ <syscall name="shmat" number="397" groups="ipc,memory"/>
+ <syscall name="shmdt" number="398" groups="ipc,memory"/>
+ <syscall name="msgget" number="399" groups="ipc"/>
+ <syscall name="msgsnd" number="400" groups="ipc"/>
+ <syscall name="msgrcv" number="401" groups="ipc"/>
+ <syscall name="msgctl" number="402" groups="ipc"/>
+ <syscall name="clock_gettime64" number="403"/>
+ <syscall name="clock_settime64" number="404"/>
+ <syscall name="clock_adjtime64" number="405"/>
+ <syscall name="clock_getres_time64" number="406"/>
+ <syscall name="clock_nanosleep_time64" number="407"/>
+ <syscall name="timer_gettime64" number="408"/>
+ <syscall name="timer_settime64" number="409"/>
+ <syscall name="timerfd_gettime64" number="410"/>
+ <syscall name="timerfd_settime64" number="411"/>
+ <syscall name="utimensat_time64" number="412"/>
+ <syscall name="pselect6_time64" number="413"/>
+ <syscall name="ppoll_time64" number="414"/>
+ <syscall name="io_pgetevents_time64" number="416"/>
+ <syscall name="recvmmsg_time64" number="417"/>
+ <syscall name="mq_timedsend_time64" number="418"/>
+ <syscall name="mq_timedreceive_time64" number="419"/>
+ <syscall name="semtimedop_time64" number="420"/>
+ <syscall name="rt_sigtimedwait_time64" number="421"/>
+ <syscall name="futex_time64" number="422"/>
+ <syscall name="sched_rr_get_interval_time64" number="423"/>
+ <syscall name="pidfd_send_signal" number="424"/>
+ <syscall name="io_uring_setup" number="425"/>
+ <syscall name="io_uring_enter" number="426"/>
+ <syscall name="io_uring_register" number="427"/>
+ <syscall name="open_tree" number="428"/>
+ <syscall name="move_mount" number="429"/>
+ <syscall name="fsopen" number="430"/>
+ <syscall name="fsconfig" number="431"/>
+ <syscall name="fsmount" number="432"/>
+ <syscall name="fspick" number="433"/>
+ <syscall name="pidfd_open" number="434"/>
+ <syscall name="close_range" number="436"/>
+ <syscall name="openat2" number="437"/>
+ <syscall name="pidfd_getfd" number="438"/>
+ <syscall name="faccessat2" number="439"/>
+ <syscall name="process_madvise" number="440"/>
+ <syscall name="epoll_pwait2" number="441"/>
+ <syscall name="mount_setattr" number="442"/>
+ <syscall name="quotactl_fd" number="443"/>
+ <syscall name="landlock_create_ruleset" number="444"/>
+ <syscall name="landlock_add_rule" number="445"/>
+ <syscall name="landlock_restrict_self" number="446"/>
+ <syscall name="process_mrelease" number="448"/>
+ <syscall name="futex_waitv" number="449"/>
+ <syscall name="set_mempolicy_home_node" number="450"/>
+</syscalls_info>
diff --git a/share/gdb/syscalls/sparc64-linux.xml b/share/gdb/syscalls/sparc64-linux.xml
new file mode 100644
index 0000000..d90f0d9
--- /dev/null
+++ b/share/gdb/syscalls/sparc64-linux.xml
@@ -0,0 +1,396 @@
+<?xml version="1.0"?>
+<!DOCTYPE syscalls_info SYSTEM "gdb-syscalls.dtd">
+<!-- Copyright (C) 2010-2023 Free Software Foundation, Inc.
+
+ Copying and distribution of this file, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved. -->
+<!-- This file was generated using the following file:
+
+ arch/sparc/kernel/syscalls/syscall.tbl
+
+ The file mentioned above belongs to the Linux Kernel. -->
+<syscalls_info>
+ <syscall name="restart_syscall" number="0"/>
+ <syscall name="exit" number="1" groups="process"/>
+ <syscall name="fork" number="2" groups="process"/>
+ <syscall name="read" number="3" groups="descriptor"/>
+ <syscall name="write" number="4" groups="descriptor"/>
+ <syscall name="open" number="5" groups="descriptor,file"/>
+ <syscall name="close" number="6" groups="descriptor"/>
+ <syscall name="wait4" number="7" groups="process"/>
+ <syscall name="creat" number="8" groups="descriptor,file"/>
+ <syscall name="link" number="9" groups="file"/>
+ <syscall name="unlink" number="10" groups="file"/>
+ <syscall name="execv" number="11" groups="file,process"/>
+ <syscall name="chdir" number="12" groups="file"/>
+ <syscall name="chown" number="13" groups="file"/>
+ <syscall name="mknod" number="14" groups="file"/>
+ <syscall name="chmod" number="15" groups="file"/>
+ <syscall name="lchown" number="16" groups="file"/>
+ <syscall name="brk" number="17" groups="memory"/>
+ <syscall name="perfctr" number="18"/>
+ <syscall name="lseek" number="19" groups="descriptor"/>
+ <syscall name="getpid" number="20"/>
+ <syscall name="capget" number="21"/>
+ <syscall name="capset" number="22"/>
+ <syscall name="setuid" number="23"/>
+ <syscall name="getuid" number="24"/>
+ <syscall name="vmsplice" number="25" groups="descriptor"/>
+ <syscall name="ptrace" number="26"/>
+ <syscall name="alarm" number="27"/>
+ <syscall name="sigaltstack" number="28" groups="signal"/>
+ <syscall name="pause" number="29" groups="signal"/>
+ <syscall name="utime" number="30" groups="file"/>
+ <syscall name="access" number="33" groups="file"/>
+ <syscall name="nice" number="34"/>
+ <syscall name="sync" number="36"/>
+ <syscall name="kill" number="37" groups="signal"/>
+ <syscall name="stat" number="38" groups="file"/>
+ <syscall name="sendfile" number="39" groups="descriptor,network"/>
+ <syscall name="lstat" number="40" groups="file"/>
+ <syscall name="dup" number="41" groups="descriptor"/>
+ <syscall name="pipe" number="42" groups="descriptor"/>
+ <syscall name="times" number="43"/>
+ <syscall name="umount2" number="45" groups="file"/>
+ <syscall name="setgid" number="46"/>
+ <syscall name="getgid" number="47"/>
+ <syscall name="signal" number="48" groups="signal"/>
+ <syscall name="geteuid" number="49"/>
+ <syscall name="getegid" number="50"/>
+ <syscall name="acct" number="51" groups="file"/>
+ <syscall name="memory_ordering" number="52"/>
+ <syscall name="ioctl" number="54" groups="descriptor"/>
+ <syscall name="reboot" number="55"/>
+ <syscall name="symlink" number="57" groups="file"/>
+ <syscall name="readlink" number="58" groups="file"/>
+ <syscall name="execve" number="59" groups="file,process"/>
+ <syscall name="umask" number="60"/>
+ <syscall name="chroot" number="61" groups="file"/>
+ <syscall name="fstat" number="62" groups="descriptor"/>
+ <syscall name="fstat64" number="63" groups="descriptor"/>
+ <syscall name="getpagesize" number="64"/>
+ <syscall name="msync" number="65" groups="memory"/>
+ <syscall name="vfork" number="66" groups="process"/>
+ <syscall name="pread64" number="67" groups="descriptor"/>
+ <syscall name="pwrite64" number="68" groups="descriptor"/>
+ <syscall name="mmap" number="71" groups="descriptor,memory"/>
+ <syscall name="munmap" number="73" groups="memory"/>
+ <syscall name="mprotect" number="74" groups="memory"/>
+ <syscall name="madvise" number="75" groups="memory"/>
+ <syscall name="vhangup" number="76"/>
+ <syscall name="mincore" number="78" groups="memory"/>
+ <syscall name="getgroups" number="79"/>
+ <syscall name="setgroups" number="80"/>
+ <syscall name="getpgrp" number="81"/>
+ <syscall name="setitimer" number="83"/>
+ <syscall name="swapon" number="85" groups="file"/>
+ <syscall name="getitimer" number="86"/>
+ <syscall name="sethostname" number="88"/>
+ <syscall name="dup2" number="90" groups="descriptor"/>
+ <syscall name="fcntl" number="92" groups="descriptor"/>
+ <syscall name="select" number="93" groups="descriptor"/>
+ <syscall name="fsync" number="95" groups="descriptor"/>
+ <syscall name="setpriority" number="96"/>
+ <syscall name="socket" number="97" groups="network"/>
+ <syscall name="connect" number="98" groups="network"/>
+ <syscall name="accept" number="99" groups="network"/>
+ <syscall name="getpriority" number="100"/>
+ <syscall name="rt_sigreturn" number="101" groups="signal"/>
+ <syscall name="rt_sigaction" number="102" groups="signal"/>
+ <syscall name="rt_sigprocmask" number="103" groups="signal"/>
+ <syscall name="rt_sigpending" number="104" groups="signal"/>
+ <syscall name="rt_sigtimedwait" number="105" groups="signal"/>
+ <syscall name="rt_sigqueueinfo" number="106" groups="signal"/>
+ <syscall name="rt_sigsuspend" number="107" groups="signal"/>
+ <syscall name="setresuid" number="108"/>
+ <syscall name="getresuid" number="109"/>
+ <syscall name="setresgid" number="110"/>
+ <syscall name="getresgid" number="111"/>
+ <syscall name="recvmsg" number="113" groups="network"/>
+ <syscall name="sendmsg" number="114" groups="network"/>
+ <syscall name="gettimeofday" number="116"/>
+ <syscall name="getrusage" number="117"/>
+ <syscall name="getsockopt" number="118" groups="network"/>
+ <syscall name="getcwd" number="119" groups="file"/>
+ <syscall name="readv" number="120" groups="descriptor"/>
+ <syscall name="writev" number="121" groups="descriptor"/>
+ <syscall name="settimeofday" number="122"/>
+ <syscall name="fchown" number="123" groups="descriptor"/>
+ <syscall name="fchmod" number="124" groups="descriptor"/>
+ <syscall name="recvfrom" number="125" groups="network"/>
+ <syscall name="setreuid" number="126"/>
+ <syscall name="setregid" number="127"/>
+ <syscall name="rename" number="128" groups="file"/>
+ <syscall name="truncate" number="129" groups="file"/>
+ <syscall name="ftruncate" number="130" groups="descriptor"/>
+ <syscall name="flock" number="131" groups="descriptor"/>
+ <syscall name="lstat64" number="132" groups="file"/>
+ <syscall name="sendto" number="133" groups="network"/>
+ <syscall name="shutdown" number="134" groups="network"/>
+ <syscall name="socketpair" number="135" groups="network"/>
+ <syscall name="mkdir" number="136" groups="file"/>
+ <syscall name="rmdir" number="137" groups="file"/>
+ <syscall name="utimes" number="138" groups="file"/>
+ <syscall name="stat64" number="139" groups="file"/>
+ <syscall name="sendfile64" number="140" groups="descriptor,network"/>
+ <syscall name="getpeername" number="141" groups="network"/>
+ <syscall name="futex" number="142"/>
+ <syscall name="gettid" number="143"/>
+ <syscall name="getrlimit" number="144"/>
+ <syscall name="setrlimit" number="145"/>
+ <syscall name="pivot_root" number="146" groups="file"/>
+ <syscall name="prctl" number="147"/>
+ <syscall name="pciconfig_read" number="148"/>
+ <syscall name="pciconfig_write" number="149"/>
+ <syscall name="getsockname" number="150" groups="network"/>
+ <syscall name="inotify_init" number="151" groups="descriptor"/>
+ <syscall name="inotify_add_watch" number="152" groups="descriptor"/>
+ <syscall name="poll" number="153" groups="descriptor"/>
+ <syscall name="getdents64" number="154" groups="descriptor"/>
+ <syscall name="inotify_rm_watch" number="156" groups="descriptor"/>
+ <syscall name="statfs" number="157" groups="file"/>
+ <syscall name="fstatfs" number="158" groups="descriptor"/>
+ <syscall name="umount" number="159" groups="file"/>
+ <syscall name="sched_set_affinity" number="160"/>
+ <syscall name="sched_get_affinity" number="161"/>
+ <syscall name="getdomainname" number="162"/>
+ <syscall name="setdomainname" number="163"/>
+ <syscall name="utrap_install" number="164"/>
+ <syscall name="quotactl" number="165" groups="file"/>
+ <syscall name="set_tid_address" number="166"/>
+ <syscall name="mount" number="167" groups="file"/>
+ <syscall name="ustat" number="168"/>
+ <syscall name="setxattr" number="169" groups="file"/>
+ <syscall name="lsetxattr" number="170" groups="file"/>
+ <syscall name="fsetxattr" number="171" groups="descriptor"/>
+ <syscall name="getxattr" number="172" groups="file"/>
+ <syscall name="lgetxattr" number="173" groups="file"/>
+ <syscall name="getdents" number="174" groups="descriptor"/>
+ <syscall name="setsid" number="175"/>
+ <syscall name="fchdir" number="176" groups="descriptor"/>
+ <syscall name="fgetxattr" number="177" groups="descriptor"/>
+ <syscall name="listxattr" number="178" groups="file"/>
+ <syscall name="llistxattr" number="179" groups="file"/>
+ <syscall name="flistxattr" number="180" groups="descriptor"/>
+ <syscall name="removexattr" number="181" groups="file"/>
+ <syscall name="lremovexattr" number="182" groups="file"/>
+ <syscall name="sigpending" number="183" groups="signal"/>
+ <syscall name="query_module" number="184"/>
+ <syscall name="setpgid" number="185"/>
+ <syscall name="fremovexattr" number="186" groups="descriptor"/>
+ <syscall name="tkill" number="187" groups="signal"/>
+ <syscall name="exit_group" number="188" groups="process"/>
+ <syscall name="uname" number="189"/>
+ <syscall name="init_module" number="190"/>
+ <syscall name="personality" number="191"/>
+ <syscall name="remap_file_pages" number="192" groups="memory"/>
+ <syscall name="epoll_create" number="193" groups="descriptor"/>
+ <syscall name="epoll_ctl" number="194" groups="descriptor"/>
+ <syscall name="epoll_wait" number="195" groups="descriptor"/>
+ <syscall name="ioprio_set" number="196"/>
+ <syscall name="getppid" number="197"/>
+ <syscall name="sigaction" number="198" groups="signal"/>
+ <syscall name="sgetmask" number="199" groups="signal"/>
+ <syscall name="ssetmask" number="200" groups="signal"/>
+ <syscall name="sigsuspend" number="201" groups="signal"/>
+ <syscall name="oldlstat" number="202" groups="file"/>
+ <syscall name="uselib" number="203" groups="file"/>
+ <syscall name="readdir" number="204" groups="descriptor"/>
+ <syscall name="readahead" number="205" groups="descriptor"/>
+ <syscall name="socketcall" number="206" groups="descriptor"/>
+ <syscall name="syslog" number="207"/>
+ <syscall name="lookup_dcookie" number="208"/>
+ <syscall name="fadvise64" number="209" groups="descriptor"/>
+ <syscall name="fadvise64_64" number="210" groups="descriptor"/>
+ <syscall name="tgkill" number="211" groups="signal"/>
+ <syscall name="waitpid" number="212" groups="process"/>
+ <syscall name="swapoff" number="213" groups="file"/>
+ <syscall name="sysinfo" number="214"/>
+ <syscall name="ipc" number="215" groups="ipc"/>
+ <syscall name="sigreturn" number="216" groups="signal"/>
+ <syscall name="clone" number="217" groups="process"/>
+ <syscall name="ioprio_get" number="218"/>
+ <syscall name="adjtimex" number="219"/>
+ <syscall name="sigprocmask" number="220" groups="signal"/>
+ <syscall name="create_module" number="221"/>
+ <syscall name="delete_module" number="222"/>
+ <syscall name="get_kernel_syms" number="223"/>
+ <syscall name="getpgid" number="224"/>
+ <syscall name="bdflush" number="225"/>
+ <syscall name="sysfs" number="226"/>
+ <syscall name="afs_syscall" number="227"/>
+ <syscall name="setfsuid" number="228"/>
+ <syscall name="setfsgid" number="229"/>
+ <syscall name="_newselect" number="230" groups="descriptor"/>
+ <syscall name="splice" number="232" groups="descriptor"/>
+ <syscall name="stime" number="233"/>
+ <syscall name="statfs64" number="234" groups="file"/>
+ <syscall name="fstatfs64" number="235" groups="descriptor"/>
+ <syscall name="_llseek" number="236" groups="descriptor"/>
+ <syscall name="mlock" number="237" groups="memory"/>
+ <syscall name="munlock" number="238" groups="memory"/>
+ <syscall name="mlockall" number="239" groups="memory"/>
+ <syscall name="munlockall" number="240" groups="memory"/>
+ <syscall name="sched_setparam" number="241"/>
+ <syscall name="sched_getparam" number="242"/>
+ <syscall name="sched_setscheduler" number="243"/>
+ <syscall name="sched_getscheduler" number="244"/>
+ <syscall name="sched_yield" number="245"/>
+ <syscall name="sched_get_priority_max" number="246"/>
+ <syscall name="sched_get_priority_min" number="247"/>
+ <syscall name="sched_rr_get_interval" number="248"/>
+ <syscall name="nanosleep" number="249"/>
+ <syscall name="mremap" number="250" groups="memory"/>
+ <syscall name="_sysctl" number="251"/>
+ <syscall name="getsid" number="252"/>
+ <syscall name="fdatasync" number="253" groups="descriptor"/>
+ <syscall name="nfsservctl" number="254"/>
+ <syscall name="sync_file_range" number="255" groups="descriptor"/>
+ <syscall name="clock_settime" number="256"/>
+ <syscall name="clock_gettime" number="257"/>
+ <syscall name="clock_getres" number="258"/>
+ <syscall name="clock_nanosleep" number="259"/>
+ <syscall name="sched_getaffinity" number="260"/>
+ <syscall name="sched_setaffinity" number="261"/>
+ <syscall name="timer_settime" number="262"/>
+ <syscall name="timer_gettime" number="263"/>
+ <syscall name="timer_getoverrun" number="264"/>
+ <syscall name="timer_delete" number="265"/>
+ <syscall name="timer_create" number="266"/>
+ <syscall name="vserver" number="267"/>
+ <syscall name="io_setup" number="268"/>
+ <syscall name="io_destroy" number="269"/>
+ <syscall name="io_submit" number="270"/>
+ <syscall name="io_cancel" number="271"/>
+ <syscall name="io_getevents" number="272"/>
+ <syscall name="mq_open" number="273"/>
+ <syscall name="mq_unlink" number="274"/>
+ <syscall name="mq_timedsend" number="275"/>
+ <syscall name="mq_timedreceive" number="276"/>
+ <syscall name="mq_notify" number="277"/>
+ <syscall name="mq_getsetattr" number="278"/>
+ <syscall name="waitid" number="279" groups="process"/>
+ <syscall name="tee" number="280" groups="descriptor"/>
+ <syscall name="add_key" number="281"/>
+ <syscall name="request_key" number="282"/>
+ <syscall name="keyctl" number="283"/>
+ <syscall name="openat" number="284" groups="descriptor,file"/>
+ <syscall name="mkdirat" number="285" groups="descriptor,file"/>
+ <syscall name="mknodat" number="286" groups="descriptor,file"/>
+ <syscall name="fchownat" number="287" groups="descriptor,file"/>
+ <syscall name="futimesat" number="288" groups="descriptor,file"/>
+ <syscall name="fstatat64" number="289" groups="descriptor,file"/>
+ <syscall name="unlinkat" number="290" groups="descriptor,file"/>
+ <syscall name="renameat" number="291" groups="descriptor,file"/>
+ <syscall name="linkat" number="292" groups="descriptor,file"/>
+ <syscall name="symlinkat" number="293" groups="descriptor,file"/>
+ <syscall name="readlinkat" number="294" groups="descriptor,file"/>
+ <syscall name="fchmodat" number="295" groups="descriptor,file"/>
+ <syscall name="faccessat" number="296" groups="descriptor,file"/>
+ <syscall name="pselect6" number="297" groups="descriptor"/>
+ <syscall name="ppoll" number="298" groups="descriptor"/>
+ <syscall name="unshare" number="299" groups="process"/>
+ <syscall name="set_robust_list" number="300"/>
+ <syscall name="get_robust_list" number="301"/>
+ <syscall name="migrate_pages" number="302" groups="memory"/>
+ <syscall name="mbind" number="303" groups="memory"/>
+ <syscall name="get_mempolicy" number="304" groups="memory"/>
+ <syscall name="set_mempolicy" number="305" groups="memory"/>
+ <syscall name="kexec_load" number="306"/>
+ <syscall name="move_pages" number="307" groups="memory"/>
+ <syscall name="getcpu" number="308"/>
+ <syscall name="epoll_pwait" number="309" groups="descriptor"/>
+ <syscall name="utimensat" number="310" groups="descriptor,file"/>
+ <syscall name="signalfd" number="311" groups="descriptor,signal"/>
+ <syscall name="timerfd_create" number="312" groups="descriptor"/>
+ <syscall name="eventfd" number="313" groups="descriptor"/>
+ <syscall name="fallocate" number="314" groups="descriptor"/>
+ <syscall name="timerfd_settime" number="315" groups="descriptor"/>
+ <syscall name="timerfd_gettime" number="316" groups="descriptor"/>
+ <syscall name="signalfd4" number="317" groups="descriptor,signal"/>
+ <syscall name="eventfd2" number="318" groups="descriptor"/>
+ <syscall name="epoll_create1" number="319" groups="descriptor"/>
+ <syscall name="dup3" number="320" groups="descriptor"/>
+ <syscall name="pipe2" number="321" groups="descriptor"/>
+ <syscall name="inotify_init1" number="322" groups="descriptor"/>
+ <syscall name="accept4" number="323" groups="network"/>
+ <syscall name="preadv" number="324" groups="descriptor"/>
+ <syscall name="pwritev" number="325" groups="descriptor"/>
+ <syscall name="rt_tgsigqueueinfo" number="326" groups="process,signal"/>
+ <syscall name="perf_event_open" number="327" groups="descriptor"/>
+ <syscall name="recvmmsg" number="328" groups="network"/>
+ <syscall name="fanotify_init" number="329" groups="descriptor"/>
+ <syscall name="fanotify_mark" number="330" groups="descriptor,file"/>
+ <syscall name="prlimit64" number="331"/>
+ <syscall name="name_to_handle_at" number="332" groups="descriptor,file"/>
+ <syscall name="open_by_handle_at" number="333" groups="descriptor"/>
+ <syscall name="clock_adjtime" number="334"/>
+ <syscall name="syncfs" number="335" groups="descriptor"/>
+ <syscall name="sendmmsg" number="336" groups="network"/>
+ <syscall name="setns" number="337" groups="descriptor"/>
+ <syscall name="process_vm_readv" number="338"/>
+ <syscall name="process_vm_writev" number="339"/>
+ <syscall name="kern_features" number="340"/>
+ <syscall name="kcmp" number="341"/>
+ <syscall name="finit_module" number="342" groups="descriptor"/>
+ <syscall name="sched_setattr" number="343"/>
+ <syscall name="sched_getattr" number="344"/>
+ <syscall name="renameat2" number="345"/>
+ <syscall name="seccomp" number="346"/>
+ <syscall name="getrandom" number="347"/>
+ <syscall name="memfd_create" number="348"/>
+ <syscall name="bpf" number="349"/>
+ <syscall name="execveat" number="350"/>
+ <syscall name="membarrier" number="351"/>
+ <syscall name="userfaultfd" number="352"/>
+ <syscall name="bind" number="353" groups="network"/>
+ <syscall name="listen" number="354" groups="network"/>
+ <syscall name="setsockopt" number="355" groups="network"/>
+ <syscall name="mlock2" number="356"/>
+ <syscall name="copy_file_range" number="357"/>
+ <syscall name="preadv2" number="358"/>
+ <syscall name="pwritev2" number="359"/>
+ <syscall name="statx" number="360"/>
+ <syscall name="io_pgetevents" number="361"/>
+ <syscall name="pkey_mprotect" number="362"/>
+ <syscall name="pkey_alloc" number="363"/>
+ <syscall name="pkey_free" number="364"/>
+ <syscall name="rseq" number="365"/>
+ <syscall name="semtimedop" number="392" groups="ipc"/>
+ <syscall name="semget" number="393" groups="ipc"/>
+ <syscall name="semctl" number="394" groups="ipc"/>
+ <syscall name="shmget" number="395" groups="ipc"/>
+ <syscall name="shmctl" number="396" groups="ipc"/>
+ <syscall name="shmat" number="397" groups="ipc,memory"/>
+ <syscall name="shmdt" number="398" groups="ipc,memory"/>
+ <syscall name="msgget" number="399" groups="ipc"/>
+ <syscall name="msgsnd" number="400" groups="ipc"/>
+ <syscall name="msgrcv" number="401" groups="ipc"/>
+ <syscall name="msgctl" number="402" groups="ipc"/>
+ <syscall name="pidfd_send_signal" number="424"/>
+ <syscall name="io_uring_setup" number="425"/>
+ <syscall name="io_uring_enter" number="426"/>
+ <syscall name="io_uring_register" number="427"/>
+ <syscall name="open_tree" number="428"/>
+ <syscall name="move_mount" number="429"/>
+ <syscall name="fsopen" number="430"/>
+ <syscall name="fsconfig" number="431"/>
+ <syscall name="fsmount" number="432"/>
+ <syscall name="fspick" number="433"/>
+ <syscall name="pidfd_open" number="434"/>
+ <syscall name="close_range" number="436"/>
+ <syscall name="openat2" number="437"/>
+ <syscall name="pidfd_getfd" number="438"/>
+ <syscall name="faccessat2" number="439"/>
+ <syscall name="process_madvise" number="440"/>
+ <syscall name="epoll_pwait2" number="441"/>
+ <syscall name="mount_setattr" number="442"/>
+ <syscall name="quotactl_fd" number="443"/>
+ <syscall name="landlock_create_ruleset" number="444"/>
+ <syscall name="landlock_add_rule" number="445"/>
+ <syscall name="landlock_restrict_self" number="446"/>
+ <syscall name="process_mrelease" number="448"/>
+ <syscall name="futex_waitv" number="449"/>
+ <syscall name="set_mempolicy_home_node" number="450"/>
+</syscalls_info>
diff --git a/share/gdb/system-gdbinit/elinos.py b/share/gdb/system-gdbinit/elinos.py
new file mode 100644
index 0000000..b738af2
--- /dev/null
+++ b/share/gdb/system-gdbinit/elinos.py
@@ -0,0 +1,90 @@
+# Copyright (C) 2011-2023 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/>.
+
+"""Configure GDB using the ELinOS environment."""
+
+import os
+import glob
+import gdb
+
+
+def warn(msg):
+ print("warning: %s" % msg)
+
+
+def get_elinos_environment():
+ """Return the ELinOS environment.
+
+ If the ELinOS environment is properly set up, return a dictionary
+ which contains:
+ * The path to the ELinOS project at key 'project';
+ * The path to the ELinOS CDK at key 'cdk';
+ * The ELinOS target name at key 'target' (Eg. 'i486-linux');
+ * A list of Xenomai install prefixes (which could be empty, if
+ the ELinOS project does not include Xenomai) at key 'xenomai'.
+
+ If one of these cannot be found, print a warning; the corresponding
+ value in the returned dictionary will be None.
+ """
+ result = {}
+ for key in ("project", "cdk", "target"):
+ var = "ELINOS_" + key.upper()
+ if var in os.environ:
+ result[key] = os.environ[var]
+ else:
+ warn("%s not set" % var)
+ result[key] = None
+
+ if result["project"] is not None:
+ result["xenomai"] = glob.glob(result["project"] + "/xenomai-[0-9.]*")
+ else:
+ result["xenomai"] = []
+
+ return result
+
+
+def elinos_init():
+ """Initialize debugger environment for ELinOS.
+
+ Let the debugger know where to find the ELinOS libraries on host. This
+ assumes that an ELinOS environment is properly set up. If some environment
+ variables are missing, warn about which library may be missing.
+ """
+ elinos_env = get_elinos_environment()
+
+ solib_dirs = []
+
+ # System libraries
+ if None in (elinos_env[key] for key in ("cdk", "target")):
+ warn("ELinOS system libraries will not be loaded")
+ else:
+ solib_prefix = "%s/%s" % (elinos_env["cdk"], elinos_env["target"])
+ solib_dirs += ["%s/%s" % (solib_prefix, "lib")]
+ gdb.execute("set solib-absolute-prefix %s" % solib_prefix)
+
+ # Xenomai libraries. Those are optional, so have a lighter warning
+ # if they cannot be located.
+ if elinos_env["project"] is None:
+ warn("Xenomai libraries may not be loaded")
+ else:
+ for dir in elinos_env["xenomai"]:
+ solib_dirs += ["%s/%s" % (dir, "xenomai-build/usr/realtime/lib")]
+
+ if len(solib_dirs) != 0:
+ gdb.execute("set solib-search-path %s" % ":".join(solib_dirs))
+
+
+if __name__ == "__main__":
+ elinos_init()
diff --git a/share/gdb/system-gdbinit/wrs-linux.py b/share/gdb/system-gdbinit/wrs-linux.py
new file mode 100644
index 0000000..33c18d9
--- /dev/null
+++ b/share/gdb/system-gdbinit/wrs-linux.py
@@ -0,0 +1,25 @@
+# Copyright (C) 2011-2023 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/>.
+
+"""Configure GDB using the WRS/Linux environment."""
+
+import os
+
+if "ENV_PREFIX" in os.environ:
+ gdb.execute("set sysroot %s" % os.environ["ENV_PREFIX"])
+
+else:
+ print("warning: ENV_PREFIX environment variable missing.")
+ print("The debugger will probably be unable to find the correct system libraries")