diff options
author | alk3pInjection <webmaster@raspii.tech> | 2024-02-04 16:16:35 +0800 |
---|---|---|
committer | alk3pInjection <webmaster@raspii.tech> | 2024-02-04 16:16:35 +0800 |
commit | abdaadbcae30fe0c9a66c7516798279fdfd97750 (patch) | |
tree | 00a54a6e25601e43876d03c1a4a12a749d4a914c /share/gdb |
https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads
Change-Id: I7303388733328cd98ab9aa3c30236db67f2e9e9c
Diffstat (limited to 'share/gdb')
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") |