summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Cheng <bccheng@google.com>2013-06-24 15:16:53 -0700
committerBen Cheng <bccheng@google.com>2013-06-25 10:42:17 -0700
commite802d26ce0c7947e3f3b1fc0f89224c4f0ac474a (patch)
tree462e8d9a8bc122be45585662047e82a7cf2d075b
parent96cab4347b944dc6ee36a4ed40a5b8fa2fe4a9ba (diff)
downloadarm-linux-androideabi-4.7-e802d26ce0c7947e3f3b1fc0f89224c4f0ac474a.tar.gz
Refresh darwin-x86/arm-linux-androideabi-gdb to 7.6
This prebuilt is built against AOSP-toolchain/gdb/gdb-7.6 commit 1c4be8e861df1416efe1812dfe0c6e7a096d9d60 Change-Id: Ib3a16f083d8d06349f95c92685681bdb96ad1cf4
-rwxr-xr-xbin/arm-linux-androideabi-gdbbin4000344 -> 6385176 bytes
-rw-r--r--share/gdb/python/gdb/__init__.py124
-rw-r--r--share/gdb/python/gdb/command/__init__.py16
-rw-r--r--share/gdb/python/gdb/command/explore.py760
-rw-r--r--share/gdb/python/gdb/command/pretty_printers.py368
-rw-r--r--share/gdb/python/gdb/command/prompt.py66
-rw-r--r--share/gdb/python/gdb/command/type_printers.py125
-rw-r--r--share/gdb/python/gdb/function/__init__.py14
-rw-r--r--share/gdb/python/gdb/function/strfns.py108
-rw-r--r--share/gdb/python/gdb/printing.py263
-rw-r--r--share/gdb/python/gdb/prompt.py148
-rw-r--r--share/gdb/python/gdb/types.py176
-rw-r--r--share/gdb/syscalls/amd64-linux.xml314
-rw-r--r--share/gdb/syscalls/gdb-syscalls.dtd14
-rw-r--r--share/gdb/syscalls/i386-linux.xml340
-rw-r--r--share/gdb/syscalls/mips-n32-linux.xml319
-rw-r--r--share/gdb/syscalls/mips-n64-linux.xml312
-rw-r--r--share/gdb/syscalls/mips-o32-linux.xml347
-rw-r--r--share/gdb/syscalls/ppc-linux.xml310
-rw-r--r--share/gdb/syscalls/ppc64-linux.xml295
-rw-r--r--share/gdb/syscalls/sparc-linux.xml344
-rw-r--r--share/gdb/syscalls/sparc64-linux.xml326
22 files changed, 5089 insertions, 0 deletions
diff --git a/bin/arm-linux-androideabi-gdb b/bin/arm-linux-androideabi-gdb
index e22ca28..9caeda9 100755
--- a/bin/arm-linux-androideabi-gdb
+++ b/bin/arm-linux-androideabi-gdb
Binary files differ
diff --git a/share/gdb/python/gdb/__init__.py b/share/gdb/python/gdb/__init__.py
new file mode 100644
index 0000000..6311583
--- /dev/null
+++ b/share/gdb/python/gdb/__init__.py
@@ -0,0 +1,124 @@
+# Copyright (C) 2010-2013 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
+
+if sys.version_info[0] > 2:
+ # Python 3 moved "reload"
+ from imp import reload
+
+from _gdb import *
+
+class _GdbFile (object):
+ # These two are needed in Python 3
+ encoding = "UTF-8"
+ errors = "strict"
+
+ 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()
+
+class GdbOutputFile (_GdbFile):
+ def write(self, s):
+ write(s, stream=STDOUT)
+
+sys.stdout = GdbOutputFile()
+
+class GdbOutputErrorFile (_GdbFile):
+ def write(self, s):
+ write(s, stream=STDERR)
+
+sys.stderr = GdbOutputErrorFile()
+
+# 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 = []
+
+# 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'
+]
+
+# 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()
diff --git a/share/gdb/python/gdb/command/__init__.py b/share/gdb/python/gdb/command/__init__.py
new file mode 100644
index 0000000..21eaef8
--- /dev/null
+++ b/share/gdb/python/gdb/command/__init__.py
@@ -0,0 +1,16 @@
+# Copyright (C) 2010-2013 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..dd77875
--- /dev/null
+++ b/share/gdb/python/gdb/command/explore.py
@@ -0,0 +1,760 @@
+# GDB 'explore' command.
+# Copyright (C) 2012-2013 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
+
+if sys.version_info[0] > 2:
+ # Python 3 renamed raw_input to input
+ raw_input = input
+
+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_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.
+ """
+ raw_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.
+ """
+ raw_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 = raw_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 = raw_input("Continue exploring it as a pointer to an "
+ "array [y/n]: ")
+ if option == "y":
+ while True:
+ index = 0
+ try:
+ index = int(raw_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(raw_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)
+ raw_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 = raw_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))
+
+ has_explorable_fields = False
+ 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 = raw_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) == 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) == 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 valid in the current
+ context.
+
+ 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) == 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/pretty_printers.py b/share/gdb/python/gdb/command/pretty_printers.py
new file mode 100644
index 0000000..7b03e3a
--- /dev/null
+++ b/share/gdb/python/gdb/command/pretty_printers.py
@@ -0,0 +1,368 @@
+# Pretty-printer commands.
+# Copyright (C) 2010-2013 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..394e40c
--- /dev/null
+++ b/share/gdb/python/gdb/command/prompt.py
@@ -0,0 +1,66 @@
+# Extended prompt.
+# Copyright (C) 2011-2013 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__ + 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 is not '':
+ return "The extended prompt is: " + self.value
+ else:
+ return "The extended prompt is not set."
+
+ def get_set_string (self):
+ if self.hook_set == False:
+ gdb.prompt_hook = self.before_prompt_hook
+ self.hook_set = True
+ return ""
+
+ def before_prompt_hook(self, current):
+ if self.value is not '':
+ newprompt = gdb.prompt.substitute_prompt(self.value)
+ return newprompt.replace('\\', '\\\\')
+ 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..81f2ea1
--- /dev/null
+++ b/share/gdb/python/gdb/command/type_printers.py
@@ -0,0 +1,125 @@
+# Type printer commands.
+# Copyright (C) 2010-2013 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.name))
+ 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/function/__init__.py b/share/gdb/python/gdb/function/__init__.py
new file mode 100644
index 0000000..755bff9
--- /dev/null
+++ b/share/gdb/python/gdb/function/__init__.py
@@ -0,0 +1,14 @@
+# Copyright (C) 2012-2013 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/strfns.py b/share/gdb/python/gdb/function/strfns.py
new file mode 100644
index 0000000..efdf950
--- /dev/null
+++ b/share/gdb/python/gdb/function/strfns.py
@@ -0,0 +1,108 @@
+# Useful gdb string convenience functions.
+# Copyright (C) 2012-2013 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 str (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/printing.py b/share/gdb/python/gdb/printing.py
new file mode 100644
index 0000000..785a407
--- /dev/null
+++ b/share/gdb/python/gdb/printing.py
@@ -0,0 +1,263 @@
+# Pretty-printer utilities.
+# Copyright (C) 2010-2013 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
+
+if sys.version_info[0] > 2:
+ # Python 3 removed basestring and long
+ basestring = str
+ long = int
+
+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 obj is None:
+ 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" %
+ (printer.name, obj.filename))
+
+ if hasattr(printer, "name"):
+ if not isinstance(printer.name, basestring):
+ 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:
+ 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 = long(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]" % (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.enumval)
+
+ if self.enabled:
+ return _EnumInstance(self.enumerators, val)
+ else:
+ return None
diff --git a/share/gdb/python/gdb/prompt.py b/share/gdb/python/gdb/prompt.py
new file mode 100644
index 0000000..bb1975b
--- /dev/null
+++ b/share/gdb/python/gdb/prompt.py
@@ -0,0 +1,148 @@
+# Extended prompt utilities.
+# Copyright (C) 2011-2013 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.getcwdu()
+
+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/types.py b/share/gdb/python/gdb/types.py
new file mode 100644
index 0000000..ffc817c
--- /dev/null
+++ b/share/gdb/python/gdb/types.py
@@ -0,0 +1,176 @@
+# Type utilities.
+# Copyright (C) 2010-2013 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_TYPEDEF):
+ if type_.code == gdb.TYPE_CODE_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/syscalls/amd64-linux.xml b/share/gdb/syscalls/amd64-linux.xml
new file mode 100644
index 0000000..bf3da5d
--- /dev/null
+++ b/share/gdb/syscalls/amd64-linux.xml
@@ -0,0 +1,314 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2009-2013 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/linux/arch/x86/include/asm/unistd_64.h
+
+ The file mentioned above belongs to the Linux Kernel. -->
+
+<syscalls_info>
+ <syscall name="read" number="0"/>
+ <syscall name="write" number="1"/>
+ <syscall name="open" number="2"/>
+ <syscall name="close" number="3"/>
+ <syscall name="stat" number="4"/>
+ <syscall name="fstat" number="5"/>
+ <syscall name="lstat" number="6"/>
+ <syscall name="poll" number="7"/>
+ <syscall name="lseek" number="8"/>
+ <syscall name="mmap" number="9"/>
+ <syscall name="mprotect" number="10"/>
+ <syscall name="munmap" number="11"/>
+ <syscall name="brk" number="12"/>
+ <syscall name="rt_sigaction" number="13"/>
+ <syscall name="rt_sigprocmask" number="14"/>
+ <syscall name="rt_sigreturn" number="15"/>
+ <syscall name="ioctl" number="16"/>
+ <syscall name="pread64" number="17"/>
+ <syscall name="pwrite64" number="18"/>
+ <syscall name="readv" number="19"/>
+ <syscall name="writev" number="20"/>
+ <syscall name="access" number="21"/>
+ <syscall name="pipe" number="22"/>
+ <syscall name="select" number="23"/>
+ <syscall name="sched_yield" number="24"/>
+ <syscall name="mremap" number="25"/>
+ <syscall name="msync" number="26"/>
+ <syscall name="mincore" number="27"/>
+ <syscall name="madvise" number="28"/>
+ <syscall name="shmget" number="29"/>
+ <syscall name="shmat" number="30"/>
+ <syscall name="shmctl" number="31"/>
+ <syscall name="dup" number="32"/>
+ <syscall name="dup2" number="33"/>
+ <syscall name="pause" number="34"/>
+ <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"/>
+ <syscall name="socket" number="41"/>
+ <syscall name="connect" number="42"/>
+ <syscall name="accept" number="43"/>
+ <syscall name="sendto" number="44"/>
+ <syscall name="recvfrom" number="45"/>
+ <syscall name="sendmsg" number="46"/>
+ <syscall name="recvmsg" number="47"/>
+ <syscall name="shutdown" number="48"/>
+ <syscall name="bind" number="49"/>
+ <syscall name="listen" number="50"/>
+ <syscall name="getsockname" number="51"/>
+ <syscall name="getpeername" number="52"/>
+ <syscall name="socketpair" number="53"/>
+ <syscall name="setsockopt" number="54"/>
+ <syscall name="getsockopt" number="55"/>
+ <syscall name="clone" number="56"/>
+ <syscall name="fork" number="57"/>
+ <syscall name="vfork" number="58"/>
+ <syscall name="execve" number="59"/>
+ <syscall name="exit" number="60"/>
+ <syscall name="wait4" number="61"/>
+ <syscall name="kill" number="62"/>
+ <syscall name="uname" number="63"/>
+ <syscall name="semget" number="64"/>
+ <syscall name="semop" number="65"/>
+ <syscall name="semctl" number="66"/>
+ <syscall name="shmdt" number="67"/>
+ <syscall name="msgget" number="68"/>
+ <syscall name="msgsnd" number="69"/>
+ <syscall name="msgrcv" number="70"/>
+ <syscall name="msgctl" number="71"/>
+ <syscall name="fcntl" number="72"/>
+ <syscall name="flock" number="73"/>
+ <syscall name="fsync" number="74"/>
+ <syscall name="fdatasync" number="75"/>
+ <syscall name="truncate" number="76"/>
+ <syscall name="ftruncate" number="77"/>
+ <syscall name="getdents" number="78"/>
+ <syscall name="getcwd" number="79"/>
+ <syscall name="chdir" number="80"/>
+ <syscall name="fchdir" number="81"/>
+ <syscall name="rename" number="82"/>
+ <syscall name="mkdir" number="83"/>
+ <syscall name="rmdir" number="84"/>
+ <syscall name="creat" number="85"/>
+ <syscall name="link" number="86"/>
+ <syscall name="unlink" number="87"/>
+ <syscall name="symlink" number="88"/>
+ <syscall name="readlink" number="89"/>
+ <syscall name="chmod" number="90"/>
+ <syscall name="fchmod" number="91"/>
+ <syscall name="chown" number="92"/>
+ <syscall name="fchown" number="93"/>
+ <syscall name="lchown" number="94"/>
+ <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"/>
+ <syscall name="rt_sigtimedwait" number="128"/>
+ <syscall name="rt_sigqueueinfo" number="129"/>
+ <syscall name="rt_sigsuspend" number="130"/>
+ <syscall name="sigaltstack" number="131"/>
+ <syscall name="utime" number="132"/>
+ <syscall name="mknod" number="133"/>
+ <syscall name="uselib" number="134"/>
+ <syscall name="personality" number="135"/>
+ <syscall name="ustat" number="136"/>
+ <syscall name="statfs" number="137"/>
+ <syscall name="fstatfs" number="138"/>
+ <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"/>
+ <syscall name="munlock" number="150"/>
+ <syscall name="mlockall" number="151"/>
+ <syscall name="munlockall" number="152"/>
+ <syscall name="vhangup" number="153"/>
+ <syscall name="modify_ldt" number="154"/>
+ <syscall name="pivot_root" number="155"/>
+ <syscall name="_sysctl" number="156"/>
+ <syscall name="prctl" number="157"/>
+ <syscall name="arch_prctl" number="158"/>
+ <syscall name="adjtimex" number="159"/>
+ <syscall name="setrlimit" number="160"/>
+ <syscall name="chroot" number="161"/>
+ <syscall name="sync" number="162"/>
+ <syscall name="acct" number="163"/>
+ <syscall name="settimeofday" number="164"/>
+ <syscall name="mount" number="165"/>
+ <syscall name="umount2" number="166"/>
+ <syscall name="swapon" number="167"/>
+ <syscall name="swapoff" number="168"/>
+ <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"/>
+ <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"/>
+ <syscall name="setxattr" number="188"/>
+ <syscall name="lsetxattr" number="189"/>
+ <syscall name="fsetxattr" number="190"/>
+ <syscall name="getxattr" number="191"/>
+ <syscall name="lgetxattr" number="192"/>
+ <syscall name="fgetxattr" number="193"/>
+ <syscall name="listxattr" number="194"/>
+ <syscall name="llistxattr" number="195"/>
+ <syscall name="flistxattr" number="196"/>
+ <syscall name="removexattr" number="197"/>
+ <syscall name="lremovexattr" number="198"/>
+ <syscall name="fremovexattr" number="199"/>
+ <syscall name="tkill" number="200"/>
+ <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"/>
+ <syscall name="epoll_ctl_old" number="214"/>
+ <syscall name="epoll_wait_old" number="215"/>
+ <syscall name="remap_file_pages" number="216"/>
+ <syscall name="getdents64" number="217"/>
+ <syscall name="set_tid_address" number="218"/>
+ <syscall name="restart_syscall" number="219"/>
+ <syscall name="semtimedop" number="220"/>
+ <syscall name="fadvise64" number="221"/>
+ <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"/>
+ <syscall name="epoll_wait" number="232"/>
+ <syscall name="epoll_ctl" number="233"/>
+ <syscall name="tgkill" number="234"/>
+ <syscall name="utimes" number="235"/>
+ <syscall name="vserver" number="236"/>
+ <syscall name="mbind" number="237"/>
+ <syscall name="set_mempolicy" number="238"/>
+ <syscall name="get_mempolicy" number="239"/>
+ <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"/>
+ <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"/>
+ <syscall name="inotify_add_watch" number="254"/>
+ <syscall name="inotify_rm_watch" number="255"/>
+ <syscall name="migrate_pages" number="256"/>
+ <syscall name="openat" number="257"/>
+ <syscall name="mkdirat" number="258"/>
+ <syscall name="mknodat" number="259"/>
+ <syscall name="fchownat" number="260"/>
+ <syscall name="futimesat" number="261"/>
+ <syscall name="newfstatat" number="262"/>
+ <syscall name="unlinkat" number="263"/>
+ <syscall name="renameat" number="264"/>
+ <syscall name="linkat" number="265"/>
+ <syscall name="symlinkat" number="266"/>
+ <syscall name="readlinkat" number="267"/>
+ <syscall name="fchmodat" number="268"/>
+ <syscall name="faccessat" number="269"/>
+ <syscall name="pselect6" number="270"/>
+ <syscall name="ppoll" number="271"/>
+ <syscall name="unshare" number="272"/>
+ <syscall name="set_robust_list" number="273"/>
+ <syscall name="get_robust_list" number="274"/>
+ <syscall name="splice" number="275"/>
+ <syscall name="tee" number="276"/>
+ <syscall name="sync_file_range" number="277"/>
+ <syscall name="vmsplice" number="278"/>
+ <syscall name="move_pages" number="279"/>
+ <syscall name="utimensat" number="280"/>
+ <syscall name="epoll_pwait" number="281"/>
+ <syscall name="signalfd" number="282"/>
+ <syscall name="timerfd_create" number="283"/>
+ <syscall name="eventfd" number="284"/>
+ <syscall name="fallocate" number="285"/>
+ <syscall name="timerfd_settime" number="286"/>
+ <syscall name="timerfd_gettime" number="287"/>
+ <syscall name="accept4" number="288"/>
+ <syscall name="signalfd4" number="289"/>
+ <syscall name="eventfd2" number="290"/>
+ <syscall name="epoll_create1" number="291"/>
+ <syscall name="dup3" number="292"/>
+ <syscall name="pipe2" number="293"/>
+ <syscall name="inotify_init1" number="294"/>
+ <syscall name="preadv" number="295"/>
+ <syscall name="pwritev" number="296"/>
+</syscalls_info>
diff --git a/share/gdb/syscalls/gdb-syscalls.dtd b/share/gdb/syscalls/gdb-syscalls.dtd
new file mode 100644
index 0000000..05c1ccf
--- /dev/null
+++ b/share/gdb/syscalls/gdb-syscalls.dtd
@@ -0,0 +1,14 @@
+<!-- Copyright (C) 2009-2013 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>
diff --git a/share/gdb/syscalls/i386-linux.xml b/share/gdb/syscalls/i386-linux.xml
new file mode 100644
index 0000000..80512d8
--- /dev/null
+++ b/share/gdb/syscalls/i386-linux.xml
@@ -0,0 +1,340 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2009-2013 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/linux/arch/x86/include/asm/unistd_32.h
+
+ The file mentioned above belongs to the Linux Kernel. -->
+
+<syscalls_info>
+ <syscall name="restart_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="waitpid" number="7"/>
+ <syscall name="creat" number="8"/>
+ <syscall name="link" number="9"/>
+ <syscall name="unlink" number="10"/>
+ <syscall name="execve" number="11"/>
+ <syscall name="chdir" number="12"/>
+ <syscall name="time" number="13"/>
+ <syscall name="mknod" number="14"/>
+ <syscall name="chmod" number="15"/>
+ <syscall name="lchown" number="16"/>
+ <syscall name="break" number="17"/>
+ <syscall name="oldstat" number="18"/>
+ <syscall name="lseek" number="19"/>
+ <syscall name="getpid" number="20"/>
+ <syscall name="mount" number="21"/>
+ <syscall name="umount" number="22"/>
+ <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"/>
+ <syscall name="pause" number="29"/>
+ <syscall name="utime" number="30"/>
+ <syscall name="stty" number="31"/>
+ <syscall name="gtty" number="32"/>
+ <syscall name="access" number="33"/>
+ <syscall name="nice" number="34"/>
+ <syscall name="ftime" number="35"/>
+ <syscall name="sync" number="36"/>
+ <syscall name="kill" number="37"/>
+ <syscall name="rename" number="38"/>
+ <syscall name="mkdir" number="39"/>
+ <syscall name="rmdir" number="40"/>
+ <syscall name="dup" number="41"/>
+ <syscall name="pipe" number="42"/>
+ <syscall name="times" number="43"/>
+ <syscall name="prof" number="44"/>
+ <syscall name="brk" number="45"/>
+ <syscall name="setgid" number="46"/>
+ <syscall name="getgid" number="47"/>
+ <syscall name="signal" number="48"/>
+ <syscall name="geteuid" number="49"/>
+ <syscall name="getegid" number="50"/>
+ <syscall name="acct" number="51"/>
+ <syscall name="umount2" number="52"/>
+ <syscall name="lock" number="53"/>
+ <syscall name="ioctl" number="54"/>
+ <syscall name="fcntl" number="55"/>
+ <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"/>
+ <syscall name="ustat" number="62"/>
+ <syscall name="dup2" number="63"/>
+ <syscall name="getppid" number="64"/>
+ <syscall name="getpgrp" number="65"/>
+ <syscall name="setsid" number="66"/>
+ <syscall name="sigaction" number="67"/>
+ <syscall name="sgetmask" number="68"/>
+ <syscall name="ssetmask" number="69"/>
+ <syscall name="setreuid" number="70"/>
+ <syscall name="setregid" number="71"/>
+ <syscall name="sigsuspend" number="72"/>
+ <syscall name="sigpending" number="73"/>
+ <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"/>
+ <syscall name="symlink" number="83"/>
+ <syscall name="oldlstat" number="84"/>
+ <syscall name="readlink" number="85"/>
+ <syscall name="uselib" number="86"/>
+ <syscall name="swapon" number="87"/>
+ <syscall name="reboot" number="88"/>
+ <syscall name="readdir" number="89"/>
+ <syscall name="mmap" number="90"/>
+ <syscall name="munmap" number="91"/>
+ <syscall name="truncate" number="92"/>
+ <syscall name="ftruncate" number="93"/>
+ <syscall name="fchmod" number="94"/>
+ <syscall name="fchown" number="95"/>
+ <syscall name="getpriority" number="96"/>
+ <syscall name="setpriority" number="97"/>
+ <syscall name="profil" number="98"/>
+ <syscall name="statfs" number="99"/>
+ <syscall name="fstatfs" number="100"/>
+ <syscall name="ioperm" number="101"/>
+ <syscall name="socketcall" number="102"/>
+ <syscall name="syslog" number="103"/>
+ <syscall name="setitimer" number="104"/>
+ <syscall name="getitimer" number="105"/>
+ <syscall name="stat" number="106"/>
+ <syscall name="lstat" number="107"/>
+ <syscall name="fstat" number="108"/>
+ <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"/>
+ <syscall name="swapoff" number="115"/>
+ <syscall name="sysinfo" number="116"/>
+ <syscall name="ipc" number="117"/>
+ <syscall name="fsync" number="118"/>
+ <syscall name="sigreturn" number="119"/>
+ <syscall name="clone" number="120"/>
+ <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"/>
+ <syscall name="sigprocmask" number="126"/>
+ <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"/>
+ <syscall name="getpgid" number="132"/>
+ <syscall name="fchdir" number="133"/>
+ <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"/>
+ <syscall name="getdents" number="141"/>
+ <syscall name="_newselect" number="142"/>
+ <syscall name="flock" number="143"/>
+ <syscall name="msync" number="144"/>
+ <syscall name="readv" number="145"/>
+ <syscall name="writev" number="146"/>
+ <syscall name="getsid" number="147"/>
+ <syscall name="fdatasync" number="148"/>
+ <syscall name="_sysctl" number="149"/>
+ <syscall name="mlock" number="150"/>
+ <syscall name="munlock" number="151"/>
+ <syscall name="mlockall" number="152"/>
+ <syscall name="munlockall" number="153"/>
+ <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"/>
+ <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"/>
+ <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"/>
+ <syscall name="rt_sigaction" number="174"/>
+ <syscall name="rt_sigprocmask" number="175"/>
+ <syscall name="rt_sigpending" number="176"/>
+ <syscall name="rt_sigtimedwait" number="177"/>
+ <syscall name="rt_sigqueueinfo" number="178"/>
+ <syscall name="rt_sigsuspend" number="179"/>
+ <syscall name="pread64" number="180"/>
+ <syscall name="pwrite64" number="181"/>
+ <syscall name="chown" number="182"/>
+ <syscall name="getcwd" number="183"/>
+ <syscall name="capget" number="184"/>
+ <syscall name="capset" number="185"/>
+ <syscall name="sigaltstack" number="186"/>
+ <syscall name="sendfile" number="187"/>
+ <syscall name="getpmsg" number="188"/>
+ <syscall name="putpmsg" number="189"/>
+ <syscall name="vfork" number="190"/>
+ <syscall name="ugetrlimit" number="191"/>
+ <syscall name="mmap2" number="192"/>
+ <syscall name="truncate64" number="193"/>
+ <syscall name="ftruncate64" number="194"/>
+ <syscall name="stat64" number="195"/>
+ <syscall name="lstat64" number="196"/>
+ <syscall name="fstat64" number="197"/>
+ <syscall name="lchown32" number="198"/>
+ <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"/>
+ <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"/>
+ <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"/>
+ <syscall name="mincore" number="218"/>
+ <syscall name="madvise" number="219"/>
+ <syscall name="madvise1" number="220"/>
+ <syscall name="getdents64" number="221"/>
+ <syscall name="fcntl64" number="222"/>
+ <syscall name="gettid" number="224"/>
+ <syscall name="readahead" number="225"/>
+ <syscall name="setxattr" number="226"/>
+ <syscall name="lsetxattr" number="227"/>
+ <syscall name="fsetxattr" number="228"/>
+ <syscall name="getxattr" number="229"/>
+ <syscall name="lgetxattr" number="230"/>
+ <syscall name="fgetxattr" number="231"/>
+ <syscall name="listxattr" number="232"/>
+ <syscall name="llistxattr" number="233"/>
+ <syscall name="flistxattr" number="234"/>
+ <syscall name="removexattr" number="235"/>
+ <syscall name="lremovexattr" number="236"/>
+ <syscall name="fremovexattr" number="237"/>
+ <syscall name="tkill" number="238"/>
+ <syscall name="sendfile64" number="239"/>
+ <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"/>
+ <syscall name="exit_group" number="252"/>
+ <syscall name="lookup_dcookie" number="253"/>
+ <syscall name="epoll_create" number="254"/>
+ <syscall name="epoll_ctl" number="255"/>
+ <syscall name="epoll_wait" number="256"/>
+ <syscall name="remap_file_pages" number="257"/>
+ <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"/>
+ <syscall name="fstatfs64" number="269"/>
+ <syscall name="tgkill" number="270"/>
+ <syscall name="utimes" number="271"/>
+ <syscall name="fadvise64_64" number="272"/>
+ <syscall name="vserver" number="273"/>
+ <syscall name="mbind" number="274"/>
+ <syscall name="get_mempolicy" number="275"/>
+ <syscall name="set_mempolicy" number="276"/>
+ <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"/>
+ <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"/>
+ <syscall name="inotify_add_watch" number="292"/>
+ <syscall name="inotify_rm_watch" number="293"/>
+ <syscall name="migrate_pages" number="294"/>
+ <syscall name="openat" number="295"/>
+ <syscall name="mkdirat" number="296"/>
+ <syscall name="mknodat" number="297"/>
+ <syscall name="fchownat" number="298"/>
+ <syscall name="futimesat" number="299"/>
+ <syscall name="fstatat64" number="300"/>
+ <syscall name="unlinkat" number="301"/>
+ <syscall name="renameat" number="302"/>
+ <syscall name="linkat" number="303"/>
+ <syscall name="symlinkat" number="304"/>
+ <syscall name="readlinkat" number="305"/>
+ <syscall name="fchmodat" number="306"/>
+ <syscall name="faccessat" number="307"/>
+ <syscall name="pselect6" number="308"/>
+ <syscall name="ppoll" number="309"/>
+ <syscall name="unshare" number="310"/>
+ <syscall name="set_robust_list" number="311"/>
+ <syscall name="get_robust_list" number="312"/>
+ <syscall name="splice" number="313"/>
+ <syscall name="sync_file_range" number="314"/>
+ <syscall name="tee" number="315"/>
+ <syscall name="vmsplice" number="316"/>
+ <syscall name="move_pages" number="317"/>
+ <syscall name="getcpu" number="318"/>
+ <syscall name="epoll_pwait" number="319"/>
+ <syscall name="utimensat" number="320"/>
+ <syscall name="signalfd" number="321"/>
+ <syscall name="timerfd_create" number="322"/>
+ <syscall name="eventfd" number="323"/>
+ <syscall name="fallocate" number="324"/>
+ <syscall name="timerfd_settime" number="325"/>
+</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..b4e2181
--- /dev/null
+++ b/share/gdb/syscalls/mips-n32-linux.xml
@@ -0,0 +1,319 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2011-2013 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/linux/arch/mips/include/asm/unistd.h
+
+ The file mentioned above belongs to the Linux Kernel. -->
+
+<syscalls_info>
+ <syscall name="read" number="6000"/>
+ <syscall name="write" number="6001"/>
+ <syscall name="open" number="6002"/>
+ <syscall name="close" number="6003"/>
+ <syscall name="stat" number="6004"/>
+ <syscall name="fstat" number="6005"/>
+ <syscall name="lstat" number="6006"/>
+ <syscall name="poll" number="6007"/>
+ <syscall name="lseek" number="6008"/>
+ <syscall name="mmap" number="6009"/>
+ <syscall name="mprotect" number="6010"/>
+ <syscall name="munmap" number="6011"/>
+ <syscall name="brk" number="6012"/>
+ <syscall name="rt_sigaction" number="6013"/>
+ <syscall name="rt_sigprocmask" number="6014"/>
+ <syscall name="ioctl" number="6015"/>
+ <syscall name="pread64" number="6016"/>
+ <syscall name="pwrite64" number="6017"/>
+ <syscall name="readv" number="6018"/>
+ <syscall name="writev" number="6019"/>
+ <syscall name="access" number="6020"/>
+ <syscall name="pipe" number="6021"/>
+ <syscall name="_newselect" number="6022"/>
+ <syscall name="sched_yield" number="6023"/>
+ <syscall name="mremap" number="6024"/>
+ <syscall name="msync" number="6025"/>
+ <syscall name="mincore" number="6026"/>
+ <syscall name="madvise" number="6027"/>
+ <syscall name="shmget" number="6028"/>
+ <syscall name="shmat" number="6029"/>
+ <syscall name="shmctl" number="6030"/>
+ <syscall name="dup" number="6031"/>
+ <syscall name="dup2" number="6032"/>
+ <syscall name="pause" number="6033"/>
+ <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"/>
+ <syscall name="socket" number="6040"/>
+ <syscall name="connect" number="6041"/>
+ <syscall name="accept" number="6042"/>
+ <syscall name="sendto" number="6043"/>
+ <syscall name="recvfrom" number="6044"/>
+ <syscall name="sendmsg" number="6045"/>
+ <syscall name="recvmsg" number="6046"/>
+ <syscall name="shutdown" number="6047"/>
+ <syscall name="bind" number="6048"/>
+ <syscall name="listen" number="6049"/>
+ <syscall name="getsockname" number="6050"/>
+ <syscall name="getpeername" number="6051"/>
+ <syscall name="socketpair" number="6052"/>
+ <syscall name="setsockopt" number="6053"/>
+ <syscall name="getsockopt" number="6054"/>
+ <syscall name="clone" number="6055"/>
+ <syscall name="fork" number="6056"/>
+ <syscall name="execve" number="6057"/>
+ <syscall name="exit" number="6058"/>
+ <syscall name="wait4" number="6059"/>
+ <syscall name="kill" number="6060"/>
+ <syscall name="uname" number="6061"/>
+ <syscall name="semget" number="6062"/>
+ <syscall name="semop" number="6063"/>
+ <syscall name="semctl" number="6064"/>
+ <syscall name="shmdt" number="6065"/>
+ <syscall name="msgget" number="6066"/>
+ <syscall name="msgsnd" number="6067"/>
+ <syscall name="msgrcv" number="6068"/>
+ <syscall name="msgctl" number="6069"/>
+ <syscall name="fcntl" number="6070"/>
+ <syscall name="flock" number="6071"/>
+ <syscall name="fsync" number="6072"/>
+ <syscall name="fdatasync" number="6073"/>
+ <syscall name="truncate" number="6074"/>
+ <syscall name="ftruncate" number="6075"/>
+ <syscall name="getdents" number="6076"/>
+ <syscall name="getcwd" number="6077"/>
+ <syscall name="chdir" number="6078"/>
+ <syscall name="fchdir" number="6079"/>
+ <syscall name="rename" number="6080"/>
+ <syscall name="mkdir" number="6081"/>
+ <syscall name="rmdir" number="6082"/>
+ <syscall name="creat" number="6083"/>
+ <syscall name="link" number="6084"/>
+ <syscall name="unlink" number="6085"/>
+ <syscall name="symlink" number="6086"/>
+ <syscall name="readlink" number="6087"/>
+ <syscall name="chmod" number="6088"/>
+ <syscall name="fchmod" number="6089"/>
+ <syscall name="chown" number="6090"/>
+ <syscall name="fchown" number="6091"/>
+ <syscall name="lchown" number="6092"/>
+ <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"/>
+ <syscall name="rt_sigtimedwait" number="6126"/>
+ <syscall name="rt_sigqueueinfo" number="6127"/>
+ <syscall name="rt_sigsuspend" number="6128"/>
+ <syscall name="sigaltstack" number="6129"/>
+ <syscall name="utime" number="6130"/>
+ <syscall name="mknod" number="6131"/>
+ <syscall name="personality" number="6132"/>
+ <syscall name="ustat" number="6133"/>
+ <syscall name="statfs" number="6134"/>
+ <syscall name="fstatfs" number="6135"/>
+ <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"/>
+ <syscall name="munlock" number="6147"/>
+ <syscall name="mlockall" number="6148"/>
+ <syscall name="munlockall" number="6149"/>
+ <syscall name="vhangup" number="6150"/>
+ <syscall name="pivot_root" number="6151"/>
+ <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"/>
+ <syscall name="sync" number="6157"/>
+ <syscall name="acct" number="6158"/>
+ <syscall name="settimeofday" number="6159"/>
+ <syscall name="mount" number="6160"/>
+ <syscall name="umount2" number="6161"/>
+ <syscall name="swapon" number="6162"/>
+ <syscall name="swapoff" number="6163"/>
+ <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"/>
+ <syscall name="nfsservctl" number="6173"/>
+ <syscall name="getpmsg" number="6174"/>
+ <syscall name="putpmsg" number="6175"/>
+ <syscall name="afs_syscall" number="6176"/>
+ <syscall name="reserved177" number="6177"/>
+ <syscall name="gettid" number="6178"/>
+ <syscall name="readahead" number="6179"/>
+ <syscall name="setxattr" number="6180"/>
+ <syscall name="lsetxattr" number="6181"/>
+ <syscall name="fsetxattr" number="6182"/>
+ <syscall name="getxattr" number="6183"/>
+ <syscall name="lgetxattr" number="6184"/>
+ <syscall name="fgetxattr" number="6185"/>
+ <syscall name="listxattr" number="6186"/>
+ <syscall name="llistxattr" number="6187"/>
+ <syscall name="flistxattr" number="6188"/>
+ <syscall name="removexattr" number="6189"/>
+ <syscall name="lremovexattr" number="6190"/>
+ <syscall name="fremovexattr" number="6191"/>
+ <syscall name="tkill" number="6192"/>
+ <syscall name="reserved193" number="6193"/>
+ <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"/>
+ <syscall name="lookup_dcookie" number="6206"/>
+ <syscall name="epoll_create" number="6207"/>
+ <syscall name="epoll_ctl" number="6208"/>
+ <syscall name="epoll_wait" number="6209"/>
+ <syscall name="remap_file_pages" number="6210"/>
+ <syscall name="rt_sigreturn" number="6211"/>
+ <syscall name="fcntl64" number="6212"/>
+ <syscall name="set_tid_address" number="6213"/>
+ <syscall name="restart_syscall" number="6214"/>
+ <syscall name="semtimedop" number="6215"/>
+ <syscall name="fadvise64" number="6216"/>
+ <syscall name="statfs64" number="6217"/>
+ <syscall name="fstatfs64" number="6218"/>
+ <syscall name="sendfile64" number="6219"/>
+ <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"/>
+ <syscall name="utimes" number="6230"/>
+ <syscall name="mbind" number="6231"/>
+ <syscall name="get_mempolicy" number="6232"/>
+ <syscall name="set_mempolicy" number="6233"/>
+ <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"/>
+ <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"/>
+ <syscall name="inotify_add_watch" number="6248"/>
+ <syscall name="inotify_rm_watch" number="6249"/>
+ <syscall name="migrate_pages" number="6250"/>
+ <syscall name="openat" number="6251"/>
+ <syscall name="mkdirat" number="6252"/>
+ <syscall name="mknodat" number="6253"/>
+ <syscall name="fchownat" number="6254"/>
+ <syscall name="futimesat" number="6255"/>
+ <syscall name="newfstatat" number="6256"/>
+ <syscall name="unlinkat" number="6257"/>
+ <syscall name="renameat" number="6258"/>
+ <syscall name="linkat" number="6259"/>
+ <syscall name="symlinkat" number="6260"/>
+ <syscall name="readlinkat" number="6261"/>
+ <syscall name="fchmodat" number="6262"/>
+ <syscall name="faccessat" number="6263"/>
+ <syscall name="pselect6" number="6264"/>
+ <syscall name="ppoll" number="6265"/>
+ <syscall name="unshare" number="6266"/>
+ <syscall name="splice" number="6267"/>
+ <syscall name="sync_file_range" number="6268"/>
+ <syscall name="tee" number="6269"/>
+ <syscall name="vmsplice" number="6270"/>
+ <syscall name="move_pages" number="6271"/>
+ <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"/>
+ <syscall name="ioprio_set" number="6277"/>
+ <syscall name="ioprio_get" number="6278"/>
+ <syscall name="utimensat" number="6279"/>
+ <syscall name="signalfd" number="6280"/>
+ <syscall name="timerfd" number="6281"/>
+ <syscall name="eventfd" number="6282"/>
+ <syscall name="fallocate" number="6283"/>
+ <syscall name="timerfd_create" number="6284"/>
+ <syscall name="timerfd_gettime" number="6285"/>
+ <syscall name="timerfd_settime" number="6286"/>
+ <syscall name="signalfd4" number="6287"/>
+ <syscall name="eventfd2" number="6288"/>
+ <syscall name="epoll_create1" number="6289"/>
+ <syscall name="dup3" number="6290"/>
+ <syscall name="pipe2" number="6291"/>
+ <syscall name="inotify_init1" number="6292"/>
+ <syscall name="preadv" number="6293"/>
+ <syscall name="pwritev" number="6294"/>
+ <syscall name="rt_tgsigqueueinfo" number="6295"/>
+ <syscall name="perf_event_open" number="6296"/>
+ <syscall name="accept4" number="6297"/>
+ <syscall name="recvmmsg" number="6298"/>
+ <syscall name="getdents64" number="6299"/>
+ <syscall name="fanotify_init" number="6300"/>
+ <syscall name="fanotify_mark" number="6301"/>
+ <syscall name="prlimit64" number="6302"/>
+</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..896e0c0
--- /dev/null
+++ b/share/gdb/syscalls/mips-n64-linux.xml
@@ -0,0 +1,312 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2011-2013 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/linux/arch/mips/include/asm/unistd.h
+
+ The file mentioned above belongs to the Linux Kernel. -->
+
+<syscalls_info>
+ <syscall name="read" number="5000"/>
+ <syscall name="write" number="5001"/>
+ <syscall name="open" number="5002"/>
+ <syscall name="close" number="5003"/>
+ <syscall name="stat" number="5004"/>
+ <syscall name="fstat" number="5005"/>
+ <syscall name="lstat" number="5006"/>
+ <syscall name="poll" number="5007"/>
+ <syscall name="lseek" number="5008"/>
+ <syscall name="mmap" number="5009"/>
+ <syscall name="mprotect" number="5010"/>
+ <syscall name="munmap" number="5011"/>
+ <syscall name="brk" number="5012"/>
+ <syscall name="rt_sigaction" number="5013"/>
+ <syscall name="rt_sigprocmask" number="5014"/>
+ <syscall name="ioctl" number="5015"/>
+ <syscall name="pread64" number="5016"/>
+ <syscall name="pwrite64" number="5017"/>
+ <syscall name="readv" number="5018"/>
+ <syscall name="writev" number="5019"/>
+ <syscall name="access" number="5020"/>
+ <syscall name="pipe" number="5021"/>
+ <syscall name="_newselect" number="5022"/>
+ <syscall name="sched_yield" number="5023"/>
+ <syscall name="mremap" number="5024"/>
+ <syscall name="msync" number="5025"/>
+ <syscall name="mincore" number="5026"/>
+ <syscall name="madvise" number="5027"/>
+ <syscall name="shmget" number="5028"/>
+ <syscall name="shmat" number="5029"/>
+ <syscall name="shmctl" number="5030"/>
+ <syscall name="dup" number="5031"/>
+ <syscall name="dup2" number="5032"/>
+ <syscall name="pause" number="5033"/>
+ <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"/>
+ <syscall name="socket" number="5040"/>
+ <syscall name="connect" number="5041"/>
+ <syscall name="accept" number="5042"/>
+ <syscall name="sendto" number="5043"/>
+ <syscall name="recvfrom" number="5044"/>
+ <syscall name="sendmsg" number="5045"/>
+ <syscall name="recvmsg" number="5046"/>
+ <syscall name="shutdown" number="5047"/>
+ <syscall name="bind" number="5048"/>
+ <syscall name="listen" number="5049"/>
+ <syscall name="getsockname" number="5050"/>
+ <syscall name="getpeername" number="5051"/>
+ <syscall name="socketpair" number="5052"/>
+ <syscall name="setsockopt" number="5053"/>
+ <syscall name="getsockopt" number="5054"/>
+ <syscall name="clone" number="5055"/>
+ <syscall name="fork" number="5056"/>
+ <syscall name="execve" number="5057"/>
+ <syscall name="exit" number="5058"/>
+ <syscall name="wait4" number="5059"/>
+ <syscall name="kill" number="5060"/>
+ <syscall name="uname" number="5061"/>
+ <syscall name="semget" number="5062"/>
+ <syscall name="semop" number="5063"/>
+ <syscall name="semctl" number="5064"/>
+ <syscall name="shmdt" number="5065"/>
+ <syscall name="msgget" number="5066"/>
+ <syscall name="msgsnd" number="5067"/>
+ <syscall name="msgrcv" number="5068"/>
+ <syscall name="msgctl" number="5069"/>
+ <syscall name="fcntl" number="5070"/>
+ <syscall name="flock" number="5071"/>
+ <syscall name="fsync" number="5072"/>
+ <syscall name="fdatasync" number="5073"/>
+ <syscall name="truncate" number="5074"/>
+ <syscall name="ftruncate" number="5075"/>
+ <syscall name="getdents" number="5076"/>
+ <syscall name="getcwd" number="5077"/>
+ <syscall name="chdir" number="5078"/>
+ <syscall name="fchdir" number="5079"/>
+ <syscall name="rename" number="5080"/>
+ <syscall name="mkdir" number="5081"/>
+ <syscall name="rmdir" number="5082"/>
+ <syscall name="creat" number="5083"/>
+ <syscall name="link" number="5084"/>
+ <syscall name="unlink" number="5085"/>
+ <syscall name="symlink" number="5086"/>
+ <syscall name="readlink" number="5087"/>
+ <syscall name="chmod" number="5088"/>
+ <syscall name="fchmod" number="5089"/>
+ <syscall name="chown" number="5090"/>
+ <syscall name="fchown" number="5091"/>
+ <syscall name="lchown" number="5092"/>
+ <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"/>
+ <syscall name="rt_sigtimedwait" number="5126"/>
+ <syscall name="rt_sigqueueinfo" number="5127"/>
+ <syscall name="rt_sigsuspend" number="5128"/>
+ <syscall name="sigaltstack" number="5129"/>
+ <syscall name="utime" number="5130"/>
+ <syscall name="mknod" number="5131"/>
+ <syscall name="personality" number="5132"/>
+ <syscall name="ustat" number="5133"/>
+ <syscall name="statfs" number="5134"/>
+ <syscall name="fstatfs" number="5135"/>
+ <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"/>
+ <syscall name="munlock" number="5147"/>
+ <syscall name="mlockall" number="5148"/>
+ <syscall name="munlockall" number="5149"/>
+ <syscall name="vhangup" number="5150"/>
+ <syscall name="pivot_root" number="5151"/>
+ <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"/>
+ <syscall name="sync" number="5157"/>
+ <syscall name="acct" number="5158"/>
+ <syscall name="settimeofday" number="5159"/>
+ <syscall name="mount" number="5160"/>
+ <syscall name="umount2" number="5161"/>
+ <syscall name="swapon" number="5162"/>
+ <syscall name="swapoff" number="5163"/>
+ <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"/>
+ <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"/>
+ <syscall name="setxattr" number="5180"/>
+ <syscall name="lsetxattr" number="5181"/>
+ <syscall name="fsetxattr" number="5182"/>
+ <syscall name="getxattr" number="5183"/>
+ <syscall name="lgetxattr" number="5184"/>
+ <syscall name="fgetxattr" number="5185"/>
+ <syscall name="listxattr" number="5186"/>
+ <syscall name="llistxattr" number="5187"/>
+ <syscall name="flistxattr" number="5188"/>
+ <syscall name="removexattr" number="5189"/>
+ <syscall name="lremovexattr" number="5190"/>
+ <syscall name="fremovexattr" number="5191"/>
+ <syscall name="tkill" number="5192"/>
+ <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"/>
+ <syscall name="lookup_dcookie" number="5206"/>
+ <syscall name="epoll_create" number="5207"/>
+ <syscall name="epoll_ctl" number="5208"/>
+ <syscall name="epoll_wait" number="5209"/>
+ <syscall name="remap_file_pages" number="5210"/>
+ <syscall name="rt_sigreturn" number="5211"/>
+ <syscall name="set_tid_address" number="5212"/>
+ <syscall name="restart_syscall" number="5213"/>
+ <syscall name="semtimedop" number="5214"/>
+ <syscall name="fadvise64" number="5215"/>
+ <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"/>
+ <syscall name="utimes" number="5226"/>
+ <syscall name="mbind" number="5227"/>
+ <syscall name="get_mempolicy" number="5228"/>
+ <syscall name="set_mempolicy" number="5229"/>
+ <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"/>
+ <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"/>
+ <syscall name="inotify_add_watch" number="5244"/>
+ <syscall name="inotify_rm_watch" number="5245"/>
+ <syscall name="migrate_pages" number="5246"/>
+ <syscall name="openat" number="5247"/>
+ <syscall name="mkdirat" number="5248"/>
+ <syscall name="mknodat" number="5249"/>
+ <syscall name="fchownat" number="5250"/>
+ <syscall name="futimesat" number="5251"/>
+ <syscall name="newfstatat" number="5252"/>
+ <syscall name="unlinkat" number="5253"/>
+ <syscall name="renameat" number="5254"/>
+ <syscall name="linkat" number="5255"/>
+ <syscall name="symlinkat" number="5256"/>
+ <syscall name="readlinkat" number="5257"/>
+ <syscall name="fchmodat" number="5258"/>
+ <syscall name="faccessat" number="5259"/>
+ <syscall name="pselect6" number="5260"/>
+ <syscall name="ppoll" number="5261"/>
+ <syscall name="unshare" number="5262"/>
+ <syscall name="splice" number="5263"/>
+ <syscall name="sync_file_range" number="5264"/>
+ <syscall name="tee" number="5265"/>
+ <syscall name="vmsplice" number="5266"/>
+ <syscall name="move_pages" number="5267"/>
+ <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"/>
+ <syscall name="ioprio_set" number="5273"/>
+ <syscall name="ioprio_get" number="5274"/>
+ <syscall name="utimensat" number="5275"/>
+ <syscall name="signalfd" number="5276"/>
+ <syscall name="timerfd" number="5277"/>
+ <syscall name="eventfd" number="5278"/>
+ <syscall name="fallocate" number="5279"/>
+ <syscall name="timerfd_create" number="5280"/>
+ <syscall name="timerfd_gettime" number="5281"/>
+ <syscall name="timerfd_settime" number="5282"/>
+ <syscall name="signalfd4" number="5283"/>
+ <syscall name="eventfd2" number="5284"/>
+ <syscall name="epoll_create1" number="5285"/>
+ <syscall name="dup3" number="5286"/>
+ <syscall name="pipe2" number="5287"/>
+ <syscall name="inotify_init1" number="5288"/>
+ <syscall name="preadv" number="5289"/>
+ <syscall name="pwritev" number="5290"/>
+ <syscall name="rt_tgsigqueueinfo" number="5291"/>
+ <syscall name="perf_event_open" number="5292"/>
+ <syscall name="accept4" number="5293"/>
+ <syscall name="recvmmsg" number="5294"/>
+ <syscall name="fanotify_init" number="5295"/>
+ <syscall name="fanotify_mark" number="5296"/>
+ <syscall name="prlimit64" number="5297"/>
+</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..2b11247
--- /dev/null
+++ b/share/gdb/syscalls/mips-o32-linux.xml
@@ -0,0 +1,347 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2011-2013 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/linux/arch/mips/include/asm/unistd.h
+
+ The file mentioned above belongs to the Linux Kernel. -->
+
+<syscalls_info>
+ <syscall name="syscall" number="4000"/>
+ <syscall name="exit" number="4001"/>
+ <syscall name="fork" number="4002"/>
+ <syscall name="read" number="4003"/>
+ <syscall name="write" number="4004"/>
+ <syscall name="open" number="4005"/>
+ <syscall name="close" number="4006"/>
+ <syscall name="waitpid" number="4007"/>
+ <syscall name="creat" number="4008"/>
+ <syscall name="link" number="4009"/>
+ <syscall name="unlink" number="4010"/>
+ <syscall name="execve" number="4011"/>
+ <syscall name="chdir" number="4012"/>
+ <syscall name="time" number="4013"/>
+ <syscall name="mknod" number="4014"/>
+ <syscall name="chmod" number="4015"/>
+ <syscall name="lchown" number="4016"/>
+ <syscall name="break" number="4017"/>
+ <syscall name="lseek" number="4019"/>
+ <syscall name="getpid" number="4020"/>
+ <syscall name="mount" number="4021"/>
+ <syscall name="umount" number="4022"/>
+ <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"/>
+ <syscall name="utime" number="4030"/>
+ <syscall name="stty" number="4031"/>
+ <syscall name="gtty" number="4032"/>
+ <syscall name="access" number="4033"/>
+ <syscall name="nice" number="4034"/>
+ <syscall name="ftime" number="4035"/>
+ <syscall name="sync" number="4036"/>
+ <syscall name="kill" number="4037"/>
+ <syscall name="rename" number="4038"/>
+ <syscall name="mkdir" number="4039"/>
+ <syscall name="rmdir" number="4040"/>
+ <syscall name="dup" number="4041"/>
+ <syscall name="pipe" number="4042"/>
+ <syscall name="times" number="4043"/>
+ <syscall name="prof" number="4044"/>
+ <syscall name="brk" number="4045"/>
+ <syscall name="setgid" number="4046"/>
+ <syscall name="getgid" number="4047"/>
+ <syscall name="signal" number="4048"/>
+ <syscall name="geteuid" number="4049"/>
+ <syscall name="getegid" number="4050"/>
+ <syscall name="acct" number="4051"/>
+ <syscall name="umount2" number="4052"/>
+ <syscall name="lock" number="4053"/>
+ <syscall name="ioctl" number="4054"/>
+ <syscall name="fcntl" number="4055"/>
+ <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"/>
+ <syscall name="ustat" number="4062"/>
+ <syscall name="dup2" number="4063"/>
+ <syscall name="getppid" number="4064"/>
+ <syscall name="getpgrp" number="4065"/>
+ <syscall name="setsid" number="4066"/>
+ <syscall name="sigaction" number="4067"/>
+ <syscall name="sgetmask" number="4068"/>
+ <syscall name="ssetmask" number="4069"/>
+ <syscall name="setreuid" number="4070"/>
+ <syscall name="setregid" number="4071"/>
+ <syscall name="sigsuspend" number="4072"/>
+ <syscall name="sigpending" number="4073"/>
+ <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"/>
+ <syscall name="readlink" number="4085"/>
+ <syscall name="uselib" number="4086"/>
+ <syscall name="swapon" number="4087"/>
+ <syscall name="reboot" number="4088"/>
+ <syscall name="readdir" number="4089"/>
+ <syscall name="mmap" number="4090"/>
+ <syscall name="munmap" number="4091"/>
+ <syscall name="truncate" number="4092"/>
+ <syscall name="ftruncate" number="4093"/>
+ <syscall name="fchmod" number="4094"/>
+ <syscall name="fchown" number="4095"/>
+ <syscall name="getpriority" number="4096"/>
+ <syscall name="setpriority" number="4097"/>
+ <syscall name="profil" number="4098"/>
+ <syscall name="statfs" number="4099"/>
+ <syscall name="fstatfs" number="4100"/>
+ <syscall name="ioperm" number="4101"/>
+ <syscall name="socketcall" number="4102"/>
+ <syscall name="syslog" number="4103"/>
+ <syscall name="setitimer" number="4104"/>
+ <syscall name="getitimer" number="4105"/>
+ <syscall name="stat" number="4106"/>
+ <syscall name="lstat" number="4107"/>
+ <syscall name="fstat" number="4108"/>
+ <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"/>
+ <syscall name="swapoff" number="4115"/>
+ <syscall name="sysinfo" number="4116"/>
+ <syscall name="ipc" number="4117"/>
+ <syscall name="fsync" number="4118"/>
+ <syscall name="sigreturn" number="4119"/>
+ <syscall name="clone" number="4120"/>
+ <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"/>
+ <syscall name="sigprocmask" number="4126"/>
+ <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"/>
+ <syscall name="getpgid" number="4132"/>
+ <syscall name="fchdir" number="4133"/>
+ <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"/>
+ <syscall name="getdents" number="4141"/>
+ <syscall name="_newselect" number="4142"/>
+ <syscall name="flock" number="4143"/>
+ <syscall name="msync" number="4144"/>
+ <syscall name="readv" number="4145"/>
+ <syscall name="writev" number="4146"/>
+ <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"/>
+ <syscall name="_sysctl" number="4153"/>
+ <syscall name="mlock" number="4154"/>
+ <syscall name="munlock" number="4155"/>
+ <syscall name="mlockall" number="4156"/>
+ <syscall name="munlockall" number="4157"/>
+ <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"/>
+ <syscall name="accept" number="4168"/>
+ <syscall name="bind" number="4169"/>
+ <syscall name="connect" number="4170"/>
+ <syscall name="getpeername" number="4171"/>
+ <syscall name="getsockname" number="4172"/>
+ <syscall name="getsockopt" number="4173"/>
+ <syscall name="listen" number="4174"/>
+ <syscall name="recv" number="4175"/>
+ <syscall name="recvfrom" number="4176"/>
+ <syscall name="recvmsg" number="4177"/>
+ <syscall name="send" number="4178"/>
+ <syscall name="sendmsg" number="4179"/>
+ <syscall name="sendto" number="4180"/>
+ <syscall name="setsockopt" number="4181"/>
+ <syscall name="shutdown" number="4182"/>
+ <syscall name="socket" number="4183"/>
+ <syscall name="socketpair" number="4184"/>
+ <syscall name="setresuid" number="4185"/>
+ <syscall name="getresuid" number="4186"/>
+ <syscall name="query_module" number="4187"/>
+ <syscall name="poll" number="4188"/>
+ <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"/>
+ <syscall name="rt_sigaction" number="4194"/>
+ <syscall name="rt_sigprocmask" number="4195"/>
+ <syscall name="rt_sigpending" number="4196"/>
+ <syscall name="rt_sigtimedwait" number="4197"/>
+ <syscall name="rt_sigqueueinfo" number="4198"/>
+ <syscall name="rt_sigsuspend" number="4199"/>
+ <syscall name="pread64" number="4200"/>
+ <syscall name="pwrite64" number="4201"/>
+ <syscall name="chown" number="4202"/>
+ <syscall name="getcwd" number="4203"/>
+ <syscall name="capget" number="4204"/>
+ <syscall name="capset" number="4205"/>
+ <syscall name="sigaltstack" number="4206"/>
+ <syscall name="sendfile" number="4207"/>
+ <syscall name="getpmsg" number="4208"/>
+ <syscall name="putpmsg" number="4209"/>
+ <syscall name="mmap2" number="4210"/>
+ <syscall name="truncate64" number="4211"/>
+ <syscall name="ftruncate64" number="4212"/>
+ <syscall name="stat64" number="4213"/>
+ <syscall name="lstat64" number="4214"/>
+ <syscall name="fstat64" number="4215"/>
+ <syscall name="pivot_root" number="4216"/>
+ <syscall name="mincore" number="4217"/>
+ <syscall name="madvise" number="4218"/>
+ <syscall name="getdents64" number="4219"/>
+ <syscall name="fcntl64" number="4220"/>
+ <syscall name="gettid" number="4222"/>
+ <syscall name="readahead" number="4223"/>
+ <syscall name="setxattr" number="4224"/>
+ <syscall name="lsetxattr" number="4225"/>
+ <syscall name="fsetxattr" number="4226"/>
+ <syscall name="getxattr" number="4227"/>
+ <syscall name="lgetxattr" number="4228"/>
+ <syscall name="fgetxattr" number="4229"/>
+ <syscall name="listxattr" number="4230"/>
+ <syscall name="llistxattr" number="4231"/>
+ <syscall name="flistxattr" number="4232"/>
+ <syscall name="removexattr" number="4233"/>
+ <syscall name="lremovexattr" number="4234"/>
+ <syscall name="fremovexattr" number="4235"/>
+ <syscall name="tkill" number="4236"/>
+ <syscall name="sendfile64" number="4237"/>
+ <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"/>
+ <syscall name="lookup_dcookie" number="4247"/>
+ <syscall name="epoll_create" number="4248"/>
+ <syscall name="epoll_ctl" number="4249"/>
+ <syscall name="epoll_wait" number="4250"/>
+ <syscall name="remap_file_pages" number="4251"/>
+ <syscall name="set_tid_address" number="4252"/>
+ <syscall name="restart_syscall" number="4253"/>
+ <syscall name="fadvise64" number="4254"/>
+ <syscall name="statfs64" number="4255"/>
+ <syscall name="fstatfs64" number="4256"/>
+ <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"/>
+ <syscall name="utimes" number="4267"/>
+ <syscall name="mbind" number="4268"/>
+ <syscall name="get_mempolicy" number="4269"/>
+ <syscall name="set_mempolicy" number="4270"/>
+ <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"/>
+ <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"/>
+ <syscall name="inotify_add_watch" number="4285"/>
+ <syscall name="inotify_rm_watch" number="4286"/>
+ <syscall name="migrate_pages" number="4287"/>
+ <syscall name="openat" number="4288"/>
+ <syscall name="mkdirat" number="4289"/>
+ <syscall name="mknodat" number="4290"/>
+ <syscall name="fchownat" number="4291"/>
+ <syscall name="futimesat" number="4292"/>
+ <syscall name="fstatat64" number="4293"/>
+ <syscall name="unlinkat" number="4294"/>
+ <syscall name="renameat" number="4295"/>
+ <syscall name="linkat" number="4296"/>
+ <syscall name="symlinkat" number="4297"/>
+ <syscall name="readlinkat" number="4298"/>
+ <syscall name="fchmodat" number="4299"/>
+ <syscall name="faccessat" number="4300"/>
+ <syscall name="pselect6" number="4301"/>
+ <syscall name="ppoll" number="4302"/>
+ <syscall name="unshare" number="4303"/>
+ <syscall name="splice" number="4304"/>
+ <syscall name="sync_file_range" number="4305"/>
+ <syscall name="tee" number="4306"/>
+ <syscall name="vmsplice" number="4307"/>
+ <syscall name="move_pages" number="4308"/>
+ <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"/>
+ <syscall name="ioprio_set" number="4314"/>
+ <syscall name="ioprio_get" number="4315"/>
+ <syscall name="utimensat" number="4316"/>
+ <syscall name="signalfd" number="4317"/>
+ <syscall name="timerfd" number="4318"/>
+ <syscall name="eventfd" number="4319"/>
+ <syscall name="fallocate" number="4320"/>
+ <syscall name="timerfd_create" number="4321"/>
+ <syscall name="timerfd_gettime" number="4322"/>
+ <syscall name="timerfd_settime" number="4323"/>
+ <syscall name="signalfd4" number="4324"/>
+ <syscall name="eventfd2" number="4325"/>
+ <syscall name="epoll_create1" number="4326"/>
+ <syscall name="dup3" number="4327"/>
+ <syscall name="pipe2" number="4328"/>
+ <syscall name="inotify_init1" number="4329"/>
+ <syscall name="preadv" number="4330"/>
+ <syscall name="pwritev" number="4331"/>
+ <syscall name="rt_tgsigqueueinfo" number="4332"/>
+ <syscall name="perf_event_open" number="4333"/>
+ <syscall name="accept4" number="4334"/>
+ <syscall name="recvmmsg" number="4335"/>
+ <syscall name="fanotify_init" number="4336"/>
+ <syscall name="fanotify_mark" number="4337"/>
+ <syscall name="prlimit64" number="4338"/>
+</syscalls_info>
diff --git a/share/gdb/syscalls/ppc-linux.xml b/share/gdb/syscalls/ppc-linux.xml
new file mode 100644
index 0000000..dd4eba6
--- /dev/null
+++ b/share/gdb/syscalls/ppc-linux.xml
@@ -0,0 +1,310 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2009-2013 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/linux/arch/powerpc/include/asm/unistd.h
+
+ The file mentioned above belongs to the Linux Kernel. -->
+
+<syscalls_info>
+ <syscall name="restart_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="waitpid" number="7"/>
+ <syscall name="creat" number="8"/>
+ <syscall name="link" number="9"/>
+ <syscall name="unlink" number="10"/>
+ <syscall name="execve" number="11"/>
+ <syscall name="chdir" number="12"/>
+ <syscall name="time" number="13"/>
+ <syscall name="mknod" number="14"/>
+ <syscall name="chmod" number="15"/>
+ <syscall name="lchown" number="16"/>
+ <syscall name="break" number="17"/>
+ <syscall name="oldstat" number="18"/>
+ <syscall name="lseek" number="19"/>
+ <syscall name="getpid" number="20"/>
+ <syscall name="mount" number="21"/>
+ <syscall name="umount" number="22"/>
+ <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"/>
+ <syscall name="pause" number="29"/>
+ <syscall name="utime" number="30"/>
+ <syscall name="stty" number="31"/>
+ <syscall name="gtty" number="32"/>
+ <syscall name="access" number="33"/>
+ <syscall name="nice" number="34"/>
+ <syscall name="ftime" number="35"/>
+ <syscall name="sync" number="36"/>
+ <syscall name="kill" number="37"/>
+ <syscall name="rename" number="38"/>
+ <syscall name="mkdir" number="39"/>
+ <syscall name="rmdir" number="40"/>
+ <syscall name="dup" number="41"/>
+ <syscall name="pipe" number="42"/>
+ <syscall name="times" number="43"/>
+ <syscall name="prof" number="44"/>
+ <syscall name="brk" number="45"/>
+ <syscall name="setgid" number="46"/>
+ <syscall name="getgid" number="47"/>
+ <syscall name="signal" number="48"/>
+ <syscall name="geteuid" number="49"/>
+ <syscall name="getegid" number="50"/>
+ <syscall name="acct" number="51"/>
+ <syscall name="umount2" number="52"/>
+ <syscall name="lock" number="53"/>
+ <syscall name="ioctl" number="54"/>
+ <syscall name="fcntl" number="55"/>
+ <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"/>
+ <syscall name="ustat" number="62"/>
+ <syscall name="dup2" number="63"/>
+ <syscall name="getppid" number="64"/>
+ <syscall name="getpgrp" number="65"/>
+ <syscall name="setsid" number="66"/>
+ <syscall name="sigaction" number="67"/>
+ <syscall name="sgetmask" number="68"/>
+ <syscall name="ssetmask" number="69"/>
+ <syscall name="setreuid" number="70"/>
+ <syscall name="setregid" number="71"/>
+ <syscall name="sigsuspend" number="72"/>
+ <syscall name="sigpending" number="73"/>
+ <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"/>
+ <syscall name="symlink" number="83"/>
+ <syscall name="oldlstat" number="84"/>
+ <syscall name="readlink" number="85"/>
+ <syscall name="uselib" number="86"/>
+ <syscall name="swapon" number="87"/>
+ <syscall name="reboot" number="88"/>
+ <syscall name="readdir" number="89"/>
+ <syscall name="mmap" number="90"/>
+ <syscall name="munmap" number="91"/>
+ <syscall name="truncate" number="92"/>
+ <syscall name="ftruncate" number="93"/>
+ <syscall name="fchmod" number="94"/>
+ <syscall name="fchown" number="95"/>
+ <syscall name="getpriority" number="96"/>
+ <syscall name="setpriority" number="97"/>
+ <syscall name="profil" number="98"/>
+ <syscall name="statfs" number="99"/>
+ <syscall name="fstatfs" number="100"/>
+ <syscall name="ioperm" number="101"/>
+ <syscall name="socketcall" number="102"/>
+ <syscall name="syslog" number="103"/>
+ <syscall name="setitimer" number="104"/>
+ <syscall name="getitimer" number="105"/>
+ <syscall name="stat" number="106"/>
+ <syscall name="lstat" number="107"/>
+ <syscall name="fstat" number="108"/>
+ <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"/>
+ <syscall name="swapoff" number="115"/>
+ <syscall name="sysinfo" number="116"/>
+ <syscall name="ipc" number="117"/>
+ <syscall name="fsync" number="118"/>
+ <syscall name="sigreturn" number="119"/>
+ <syscall name="clone" number="120"/>
+ <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"/>
+ <syscall name="sigprocmask" number="126"/>
+ <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"/>
+ <syscall name="getpgid" number="132"/>
+ <syscall name="fchdir" number="133"/>
+ <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"/>
+ <syscall name="getdents" number="141"/>
+ <syscall name="_newselect" number="142"/>
+ <syscall name="flock" number="143"/>
+ <syscall name="msync" number="144"/>
+ <syscall name="readv" number="145"/>
+ <syscall name="writev" number="146"/>
+ <syscall name="getsid" number="147"/>
+ <syscall name="fdatasync" number="148"/>
+ <syscall name="_sysctl" number="149"/>
+ <syscall name="mlock" number="150"/>
+ <syscall name="munlock" number="151"/>
+ <syscall name="mlockall" number="152"/>
+ <syscall name="munlockall" number="153"/>
+ <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"/>
+ <syscall name="setresuid" number="164"/>
+ <syscall name="getresuid" number="165"/>
+ <syscall name="query_module" number="166"/>
+ <syscall name="poll" number="167"/>
+ <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"/>
+ <syscall name="rt_sigaction" number="173"/>
+ <syscall name="rt_sigprocmask" number="174"/>
+ <syscall name="rt_sigpending" number="175"/>
+ <syscall name="rt_sigtimedwait" number="176"/>
+ <syscall name="rt_sigqueueinfo" number="177"/>
+ <syscall name="rt_sigsuspend" number="178"/>
+ <syscall name="pread64" number="179"/>
+ <syscall name="pwrite64" number="180"/>
+ <syscall name="chown" number="181"/>
+ <syscall name="getcwd" number="182"/>
+ <syscall name="capget" number="183"/>
+ <syscall name="capset" number="184"/>
+ <syscall name="sigaltstack" number="185"/>
+ <syscall name="sendfile" number="186"/>
+ <syscall name="getpmsg" number="187"/>
+ <syscall name="putpmsg" number="188"/>
+ <syscall name="vfork" number="189"/>
+ <syscall name="ugetrlimit" number="190"/>
+ <syscall name="readahead" number="191"/>
+ <syscall name="mmap2" number="192"/>
+ <syscall name="truncate64" number="193"/>
+ <syscall name="ftruncate64" number="194"/>
+ <syscall name="stat64" number="195"/>
+ <syscall name="lstat64" number="196"/>
+ <syscall name="fstat64" number="197"/>
+ <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"/>
+ <syscall name="pivot_root" number="203"/>
+ <syscall name="fcntl64" number="204"/>
+ <syscall name="madvise" number="205"/>
+ <syscall name="mincore" number="206"/>
+ <syscall name="gettid" number="207"/>
+ <syscall name="tkill" number="208"/>
+ <syscall name="setxattr" number="209"/>
+ <syscall name="lsetxattr" number="210"/>
+ <syscall name="fsetxattr" number="211"/>
+ <syscall name="getxattr" number="212"/>
+ <syscall name="lgetxattr" number="213"/>
+ <syscall name="fgetxattr" number="214"/>
+ <syscall name="listxattr" number="215"/>
+ <syscall name="llistxattr" number="216"/>
+ <syscall name="flistxattr" number="217"/>
+ <syscall name="removexattr" number="218"/>
+ <syscall name="lremovexattr" number="219"/>
+ <syscall name="fremovexattr" number="220"/>
+ <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"/>
+ <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"/>
+ <syscall name="exit_group" number="234"/>
+ <syscall name="lookup_dcookie" number="235"/>
+ <syscall name="epoll_create" number="236"/>
+ <syscall name="epoll_ctl" number="237"/>
+ <syscall name="epoll_wait" number="238"/>
+ <syscall name="remap_file_pages" number="239"/>
+ <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"/>
+ <syscall name="utimes" number="251"/>
+ <syscall name="statfs64" number="252"/>
+ <syscall name="fstatfs64" number="253"/>
+ <syscall name="fadvise64_64" number="254"/>
+ <syscall name="rtas" number="255"/>
+ <syscall name="sys_debug_setcontext" number="256"/>
+ <syscall name="mbind" number="259"/>
+ <syscall name="get_mempolicy" number="260"/>
+ <syscall name="set_mempolicy" number="261"/>
+ <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"/>
+ <syscall name="ioprio_set" number="273"/>
+ <syscall name="ioprio_get" number="274"/>
+ <syscall name="inotify_init" number="275"/>
+ <syscall name="inotify_add_watch" number="276"/>
+ <syscall name="inotify_rm_watch" number="277"/>
+ <syscall name="spu_run" number="278"/>
+ <syscall name="spu_create" number="279"/>
+ <syscall name="pselect6" number="280"/>
+ <syscall name="ppoll" number="281"/>
+ <syscall name="unshare" number="282"/>
+ <syscall name="openat" number="286"/>
+ <syscall name="mkdirat" number="287"/>
+ <syscall name="mknodat" number="288"/>
+ <syscall name="fchownat" number="289"/>
+ <syscall name="futimesat" number="290"/>
+ <syscall name="fstatat64" number="291"/>
+ <syscall name="unlinkat" number="292"/>
+ <syscall name="renameat" number="293"/>
+ <syscall name="linkat" number="294"/>
+ <syscall name="symlinkat" number="295"/>
+ <syscall name="readlinkat" number="296"/>
+ <syscall name="fchmodat" number="297"/>
+ <syscall name="faccessat" number="298"/>
+</syscalls_info>
diff --git a/share/gdb/syscalls/ppc64-linux.xml b/share/gdb/syscalls/ppc64-linux.xml
new file mode 100644
index 0000000..ad56db1
--- /dev/null
+++ b/share/gdb/syscalls/ppc64-linux.xml
@@ -0,0 +1,295 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2009-2013 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/linux/arch/powerpc/include/asm/unistd.h
+
+ The file mentioned above belongs to the Linux Kernel. -->
+
+<syscalls_info>
+ <syscall name="restart_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="waitpid" number="7"/>
+ <syscall name="creat" number="8"/>
+ <syscall name="link" number="9"/>
+ <syscall name="unlink" number="10"/>
+ <syscall name="execve" number="11"/>
+ <syscall name="chdir" number="12"/>
+ <syscall name="time" number="13"/>
+ <syscall name="mknod" number="14"/>
+ <syscall name="chmod" number="15"/>
+ <syscall name="lchown" number="16"/>
+ <syscall name="break" number="17"/>
+ <syscall name="oldstat" number="18"/>
+ <syscall name="lseek" number="19"/>
+ <syscall name="getpid" number="20"/>
+ <syscall name="mount" number="21"/>
+ <syscall name="umount" number="22"/>
+ <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"/>
+ <syscall name="pause" number="29"/>
+ <syscall name="utime" number="30"/>
+ <syscall name="stty" number="31"/>
+ <syscall name="gtty" number="32"/>
+ <syscall name="access" number="33"/>
+ <syscall name="nice" number="34"/>
+ <syscall name="ftime" number="35"/>
+ <syscall name="sync" number="36"/>
+ <syscall name="kill" number="37"/>
+ <syscall name="rename" number="38"/>
+ <syscall name="mkdir" number="39"/>
+ <syscall name="rmdir" number="40"/>
+ <syscall name="dup" number="41"/>
+ <syscall name="pipe" number="42"/>
+ <syscall name="times" number="43"/>
+ <syscall name="prof" number="44"/>
+ <syscall name="brk" number="45"/>
+ <syscall name="setgid" number="46"/>
+ <syscall name="getgid" number="47"/>
+ <syscall name="signal" number="48"/>
+ <syscall name="geteuid" number="49"/>
+ <syscall name="getegid" number="50"/>
+ <syscall name="acct" number="51"/>
+ <syscall name="umount2" number="52"/>
+ <syscall name="lock" number="53"/>
+ <syscall name="ioctl" number="54"/>
+ <syscall name="fcntl" number="55"/>
+ <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"/>
+ <syscall name="ustat" number="62"/>
+ <syscall name="dup2" number="63"/>
+ <syscall name="getppid" number="64"/>
+ <syscall name="getpgrp" number="65"/>
+ <syscall name="setsid" number="66"/>
+ <syscall name="sigaction" number="67"/>
+ <syscall name="sgetmask" number="68"/>
+ <syscall name="ssetmask" number="69"/>
+ <syscall name="setreuid" number="70"/>
+ <syscall name="setregid" number="71"/>
+ <syscall name="sigsuspend" number="72"/>
+ <syscall name="sigpending" number="73"/>
+ <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"/>
+ <syscall name="symlink" number="83"/>
+ <syscall name="oldlstat" number="84"/>
+ <syscall name="readlink" number="85"/>
+ <syscall name="uselib" number="86"/>
+ <syscall name="swapon" number="87"/>
+ <syscall name="reboot" number="88"/>
+ <syscall name="readdir" number="89"/>
+ <syscall name="mmap" number="90"/>
+ <syscall name="munmap" number="91"/>
+ <syscall name="truncate" number="92"/>
+ <syscall name="ftruncate" number="93"/>
+ <syscall name="fchmod" number="94"/>
+ <syscall name="fchown" number="95"/>
+ <syscall name="getpriority" number="96"/>
+ <syscall name="setpriority" number="97"/>
+ <syscall name="profil" number="98"/>
+ <syscall name="statfs" number="99"/>
+ <syscall name="fstatfs" number="100"/>
+ <syscall name="ioperm" number="101"/>
+ <syscall name="socketcall" number="102"/>
+ <syscall name="syslog" number="103"/>
+ <syscall name="setitimer" number="104"/>
+ <syscall name="getitimer" number="105"/>
+ <syscall name="stat" number="106"/>
+ <syscall name="lstat" number="107"/>
+ <syscall name="fstat" number="108"/>
+ <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"/>
+ <syscall name="swapoff" number="115"/>
+ <syscall name="sysinfo" number="116"/>
+ <syscall name="ipc" number="117"/>
+ <syscall name="fsync" number="118"/>
+ <syscall name="sigreturn" number="119"/>
+ <syscall name="clone" number="120"/>
+ <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"/>
+ <syscall name="sigprocmask" number="126"/>
+ <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"/>
+ <syscall name="getpgid" number="132"/>
+ <syscall name="fchdir" number="133"/>
+ <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"/>
+ <syscall name="getdents" number="141"/>
+ <syscall name="_newselect" number="142"/>
+ <syscall name="flock" number="143"/>
+ <syscall name="msync" number="144"/>
+ <syscall name="readv" number="145"/>
+ <syscall name="writev" number="146"/>
+ <syscall name="getsid" number="147"/>
+ <syscall name="fdatasync" number="148"/>
+ <syscall name="_sysctl" number="149"/>
+ <syscall name="mlock" number="150"/>
+ <syscall name="munlock" number="151"/>
+ <syscall name="mlockall" number="152"/>
+ <syscall name="munlockall" number="153"/>
+ <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"/>
+ <syscall name="setresuid" number="164"/>
+ <syscall name="getresuid" number="165"/>
+ <syscall name="query_module" number="166"/>
+ <syscall name="poll" number="167"/>
+ <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"/>
+ <syscall name="rt_sigaction" number="173"/>
+ <syscall name="rt_sigprocmask" number="174"/>
+ <syscall name="rt_sigpending" number="175"/>
+ <syscall name="rt_sigtimedwait" number="176"/>
+ <syscall name="rt_sigqueueinfo" number="177"/>
+ <syscall name="rt_sigsuspend" number="178"/>
+ <syscall name="pread64" number="179"/>
+ <syscall name="pwrite64" number="180"/>
+ <syscall name="chown" number="181"/>
+ <syscall name="getcwd" number="182"/>
+ <syscall name="capget" number="183"/>
+ <syscall name="capset" number="184"/>
+ <syscall name="sigaltstack" number="185"/>
+ <syscall name="sendfile" number="186"/>
+ <syscall name="getpmsg" number="187"/>
+ <syscall name="putpmsg" number="188"/>
+ <syscall name="vfork" number="189"/>
+ <syscall name="ugetrlimit" number="190"/>
+ <syscall name="readahead" number="191"/>
+ <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"/>
+ <syscall name="pivot_root" number="203"/>
+ <syscall name="madvise" number="205"/>
+ <syscall name="mincore" number="206"/>
+ <syscall name="gettid" number="207"/>
+ <syscall name="tkill" number="208"/>
+ <syscall name="setxattr" number="209"/>
+ <syscall name="lsetxattr" number="210"/>
+ <syscall name="fsetxattr" number="211"/>
+ <syscall name="getxattr" number="212"/>
+ <syscall name="lgetxattr" number="213"/>
+ <syscall name="fgetxattr" number="214"/>
+ <syscall name="listxattr" number="215"/>
+ <syscall name="llistxattr" number="216"/>
+ <syscall name="flistxattr" number="217"/>
+ <syscall name="removexattr" number="218"/>
+ <syscall name="lremovexattr" number="219"/>
+ <syscall name="fremovexattr" number="220"/>
+ <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"/>
+ <syscall name="exit_group" number="234"/>
+ <syscall name="lookup_dcookie" number="235"/>
+ <syscall name="epoll_create" number="236"/>
+ <syscall name="epoll_ctl" number="237"/>
+ <syscall name="epoll_wait" number="238"/>
+ <syscall name="remap_file_pages" number="239"/>
+ <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"/>
+ <syscall name="utimes" number="251"/>
+ <syscall name="statfs64" number="252"/>
+ <syscall name="fstatfs64" number="253"/>
+ <syscall name="rtas" number="255"/>
+ <syscall name="sys_debug_setcontext" number="256"/>
+ <syscall name="mbind" number="259"/>
+ <syscall name="get_mempolicy" number="260"/>
+ <syscall name="set_mempolicy" number="261"/>
+ <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"/>
+ <syscall name="ioprio_set" number="273"/>
+ <syscall name="ioprio_get" number="274"/>
+ <syscall name="inotify_init" number="275"/>
+ <syscall name="inotify_add_watch" number="276"/>
+ <syscall name="inotify_rm_watch" number="277"/>
+ <syscall name="spu_run" number="278"/>
+ <syscall name="spu_create" number="279"/>
+ <syscall name="pselect6" number="280"/>
+ <syscall name="ppoll" number="281"/>
+ <syscall name="unshare" number="282"/>
+ <syscall name="unlinkat" number="286"/>
+ <syscall name="renameat" number="287"/>
+ <syscall name="linkat" number="288"/>
+ <syscall name="symlinkat" number="289"/>
+ <syscall name="readlinkat" number="290"/>
+ <syscall name="fchmodat" number="291"/>
+ <syscall name="faccessat" number="292"/>
+</syscalls_info>
diff --git a/share/gdb/syscalls/sparc-linux.xml b/share/gdb/syscalls/sparc-linux.xml
new file mode 100644
index 0000000..7673621
--- /dev/null
+++ b/share/gdb/syscalls/sparc-linux.xml
@@ -0,0 +1,344 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2010-2013 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/linux/arch/sparc/include/asm/unistd.h
+
+ The file mentioned above belongs to the Linux Kernel. -->
+
+<syscalls_info>
+ <syscall name="restart_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="creat" number="8"/>
+ <syscall name="link" number="9"/>
+ <syscall name="unlink" number="10"/>
+ <syscall name="execv" number="11"/>
+ <syscall name="chdir" number="12"/>
+ <syscall name="chown" number="13"/>
+ <syscall name="mknod" number="14"/>
+ <syscall name="chmod" number="15"/>
+ <syscall name="lchown" number="16"/>
+ <syscall name="brk" number="17"/>
+ <syscall name="perfctr" number="18"/>
+ <syscall name="lseek" number="19"/>
+ <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"/>
+ <syscall name="ptrace" number="26"/>
+ <syscall name="alarm" number="27"/>
+ <syscall name="sigaltstack" number="28"/>
+ <syscall name="pause" number="29"/>
+ <syscall name="utime" number="30"/>
+ <syscall name="lchown32" number="31"/>
+ <syscall name="fchown32" number="32"/>
+ <syscall name="access" number="33"/>
+ <syscall name="nice" number="34"/>
+ <syscall name="chown32" number="35"/>
+ <syscall name="sync" number="36"/>
+ <syscall name="kill" number="37"/>
+ <syscall name="stat" number="38"/>
+ <syscall name="sendfile" number="39"/>
+ <syscall name="lstat" number="40"/>
+ <syscall name="dup" number="41"/>
+ <syscall name="pipe" number="42"/>
+ <syscall name="times" number="43"/>
+ <syscall name="getuid32" number="44"/>
+ <syscall name="umount2" number="45"/>
+ <syscall name="setgid" number="46"/>
+ <syscall name="getgid" number="47"/>
+ <syscall name="signal" number="48"/>
+ <syscall name="geteuid" number="49"/>
+ <syscall name="getegid" number="50"/>
+ <syscall name="acct" number="51"/>
+ <syscall name="getgid32" number="53"/>
+ <syscall name="ioctl" number="54"/>
+ <syscall name="reboot" number="55"/>
+ <syscall name="mmap2" 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="fstat" number="62"/>
+ <syscall name="fstat64" number="63"/>
+ <syscall name="getpagesize" number="64"/>
+ <syscall name="msync" number="65"/>
+ <syscall name="vfork" number="66"/>
+ <syscall name="pread64" number="67"/>
+ <syscall name="pwrite64" number="68"/>
+ <syscall name="geteuid32" number="69"/>
+ <syscall name="getegid32" number="70"/>
+ <syscall name="mmap" number="71"/>
+ <syscall name="setreuid32" number="72"/>
+ <syscall name="munmap" number="73"/>
+ <syscall name="mprotect" number="74"/>
+ <syscall name="madvise" number="75"/>
+ <syscall name="vhangup" number="76"/>
+ <syscall name="truncate64" number="77"/>
+ <syscall name="mincore" number="78"/>
+ <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"/>
+ <syscall name="swapon" number="85"/>
+ <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"/>
+ <syscall name="setfsuid32" number="91"/>
+ <syscall name="fcntl" number="92"/>
+ <syscall name="select" number="93"/>
+ <syscall name="setfsgid32" number="94"/>
+ <syscall name="fsync" number="95"/>
+ <syscall name="setpriority" number="96"/>
+ <syscall name="socket" number="97"/>
+ <syscall name="connect" number="98"/>
+ <syscall name="accept" number="99"/>
+ <syscall name="getpriority" number="100"/>
+ <syscall name="rt_sigreturn" number="101"/>
+ <syscall name="rt_sigaction" number="102"/>
+ <syscall name="rt_sigprocmask" number="103"/>
+ <syscall name="rt_sigpending" number="104"/>
+ <syscall name="rt_sigtimedwait" number="105"/>
+ <syscall name="rt_sigqueueinfo" number="106"/>
+ <syscall name="rt_sigsuspend" number="107"/>
+ <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"/>
+ <syscall name="sendmsg" number="114"/>
+ <syscall name="getgroups32" number="115"/>
+ <syscall name="gettimeofday" number="116"/>
+ <syscall name="getrusage" number="117"/>
+ <syscall name="getsockopt" number="118"/>
+ <syscall name="getcwd" number="119"/>
+ <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="recvfrom" number="125"/>
+ <syscall name="setreuid" number="126"/>
+ <syscall name="setregid" number="127"/>
+ <syscall name="rename" number="128"/>
+ <syscall name="truncate" number="129"/>
+ <syscall name="ftruncate" number="130"/>
+ <syscall name="flock" number="131"/>
+ <syscall name="lstat64" 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="stat64" number="139"/>
+ <syscall name="sendfile64" number="140"/>
+ <syscall name="getpeername" number="141"/>
+ <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"/>
+ <syscall name="prctl" number="147"/>
+ <syscall name="pciconfig_read" number="148"/>
+ <syscall name="pciconfig_write" number="149"/>
+ <syscall name="getsockname" number="150"/>
+ <syscall name="inotify_init" number="151"/>
+ <syscall name="inotify_add_watch" number="152"/>
+ <syscall name="poll" number="153"/>
+ <syscall name="getdents64" number="154"/>
+ <syscall name="fcntl64" number="155"/>
+ <syscall name="inotify_rm_watch" number="156"/>
+ <syscall name="statfs" number="157"/>
+ <syscall name="fstatfs" number="158"/>
+ <syscall name="umount" number="159"/>
+ <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"/>
+ <syscall name="set_tid_address" number="166"/>
+ <syscall name="mount" number="167"/>
+ <syscall name="ustat" number="168"/>
+ <syscall name="setxattr" number="169"/>
+ <syscall name="lsetxattr" number="170"/>
+ <syscall name="fsetxattr" number="171"/>
+ <syscall name="getxattr" number="172"/>
+ <syscall name="lgetxattr" number="173"/>
+ <syscall name="getdents" number="174"/>
+ <syscall name="setsid" number="175"/>
+ <syscall name="fchdir" number="176"/>
+ <syscall name="fgetxattr" number="177"/>
+ <syscall name="listxattr" number="178"/>
+ <syscall name="llistxattr" number="179"/>
+ <syscall name="flistxattr" number="180"/>
+ <syscall name="removexattr" number="181"/>
+ <syscall name="lremovexattr" number="182"/>
+ <syscall name="sigpending" number="183"/>
+ <syscall name="query_module" number="184"/>
+ <syscall name="setpgid" number="185"/>
+ <syscall name="fremovexattr" number="186"/>
+ <syscall name="tkill" number="187"/>
+ <syscall name="exit_group" number="188"/>
+ <syscall name="uname" number="189"/>
+ <syscall name="init_module" number="190"/>
+ <syscall name="personality" number="191"/>
+ <syscall name="remap_file_pages" number="192"/>
+ <syscall name="epoll_create" number="193"/>
+ <syscall name="epoll_ctl" number="194"/>
+ <syscall name="epoll_wait" number="195"/>
+ <syscall name="ioprio_set" number="196"/>
+ <syscall name="getppid" number="197"/>
+ <syscall name="sigaction" number="198"/>
+ <syscall name="sgetmask" number="199"/>
+ <syscall name="ssetmask" number="200"/>
+ <syscall name="sigsuspend" number="201"/>
+ <syscall name="oldlstat" number="202"/>
+ <syscall name="uselib" number="203"/>
+ <syscall name="readdir" number="204"/>
+ <syscall name="readahead" number="205"/>
+ <syscall name="socketcall" number="206"/>
+ <syscall name="syslog" number="207"/>
+ <syscall name="lookup_dcookie" number="208"/>
+ <syscall name="fadvise64" number="209"/>
+ <syscall name="fadvise64_64" number="210"/>
+ <syscall name="tgkill" number="211"/>
+ <syscall name="waitpid" number="212"/>
+ <syscall name="swapoff" number="213"/>
+ <syscall name="sysinfo" number="214"/>
+ <syscall name="ipc" number="215"/>
+ <syscall name="sigreturn" number="216"/>
+ <syscall name="clone" number="217"/>
+ <syscall name="ioprio_get" number="218"/>
+ <syscall name="adjtimex" number="219"/>
+ <syscall name="sigprocmask" number="220"/>
+ <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"/>
+ <syscall name="time" number="231"/>
+ <syscall name="splice" number="232"/>
+ <syscall name="stime" number="233"/>
+ <syscall name="statfs64" number="234"/>
+ <syscall name="fstatfs64" number="235"/>
+ <syscall name="_llseek" number="236"/>
+ <syscall name="mlock" number="237"/>
+ <syscall name="munlock" number="238"/>
+ <syscall name="mlockall" number="239"/>
+ <syscall name="munlockall" number="240"/>
+ <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"/>
+ <syscall name="_sysctl" number="251"/>
+ <syscall name="getsid" number="252"/>
+ <syscall name="fdatasync" number="253"/>
+ <syscall name="nfsservctl" number="254"/>
+ <syscall name="sync_file_range" number="255"/>
+ <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"/>
+ <syscall name="tee" number="280"/>
+ <syscall name="add_key" number="281"/>
+ <syscall name="request_key" number="282"/>
+ <syscall name="keyctl" number="283"/>
+ <syscall name="openat" number="284"/>
+ <syscall name="mkdirat" number="285"/>
+ <syscall name="mknodat" number="286"/>
+ <syscall name="fchownat" number="287"/>
+ <syscall name="futimesat" number="288"/>
+ <syscall name="fstatat64" number="289"/>
+ <syscall name="unlinkat" number="290"/>
+ <syscall name="renameat" number="291"/>
+ <syscall name="linkat" number="292"/>
+ <syscall name="symlinkat" number="293"/>
+ <syscall name="readlinkat" number="294"/>
+ <syscall name="fchmodat" number="295"/>
+ <syscall name="faccessat" number="296"/>
+ <syscall name="pselect6" number="297"/>
+ <syscall name="ppoll" number="298"/>
+ <syscall name="unshare" number="299"/>
+ <syscall name="set_robust_list" number="300"/>
+ <syscall name="get_robust_list" number="301"/>
+ <syscall name="migrate_pages" number="302"/>
+ <syscall name="mbind" number="303"/>
+ <syscall name="get_mempolicy" number="304"/>
+ <syscall name="set_mempolicy" number="305"/>
+ <syscall name="kexec_load" number="306"/>
+ <syscall name="move_pages" number="307"/>
+ <syscall name="getcpu" number="308"/>
+ <syscall name="epoll_pwait" number="309"/>
+ <syscall name="utimensat" number="310"/>
+ <syscall name="signalfd" number="311"/>
+ <syscall name="timerfd_create" number="312"/>
+ <syscall name="eventfd" number="313"/>
+ <syscall name="fallocate" number="314"/>
+ <syscall name="timerfd_settime" number="315"/>
+ <syscall name="timerfd_gettime" number="316"/>
+ <syscall name="signalfd4" number="317"/>
+ <syscall name="eventfd2" number="318"/>
+ <syscall name="epoll_create1" number="319"/>
+ <syscall name="dup3" number="320"/>
+ <syscall name="pipe2" number="321"/>
+ <syscall name="inotify_init1" number="322"/>
+ <syscall name="accept4" number="323"/>
+ <syscall name="preadv" number="324"/>
+ <syscall name="pwritev" number="325"/>
+ <syscall name="rt_tgsigqueueinfo" number="326"/>
+ <syscall name="perf_event_open" number="327"/>
+ <syscall name="recvmmsg" number="328"/>
+</syscalls_info>
diff --git a/share/gdb/syscalls/sparc64-linux.xml b/share/gdb/syscalls/sparc64-linux.xml
new file mode 100644
index 0000000..4403ca3
--- /dev/null
+++ b/share/gdb/syscalls/sparc64-linux.xml
@@ -0,0 +1,326 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2010-2013 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/linux/arch/sparc/include/asm/unistd.h
+
+ The file mentioned above belongs to the Linux Kernel. -->
+
+<syscalls_info>
+ <syscall name="restart_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="creat" number="8"/>
+ <syscall name="link" number="9"/>
+ <syscall name="unlink" number="10"/>
+ <syscall name="execv" number="11"/>
+ <syscall name="chdir" number="12"/>
+ <syscall name="chown" number="13"/>
+ <syscall name="mknod" number="14"/>
+ <syscall name="chmod" number="15"/>
+ <syscall name="lchown" number="16"/>
+ <syscall name="brk" number="17"/>
+ <syscall name="perfctr" number="18"/>
+ <syscall name="lseek" number="19"/>
+ <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"/>
+ <syscall name="ptrace" number="26"/>
+ <syscall name="alarm" number="27"/>
+ <syscall name="sigaltstack" number="28"/>
+ <syscall name="pause" number="29"/>
+ <syscall name="utime" number="30"/>
+ <syscall name="access" number="33"/>
+ <syscall name="nice" number="34"/>
+ <syscall name="sync" number="36"/>
+ <syscall name="kill" number="37"/>
+ <syscall name="stat" number="38"/>
+ <syscall name="sendfile" number="39"/>
+ <syscall name="lstat" number="40"/>
+ <syscall name="dup" number="41"/>
+ <syscall name="pipe" number="42"/>
+ <syscall name="times" number="43"/>
+ <syscall name="umount2" number="45"/>
+ <syscall name="setgid" number="46"/>
+ <syscall name="getgid" number="47"/>
+ <syscall name="signal" number="48"/>
+ <syscall name="geteuid" number="49"/>
+ <syscall name="getegid" number="50"/>
+ <syscall name="acct" number="51"/>
+ <syscall name="memory_ordering" number="52"/>
+ <syscall name="ioctl" number="54"/>
+ <syscall name="reboot" number="55"/>
+ <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="fstat" number="62"/>
+ <syscall name="fstat64" number="63"/>
+ <syscall name="getpagesize" number="64"/>
+ <syscall name="msync" number="65"/>
+ <syscall name="vfork" number="66"/>
+ <syscall name="pread64" number="67"/>
+ <syscall name="pwrite64" number="68"/>
+ <syscall name="mmap" number="71"/>
+ <syscall name="munmap" number="73"/>
+ <syscall name="mprotect" number="74"/>
+ <syscall name="madvise" number="75"/>
+ <syscall name="vhangup" number="76"/>
+ <syscall name="mincore" number="78"/>
+ <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"/>
+ <syscall name="getitimer" number="86"/>
+ <syscall name="sethostname" number="88"/>
+ <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="accept" number="99"/>
+ <syscall name="getpriority" number="100"/>
+ <syscall name="rt_sigreturn" number="101"/>
+ <syscall name="rt_sigaction" number="102"/>
+ <syscall name="rt_sigprocmask" number="103"/>
+ <syscall name="rt_sigpending" number="104"/>
+ <syscall name="rt_sigtimedwait" number="105"/>
+ <syscall name="rt_sigqueueinfo" number="106"/>
+ <syscall name="rt_sigsuspend" number="107"/>
+ <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"/>
+ <syscall name="sendmsg" number="114"/>
+ <syscall name="gettimeofday" number="116"/>
+ <syscall name="getrusage" number="117"/>
+ <syscall name="getsockopt" number="118"/>
+ <syscall name="getcwd" number="119"/>
+ <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="recvfrom" number="125"/>
+ <syscall name="setreuid" number="126"/>
+ <syscall name="setregid" number="127"/>
+ <syscall name="rename" number="128"/>
+ <syscall name="truncate" number="129"/>
+ <syscall name="ftruncate" number="130"/>
+ <syscall name="flock" number="131"/>
+ <syscall name="lstat64" 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="stat64" number="139"/>
+ <syscall name="sendfile64" number="140"/>
+ <syscall name="getpeername" number="141"/>
+ <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"/>
+ <syscall name="prctl" number="147"/>
+ <syscall name="pciconfig_read" number="148"/>
+ <syscall name="pciconfig_write" number="149"/>
+ <syscall name="getsockname" number="150"/>
+ <syscall name="inotify_init" number="151"/>
+ <syscall name="inotify_add_watch" number="152"/>
+ <syscall name="poll" number="153"/>
+ <syscall name="getdents64" number="154"/>
+ <syscall name="inotify_rm_watch" number="156"/>
+ <syscall name="statfs" number="157"/>
+ <syscall name="fstatfs" number="158"/>
+ <syscall name="umount" number="159"/>
+ <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"/>
+ <syscall name="set_tid_address" number="166"/>
+ <syscall name="mount" number="167"/>
+ <syscall name="ustat" number="168"/>
+ <syscall name="setxattr" number="169"/>
+ <syscall name="lsetxattr" number="170"/>
+ <syscall name="fsetxattr" number="171"/>
+ <syscall name="getxattr" number="172"/>
+ <syscall name="lgetxattr" number="173"/>
+ <syscall name="getdents" number="174"/>
+ <syscall name="setsid" number="175"/>
+ <syscall name="fchdir" number="176"/>
+ <syscall name="fgetxattr" number="177"/>
+ <syscall name="listxattr" number="178"/>
+ <syscall name="llistxattr" number="179"/>
+ <syscall name="flistxattr" number="180"/>
+ <syscall name="removexattr" number="181"/>
+ <syscall name="lremovexattr" number="182"/>
+ <syscall name="sigpending" number="183"/>
+ <syscall name="query_module" number="184"/>
+ <syscall name="setpgid" number="185"/>
+ <syscall name="fremovexattr" number="186"/>
+ <syscall name="tkill" number="187"/>
+ <syscall name="exit_group" number="188"/>
+ <syscall name="uname" number="189"/>
+ <syscall name="init_module" number="190"/>
+ <syscall name="personality" number="191"/>
+ <syscall name="remap_file_pages" number="192"/>
+ <syscall name="epoll_create" number="193"/>
+ <syscall name="epoll_ctl" number="194"/>
+ <syscall name="epoll_wait" number="195"/>
+ <syscall name="ioprio_set" number="196"/>
+ <syscall name="getppid" number="197"/>
+ <syscall name="sigaction" number="198"/>
+ <syscall name="sgetmask" number="199"/>
+ <syscall name="ssetmask" number="200"/>
+ <syscall name="sigsuspend" number="201"/>
+ <syscall name="oldlstat" number="202"/>
+ <syscall name="uselib" number="203"/>
+ <syscall name="readdir" number="204"/>
+ <syscall name="readahead" number="205"/>
+ <syscall name="socketcall" number="206"/>
+ <syscall name="syslog" number="207"/>
+ <syscall name="lookup_dcookie" number="208"/>
+ <syscall name="fadvise64" number="209"/>
+ <syscall name="fadvise64_64" number="210"/>
+ <syscall name="tgkill" number="211"/>
+ <syscall name="waitpid" number="212"/>
+ <syscall name="swapoff" number="213"/>
+ <syscall name="sysinfo" number="214"/>
+ <syscall name="ipc" number="215"/>
+ <syscall name="sigreturn" number="216"/>
+ <syscall name="clone" number="217"/>
+ <syscall name="ioprio_get" number="218"/>
+ <syscall name="adjtimex" number="219"/>
+ <syscall name="sigprocmask" number="220"/>
+ <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"/>
+ <syscall name="splice" number="232"/>
+ <syscall name="stime" number="233"/>
+ <syscall name="statfs64" number="234"/>
+ <syscall name="fstatfs64" number="235"/>
+ <syscall name="_llseek" number="236"/>
+ <syscall name="mlock" number="237"/>
+ <syscall name="munlock" number="238"/>
+ <syscall name="mlockall" number="239"/>
+ <syscall name="munlockall" number="240"/>
+ <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"/>
+ <syscall name="_sysctl" number="251"/>
+ <syscall name="getsid" number="252"/>
+ <syscall name="fdatasync" number="253"/>
+ <syscall name="nfsservctl" number="254"/>
+ <syscall name="sync_file_range" number="255"/>
+ <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"/>
+ <syscall name="tee" number="280"/>
+ <syscall name="add_key" number="281"/>
+ <syscall name="request_key" number="282"/>
+ <syscall name="keyctl" number="283"/>
+ <syscall name="openat" number="284"/>
+ <syscall name="mkdirat" number="285"/>
+ <syscall name="mknodat" number="286"/>
+ <syscall name="fchownat" number="287"/>
+ <syscall name="futimesat" number="288"/>
+ <syscall name="fstatat64" number="289"/>
+ <syscall name="unlinkat" number="290"/>
+ <syscall name="renameat" number="291"/>
+ <syscall name="linkat" number="292"/>
+ <syscall name="symlinkat" number="293"/>
+ <syscall name="readlinkat" number="294"/>
+ <syscall name="fchmodat" number="295"/>
+ <syscall name="faccessat" number="296"/>
+ <syscall name="pselect6" number="297"/>
+ <syscall name="ppoll" number="298"/>
+ <syscall name="unshare" number="299"/>
+ <syscall name="set_robust_list" number="300"/>
+ <syscall name="get_robust_list" number="301"/>
+ <syscall name="migrate_pages" number="302"/>
+ <syscall name="mbind" number="303"/>
+ <syscall name="get_mempolicy" number="304"/>
+ <syscall name="set_mempolicy" number="305"/>
+ <syscall name="kexec_load" number="306"/>
+ <syscall name="move_pages" number="307"/>
+ <syscall name="getcpu" number="308"/>
+ <syscall name="epoll_pwait" number="309"/>
+ <syscall name="utimensat" number="310"/>
+ <syscall name="signalfd" number="311"/>
+ <syscall name="timerfd_create" number="312"/>
+ <syscall name="eventfd" number="313"/>
+ <syscall name="fallocate" number="314"/>
+ <syscall name="timerfd_settime" number="315"/>
+ <syscall name="timerfd_gettime" number="316"/>
+ <syscall name="signalfd4" number="317"/>
+ <syscall name="eventfd2" number="318"/>
+ <syscall name="epoll_create1" number="319"/>
+ <syscall name="dup3" number="320"/>
+ <syscall name="pipe2" number="321"/>
+ <syscall name="inotify_init1" number="322"/>
+ <syscall name="accept4" number="323"/>
+ <syscall name="preadv" number="324"/>
+ <syscall name="pwritev" number="325"/>
+ <syscall name="rt_tgsigqueueinfo" number="326"/>
+ <syscall name="perf_event_open" number="327"/>
+ <syscall name="recvmmsg" number="328"/>
+</syscalls_info>