Blame gdb/gdbarch.sh

Packit Service 706eca
#!/bin/sh -u
Packit Service 706eca
Packit Service 706eca
# Architecture commands for GDB, the GNU debugger.
Packit Service 706eca
#
Packit Service 706eca
# Copyright (C) 1998-2018 Free Software Foundation, Inc.
Packit Service 706eca
#
Packit Service 706eca
# This file is part of GDB.
Packit Service 706eca
#
Packit Service 706eca
# This program is free software; you can redistribute it and/or modify
Packit Service 706eca
# it under the terms of the GNU General Public License as published by
Packit Service 706eca
# the Free Software Foundation; either version 3 of the License, or
Packit Service 706eca
# (at your option) any later version.
Packit Service 706eca
#
Packit Service 706eca
# This program is distributed in the hope that it will be useful,
Packit Service 706eca
# but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 706eca
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit Service 706eca
# GNU General Public License for more details.
Packit Service 706eca
#
Packit Service 706eca
# You should have received a copy of the GNU General Public License
Packit Service 706eca
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
Packit Service 706eca
Packit Service 706eca
# Make certain that the script is not running in an internationalized
Packit Service 706eca
# environment.
Packit Service 706eca
LANG=C ; export LANG
Packit Service 706eca
LC_ALL=C ; export LC_ALL
Packit Service 706eca
Packit Service 706eca
Packit Service 706eca
compare_new ()
Packit Service 706eca
{
Packit Service 706eca
    file=$1
Packit Service 706eca
    if test ! -r ${file}
Packit Service 706eca
    then
Packit Service 706eca
	echo "${file} missing? cp new-${file} ${file}" 1>&2
Packit Service 706eca
    elif diff -u ${file} new-${file}
Packit Service 706eca
    then
Packit Service 706eca
	echo "${file} unchanged" 1>&2
Packit Service 706eca
    else
Packit Service 706eca
	echo "${file} has changed? cp new-${file} ${file}" 1>&2
Packit Service 706eca
    fi
Packit Service 706eca
}
Packit Service 706eca
Packit Service 706eca
Packit Service 706eca
# Format of the input table
Packit Service 706eca
read="class returntype function formal actual staticdefault predefault postdefault invalid_p print garbage_at_eol"
Packit Service 706eca
Packit Service 706eca
do_read ()
Packit Service 706eca
{
Packit Service 706eca
    comment=""
Packit Service 706eca
    class=""
Packit Service 706eca
    # On some SH's, 'read' trims leading and trailing whitespace by
Packit Service 706eca
    # default (e.g., bash), while on others (e.g., dash), it doesn't.
Packit Service 706eca
    # Set IFS to empty to disable the trimming everywhere.
Packit Service 706eca
    while IFS='' read line
Packit Service 706eca
    do
Packit Service 706eca
	if test "${line}" = ""
Packit Service 706eca
	then
Packit Service 706eca
	    continue
Packit Service 706eca
	elif test "${line}" = "#" -a "${comment}" = ""
Packit Service 706eca
	then
Packit Service 706eca
	    continue
Packit Service 706eca
	elif expr "${line}" : "#" > /dev/null
Packit Service 706eca
	then
Packit Service 706eca
	    comment="${comment}
Packit Service 706eca
${line}"
Packit Service 706eca
	else
Packit Service 706eca
Packit Service 706eca
	    # The semantics of IFS varies between different SH's.  Some
Packit Service 706eca
	    # treat ``;;' as three fields while some treat it as just two.
Packit Service 706eca
	    # Work around this by eliminating ``;;'' ....
Packit Service 706eca
	    line="`echo "${line}" | sed -e 's/;;/; ;/g' -e 's/;;/; ;/g'`"
Packit Service 706eca
Packit Service 706eca
	    OFS="${IFS}" ; IFS="[;]"
Packit Service 706eca
	    eval read ${read} <
Packit Service 706eca
${line}
Packit Service 706eca
EOF
Packit Service 706eca
	    IFS="${OFS}"
Packit Service 706eca
Packit Service 706eca
	    if test -n "${garbage_at_eol}"
Packit Service 706eca
	    then
Packit Service 706eca
		echo "Garbage at end-of-line in ${line}" 1>&2
Packit Service 706eca
		kill $$
Packit Service 706eca
		exit 1
Packit Service 706eca
	    fi
Packit Service 706eca
Packit Service 706eca
	    # .... and then going back through each field and strip out those
Packit Service 706eca
	    # that ended up with just that space character.
Packit Service 706eca
	    for r in ${read}
Packit Service 706eca
	    do
Packit Service 706eca
		if eval test \"\${${r}}\" = \"\ \"
Packit Service 706eca
		then
Packit Service 706eca
		    eval ${r}=""
Packit Service 706eca
		fi
Packit Service 706eca
	    done
Packit Service 706eca
Packit Service 706eca
	    case "${class}" in
Packit Service 706eca
		m ) staticdefault="${predefault}" ;;
Packit Service 706eca
		M ) staticdefault="0" ;;
Packit Service 706eca
		* ) test "${staticdefault}" || staticdefault=0 ;;
Packit Service 706eca
	    esac
Packit Service 706eca
Packit Service 706eca
	    case "${class}" in
Packit Service 706eca
	    F | V | M )
Packit Service 706eca
		case "${invalid_p}" in
Packit Service 706eca
		"" )
Packit Service 706eca
		    if test -n "${predefault}"
Packit Service 706eca
		    then
Packit Service 706eca
			#invalid_p="gdbarch->${function} == ${predefault}"
Packit Service 706eca
			predicate="gdbarch->${function} != ${predefault}"
Packit Service 706eca
		    elif class_is_variable_p
Packit Service 706eca
		    then
Packit Service 706eca
			predicate="gdbarch->${function} != 0"
Packit Service 706eca
		    elif class_is_function_p
Packit Service 706eca
		    then
Packit Service 706eca
			predicate="gdbarch->${function} != NULL"
Packit Service 706eca
		    fi
Packit Service 706eca
		    ;;
Packit Service 706eca
		* )
Packit Service 706eca
		    echo "Predicate function ${function} with invalid_p." 1>&2
Packit Service 706eca
		    kill $$
Packit Service 706eca
		    exit 1
Packit Service 706eca
		    ;;
Packit Service 706eca
		esac
Packit Service 706eca
	    esac
Packit Service 706eca
Packit Service 706eca
	    # PREDEFAULT is a valid fallback definition of MEMBER when
Packit Service 706eca
	    # multi-arch is not enabled.  This ensures that the
Packit Service 706eca
	    # default value, when multi-arch is the same as the
Packit Service 706eca
	    # default value when not multi-arch.  POSTDEFAULT is
Packit Service 706eca
	    # always a valid definition of MEMBER as this again
Packit Service 706eca
	    # ensures consistency.
Packit Service 706eca
Packit Service 706eca
	    if [ -n "${postdefault}" ]
Packit Service 706eca
	    then
Packit Service 706eca
		fallbackdefault="${postdefault}"
Packit Service 706eca
	    elif [ -n "${predefault}" ]
Packit Service 706eca
	    then
Packit Service 706eca
		fallbackdefault="${predefault}"
Packit Service 706eca
	    else
Packit Service 706eca
		fallbackdefault="0"
Packit Service 706eca
	    fi
Packit Service 706eca
Packit Service 706eca
	    #NOT YET: See gdbarch.log for basic verification of
Packit Service 706eca
	    # database
Packit Service 706eca
Packit Service 706eca
	    break
Packit Service 706eca
	fi
Packit Service 706eca
    done
Packit Service 706eca
    if [ -n "${class}" ]
Packit Service 706eca
    then
Packit Service 706eca
	true
Packit Service 706eca
    else
Packit Service 706eca
	false
Packit Service 706eca
    fi
Packit Service 706eca
}
Packit Service 706eca
Packit Service 706eca
Packit Service 706eca
fallback_default_p ()
Packit Service 706eca
{
Packit Service 706eca
    [ -n "${postdefault}" -a "x${invalid_p}" != "x0" ] \
Packit Service 706eca
	|| [ -n "${predefault}" -a "x${invalid_p}" = "x0" ]
Packit Service 706eca
}
Packit Service 706eca
Packit Service 706eca
class_is_variable_p ()
Packit Service 706eca
{
Packit Service 706eca
    case "${class}" in
Packit Service 706eca
	*v* | *V* ) true ;;
Packit Service 706eca
	* ) false ;;
Packit Service 706eca
    esac
Packit Service 706eca
}
Packit Service 706eca
Packit Service 706eca
class_is_function_p ()
Packit Service 706eca
{
Packit Service 706eca
    case "${class}" in
Packit Service 706eca
	*f* | *F* | *m* | *M* ) true ;;
Packit Service 706eca
	* ) false ;;
Packit Service 706eca
    esac
Packit Service 706eca
}
Packit Service 706eca
Packit Service 706eca
class_is_multiarch_p ()
Packit Service 706eca
{
Packit Service 706eca
    case "${class}" in
Packit Service 706eca
	*m* | *M* ) true ;;
Packit Service 706eca
	* ) false ;;
Packit Service 706eca
    esac
Packit Service 706eca
}
Packit Service 706eca
Packit Service 706eca
class_is_predicate_p ()
Packit Service 706eca
{
Packit Service 706eca
    case "${class}" in
Packit Service 706eca
	*F* | *V* | *M* ) true ;;
Packit Service 706eca
	* ) false ;;
Packit Service 706eca
    esac
Packit Service 706eca
}
Packit Service 706eca
Packit Service 706eca
class_is_info_p ()
Packit Service 706eca
{
Packit Service 706eca
    case "${class}" in
Packit Service 706eca
	*i* ) true ;;
Packit Service 706eca
	* ) false ;;
Packit Service 706eca
    esac
Packit Service 706eca
}
Packit Service 706eca
Packit Service 706eca
Packit Service 706eca
# dump out/verify the doco
Packit Service 706eca
for field in ${read}
Packit Service 706eca
do
Packit Service 706eca
  case ${field} in
Packit Service 706eca
Packit Service 706eca
    class ) : ;;
Packit Service 706eca
Packit Service 706eca
	# # -> line disable
Packit Service 706eca
	# f -> function
Packit Service 706eca
	#   hiding a function
Packit Service 706eca
	# F -> function + predicate
Packit Service 706eca
	#   hiding a function + predicate to test function validity
Packit Service 706eca
	# v -> variable
Packit Service 706eca
	#   hiding a variable
Packit Service 706eca
	# V -> variable + predicate
Packit Service 706eca
	#   hiding a variable + predicate to test variables validity
Packit Service 706eca
	# i -> set from info
Packit Service 706eca
	#   hiding something from the ``struct info'' object
Packit Service 706eca
	# m -> multi-arch function
Packit Service 706eca
	#   hiding a multi-arch function (parameterised with the architecture)
Packit Service 706eca
        # M -> multi-arch function + predicate
Packit Service 706eca
	#   hiding a multi-arch function + predicate to test function validity
Packit Service 706eca
Packit Service 706eca
    returntype ) : ;;
Packit Service 706eca
Packit Service 706eca
	# For functions, the return type; for variables, the data type
Packit Service 706eca
Packit Service 706eca
    function ) : ;;
Packit Service 706eca
Packit Service 706eca
	# For functions, the member function name; for variables, the
Packit Service 706eca
	# variable name.  Member function names are always prefixed with
Packit Service 706eca
	# ``gdbarch_'' for name-space purity.
Packit Service 706eca
Packit Service 706eca
    formal ) : ;;
Packit Service 706eca
Packit Service 706eca
	# The formal argument list.  It is assumed that the formal
Packit Service 706eca
	# argument list includes the actual name of each list element.
Packit Service 706eca
	# A function with no arguments shall have ``void'' as the
Packit Service 706eca
	# formal argument list.
Packit Service 706eca
Packit Service 706eca
    actual ) : ;;
Packit Service 706eca
Packit Service 706eca
	# The list of actual arguments.  The arguments specified shall
Packit Service 706eca
	# match the FORMAL list given above.  Functions with out
Packit Service 706eca
	# arguments leave this blank.
Packit Service 706eca
Packit Service 706eca
    staticdefault ) : ;;
Packit Service 706eca
Packit Service 706eca
	# To help with the GDB startup a static gdbarch object is
Packit Service 706eca
	# created.  STATICDEFAULT is the value to insert into that
Packit Service 706eca
	# static gdbarch object.  Since this a static object only
Packit Service 706eca
	# simple expressions can be used.
Packit Service 706eca
Packit Service 706eca
	# If STATICDEFAULT is empty, zero is used.
Packit Service 706eca
Packit Service 706eca
    predefault ) : ;;
Packit Service 706eca
Packit Service 706eca
	# An initial value to assign to MEMBER of the freshly
Packit Service 706eca
	# malloc()ed gdbarch object.  After initialization, the
Packit Service 706eca
	# freshly malloc()ed object is passed to the target
Packit Service 706eca
	# architecture code for further updates.
Packit Service 706eca
Packit Service 706eca
	# If PREDEFAULT is empty, zero is used.
Packit Service 706eca
Packit Service 706eca
	# A non-empty PREDEFAULT, an empty POSTDEFAULT and a zero
Packit Service 706eca
	# INVALID_P are specified, PREDEFAULT will be used as the
Packit Service 706eca
	# default for the non- multi-arch target.
Packit Service 706eca
Packit Service 706eca
	# A zero PREDEFAULT function will force the fallback to call
Packit Service 706eca
	# internal_error().
Packit Service 706eca
Packit Service 706eca
	# Variable declarations can refer to ``gdbarch'' which will
Packit Service 706eca
	# contain the current architecture.  Care should be taken.
Packit Service 706eca
Packit Service 706eca
    postdefault ) : ;;
Packit Service 706eca
Packit Service 706eca
	# A value to assign to MEMBER of the new gdbarch object should
Packit Service 706eca
	# the target architecture code fail to change the PREDEFAULT
Packit Service 706eca
	# value.
Packit Service 706eca
Packit Service 706eca
	# If POSTDEFAULT is empty, no post update is performed.
Packit Service 706eca
Packit Service 706eca
	# If both INVALID_P and POSTDEFAULT are non-empty then
Packit Service 706eca
	# INVALID_P will be used to determine if MEMBER should be
Packit Service 706eca
	# changed to POSTDEFAULT.
Packit Service 706eca
Packit Service 706eca
	# If a non-empty POSTDEFAULT and a zero INVALID_P are
Packit Service 706eca
	# specified, POSTDEFAULT will be used as the default for the
Packit Service 706eca
	# non- multi-arch target (regardless of the value of
Packit Service 706eca
	# PREDEFAULT).
Packit Service 706eca
Packit Service 706eca
	# You cannot specify both a zero INVALID_P and a POSTDEFAULT.
Packit Service 706eca
Packit Service 706eca
	# Variable declarations can refer to ``gdbarch'' which
Packit Service 706eca
	# will contain the current architecture.  Care should be
Packit Service 706eca
	# taken.
Packit Service 706eca
Packit Service 706eca
    invalid_p ) : ;;
Packit Service 706eca
Packit Service 706eca
	# A predicate equation that validates MEMBER.  Non-zero is
Packit Service 706eca
	# returned if the code creating the new architecture failed to
Packit Service 706eca
	# initialize MEMBER or the initialized the member is invalid.
Packit Service 706eca
	# If POSTDEFAULT is non-empty then MEMBER will be updated to
Packit Service 706eca
	# that value.  If POSTDEFAULT is empty then internal_error()
Packit Service 706eca
	# is called.
Packit Service 706eca
Packit Service 706eca
	# If INVALID_P is empty, a check that MEMBER is no longer
Packit Service 706eca
	# equal to PREDEFAULT is used.
Packit Service 706eca
Packit Service 706eca
	# The expression ``0'' disables the INVALID_P check making
Packit Service 706eca
	# PREDEFAULT a legitimate value.
Packit Service 706eca
Packit Service 706eca
	# See also PREDEFAULT and POSTDEFAULT.
Packit Service 706eca
Packit Service 706eca
    print ) : ;;
Packit Service 706eca
Packit Service 706eca
	# An optional expression that convers MEMBER to a value
Packit Service 706eca
	# suitable for formatting using %s.
Packit Service 706eca
Packit Service 706eca
	# If PRINT is empty, core_addr_to_string_nz (for CORE_ADDR)
Packit Service 706eca
	# or plongest (anything else) is used.
Packit Service 706eca
Packit Service 706eca
    garbage_at_eol ) : ;;
Packit Service 706eca
Packit Service 706eca
	# Catches stray fields.
Packit Service 706eca
Packit Service 706eca
    *)
Packit Service 706eca
	echo "Bad field ${field}"
Packit Service 706eca
	exit 1;;
Packit Service 706eca
  esac
Packit Service 706eca
done
Packit Service 706eca
Packit Service 706eca
Packit Service 706eca
function_list ()
Packit Service 706eca
{
Packit Service 706eca
  # See below (DOCO) for description of each field
Packit Service 706eca
  cat <
Packit Service 706eca
i;const struct bfd_arch_info *;bfd_arch_info;;;&bfd_default_arch_struct;;;;gdbarch_bfd_arch_info (gdbarch)->printable_name
Packit Service 706eca
#
Packit Service 706eca
i;enum bfd_endian;byte_order;;;BFD_ENDIAN_BIG
Packit Service 706eca
i;enum bfd_endian;byte_order_for_code;;;BFD_ENDIAN_BIG
Packit Service 706eca
#
Packit Service 706eca
i;enum gdb_osabi;osabi;;;GDB_OSABI_UNKNOWN
Packit Service 706eca
#
Packit Service 706eca
i;const struct target_desc *;target_desc;;;;;;;host_address_to_string (gdbarch->target_desc)
Packit Service 706eca
Packit Service 706eca
# The bit byte-order has to do just with numbering of bits in debugging symbols
Packit Service 706eca
# and such.  Conceptually, it's quite separate from byte/word byte order.
Packit Service 706eca
v;int;bits_big_endian;;;1;(gdbarch->byte_order == BFD_ENDIAN_BIG);;0
Packit Service 706eca
Packit Service 706eca
# Number of bits in a short or unsigned short for the target machine.
Packit Service 706eca
v;int;short_bit;;;8 * sizeof (short);2*TARGET_CHAR_BIT;;0
Packit Service 706eca
# Number of bits in an int or unsigned int for the target machine.
Packit Service 706eca
v;int;int_bit;;;8 * sizeof (int);4*TARGET_CHAR_BIT;;0
Packit Service 706eca
# Number of bits in a long or unsigned long for the target machine.
Packit Service 706eca
v;int;long_bit;;;8 * sizeof (long);4*TARGET_CHAR_BIT;;0
Packit Service 706eca
# Number of bits in a long long or unsigned long long for the target
Packit Service 706eca
# machine.
Packit Service 706eca
v;int;long_long_bit;;;8 * sizeof (LONGEST);2*gdbarch->long_bit;;0
Packit Service 706eca
Packit Service 706eca
# The ABI default bit-size and format for "half", "float", "double", and
Packit Service 706eca
# "long double".  These bit/format pairs should eventually be combined
Packit Service 706eca
# into a single object.  For the moment, just initialize them as a pair.
Packit Service 706eca
# Each format describes both the big and little endian layouts (if
Packit Service 706eca
# useful).
Packit Service 706eca
Packit Service 706eca
v;int;half_bit;;;16;2*TARGET_CHAR_BIT;;0
Packit Service 706eca
v;const struct floatformat **;half_format;;;;;floatformats_ieee_half;;pformat (gdbarch->half_format)
Packit Service 706eca
v;int;float_bit;;;8 * sizeof (float);4*TARGET_CHAR_BIT;;0
Packit Service 706eca
v;const struct floatformat **;float_format;;;;;floatformats_ieee_single;;pformat (gdbarch->float_format)
Packit Service 706eca
v;int;double_bit;;;8 * sizeof (double);8*TARGET_CHAR_BIT;;0
Packit Service 706eca
v;const struct floatformat **;double_format;;;;;floatformats_ieee_double;;pformat (gdbarch->double_format)
Packit Service 706eca
v;int;long_double_bit;;;8 * sizeof (long double);8*TARGET_CHAR_BIT;;0
Packit Service 706eca
v;const struct floatformat **;long_double_format;;;;;floatformats_ieee_double;;pformat (gdbarch->long_double_format)
Packit Service 706eca
Packit Service 706eca
# The ABI default bit-size for "wchar_t".  wchar_t is a built-in type
Packit Service 706eca
# starting with C++11.
Packit Service 706eca
v;int;wchar_bit;;;8 * sizeof (wchar_t);4*TARGET_CHAR_BIT;;0
Packit Service 706eca
# One if \`wchar_t' is signed, zero if unsigned.
Packit Service 706eca
v;int;wchar_signed;;;1;-1;1
Packit Service 706eca
Packit Service 706eca
# Returns the floating-point format to be used for values of length LENGTH.
Packit Service 706eca
# NAME, if non-NULL, is the type name, which may be used to distinguish
Packit Service 706eca
# different target formats of the same length.
Packit Service c73d1e
m;const struct floatformat **;floatformat_for_type;const char *name, LONGEST length;name, length;0;default_floatformat_for_type;;0
Packit Service 706eca
Packit Service 706eca
# For most targets, a pointer on the target and its representation as an
Packit Service 706eca
# address in GDB have the same size and "look the same".  For such a
Packit Service 706eca
# target, you need only set gdbarch_ptr_bit and gdbarch_addr_bit
Packit Service 706eca
# / addr_bit will be set from it.
Packit Service 706eca
#
Packit Service 706eca
# If gdbarch_ptr_bit and gdbarch_addr_bit are different, you'll probably
Packit Service 706eca
# also need to set gdbarch_dwarf2_addr_size, gdbarch_pointer_to_address and
Packit Service 706eca
# gdbarch_address_to_pointer as well.
Packit Service 706eca
#
Packit Service 706eca
# ptr_bit is the size of a pointer on the target
Packit Service 706eca
v;int;ptr_bit;;;8 * sizeof (void*);gdbarch->int_bit;;0
Packit Service 706eca
# addr_bit is the size of a target address as represented in gdb
Packit Service 706eca
v;int;addr_bit;;;8 * sizeof (void*);0;gdbarch_ptr_bit (gdbarch);
Packit Service 706eca
#
Packit Service 706eca
# dwarf2_addr_size is the target address size as used in the Dwarf debug
Packit Service 706eca
# info.  For .debug_frame FDEs, this is supposed to be the target address
Packit Service 706eca
# size from the associated CU header, and which is equivalent to the
Packit Service 706eca
# DWARF2_ADDR_SIZE as defined by the target specific GCC back-end.
Packit Service 706eca
# Unfortunately there is no good way to determine this value.  Therefore
Packit Service 706eca
# dwarf2_addr_size simply defaults to the target pointer size.
Packit Service 706eca
#
Packit Service 706eca
# dwarf2_addr_size is not used for .eh_frame FDEs, which are generally
Packit Service 706eca
# defined using the target's pointer size so far.
Packit Service 706eca
#
Packit Service 706eca
# Note that dwarf2_addr_size only needs to be redefined by a target if the
Packit Service 706eca
# GCC back-end defines a DWARF2_ADDR_SIZE other than the target pointer size,
Packit Service 706eca
# and if Dwarf versions < 4 need to be supported.
Packit Service 706eca
v;int;dwarf2_addr_size;;;sizeof (void*);0;gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT;
Packit Service 706eca
#
Packit Service 706eca
# One if \`char' acts like \`signed char', zero if \`unsigned char'.
Packit Service 706eca
v;int;char_signed;;;1;-1;1
Packit Service 706eca
#
Packit Service 706eca
F;CORE_ADDR;read_pc;readable_regcache *regcache;regcache
Packit Service 706eca
F;void;write_pc;struct regcache *regcache, CORE_ADDR val;regcache, val
Packit Service 706eca
# Function for getting target's idea of a frame pointer.  FIXME: GDB's
Packit Service 706eca
# whole scheme for dealing with "frames" and "frame pointers" needs a
Packit Service 706eca
# serious shakedown.
Packit Service 706eca
m;void;virtual_frame_pointer;CORE_ADDR pc, int *frame_regnum, LONGEST *frame_offset;pc, frame_regnum, frame_offset;0;legacy_virtual_frame_pointer;;0
Packit Service 706eca
#
Packit Service 706eca
M;enum register_status;pseudo_register_read;readable_regcache *regcache, int cookednum, gdb_byte *buf;regcache, cookednum, buf
Packit Service 706eca
# Read a register into a new struct value.  If the register is wholly
Packit Service 706eca
# or partly unavailable, this should call mark_value_bytes_unavailable
Packit Service 706eca
# as appropriate.  If this is defined, then pseudo_register_read will
Packit Service 706eca
# never be called.
Packit Service 706eca
M;struct value *;pseudo_register_read_value;readable_regcache *regcache, int cookednum;regcache, cookednum
Packit Service 706eca
M;void;pseudo_register_write;struct regcache *regcache, int cookednum, const gdb_byte *buf;regcache, cookednum, buf
Packit Service 706eca
#
Packit Service 706eca
v;int;num_regs;;;0;-1
Packit Service 706eca
# This macro gives the number of pseudo-registers that live in the
Packit Service 706eca
# register namespace but do not get fetched or stored on the target.
Packit Service 706eca
# These pseudo-registers may be aliases for other registers,
Packit Service 706eca
# combinations of other registers, or they may be computed by GDB.
Packit Service 706eca
v;int;num_pseudo_regs;;;0;0;;0
Packit Service 706eca
Packit Service 706eca
# Assemble agent expression bytecode to collect pseudo-register REG.
Packit Service 706eca
# Return -1 if something goes wrong, 0 otherwise.
Packit Service 706eca
M;int;ax_pseudo_register_collect;struct agent_expr *ax, int reg;ax, reg
Packit Service 706eca
Packit Service 706eca
# Assemble agent expression bytecode to push the value of pseudo-register
Packit Service 706eca
# REG on the interpreter stack.
Packit Service 706eca
# Return -1 if something goes wrong, 0 otherwise.
Packit Service 706eca
M;int;ax_pseudo_register_push_stack;struct agent_expr *ax, int reg;ax, reg
Packit Service 706eca
Packit Service 706eca
# Some targets/architectures can do extra processing/display of
Packit Service 706eca
# segmentation faults.  E.g., Intel MPX boundary faults.
Packit Service 706eca
# Call the architecture dependent function to handle the fault.
Packit Service 706eca
# UIOUT is the output stream where the handler will place information.
Packit Service 706eca
M;void;handle_segmentation_fault;struct ui_out *uiout;uiout
Packit Service 706eca
Packit Service 706eca
# GDB's standard (or well known) register numbers.  These can map onto
Packit Service 706eca
# a real register or a pseudo (computed) register or not be defined at
Packit Service 706eca
# all (-1).
Packit Service 706eca
# gdbarch_sp_regnum will hopefully be replaced by UNWIND_SP.
Packit Service 706eca
v;int;sp_regnum;;;-1;-1;;0
Packit Service 706eca
v;int;pc_regnum;;;-1;-1;;0
Packit Service 706eca
v;int;ps_regnum;;;-1;-1;;0
Packit Service 706eca
v;int;fp0_regnum;;;0;-1;;0
Packit Service 706eca
# Convert stab register number (from \`r\' declaration) to a gdb REGNUM.
Packit Service 706eca
m;int;stab_reg_to_regnum;int stab_regnr;stab_regnr;;no_op_reg_to_regnum;;0
Packit Service 706eca
# Provide a default mapping from a ecoff register number to a gdb REGNUM.
Packit Service 706eca
m;int;ecoff_reg_to_regnum;int ecoff_regnr;ecoff_regnr;;no_op_reg_to_regnum;;0
Packit Service 706eca
# Convert from an sdb register number to an internal gdb register number.
Packit Service 706eca
m;int;sdb_reg_to_regnum;int sdb_regnr;sdb_regnr;;no_op_reg_to_regnum;;0
Packit Service 706eca
# Provide a default mapping from a DWARF2 register number to a gdb REGNUM.
Packit Service 706eca
# Return -1 for bad REGNUM.  Note: Several targets get this wrong.
Packit Service 706eca
m;int;dwarf2_reg_to_regnum;int dwarf2_regnr;dwarf2_regnr;;no_op_reg_to_regnum;;0
Packit Service 706eca
m;const char *;register_name;int regnr;regnr;;0
Packit Service 706eca
Packit Service 706eca
# Return the type of a register specified by the architecture.  Only
Packit Service 706eca
# the register cache should call this function directly; others should
Packit Service 706eca
# use "register_type".
Packit Service 706eca
M;struct type *;register_type;int reg_nr;reg_nr
Packit Service 706eca
Packit Service 706eca
M;struct frame_id;dummy_id;struct frame_info *this_frame;this_frame
Packit Service 706eca
# Implement DUMMY_ID and PUSH_DUMMY_CALL, then delete
Packit Service 706eca
# deprecated_fp_regnum.
Packit Service 706eca
v;int;deprecated_fp_regnum;;;-1;-1;;0
Packit Service 706eca
Packit Service 706eca
M;CORE_ADDR;push_dummy_call;struct value *function, struct regcache *regcache, CORE_ADDR bp_addr, int nargs, struct value **args, CORE_ADDR sp, int struct_return, CORE_ADDR struct_addr;function, regcache, bp_addr, nargs, args, sp, struct_return, struct_addr
Packit Service 706eca
v;int;call_dummy_location;;;;AT_ENTRY_POINT;;0
Packit Service 706eca
M;CORE_ADDR;push_dummy_code;CORE_ADDR sp, CORE_ADDR funaddr, struct value **args, int nargs, struct type *value_type, CORE_ADDR *real_pc, CORE_ADDR *bp_addr, struct regcache *regcache;sp, funaddr, args, nargs, value_type, real_pc, bp_addr, regcache
Packit Service 706eca
Packit Service 706eca
# Return true if the code of FRAME is writable.
Packit Service 706eca
m;int;code_of_frame_writable;struct frame_info *frame;frame;;default_code_of_frame_writable;;0
Packit Service 706eca
Packit Service 706eca
m;void;print_registers_info;struct ui_file *file, struct frame_info *frame, int regnum, int all;file, frame, regnum, all;;default_print_registers_info;;0
Packit Service 706eca
m;void;print_float_info;struct ui_file *file, struct frame_info *frame, const char *args;file, frame, args;;default_print_float_info;;0
Packit Service 706eca
M;void;print_vector_info;struct ui_file *file, struct frame_info *frame, const char *args;file, frame, args
Packit Service 706eca
# MAP a GDB RAW register number onto a simulator register number.  See
Packit Service 706eca
# also include/...-sim.h.
Packit Service 706eca
m;int;register_sim_regno;int reg_nr;reg_nr;;legacy_register_sim_regno;;0
Packit Service 706eca
m;int;cannot_fetch_register;int regnum;regnum;;cannot_register_not;;0
Packit Service 706eca
m;int;cannot_store_register;int regnum;regnum;;cannot_register_not;;0
Packit Service 706eca
Packit Service 706eca
# Determine the address where a longjmp will land and save this address
Packit Service 706eca
# in PC.  Return nonzero on success.
Packit Service 706eca
#
Packit Service 706eca
# FRAME corresponds to the longjmp frame.
Packit Service 706eca
F;int;get_longjmp_target;struct frame_info *frame, CORE_ADDR *pc;frame, pc
Packit Service 706eca
Packit Service 706eca
#
Packit Service 706eca
v;int;believe_pcc_promotion;;;;;;;
Packit Service 706eca
#
Packit Service 706eca
m;int;convert_register_p;int regnum, struct type *type;regnum, type;0;generic_convert_register_p;;0
Packit Service 706eca
f;int;register_to_value;struct frame_info *frame, int regnum, struct type *type, gdb_byte *buf, int *optimizedp, int *unavailablep;frame, regnum, type, buf, optimizedp, unavailablep;0
Packit Service 706eca
f;void;value_to_register;struct frame_info *frame, int regnum, struct type *type, const gdb_byte *buf;frame, regnum, type, buf;0
Packit Service 706eca
# Construct a value representing the contents of register REGNUM in
Packit Service 706eca
# frame FRAME_ID, interpreted as type TYPE.  The routine needs to
Packit Service 706eca
# allocate and return a struct value with all value attributes
Packit Service 706eca
# (but not the value contents) filled in.
Packit Service 706eca
m;struct value *;value_from_register;struct type *type, int regnum, struct frame_id frame_id;type, regnum, frame_id;;default_value_from_register;;0
Packit Service 706eca
#
Packit Service 706eca
m;CORE_ADDR;pointer_to_address;struct type *type, const gdb_byte *buf;type, buf;;unsigned_pointer_to_address;;0
Packit Service 706eca
m;void;address_to_pointer;struct type *type, gdb_byte *buf, CORE_ADDR addr;type, buf, addr;;unsigned_address_to_pointer;;0
Packit Service 706eca
M;CORE_ADDR;integer_to_address;struct type *type, const gdb_byte *buf;type, buf
Packit Service 706eca
Packit Service 706eca
# Return the return-value convention that will be used by FUNCTION
Packit Service 706eca
# to return a value of type VALTYPE.  FUNCTION may be NULL in which
Packit Service 706eca
# case the return convention is computed based only on VALTYPE.
Packit Service 706eca
#
Packit Service 706eca
# If READBUF is not NULL, extract the return value and save it in this buffer.
Packit Service 706eca
#
Packit Service 706eca
# If WRITEBUF is not NULL, it contains a return value which will be
Packit Service 706eca
# stored into the appropriate register.  This can be used when we want
Packit Service 706eca
# to force the value returned by a function (see the "return" command
Packit Service 706eca
# for instance).
Packit Service 706eca
M;enum return_value_convention;return_value;struct value *function, struct type *valtype, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf;function, valtype, regcache, readbuf, writebuf
Packit Service 706eca
Packit Service 706eca
# Return true if the return value of function is stored in the first hidden
Packit Service 706eca
# parameter.  In theory, this feature should be language-dependent, specified
Packit Service 706eca
# by language and its ABI, such as C++.  Unfortunately, compiler may
Packit Service 706eca
# implement it to a target-dependent feature.  So that we need such hook here
Packit Service 706eca
# to be aware of this in GDB.
Packit Service 706eca
m;int;return_in_first_hidden_param_p;struct type *type;type;;default_return_in_first_hidden_param_p;;0
Packit Service 706eca
Packit Service 706eca
m;CORE_ADDR;skip_prologue;CORE_ADDR ip;ip;0;0
Packit Service 706eca
M;CORE_ADDR;skip_main_prologue;CORE_ADDR ip;ip
Packit Service 706eca
# On some platforms, a single function may provide multiple entry points,
Packit Service 706eca
# e.g. one that is used for function-pointer calls and a different one
Packit Service 706eca
# that is used for direct function calls.
Packit Service 706eca
# In order to ensure that breakpoints set on the function will trigger
Packit Service 706eca
# no matter via which entry point the function is entered, a platform
Packit Service 706eca
# may provide the skip_entrypoint callback.  It is called with IP set
Packit Service 706eca
# to the main entry point of a function (as determined by the symbol table),
Packit Service 706eca
# and should return the address of the innermost entry point, where the
Packit Service 706eca
# actual breakpoint needs to be set.  Note that skip_entrypoint is used
Packit Service 706eca
# by GDB common code even when debugging optimized code, where skip_prologue
Packit Service 706eca
# is not used.
Packit Service 706eca
M;CORE_ADDR;skip_entrypoint;CORE_ADDR ip;ip
Packit Service 706eca
Packit Service 706eca
f;int;inner_than;CORE_ADDR lhs, CORE_ADDR rhs;lhs, rhs;0;0
Packit Service 706eca
m;const gdb_byte *;breakpoint_from_pc;CORE_ADDR *pcptr, int *lenptr;pcptr, lenptr;0;default_breakpoint_from_pc;;0
Packit Service 706eca
Packit Service 706eca
# Return the breakpoint kind for this target based on *PCPTR.
Packit Service 706eca
m;int;breakpoint_kind_from_pc;CORE_ADDR *pcptr;pcptr;;0;
Packit Service 706eca
Packit Service 706eca
# Return the software breakpoint from KIND.  KIND can have target
Packit Service 706eca
# specific meaning like the Z0 kind parameter.
Packit Service 706eca
# SIZE is set to the software breakpoint's length in memory.
Packit Service 706eca
m;const gdb_byte *;sw_breakpoint_from_kind;int kind, int *size;kind, size;;NULL;;0
Packit Service 706eca
Packit Service 706eca
# Return the breakpoint kind for this target based on the current
Packit Service 706eca
# processor state (e.g. the current instruction mode on ARM) and the
Packit Service 706eca
# *PCPTR.  In default, it is gdbarch->breakpoint_kind_from_pc.
Packit Service 706eca
m;int;breakpoint_kind_from_current_state;struct regcache *regcache, CORE_ADDR *pcptr;regcache, pcptr;0;default_breakpoint_kind_from_current_state;;0
Packit Service 706eca
Packit Service 706eca
M;CORE_ADDR;adjust_breakpoint_address;CORE_ADDR bpaddr;bpaddr
Packit Service 706eca
m;int;memory_insert_breakpoint;struct bp_target_info *bp_tgt;bp_tgt;0;default_memory_insert_breakpoint;;0
Packit Service 706eca
m;int;memory_remove_breakpoint;struct bp_target_info *bp_tgt;bp_tgt;0;default_memory_remove_breakpoint;;0
Packit Service 706eca
v;CORE_ADDR;decr_pc_after_break;;;0;;;0
Packit Service 706eca
Packit Service 706eca
# A function can be addressed by either it's "pointer" (possibly a
Packit Service 706eca
# descriptor address) or "entry point" (first executable instruction).
Packit Service 706eca
# The method "convert_from_func_ptr_addr" converting the former to the
Packit Service 706eca
# latter.  gdbarch_deprecated_function_start_offset is being used to implement
Packit Service 706eca
# a simplified subset of that functionality - the function's address
Packit Service 706eca
# corresponds to the "function pointer" and the function's start
Packit Service 706eca
# corresponds to the "function entry point" - and hence is redundant.
Packit Service 706eca
Packit Service 706eca
v;CORE_ADDR;deprecated_function_start_offset;;;0;;;0
Packit Service 706eca
Packit Service 706eca
# Return the remote protocol register number associated with this
Packit Service 706eca
# register.  Normally the identity mapping.
Packit Service 706eca
m;int;remote_register_number;int regno;regno;;default_remote_register_number;;0
Packit Service 706eca
Packit Service 706eca
# Fetch the target specific address used to represent a load module.
Packit Service 706eca
F;CORE_ADDR;fetch_tls_load_module_address;struct objfile *objfile;objfile
Packit Service 706eca
#
Packit Service 706eca
v;CORE_ADDR;frame_args_skip;;;0;;;0
Packit Service 706eca
M;CORE_ADDR;unwind_pc;struct frame_info *next_frame;next_frame
Packit Service 706eca
M;CORE_ADDR;unwind_sp;struct frame_info *next_frame;next_frame
Packit Service 706eca
# DEPRECATED_FRAME_LOCALS_ADDRESS as been replaced by the per-frame
Packit Service 706eca
# frame-base.  Enable frame-base before frame-unwind.
Packit Service 706eca
F;int;frame_num_args;struct frame_info *frame;frame
Packit Service 706eca
#
Packit Service 706eca
M;CORE_ADDR;frame_align;CORE_ADDR address;address
Packit Service 706eca
m;int;stabs_argument_has_addr;struct type *type;type;;default_stabs_argument_has_addr;;0
Packit Service 706eca
v;int;frame_red_zone_size
Packit Service 706eca
#
Packit Service 706eca
m;CORE_ADDR;convert_from_func_ptr_addr;CORE_ADDR addr, struct target_ops *targ;addr, targ;;convert_from_func_ptr_addr_identity;;0
Packit Service 706eca
# On some machines there are bits in addresses which are not really
Packit Service 706eca
# part of the address, but are used by the kernel, the hardware, etc.
Packit Service 706eca
# for special purposes.  gdbarch_addr_bits_remove takes out any such bits so
Packit Service 706eca
# we get a "real" address such as one would find in a symbol table.
Packit Service 706eca
# This is used only for addresses of instructions, and even then I'm
Packit Service 706eca
# not sure it's used in all contexts.  It exists to deal with there
Packit Service 706eca
# being a few stray bits in the PC which would mislead us, not as some
Packit Service 706eca
# sort of generic thing to handle alignment or segmentation (it's
Packit Service 706eca
# possible it should be in TARGET_READ_PC instead).
Packit Service 706eca
m;CORE_ADDR;addr_bits_remove;CORE_ADDR addr;addr;;core_addr_identity;;0
Packit Service 706eca
Packit Service 706eca
# On some machines, not all bits of an address word are significant.
Packit Service 706eca
# For example, on AArch64, the top bits of an address known as the "tag"
Packit Service 706eca
# are ignored by the kernel, the hardware, etc. and can be regarded as
Packit Service 706eca
# additional data associated with the address.
Packit Service 706eca
v;int;significant_addr_bit;;;;;;0
Packit Service 706eca
Packit Service 706eca
# FIXME/cagney/2001-01-18: This should be split in two.  A target method that
Packit Service 706eca
# indicates if the target needs software single step.  An ISA method to
Packit Service 706eca
# implement it.
Packit Service 706eca
#
Packit Service 706eca
# FIXME/cagney/2001-01-18: The logic is backwards.  It should be asking if the
Packit Service 706eca
# target can single step.  If not, then implement single step using breakpoints.
Packit Service 706eca
#
Packit Service 706eca
# Return a vector of addresses on which the software single step
Packit Service 706eca
# breakpoints should be inserted.  NULL means software single step is
Packit Service 706eca
# not used.
Packit Service 706eca
# Multiple breakpoints may be inserted for some instructions such as
Packit Service 706eca
# conditional branch.  However, each implementation must always evaluate
Packit Service 706eca
# the condition and only put the breakpoint at the branch destination if
Packit Service 706eca
# the condition is true, so that we ensure forward progress when stepping
Packit Service 706eca
# past a conditional branch to self.
Packit Service 706eca
F;std::vector<CORE_ADDR>;software_single_step;struct regcache *regcache;regcache
Packit Service 706eca
Packit Service 706eca
# Return non-zero if the processor is executing a delay slot and a
Packit Service 706eca
# further single-step is needed before the instruction finishes.
Packit Service 706eca
M;int;single_step_through_delay;struct frame_info *frame;frame
Packit Service 706eca
# FIXME: cagney/2003-08-28: Need to find a better way of selecting the
Packit Service 706eca
# disassembler.  Perhaps objdump can handle it?
Packit Service 706eca
f;int;print_insn;bfd_vma vma, struct disassemble_info *info;vma, info;;default_print_insn;;0
Packit Service 706eca
f;CORE_ADDR;skip_trampoline_code;struct frame_info *frame, CORE_ADDR pc;frame, pc;;generic_skip_trampoline_code;;0
Packit Service 706eca
Packit Service 706eca
Packit Service 706eca
# If in_solib_dynsym_resolve_code() returns true, and SKIP_SOLIB_RESOLVER
Packit Service 706eca
# evaluates non-zero, this is the address where the debugger will place
Packit Service 706eca
# a step-resume breakpoint to get us past the dynamic linker.
Packit Service 706eca
m;CORE_ADDR;skip_solib_resolver;CORE_ADDR pc;pc;;generic_skip_solib_resolver;;0
Packit Service 706eca
# Some systems also have trampoline code for returning from shared libs.
Packit Service 706eca
m;int;in_solib_return_trampoline;CORE_ADDR pc, const char *name;pc, name;;generic_in_solib_return_trampoline;;0
Packit Service 706eca
Packit Service 706eca
# Return true if PC lies inside an indirect branch thunk.
Packit Service 706eca
m;bool;in_indirect_branch_thunk;CORE_ADDR pc;pc;;default_in_indirect_branch_thunk;;0
Packit Service 706eca
Packit Service 706eca
# A target might have problems with watchpoints as soon as the stack
Packit Service 706eca
# frame of the current function has been destroyed.  This mostly happens
Packit Service 706eca
# as the first action in a function's epilogue.  stack_frame_destroyed_p()
Packit Service 706eca
# is defined to return a non-zero value if either the given addr is one
Packit Service 706eca
# instruction after the stack destroying instruction up to the trailing
Packit Service 706eca
# return instruction or if we can figure out that the stack frame has
Packit Service 706eca
# already been invalidated regardless of the value of addr.  Targets
Packit Service 706eca
# which don't suffer from that problem could just let this functionality
Packit Service 706eca
# untouched.
Packit Service 706eca
m;int;stack_frame_destroyed_p;CORE_ADDR addr;addr;0;generic_stack_frame_destroyed_p;;0
Packit Service 706eca
# Process an ELF symbol in the minimal symbol table in a backend-specific
Packit Service 706eca
# way.  Normally this hook is supposed to do nothing, however if required,
Packit Service 706eca
# then this hook can be used to apply tranformations to symbols that are
Packit Service 706eca
# considered special in some way.  For example the MIPS backend uses it
Packit Service 706eca
# to interpret \`st_other' information to mark compressed code symbols so
Packit Service 706eca
# that they can be treated in the appropriate manner in the processing of
Packit Service 706eca
# the main symbol table and DWARF-2 records.
Packit Service 706eca
F;void;elf_make_msymbol_special;asymbol *sym, struct minimal_symbol *msym;sym, msym
Packit Service 706eca
f;void;coff_make_msymbol_special;int val, struct minimal_symbol *msym;val, msym;;default_coff_make_msymbol_special;;0
Packit Service 706eca
# Process a symbol in the main symbol table in a backend-specific way.
Packit Service 706eca
# Normally this hook is supposed to do nothing, however if required,
Packit Service 706eca
# then this hook can be used to apply tranformations to symbols that
Packit Service 706eca
# are considered special in some way.  This is currently used by the
Packit Service 706eca
# MIPS backend to make sure compressed code symbols have the ISA bit
Packit Service 706eca
# set.  This in turn is needed for symbol values seen in GDB to match
Packit Service 706eca
# the values used at the runtime by the program itself, for function
Packit Service 706eca
# and label references.
Packit Service 706eca
f;void;make_symbol_special;struct symbol *sym, struct objfile *objfile;sym, objfile;;default_make_symbol_special;;0
Packit Service 706eca
# Adjust the address retrieved from a DWARF-2 record other than a line
Packit Service 706eca
# entry in a backend-specific way.  Normally this hook is supposed to
Packit Service 706eca
# return the address passed unchanged, however if that is incorrect for
Packit Service 706eca
# any reason, then this hook can be used to fix the address up in the
Packit Service 706eca
# required manner.  This is currently used by the MIPS backend to make
Packit Service 706eca
# sure addresses in FDE, range records, etc. referring to compressed
Packit Service 706eca
# code have the ISA bit set, matching line information and the symbol
Packit Service 706eca
# table.
Packit Service 706eca
f;CORE_ADDR;adjust_dwarf2_addr;CORE_ADDR pc;pc;;default_adjust_dwarf2_addr;;0
Packit Service 706eca
# Adjust the address updated by a line entry in a backend-specific way.
Packit Service 706eca
# Normally this hook is supposed to return the address passed unchanged,
Packit Service 706eca
# however in the case of inconsistencies in these records, this hook can
Packit Service 706eca
# be used to fix them up in the required manner.  This is currently used
Packit Service 706eca
# by the MIPS backend to make sure all line addresses in compressed code
Packit Service 706eca
# are presented with the ISA bit set, which is not always the case.  This
Packit Service 706eca
# in turn ensures breakpoint addresses are correctly matched against the
Packit Service 706eca
# stop PC.
Packit Service 706eca
f;CORE_ADDR;adjust_dwarf2_line;CORE_ADDR addr, int rel;addr, rel;;default_adjust_dwarf2_line;;0
Packit Service 706eca
v;int;cannot_step_breakpoint;;;0;0;;0
Packit Service 706eca
v;int;have_nonsteppable_watchpoint;;;0;0;;0
Packit Service 706eca
F;int;address_class_type_flags;int byte_size, int dwarf2_addr_class;byte_size, dwarf2_addr_class
Packit Service 706eca
M;const char *;address_class_type_flags_to_name;int type_flags;type_flags
Packit Service 706eca
# Execute vendor-specific DWARF Call Frame Instruction.  OP is the instruction.
Packit Service 706eca
# FS are passed from the generic execute_cfa_program function.
Packit Service 706eca
m;bool;execute_dwarf_cfa_vendor_op;gdb_byte op, struct dwarf2_frame_state *fs;op, fs;;default_execute_dwarf_cfa_vendor_op;;0
Packit Service 706eca
Packit Service 706eca
# Return the appropriate type_flags for the supplied address class.
Packit Service 706eca
# This function should return 1 if the address class was recognized and
Packit Service 706eca
# type_flags was set, zero otherwise.
Packit Service 706eca
M;int;address_class_name_to_type_flags;const char *name, int *type_flags_ptr;name, type_flags_ptr
Packit Service 706eca
# Is a register in a group
Packit Service 706eca
m;int;register_reggroup_p;int regnum, struct reggroup *reggroup;regnum, reggroup;;default_register_reggroup_p;;0
Packit Service 706eca
# Fetch the pointer to the ith function argument.
Packit Service 706eca
F;CORE_ADDR;fetch_pointer_argument;struct frame_info *frame, int argi, struct type *type;frame, argi, type
Packit Service 706eca
Packit Service 706eca
# Iterate over all supported register notes in a core file.  For each
Packit Service 706eca
# supported register note section, the iterator must call CB and pass
Packit Service 706eca
# CB_DATA unchanged.  If REGCACHE is not NULL, the iterator can limit
Packit Service 706eca
# the supported register note sections based on the current register
Packit Service 706eca
# values.  Otherwise it should enumerate all supported register note
Packit Service 706eca
# sections.
Packit Service 706eca
M;void;iterate_over_regset_sections;iterate_over_regset_sections_cb *cb, void *cb_data, const struct regcache *regcache;cb, cb_data, regcache
Packit Service 706eca
Packit Service 706eca
# Create core file notes
Packit Service 706eca
M;char *;make_corefile_notes;bfd *obfd, int *note_size;obfd, note_size
Packit Service 706eca
Packit Service 706eca
# Find core file memory regions
Packit Service 706eca
M;int;find_memory_regions;find_memory_region_ftype func, void *data;func, data
Packit Service 706eca
Packit Service 706eca
# Read offset OFFSET of TARGET_OBJECT_LIBRARIES formatted shared libraries list from
Packit Service 706eca
# core file into buffer READBUF with length LEN.  Return the number of bytes read
Packit Service 706eca
# (zero indicates failure).
Packit Service 706eca
# failed, otherwise, return the red length of READBUF.
Packit Service 706eca
M;ULONGEST;core_xfer_shared_libraries;gdb_byte *readbuf, ULONGEST offset, ULONGEST len;readbuf, offset, len
Packit Service 706eca
Packit Service 706eca
# Read offset OFFSET of TARGET_OBJECT_LIBRARIES_AIX formatted shared
Packit Service 706eca
# libraries list from core file into buffer READBUF with length LEN.
Packit Service 706eca
# Return the number of bytes read (zero indicates failure).
Packit Service 706eca
M;ULONGEST;core_xfer_shared_libraries_aix;gdb_byte *readbuf, ULONGEST offset, ULONGEST len;readbuf, offset, len
Packit Service 706eca
Packit Service 706eca
# How the core target converts a PTID from a core file to a string.
Packit Service 706eca
M;const char *;core_pid_to_str;ptid_t ptid;ptid
Packit Service 706eca
Packit Service 706eca
# How the core target extracts the name of a thread from a core file.
Packit Service 706eca
M;const char *;core_thread_name;struct thread_info *thr;thr
Packit Service 706eca
Packit Service 706eca
# Read offset OFFSET of TARGET_OBJECT_SIGNAL_INFO signal information
Packit Service 706eca
# from core file into buffer READBUF with length LEN.  Return the number
Packit Service 706eca
# of bytes read (zero indicates EOF, a negative value indicates failure).
Packit Service 706eca
M;LONGEST;core_xfer_siginfo;gdb_byte *readbuf, ULONGEST offset, ULONGEST len; readbuf, offset, len
Packit Service 706eca
Packit Service 706eca
# BFD target to use when generating a core file.
Packit Service 706eca
V;const char *;gcore_bfd_target;;;0;0;;;pstring (gdbarch->gcore_bfd_target)
Packit Service 706eca
Packit Service 706eca
# If the elements of C++ vtables are in-place function descriptors rather
Packit Service 706eca
# than normal function pointers (which may point to code or a descriptor),
Packit Service 706eca
# set this to one.
Packit Service 706eca
v;int;vtable_function_descriptors;;;0;0;;0
Packit Service 706eca
Packit Service 706eca
# Set if the least significant bit of the delta is used instead of the least
Packit Service 706eca
# significant bit of the pfn for pointers to virtual member functions.
Packit Service 706eca
v;int;vbit_in_delta;;;0;0;;0
Packit Service 706eca
Packit Service 706eca
# Advance PC to next instruction in order to skip a permanent breakpoint.
Packit Service 706eca
f;void;skip_permanent_breakpoint;struct regcache *regcache;regcache;default_skip_permanent_breakpoint;default_skip_permanent_breakpoint;;0
Packit Service 706eca
Packit Service 706eca
# The maximum length of an instruction on this architecture in bytes.
Packit Service 706eca
V;ULONGEST;max_insn_length;;;0;0
Packit Service 706eca
Packit Service 706eca
# Copy the instruction at FROM to TO, and make any adjustments
Packit Service 706eca
# necessary to single-step it at that address.
Packit Service 706eca
#
Packit Service 706eca
# REGS holds the state the thread's registers will have before
Packit Service 706eca
# executing the copied instruction; the PC in REGS will refer to FROM,
Packit Service 706eca
# not the copy at TO.  The caller should update it to point at TO later.
Packit Service 706eca
#
Packit Service 706eca
# Return a pointer to data of the architecture's choice to be passed
Packit Service 706eca
# to gdbarch_displaced_step_fixup.  Or, return NULL to indicate that
Packit Service 706eca
# the instruction's effects have been completely simulated, with the
Packit Service 706eca
# resulting state written back to REGS.
Packit Service 706eca
#
Packit Service 706eca
# For a general explanation of displaced stepping and how GDB uses it,
Packit Service 706eca
# see the comments in infrun.c.
Packit Service 706eca
#
Packit Service 706eca
# The TO area is only guaranteed to have space for
Packit Service 706eca
# gdbarch_max_insn_length (arch) bytes, so this function must not
Packit Service 706eca
# write more bytes than that to that area.
Packit Service 706eca
#
Packit Service 706eca
# If you do not provide this function, GDB assumes that the
Packit Service 706eca
# architecture does not support displaced stepping.
Packit Service 706eca
#
Packit Service 706eca
# If the instruction cannot execute out of line, return NULL.  The
Packit Service 706eca
# core falls back to stepping past the instruction in-line instead in
Packit Service 706eca
# that case.
Packit Service 706eca
M;struct displaced_step_closure *;displaced_step_copy_insn;CORE_ADDR from, CORE_ADDR to, struct regcache *regs;from, to, regs
Packit Service 706eca
Packit Service 706eca
# Return true if GDB should use hardware single-stepping to execute
Packit Service 706eca
# the displaced instruction identified by CLOSURE.  If false,
Packit Service 706eca
# GDB will simply restart execution at the displaced instruction
Packit Service 706eca
# location, and it is up to the target to ensure GDB will receive
Packit Service 706eca
# control again (e.g. by placing a software breakpoint instruction
Packit Service 706eca
# into the displaced instruction buffer).
Packit Service 706eca
#
Packit Service 706eca
# The default implementation returns false on all targets that
Packit Service 706eca
# provide a gdbarch_software_single_step routine, and true otherwise.
Packit Service 706eca
m;int;displaced_step_hw_singlestep;struct displaced_step_closure *closure;closure;;default_displaced_step_hw_singlestep;;0
Packit Service 706eca
Packit Service 706eca
# Fix up the state resulting from successfully single-stepping a
Packit Service 706eca
# displaced instruction, to give the result we would have gotten from
Packit Service 706eca
# stepping the instruction in its original location.
Packit Service 706eca
#
Packit Service 706eca
# REGS is the register state resulting from single-stepping the
Packit Service 706eca
# displaced instruction.
Packit Service 706eca
#
Packit Service 706eca
# CLOSURE is the result from the matching call to
Packit Service 706eca
# gdbarch_displaced_step_copy_insn.
Packit Service 706eca
#
Packit Service 706eca
# If you provide gdbarch_displaced_step_copy_insn.but not this
Packit Service 706eca
# function, then GDB assumes that no fixup is needed after
Packit Service 706eca
# single-stepping the instruction.
Packit Service 706eca
#
Packit Service 706eca
# For a general explanation of displaced stepping and how GDB uses it,
Packit Service 706eca
# see the comments in infrun.c.
Packit Service 706eca
M;void;displaced_step_fixup;struct displaced_step_closure *closure, CORE_ADDR from, CORE_ADDR to, struct regcache *regs;closure, from, to, regs;;NULL
Packit Service 706eca
Packit Service 706eca
# Return the address of an appropriate place to put displaced
Packit Service 706eca
# instructions while we step over them.  There need only be one such
Packit Service 706eca
# place, since we're only stepping one thread over a breakpoint at a
Packit Service 706eca
# time.
Packit Service 706eca
#
Packit Service 706eca
# For a general explanation of displaced stepping and how GDB uses it,
Packit Service 706eca
# see the comments in infrun.c.
Packit Service 706eca
m;CORE_ADDR;displaced_step_location;void;;;NULL;;(! gdbarch->displaced_step_location) != (! gdbarch->displaced_step_copy_insn)
Packit Service 706eca
Packit Service 706eca
# Relocate an instruction to execute at a different address.  OLDLOC
Packit Service 706eca
# is the address in the inferior memory where the instruction to
Packit Service 706eca
# relocate is currently at.  On input, TO points to the destination
Packit Service 706eca
# where we want the instruction to be copied (and possibly adjusted)
Packit Service 706eca
# to.  On output, it points to one past the end of the resulting
Packit Service 706eca
# instruction(s).  The effect of executing the instruction at TO shall
Packit Service 706eca
# be the same as if executing it at FROM.  For example, call
Packit Service 706eca
# instructions that implicitly push the return address on the stack
Packit Service 706eca
# should be adjusted to return to the instruction after OLDLOC;
Packit Service 706eca
# relative branches, and other PC-relative instructions need the
Packit Service 706eca
# offset adjusted; etc.
Packit Service 706eca
M;void;relocate_instruction;CORE_ADDR *to, CORE_ADDR from;to, from;;NULL
Packit Service 706eca
Packit Service 706eca
# Refresh overlay mapped state for section OSECT.
Packit Service 706eca
F;void;overlay_update;struct obj_section *osect;osect
Packit Service 706eca
Packit Service 706eca
M;const struct target_desc *;core_read_description;struct target_ops *target, bfd *abfd;target, abfd
Packit Service 706eca
Packit Service 706eca
# Handle special encoding of static variables in stabs debug info.
Packit Service 706eca
F;const char *;static_transform_name;const char *name;name
Packit Service 706eca
# Set if the address in N_SO or N_FUN stabs may be zero.
Packit Service 706eca
v;int;sofun_address_maybe_missing;;;0;0;;0
Packit Service 706eca
Packit Service 706eca
# Parse the instruction at ADDR storing in the record execution log
Packit Service 706eca
# the registers REGCACHE and memory ranges that will be affected when
Packit Service 706eca
# the instruction executes, along with their current values.
Packit Service 706eca
# Return -1 if something goes wrong, 0 otherwise.
Packit Service 706eca
M;int;process_record;struct regcache *regcache, CORE_ADDR addr;regcache, addr
Packit Service 706eca
Packit Service 706eca
# Save process state after a signal.
Packit Service 706eca
# Return -1 if something goes wrong, 0 otherwise.
Packit Service 706eca
M;int;process_record_signal;struct regcache *regcache, enum gdb_signal signal;regcache, signal
Packit Service 706eca
Packit Service 706eca
# Signal translation: translate inferior's signal (target's) number
Packit Service 706eca
# into GDB's representation.  The implementation of this method must
Packit Service 706eca
# be host independent.  IOW, don't rely on symbols of the NAT_FILE
Packit Service 706eca
# header (the nm-*.h files), the host <signal.h> header, or similar
Packit Service 706eca
# headers.  This is mainly used when cross-debugging core files ---
Packit Service 706eca
# "Live" targets hide the translation behind the target interface
Packit Service 706eca
# (target_wait, target_resume, etc.).
Packit Service 706eca
M;enum gdb_signal;gdb_signal_from_target;int signo;signo
Packit Service 706eca
Packit Service 706eca
# Signal translation: translate the GDB's internal signal number into
Packit Service 706eca
# the inferior's signal (target's) representation.  The implementation
Packit Service 706eca
# of this method must be host independent.  IOW, don't rely on symbols
Packit Service 706eca
# of the NAT_FILE header (the nm-*.h files), the host <signal.h>
Packit Service 706eca
# header, or similar headers.
Packit Service 706eca
# Return the target signal number if found, or -1 if the GDB internal
Packit Service 706eca
# signal number is invalid.
Packit Service 706eca
M;int;gdb_signal_to_target;enum gdb_signal signal;signal
Packit Service 706eca
Packit Service 706eca
# Extra signal info inspection.
Packit Service 706eca
#
Packit Service 706eca
# Return a type suitable to inspect extra signal information.
Packit Service 706eca
M;struct type *;get_siginfo_type;void;
Packit Service 706eca
Packit Service 706eca
# Record architecture-specific information from the symbol table.
Packit Service 706eca
M;void;record_special_symbol;struct objfile *objfile, asymbol *sym;objfile, sym
Packit Service 706eca
Packit Service 706eca
# Function for the 'catch syscall' feature.
Packit Service 706eca
Packit Service 706eca
# Get architecture-specific system calls information from registers.
Packit Service 706eca
M;LONGEST;get_syscall_number;thread_info *thread;thread
Packit Service 706eca
Packit Service 706eca
# The filename of the XML syscall for this architecture.
Packit Service 706eca
v;const char *;xml_syscall_file;;;0;0;;0;pstring (gdbarch->xml_syscall_file)
Packit Service 706eca
Packit Service 706eca
# Information about system calls from this architecture
Packit Service 706eca
v;struct syscalls_info *;syscalls_info;;;0;0;;0;host_address_to_string (gdbarch->syscalls_info)
Packit Service 706eca
Packit Service 706eca
# SystemTap related fields and functions.
Packit Service 706eca
Packit Service 706eca
# A NULL-terminated array of prefixes used to mark an integer constant
Packit Service 706eca
# on the architecture's assembly.
Packit Service 706eca
# For example, on x86 integer constants are written as:
Packit Service 706eca
#
Packit Service 706eca
#  \$10 ;; integer constant 10
Packit Service 706eca
#
Packit Service 706eca
# in this case, this prefix would be the character \`\$\'.
Packit Service 706eca
v;const char *const *;stap_integer_prefixes;;;0;0;;0;pstring_list (gdbarch->stap_integer_prefixes)
Packit Service 706eca
Packit Service 706eca
# A NULL-terminated array of suffixes used to mark an integer constant
Packit Service 706eca
# on the architecture's assembly.
Packit Service 706eca
v;const char *const *;stap_integer_suffixes;;;0;0;;0;pstring_list (gdbarch->stap_integer_suffixes)
Packit Service 706eca
Packit Service 706eca
# A NULL-terminated array of prefixes used to mark a register name on
Packit Service 706eca
# the architecture's assembly.
Packit Service 706eca
# For example, on x86 the register name is written as:
Packit Service 706eca
#
Packit Service 706eca
#  \%eax ;; register eax
Packit Service 706eca
#
Packit Service 706eca
# in this case, this prefix would be the character \`\%\'.
Packit Service 706eca
v;const char *const *;stap_register_prefixes;;;0;0;;0;pstring_list (gdbarch->stap_register_prefixes)
Packit Service 706eca
Packit Service 706eca
# A NULL-terminated array of suffixes used to mark a register name on
Packit Service 706eca
# the architecture's assembly.
Packit Service 706eca
v;const char *const *;stap_register_suffixes;;;0;0;;0;pstring_list (gdbarch->stap_register_suffixes)
Packit Service 706eca
Packit Service 706eca
# A NULL-terminated array of prefixes used to mark a register
Packit Service 706eca
# indirection on the architecture's assembly.
Packit Service 706eca
# For example, on x86 the register indirection is written as:
Packit Service 706eca
#
Packit Service 706eca
#  \(\%eax\) ;; indirecting eax
Packit Service 706eca
#
Packit Service 706eca
# in this case, this prefix would be the charater \`\(\'.
Packit Service 706eca
#
Packit Service 706eca
# Please note that we use the indirection prefix also for register
Packit Service 706eca
# displacement, e.g., \`4\(\%eax\)\' on x86.
Packit Service 706eca
v;const char *const *;stap_register_indirection_prefixes;;;0;0;;0;pstring_list (gdbarch->stap_register_indirection_prefixes)
Packit Service 706eca
Packit Service 706eca
# A NULL-terminated array of suffixes used to mark a register
Packit Service 706eca
# indirection on the architecture's assembly.
Packit Service 706eca
# For example, on x86 the register indirection is written as:
Packit Service 706eca
#
Packit Service 706eca
#  \(\%eax\) ;; indirecting eax
Packit Service 706eca
#
Packit Service 706eca
# in this case, this prefix would be the charater \`\)\'.
Packit Service 706eca
#
Packit Service 706eca
# Please note that we use the indirection suffix also for register
Packit Service 706eca
# displacement, e.g., \`4\(\%eax\)\' on x86.
Packit Service 706eca
v;const char *const *;stap_register_indirection_suffixes;;;0;0;;0;pstring_list (gdbarch->stap_register_indirection_suffixes)
Packit Service 706eca
Packit Service 706eca
# Prefix(es) used to name a register using GDB's nomenclature.
Packit Service 706eca
#
Packit Service 706eca
# For example, on PPC a register is represented by a number in the assembly
Packit Service 706eca
# language (e.g., \`10\' is the 10th general-purpose register).  However,
Packit Service 706eca
# inside GDB this same register has an \`r\' appended to its name, so the 10th
Packit Service 706eca
# register would be represented as \`r10\' internally.
Packit Service 706eca
v;const char *;stap_gdb_register_prefix;;;0;0;;0;pstring (gdbarch->stap_gdb_register_prefix)
Packit Service 706eca
Packit Service 706eca
# Suffix used to name a register using GDB's nomenclature.
Packit Service 706eca
v;const char *;stap_gdb_register_suffix;;;0;0;;0;pstring (gdbarch->stap_gdb_register_suffix)
Packit Service 706eca
Packit Service 706eca
# Check if S is a single operand.
Packit Service 706eca
#
Packit Service 706eca
# Single operands can be:
Packit Service 706eca
#  \- Literal integers, e.g. \`\$10\' on x86
Packit Service 706eca
#  \- Register access, e.g. \`\%eax\' on x86
Packit Service 706eca
#  \- Register indirection, e.g. \`\(\%eax\)\' on x86
Packit Service 706eca
#  \- Register displacement, e.g. \`4\(\%eax\)\' on x86
Packit Service 706eca
#
Packit Service 706eca
# This function should check for these patterns on the string
Packit Service 706eca
# and return 1 if some were found, or zero otherwise.  Please try to match
Packit Service 706eca
# as much info as you can from the string, i.e., if you have to match
Packit Service 706eca
# something like \`\(\%\', do not match just the \`\(\'.
Packit Service 706eca
M;int;stap_is_single_operand;const char *s;s
Packit Service 706eca
Packit Service 706eca
# Function used to handle a "special case" in the parser.
Packit Service 706eca
#
Packit Service 706eca
# A "special case" is considered to be an unknown token, i.e., a token
Packit Service 706eca
# that the parser does not know how to parse.  A good example of special
Packit Service 706eca
# case would be ARM's register displacement syntax:
Packit Service 706eca
#
Packit Service 706eca
#  [R0, #4]  ;; displacing R0 by 4
Packit Service 706eca
#
Packit Service 706eca
# Since the parser assumes that a register displacement is of the form:
Packit Service 706eca
#
Packit Service 706eca
#  <number> <indirection_prefix> <register_name> <indirection_suffix>
Packit Service 706eca
#
Packit Service 706eca
# it means that it will not be able to recognize and parse this odd syntax.
Packit Service 706eca
# Therefore, we should add a special case function that will handle this token.
Packit Service 706eca
#
Packit Service 706eca
# This function should generate the proper expression form of the expression
Packit Service 706eca
# using GDB\'s internal expression mechanism (e.g., \`write_exp_elt_opcode\'
Packit Service 706eca
# and so on).  It should also return 1 if the parsing was successful, or zero
Packit Service 706eca
# if the token was not recognized as a special token (in this case, returning
Packit Service 706eca
# zero means that the special parser is deferring the parsing to the generic
Packit Service 706eca
# parser), and should advance the buffer pointer (p->arg).
Packit Service 706eca
M;int;stap_parse_special_token;struct stap_parse_info *p;p
Packit Service 706eca
Packit Service 706eca
# DTrace related functions.
Packit Service 706eca
Packit Service 706eca
# The expression to compute the NARTGth+1 argument to a DTrace USDT probe.
Packit Service 706eca
# NARG must be >= 0.
Packit Service 706eca
M;void;dtrace_parse_probe_argument;struct parser_state *pstate, int narg;pstate, narg
Packit Service 706eca
Packit Service 706eca
# True if the given ADDR does not contain the instruction sequence
Packit Service 706eca
# corresponding to a disabled DTrace is-enabled probe.
Packit Service 706eca
M;int;dtrace_probe_is_enabled;CORE_ADDR addr;addr
Packit Service 706eca
Packit Service 706eca
# Enable a DTrace is-enabled probe at ADDR.
Packit Service 706eca
M;void;dtrace_enable_probe;CORE_ADDR addr;addr
Packit Service 706eca
Packit Service 706eca
# Disable a DTrace is-enabled probe at ADDR.
Packit Service 706eca
M;void;dtrace_disable_probe;CORE_ADDR addr;addr
Packit Service 706eca
Packit Service 706eca
# True if the list of shared libraries is one and only for all
Packit Service 706eca
# processes, as opposed to a list of shared libraries per inferior.
Packit Service 706eca
# This usually means that all processes, although may or may not share
Packit Service 706eca
# an address space, will see the same set of symbols at the same
Packit Service 706eca
# addresses.
Packit Service 706eca
v;int;has_global_solist;;;0;0;;0
Packit Service 706eca
Packit Service 706eca
# On some targets, even though each inferior has its own private
Packit Service 706eca
# address space, the debug interface takes care of making breakpoints
Packit Service 706eca
# visible to all address spaces automatically.  For such cases,
Packit Service 706eca
# this property should be set to true.
Packit Service 706eca
v;int;has_global_breakpoints;;;0;0;;0
Packit Service 706eca
Packit Service 706eca
# True if inferiors share an address space (e.g., uClinux).
Packit Service 706eca
m;int;has_shared_address_space;void;;;default_has_shared_address_space;;0
Packit Service 706eca
Packit Service 706eca
# True if a fast tracepoint can be set at an address.
Packit Service 706eca
m;int;fast_tracepoint_valid_at;CORE_ADDR addr, std::string *msg;addr, msg;;default_fast_tracepoint_valid_at;;0
Packit Service 706eca
Packit Service 706eca
# Guess register state based on tracepoint location.  Used for tracepoints
Packit Service 706eca
# where no registers have been collected, but there's only one location,
Packit Service 706eca
# allowing us to guess the PC value, and perhaps some other registers.
Packit Service 706eca
# On entry, regcache has all registers marked as unavailable.
Packit Service 706eca
m;void;guess_tracepoint_registers;struct regcache *regcache, CORE_ADDR addr;regcache, addr;;default_guess_tracepoint_registers;;0
Packit Service 706eca
Packit Service 706eca
# Return the "auto" target charset.
Packit Service 706eca
f;const char *;auto_charset;void;;default_auto_charset;default_auto_charset;;0
Packit Service 706eca
# Return the "auto" target wide charset.
Packit Service 706eca
f;const char *;auto_wide_charset;void;;default_auto_wide_charset;default_auto_wide_charset;;0
Packit Service 706eca
Packit Service 706eca
# If non-empty, this is a file extension that will be opened in place
Packit Service 706eca
# of the file extension reported by the shared library list.
Packit Service 706eca
#
Packit Service 706eca
# This is most useful for toolchains that use a post-linker tool,
Packit Service 706eca
# where the names of the files run on the target differ in extension
Packit Service 706eca
# compared to the names of the files GDB should load for debug info.
Packit Service 706eca
v;const char *;solib_symbols_extension;;;;;;;pstring (gdbarch->solib_symbols_extension)
Packit Service 706eca
Packit Service 706eca
# If true, the target OS has DOS-based file system semantics.  That
Packit Service 706eca
# is, absolute paths include a drive name, and the backslash is
Packit Service 706eca
# considered a directory separator.
Packit Service 706eca
v;int;has_dos_based_file_system;;;0;0;;0
Packit Service 706eca
Packit Service 706eca
# Generate bytecodes to collect the return address in a frame.
Packit Service 706eca
# Since the bytecodes run on the target, possibly with GDB not even
Packit Service 706eca
# connected, the full unwinding machinery is not available, and
Packit Service 706eca
# typically this function will issue bytecodes for one or more likely
Packit Service 706eca
# places that the return address may be found.
Packit Service 706eca
m;void;gen_return_address;struct agent_expr *ax, struct axs_value *value, CORE_ADDR scope;ax, value, scope;;default_gen_return_address;;0
Packit Service 706eca
Packit Service 706eca
# Implement the "info proc" command.
Packit Service 706eca
M;void;info_proc;const char *args, enum info_proc_what what;args, what
Packit Service 706eca
Packit Service 706eca
# Implement the "info proc" command for core files.  Noe that there
Packit Service 706eca
# are two "info_proc"-like methods on gdbarch -- one for core files,
Packit Service 706eca
# one for live targets.
Packit Service 706eca
M;void;core_info_proc;const char *args, enum info_proc_what what;args, what
Packit Service 706eca
Packit Service 706eca
# Iterate over all objfiles in the order that makes the most sense
Packit Service 706eca
# for the architecture to make global symbol searches.
Packit Service 706eca
#
Packit Service 706eca
# CB is a callback function where OBJFILE is the objfile to be searched,
Packit Service 706eca
# and CB_DATA a pointer to user-defined data (the same data that is passed
Packit Service 706eca
# when calling this gdbarch method).  The iteration stops if this function
Packit Service 706eca
# returns nonzero.
Packit Service 706eca
#
Packit Service 706eca
# CB_DATA is a pointer to some user-defined data to be passed to
Packit Service 706eca
# the callback.
Packit Service 706eca
#
Packit Service 706eca
# If not NULL, CURRENT_OBJFILE corresponds to the objfile being
Packit Service 706eca
# inspected when the symbol search was requested.
Packit Service 706eca
m;void;iterate_over_objfiles_in_search_order;iterate_over_objfiles_in_search_order_cb_ftype *cb, void *cb_data, struct objfile *current_objfile;cb, cb_data, current_objfile;0;default_iterate_over_objfiles_in_search_order;;0
Packit Service 706eca
Packit Service 706eca
# Ravenscar arch-dependent ops.
Packit Service 706eca
v;struct ravenscar_arch_ops *;ravenscar_ops;;;NULL;NULL;;0;host_address_to_string (gdbarch->ravenscar_ops)
Packit Service 706eca
Packit Service 706eca
# Return non-zero if the instruction at ADDR is a call; zero otherwise.
Packit Service 706eca
m;int;insn_is_call;CORE_ADDR addr;addr;;default_insn_is_call;;0
Packit Service 706eca
Packit Service 706eca
# Return non-zero if the instruction at ADDR is a return; zero otherwise.
Packit Service 706eca
m;int;insn_is_ret;CORE_ADDR addr;addr;;default_insn_is_ret;;0
Packit Service 706eca
Packit Service 706eca
# Return non-zero if the instruction at ADDR is a jump; zero otherwise.
Packit Service 706eca
m;int;insn_is_jump;CORE_ADDR addr;addr;;default_insn_is_jump;;0
Packit Service 706eca
Packit Service 706eca
# Read one auxv entry from *READPTR, not reading locations >= ENDPTR.
Packit Service 706eca
# Return 0 if *READPTR is already at the end of the buffer.
Packit Service 706eca
# Return -1 if there is insufficient buffer for a whole entry.
Packit Service 706eca
# Return 1 if an entry was read into *TYPEP and *VALP.
Packit Service 706eca
M;int;auxv_parse;gdb_byte **readptr, gdb_byte *endptr, CORE_ADDR *typep, CORE_ADDR *valp;readptr, endptr, typep, valp
Packit Service 706eca
Packit Service 706eca
# Print the description of a single auxv entry described by TYPE and VAL
Packit Service 706eca
# to FILE.
Packit Service 706eca
m;void;print_auxv_entry;struct ui_file *file, CORE_ADDR type, CORE_ADDR val;file, type, val;;default_print_auxv_entry;;0
Packit Service 706eca
Packit Service 706eca
# Find the address range of the current inferior's vsyscall/vDSO, and
Packit Service 706eca
# write it to *RANGE.  If the vsyscall's length can't be determined, a
Packit Service 706eca
# range with zero length is returned.  Returns true if the vsyscall is
Packit Service 706eca
# found, false otherwise.
Packit Service 706eca
m;int;vsyscall_range;struct mem_range *range;range;;default_vsyscall_range;;0
Packit Service 706eca
Packit Service 706eca
# Allocate SIZE bytes of PROT protected page aligned memory in inferior.
Packit Service 706eca
# PROT has GDB_MMAP_PROT_* bitmask format.
Packit Service 706eca
# Throw an error if it is not possible.  Returned address is always valid.
Packit Service 706eca
f;CORE_ADDR;infcall_mmap;CORE_ADDR size, unsigned prot;size, prot;;default_infcall_mmap;;0
Packit Service 706eca
Packit Service 706eca
# Deallocate SIZE bytes of memory at ADDR in inferior from gdbarch_infcall_mmap.
Packit Service 706eca
# Print a warning if it is not possible.
Packit Service 706eca
f;void;infcall_munmap;CORE_ADDR addr, CORE_ADDR size;addr, size;;default_infcall_munmap;;0
Packit Service 706eca
Packit Service 706eca
# Return string (caller has to use xfree for it) with options for GCC
Packit Service 706eca
# to produce code for this target, typically "-m64", "-m32" or "-m31".
Packit Service 706eca
# These options are put before CU's DW_AT_producer compilation options so that
Packit Service 706eca
# they can override it.  Method may also return NULL.
Packit Service 706eca
m;char *;gcc_target_options;void;;;default_gcc_target_options;;0
Packit Service 706eca
Packit Service 706eca
# Return a regular expression that matches names used by this
Packit Service 706eca
# architecture in GNU configury triplets.  The result is statically
Packit Service 706eca
# allocated and must not be freed.  The default implementation simply
Packit Service 706eca
# returns the BFD architecture name, which is correct in nearly every
Packit Service 706eca
# case.
Packit Service 706eca
m;const char *;gnu_triplet_regexp;void;;;default_gnu_triplet_regexp;;0
Packit Service 706eca
Packit Service 706eca
# Return the size in 8-bit bytes of an addressable memory unit on this
Packit Service 706eca
# architecture.  This corresponds to the number of 8-bit bytes associated to
Packit Service 706eca
# each address in memory.
Packit Service 706eca
m;int;addressable_memory_unit_size;void;;;default_addressable_memory_unit_size;;0
Packit Service 706eca
Packit Service 706eca
# Functions for allowing a target to modify its disassembler options.
Packit Service 706eca
v;const char *;disassembler_options_implicit;;;0;0;;0;pstring (gdbarch->disassembler_options_implicit)
Packit Service 706eca
v;char **;disassembler_options;;;0;0;;0;pstring_ptr (gdbarch->disassembler_options)
Packit Service 706eca
v;const disasm_options_and_args_t *;valid_disassembler_options;;;0;0;;0;host_address_to_string (gdbarch->valid_disassembler_options)
Packit Service 706eca
Packit Service 706eca
# Type alignment.
Packit Service 706eca
m;ULONGEST;type_align;struct type *type;type;;default_type_align;;0
Packit Service 706eca
Packit Service 706eca
EOF
Packit Service 706eca
}
Packit Service 706eca
Packit Service 706eca
#
Packit Service 706eca
# The .log file
Packit Service 706eca
#
Packit Service 706eca
exec > new-gdbarch.log
Packit Service 706eca
function_list | while do_read
Packit Service 706eca
do
Packit Service 706eca
    cat <
Packit Service 706eca
${class} ${returntype} ${function} ($formal)
Packit Service 706eca
EOF
Packit Service 706eca
    for r in ${read}
Packit Service 706eca
    do
Packit Service 706eca
	eval echo \"\ \ \ \ ${r}=\${${r}}\"
Packit Service 706eca
    done
Packit Service 706eca
    if class_is_predicate_p && fallback_default_p
Packit Service 706eca
    then
Packit Service 706eca
	echo "Error: predicate function ${function} can not have a non- multi-arch default" 1>&2
Packit Service 706eca
	kill $$
Packit Service 706eca
	exit 1
Packit Service 706eca
    fi
Packit Service 706eca
    if [ "x${invalid_p}" = "x0" -a -n "${postdefault}" ]
Packit Service 706eca
    then
Packit Service 706eca
	echo "Error: postdefault is useless when invalid_p=0" 1>&2
Packit Service 706eca
	kill $$
Packit Service 706eca
	exit 1
Packit Service 706eca
    fi
Packit Service 706eca
    if class_is_multiarch_p
Packit Service 706eca
    then
Packit Service 706eca
	if class_is_predicate_p ; then :
Packit Service 706eca
	elif test "x${predefault}" = "x"
Packit Service 706eca
	then
Packit Service 706eca
	    echo "Error: pure multi-arch function ${function} must have a predefault" 1>&2
Packit Service 706eca
	    kill $$
Packit Service 706eca
	    exit 1
Packit Service 706eca
	fi
Packit Service 706eca
    fi
Packit Service 706eca
    echo ""
Packit Service 706eca
done
Packit Service 706eca
Packit Service 706eca
exec 1>&2
Packit Service 706eca
compare_new gdbarch.log
Packit Service 706eca
Packit Service 706eca
Packit Service 706eca
copyright ()
Packit Service 706eca
{
Packit Service 706eca
cat <
Packit Service 706eca
/* *INDENT-OFF* */ /* THIS FILE IS GENERATED -*- buffer-read-only: t -*- */
Packit Service 706eca
/* vi:set ro: */
Packit Service 706eca
Packit Service 706eca
/* Dynamic architecture support for GDB, the GNU debugger.
Packit Service 706eca
Packit Service 706eca
   Copyright (C) 1998-2018 Free Software Foundation, Inc.
Packit Service 706eca
Packit Service 706eca
   This file is part of GDB.
Packit Service 706eca
Packit Service 706eca
   This program is free software; you can redistribute it and/or modify
Packit Service 706eca
   it under the terms of the GNU General Public License as published by
Packit Service 706eca
   the Free Software Foundation; either version 3 of the License, or
Packit Service 706eca
   (at your option) any later version.
Packit Service 706eca
Packit Service 706eca
   This program is distributed in the hope that it will be useful,
Packit Service 706eca
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 706eca
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit Service 706eca
   GNU General Public License for more details.
Packit Service 706eca
Packit Service 706eca
   You should have received a copy of the GNU General Public License
Packit Service 706eca
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
Packit Service 706eca
Packit Service 706eca
/* This file was created with the aid of \`\`gdbarch.sh''.
Packit Service 706eca
Packit Service 706eca
   The Bourne shell script \`\`gdbarch.sh'' creates the files
Packit Service 706eca
   \`\`new-gdbarch.c'' and \`\`new-gdbarch.h and then compares them
Packit Service 706eca
   against the existing \`\`gdbarch.[hc]''.  Any differences found
Packit Service 706eca
   being reported.
Packit Service 706eca
Packit Service 706eca
   If editing this file, please also run gdbarch.sh and merge any
Packit Service 706eca
   changes into that script. Conversely, when making sweeping changes
Packit Service 706eca
   to this file, modifying gdbarch.sh and using its output may prove
Packit Service 706eca
   easier.  */
Packit Service 706eca
Packit Service 706eca
EOF
Packit Service 706eca
}
Packit Service 706eca
Packit Service 706eca
#
Packit Service 706eca
# The .h file
Packit Service 706eca
#
Packit Service 706eca
Packit Service 706eca
exec > new-gdbarch.h
Packit Service 706eca
copyright
Packit Service 706eca
cat <
Packit Service 706eca
#ifndef GDBARCH_H
Packit Service 706eca
#define GDBARCH_H
Packit Service 706eca
Packit Service 706eca
#include <vector>
Packit Service 706eca
#include "frame.h"
Packit Service 706eca
#include "dis-asm.h"
Packit Service 706eca
#include "gdb_obstack.h"
Packit Service 706eca
Packit Service 706eca
struct floatformat;
Packit Service 706eca
struct ui_file;
Packit Service 706eca
struct value;
Packit Service 706eca
struct objfile;
Packit Service 706eca
struct obj_section;
Packit Service 706eca
struct minimal_symbol;
Packit Service 706eca
struct regcache;
Packit Service 706eca
struct reggroup;
Packit Service 706eca
struct regset;
Packit Service 706eca
struct disassemble_info;
Packit Service 706eca
struct target_ops;
Packit Service 706eca
struct obstack;
Packit Service 706eca
struct bp_target_info;
Packit Service 706eca
struct target_desc;
Packit Service 706eca
struct symbol;
Packit Service 706eca
struct displaced_step_closure;
Packit Service 706eca
struct syscall;
Packit Service 706eca
struct agent_expr;
Packit Service 706eca
struct axs_value;
Packit Service 706eca
struct stap_parse_info;
Packit Service 706eca
struct parser_state;
Packit Service 706eca
struct ravenscar_arch_ops;
Packit Service 706eca
struct mem_range;
Packit Service 706eca
struct syscalls_info;
Packit Service 706eca
struct thread_info;
Packit Service 706eca
struct ui_out;
Packit Service 706eca
Packit Service 706eca
#include "regcache.h"
Packit Service 706eca
Packit Service 706eca
/* The architecture associated with the inferior through the
Packit Service 706eca
   connection to the target.
Packit Service 706eca
Packit Service 706eca
   The architecture vector provides some information that is really a
Packit Service 706eca
   property of the inferior, accessed through a particular target:
Packit Service 706eca
   ptrace operations; the layout of certain RSP packets; the solib_ops
Packit Service 706eca
   vector; etc.  To differentiate architecture accesses to
Packit Service 706eca
   per-inferior/target properties from
Packit Service 706eca
   per-thread/per-frame/per-objfile properties, accesses to
Packit Service 706eca
   per-inferior/target properties should be made through this
Packit Service 706eca
   gdbarch.  */
Packit Service 706eca
Packit Service 706eca
/* This is a convenience wrapper for 'current_inferior ()->gdbarch'.  */
Packit Service 706eca
extern struct gdbarch *target_gdbarch (void);
Packit Service 706eca
Packit Service 706eca
/* Callback type for the 'iterate_over_objfiles_in_search_order'
Packit Service 706eca
   gdbarch  method.  */
Packit Service 706eca
Packit Service 706eca
typedef int (iterate_over_objfiles_in_search_order_cb_ftype)
Packit Service 706eca
  (struct objfile *objfile, void *cb_data);
Packit Service 706eca
Packit Service 706eca
/* Callback type for regset section iterators.  The callback usually
Packit Service 706eca
   invokes the REGSET's supply or collect method, to which it must
Packit Service 706eca
   pass a buffer - for collects this buffer will need to be created using
Packit Service 706eca
   COLLECT_SIZE, for supply the existing buffer being read from should
Packit Service 706eca
   be at least SUPPLY_SIZE.  SECT_NAME is a BFD section name, and HUMAN_NAME
Packit Service 706eca
   is used for diagnostic messages.  CB_DATA should have been passed
Packit Service 706eca
   unchanged through the iterator.  */
Packit Service 706eca
Packit Service 706eca
typedef void (iterate_over_regset_sections_cb)
Packit Service 706eca
  (const char *sect_name, int supply_size, int collect_size,
Packit Service 706eca
   const struct regset *regset, const char *human_name, void *cb_data);
Packit Service 706eca
EOF
Packit Service 706eca
Packit Service 706eca
# function typedef's
Packit Service 706eca
printf "\n"
Packit Service 706eca
printf "\n"
Packit Service 706eca
printf "/* The following are pre-initialized by GDBARCH.  */\n"
Packit Service 706eca
function_list | while do_read
Packit Service 706eca
do
Packit Service 706eca
    if class_is_info_p
Packit Service 706eca
    then
Packit Service 706eca
	printf "\n"
Packit Service 706eca
	printf "extern ${returntype} gdbarch_${function} (struct gdbarch *gdbarch);\n"
Packit Service 706eca
	printf "/* set_gdbarch_${function}() - not applicable - pre-initialized.  */\n"
Packit Service 706eca
    fi
Packit Service 706eca
done
Packit Service 706eca
Packit Service 706eca
# function typedef's
Packit Service 706eca
printf "\n"
Packit Service 706eca
printf "\n"
Packit Service 706eca
printf "/* The following are initialized by the target dependent code.  */\n"
Packit Service 706eca
function_list | while do_read
Packit Service 706eca
do
Packit Service 706eca
    if [ -n "${comment}" ]
Packit Service 706eca
    then
Packit Service 706eca
	echo "${comment}" | sed \
Packit Service 706eca
	    -e '2 s,#,/*,' \
Packit Service 706eca
	    -e '3,$ s,#,  ,' \
Packit Service 706eca
	    -e '$ s,$, */,'
Packit Service 706eca
    fi
Packit Service 706eca
Packit Service 706eca
    if class_is_predicate_p
Packit Service 706eca
    then
Packit Service 706eca
	printf "\n"
Packit Service 706eca
	printf "extern int gdbarch_${function}_p (struct gdbarch *gdbarch);\n"
Packit Service 706eca
    fi
Packit Service 706eca
    if class_is_variable_p
Packit Service 706eca
    then
Packit Service 706eca
	printf "\n"
Packit Service 706eca
	printf "extern ${returntype} gdbarch_${function} (struct gdbarch *gdbarch);\n"
Packit Service 706eca
	printf "extern void set_gdbarch_${function} (struct gdbarch *gdbarch, ${returntype} ${function});\n"
Packit Service 706eca
    fi
Packit Service 706eca
    if class_is_function_p
Packit Service 706eca
    then
Packit Service 706eca
	printf "\n"
Packit Service 706eca
	if [ "x${formal}" = "xvoid" ] && class_is_multiarch_p
Packit Service 706eca
	then
Packit Service 706eca
	    printf "typedef ${returntype} (gdbarch_${function}_ftype) (struct gdbarch *gdbarch);\n"
Packit Service 706eca
	elif class_is_multiarch_p
Packit Service 706eca
	then
Packit Service 706eca
	    printf "typedef ${returntype} (gdbarch_${function}_ftype) (struct gdbarch *gdbarch, ${formal});\n"
Packit Service 706eca
	else
Packit Service 706eca
	    printf "typedef ${returntype} (gdbarch_${function}_ftype) (${formal});\n"
Packit Service 706eca
	fi
Packit Service 706eca
	if [ "x${formal}" = "xvoid" ]
Packit Service 706eca
	then
Packit Service 706eca
	  printf "extern ${returntype} gdbarch_${function} (struct gdbarch *gdbarch);\n"
Packit Service 706eca
	else
Packit Service 706eca
	  printf "extern ${returntype} gdbarch_${function} (struct gdbarch *gdbarch, ${formal});\n"
Packit Service 706eca
	fi
Packit Service 706eca
	printf "extern void set_gdbarch_${function} (struct gdbarch *gdbarch, gdbarch_${function}_ftype *${function});\n"
Packit Service 706eca
    fi
Packit Service 706eca
done
Packit Service 706eca
Packit Service 706eca
# close it off
Packit Service 706eca
cat <
Packit Service 706eca
Packit Service 706eca
/* Definition for an unknown syscall, used basically in error-cases.  */
Packit Service 706eca
#define UNKNOWN_SYSCALL (-1)
Packit Service 706eca
Packit Service 706eca
extern struct gdbarch_tdep *gdbarch_tdep (struct gdbarch *gdbarch);
Packit Service 706eca
Packit Service 706eca
Packit Service 706eca
/* Mechanism for co-ordinating the selection of a specific
Packit Service 706eca
   architecture.
Packit Service 706eca
Packit Service 706eca
   GDB targets (*-tdep.c) can register an interest in a specific
Packit Service 706eca
   architecture.  Other GDB components can register a need to maintain
Packit Service 706eca
   per-architecture data.
Packit Service 706eca
Packit Service 706eca
   The mechanisms below ensures that there is only a loose connection
Packit Service 706eca
   between the set-architecture command and the various GDB
Packit Service 706eca
   components.  Each component can independently register their need
Packit Service 706eca
   to maintain architecture specific data with gdbarch.
Packit Service 706eca
Packit Service 706eca
   Pragmatics:
Packit Service 706eca
Packit Service 706eca
   Previously, a single TARGET_ARCHITECTURE_HOOK was provided.  It
Packit Service 706eca
   didn't scale.
Packit Service 706eca
Packit Service 706eca
   The more traditional mega-struct containing architecture specific
Packit Service 706eca
   data for all the various GDB components was also considered.  Since
Packit Service 706eca
   GDB is built from a variable number of (fairly independent)
Packit Service 706eca
   components it was determined that the global aproach was not
Packit Service 706eca
   applicable.  */
Packit Service 706eca
Packit Service 706eca
Packit Service 706eca
/* Register a new architectural family with GDB.
Packit Service 706eca
Packit Service 706eca
   Register support for the specified ARCHITECTURE with GDB.  When
Packit Service 706eca
   gdbarch determines that the specified architecture has been
Packit Service 706eca
   selected, the corresponding INIT function is called.
Packit Service 706eca
Packit Service 706eca
   --
Packit Service 706eca
Packit Service 706eca
   The INIT function takes two parameters: INFO which contains the
Packit Service 706eca
   information available to gdbarch about the (possibly new)
Packit Service 706eca
   architecture; ARCHES which is a list of the previously created
Packit Service 706eca
   \`\`struct gdbarch'' for this architecture.
Packit Service 706eca
Packit Service 706eca
   The INFO parameter is, as far as possible, be pre-initialized with
Packit Service 706eca
   information obtained from INFO.ABFD or the global defaults.
Packit Service 706eca
Packit Service 706eca
   The ARCHES parameter is a linked list (sorted most recently used)
Packit Service 706eca
   of all the previously created architures for this architecture
Packit Service 706eca
   family.  The (possibly NULL) ARCHES->gdbarch can used to access
Packit Service 706eca
   values from the previously selected architecture for this
Packit Service 706eca
   architecture family.
Packit Service 706eca
Packit Service 706eca
   The INIT function shall return any of: NULL - indicating that it
Packit Service 706eca
   doesn't recognize the selected architecture; an existing \`\`struct
Packit Service 706eca
   gdbarch'' from the ARCHES list - indicating that the new
Packit Service 706eca
   architecture is just a synonym for an earlier architecture (see
Packit Service 706eca
   gdbarch_list_lookup_by_info()); a newly created \`\`struct gdbarch''
Packit Service 706eca
   - that describes the selected architecture (see gdbarch_alloc()).
Packit Service 706eca
Packit Service 706eca
   The DUMP_TDEP function shall print out all target specific values.
Packit Service 706eca
   Care should be taken to ensure that the function works in both the
Packit Service 706eca
   multi-arch and non- multi-arch cases.  */
Packit Service 706eca
Packit Service 706eca
struct gdbarch_list
Packit Service 706eca
{
Packit Service 706eca
  struct gdbarch *gdbarch;
Packit Service 706eca
  struct gdbarch_list *next;
Packit Service 706eca
};
Packit Service 706eca
Packit Service 706eca
struct gdbarch_info
Packit Service 706eca
{
Packit Service 706eca
  /* Use default: NULL (ZERO).  */
Packit Service 706eca
  const struct bfd_arch_info *bfd_arch_info;
Packit Service 706eca
Packit Service 706eca
  /* Use default: BFD_ENDIAN_UNKNOWN (NB: is not ZERO).  */
Packit Service 706eca
  enum bfd_endian byte_order;
Packit Service 706eca
Packit Service 706eca
  enum bfd_endian byte_order_for_code;
Packit Service 706eca
Packit Service 706eca
  /* Use default: NULL (ZERO).  */
Packit Service 706eca
  bfd *abfd;
Packit Service 706eca
Packit Service 706eca
  /* Use default: NULL (ZERO).  */
Packit Service 706eca
  union
Packit Service 706eca
    {
Packit Service 706eca
      /* Architecture-specific information.  The generic form for targets
Packit Service 706eca
	 that have extra requirements.  */
Packit Service 706eca
      struct gdbarch_tdep_info *tdep_info;
Packit Service 706eca
Packit Service 706eca
      /* Architecture-specific target description data.  Numerous targets
Packit Service 706eca
	 need only this, so give them an easy way to hold it.  */
Packit Service 706eca
      struct tdesc_arch_data *tdesc_data;
Packit Service 706eca
Packit Service 706eca
      /* SPU file system ID.  This is a single integer, so using the
Packit Service 706eca
	 generic form would only complicate code.  Other targets may
Packit Service 706eca
	 reuse this member if suitable.  */
Packit Service 706eca
      int *id;
Packit Service 706eca
    };
Packit Service 706eca
Packit Service 706eca
  /* Use default: GDB_OSABI_UNINITIALIZED (-1).  */
Packit Service 706eca
  enum gdb_osabi osabi;
Packit Service 706eca
Packit Service 706eca
  /* Use default: NULL (ZERO).  */
Packit Service 706eca
  const struct target_desc *target_desc;
Packit Service 706eca
};
Packit Service 706eca
Packit Service 706eca
typedef struct gdbarch *(gdbarch_init_ftype) (struct gdbarch_info info, struct gdbarch_list *arches);
Packit Service 706eca
typedef void (gdbarch_dump_tdep_ftype) (struct gdbarch *gdbarch, struct ui_file *file);
Packit Service 706eca
Packit Service 706eca
/* DEPRECATED - use gdbarch_register() */
Packit Service 706eca
extern void register_gdbarch_init (enum bfd_architecture architecture, gdbarch_init_ftype *);
Packit Service 706eca
Packit Service 706eca
extern void gdbarch_register (enum bfd_architecture architecture,
Packit Service 706eca
                              gdbarch_init_ftype *,
Packit Service 706eca
                              gdbarch_dump_tdep_ftype *);
Packit Service 706eca
Packit Service 706eca
Packit Service 706eca
/* Return a freshly allocated, NULL terminated, array of the valid
Packit Service 706eca
   architecture names.  Since architectures are registered during the
Packit Service 706eca
   _initialize phase this function only returns useful information
Packit Service 706eca
   once initialization has been completed.  */
Packit Service 706eca
Packit Service 706eca
extern const char **gdbarch_printable_names (void);
Packit Service 706eca
Packit Service 706eca
Packit Service 706eca
/* Helper function.  Search the list of ARCHES for a GDBARCH that
Packit Service 706eca
   matches the information provided by INFO.  */
Packit Service 706eca
Packit Service 706eca
extern struct gdbarch_list *gdbarch_list_lookup_by_info (struct gdbarch_list *arches, const struct gdbarch_info *info);
Packit Service 706eca
Packit Service 706eca
Packit Service 706eca
/* Helper function.  Create a preliminary \`\`struct gdbarch''.  Perform
Packit Service 706eca
   basic initialization using values obtained from the INFO and TDEP
Packit Service 706eca
   parameters.  set_gdbarch_*() functions are called to complete the
Packit Service 706eca
   initialization of the object.  */
Packit Service 706eca
Packit Service 706eca
extern struct gdbarch *gdbarch_alloc (const struct gdbarch_info *info, struct gdbarch_tdep *tdep);
Packit Service 706eca
Packit Service 706eca
Packit Service 706eca
/* Helper function.  Free a partially-constructed \`\`struct gdbarch''.
Packit Service 706eca
   It is assumed that the caller freeds the \`\`struct
Packit Service 706eca
   gdbarch_tdep''.  */
Packit Service 706eca
Packit Service 706eca
extern void gdbarch_free (struct gdbarch *);
Packit Service 706eca
Packit Service 706eca
/* Get the obstack owned by ARCH.  */
Packit Service 706eca
Packit Service 706eca
extern obstack *gdbarch_obstack (gdbarch *arch);
Packit Service 706eca
Packit Service 706eca
/* Helper function.  Allocate memory from the \`\`struct gdbarch''
Packit Service 706eca
   obstack.  The memory is freed when the corresponding architecture
Packit Service 706eca
   is also freed.  */
Packit Service 706eca
Packit Service 706eca
#define GDBARCH_OBSTACK_CALLOC(GDBARCH, NR, TYPE) \
Packit Service 706eca
  obstack_calloc<TYPE> (gdbarch_obstack ((GDBARCH)), (NR))
Packit Service 706eca
Packit Service 706eca
#define GDBARCH_OBSTACK_ZALLOC(GDBARCH, TYPE) \
Packit Service 706eca
  obstack_zalloc<TYPE> (gdbarch_obstack ((GDBARCH)))
Packit Service 706eca
Packit Service 706eca
/* Duplicate STRING, returning an equivalent string that's allocated on the
Packit Service 706eca
   obstack associated with GDBARCH.  The string is freed when the corresponding
Packit Service 706eca
   architecture is also freed.  */
Packit Service 706eca
Packit Service 706eca
extern char *gdbarch_obstack_strdup (struct gdbarch *arch, const char *string);
Packit Service 706eca
Packit Service 706eca
/* Helper function.  Force an update of the current architecture.
Packit Service 706eca
Packit Service 706eca
   The actual architecture selected is determined by INFO, \`\`(gdb) set
Packit Service 706eca
   architecture'' et.al., the existing architecture and BFD's default
Packit Service 706eca
   architecture.  INFO should be initialized to zero and then selected
Packit Service 706eca
   fields should be updated.
Packit Service 706eca
Packit Service 706eca
   Returns non-zero if the update succeeds.  */
Packit Service 706eca
Packit Service 706eca
extern int gdbarch_update_p (struct gdbarch_info info);
Packit Service 706eca
Packit Service 706eca
Packit Service 706eca
/* Helper function.  Find an architecture matching info.
Packit Service 706eca
Packit Service 706eca
   INFO should be initialized using gdbarch_info_init, relevant fields
Packit Service 706eca
   set, and then finished using gdbarch_info_fill.
Packit Service 706eca
Packit Service 706eca
   Returns the corresponding architecture, or NULL if no matching
Packit Service 706eca
   architecture was found.  */
Packit Service 706eca
Packit Service 706eca
extern struct gdbarch *gdbarch_find_by_info (struct gdbarch_info info);
Packit Service 706eca
Packit Service 706eca
Packit Service 706eca
/* Helper function.  Set the target gdbarch to "gdbarch".  */
Packit Service 706eca
Packit Service 706eca
extern void set_target_gdbarch (struct gdbarch *gdbarch);
Packit Service 706eca
Packit Service 706eca
Packit Service 706eca
/* Register per-architecture data-pointer.
Packit Service 706eca
Packit Service 706eca
   Reserve space for a per-architecture data-pointer.  An identifier
Packit Service 706eca
   for the reserved data-pointer is returned.  That identifer should
Packit Service 706eca
   be saved in a local static variable.
Packit Service 706eca
Packit Service 706eca
   Memory for the per-architecture data shall be allocated using
Packit Service 706eca
   gdbarch_obstack_zalloc.  That memory will be deleted when the
Packit Service 706eca
   corresponding architecture object is deleted.
Packit Service 706eca
Packit Service 706eca
   When a previously created architecture is re-selected, the
Packit Service 706eca
   per-architecture data-pointer for that previous architecture is
Packit Service 706eca
   restored.  INIT() is not re-called.
Packit Service 706eca
Packit Service 706eca
   Multiple registrarants for any architecture are allowed (and
Packit Service 706eca
   strongly encouraged).  */
Packit Service 706eca
Packit Service 706eca
struct gdbarch_data;
Packit Service 706eca
Packit Service 706eca
typedef void *(gdbarch_data_pre_init_ftype) (struct obstack *obstack);
Packit Service 706eca
extern struct gdbarch_data *gdbarch_data_register_pre_init (gdbarch_data_pre_init_ftype *init);
Packit Service 706eca
typedef void *(gdbarch_data_post_init_ftype) (struct gdbarch *gdbarch);
Packit Service 706eca
extern struct gdbarch_data *gdbarch_data_register_post_init (gdbarch_data_post_init_ftype *init);
Packit Service 706eca
extern void deprecated_set_gdbarch_data (struct gdbarch *gdbarch,
Packit Service 706eca
                                         struct gdbarch_data *data,
Packit Service 706eca
			                 void *pointer);
Packit Service 706eca
Packit Service 706eca
extern void *gdbarch_data (struct gdbarch *gdbarch, struct gdbarch_data *);
Packit Service 706eca
Packit Service 706eca
Packit Service 706eca
/* Set the dynamic target-system-dependent parameters (architecture,
Packit Service 706eca
   byte-order, ...) using information found in the BFD.  */
Packit Service 706eca
Packit Service 706eca
extern void set_gdbarch_from_file (bfd *);
Packit Service 706eca
Packit Service 706eca
Packit Service 706eca
/* Initialize the current architecture to the "first" one we find on
Packit Service 706eca
   our list.  */
Packit Service 706eca
Packit Service 706eca
extern void initialize_current_architecture (void);
Packit Service 706eca
Packit Service 706eca
/* gdbarch trace variable */
Packit Service 706eca
extern unsigned int gdbarch_debug;
Packit Service 706eca
Packit Service 706eca
extern void gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file);
Packit Service 706eca
Packit Service 706eca
#endif
Packit Service 706eca
EOF
Packit Service 706eca
exec 1>&2
Packit Service 706eca
#../move-if-change new-gdbarch.h gdbarch.h
Packit Service 706eca
compare_new gdbarch.h
Packit Service 706eca
Packit Service 706eca
Packit Service 706eca
#
Packit Service 706eca
# C file
Packit Service 706eca
#
Packit Service 706eca
Packit Service 706eca
exec > new-gdbarch.c
Packit Service 706eca
copyright
Packit Service 706eca
cat <
Packit Service 706eca
Packit Service 706eca
#include "defs.h"
Packit Service 706eca
#include "arch-utils.h"
Packit Service 706eca
Packit Service 706eca
#include "gdbcmd.h"
Packit Service 706eca
#include "inferior.h" 
Packit Service 706eca
#include "symcat.h"
Packit Service 706eca
Packit Service 706eca
#include "floatformat.h"
Packit Service 706eca
#include "reggroups.h"
Packit Service 706eca
#include "osabi.h"
Packit Service 706eca
#include "gdb_obstack.h"
Packit Service 706eca
#include "observable.h"
Packit Service 706eca
#include "regcache.h"
Packit Service 706eca
#include "objfiles.h"
Packit Service 706eca
#include "auxv.h"
Packit Service 706eca
Packit Service 706eca
/* Static function declarations */
Packit Service 706eca
Packit Service 706eca
static void alloc_gdbarch_data (struct gdbarch *);
Packit Service 706eca
Packit Service 706eca
/* Non-zero if we want to trace architecture code.  */
Packit Service 706eca
Packit Service 706eca
#ifndef GDBARCH_DEBUG
Packit Service 706eca
#define GDBARCH_DEBUG 0
Packit Service 706eca
#endif
Packit Service 706eca
unsigned int gdbarch_debug = GDBARCH_DEBUG;
Packit Service 706eca
static void
Packit Service 706eca
show_gdbarch_debug (struct ui_file *file, int from_tty,
Packit Service 706eca
                    struct cmd_list_element *c, const char *value)
Packit Service 706eca
{
Packit Service 706eca
  fprintf_filtered (file, _("Architecture debugging is %s.\\n"), value);
Packit Service 706eca
}
Packit Service 706eca
Packit Service 706eca
static const char *
Packit Service 706eca
pformat (const struct floatformat **format)
Packit Service 706eca
{
Packit Service 706eca
  if (format == NULL)
Packit Service 706eca
    return "(null)";
Packit Service 706eca
  else
Packit Service 706eca
    /* Just print out one of them - this is only for diagnostics.  */
Packit Service 706eca
    return format[0]->name;
Packit Service 706eca
}
Packit Service 706eca
Packit Service 706eca
static const char *
Packit Service 706eca
pstring (const char *string)
Packit Service 706eca
{
Packit Service 706eca
  if (string == NULL)
Packit Service 706eca
    return "(null)";
Packit Service 706eca
  return string;
Packit Service 706eca
}
Packit Service 706eca
Packit Service 706eca
static const char *
Packit Service 706eca
pstring_ptr (char **string)
Packit Service 706eca
{
Packit Service 706eca
  if (string == NULL || *string == NULL)
Packit Service 706eca
    return "(null)";
Packit Service 706eca
  return *string;
Packit Service 706eca
}
Packit Service 706eca
Packit Service 706eca
/* Helper function to print a list of strings, represented as "const
Packit Service 706eca
   char *const *".  The list is printed comma-separated.  */
Packit Service 706eca
Packit Service 706eca
static const char *
Packit Service 706eca
pstring_list (const char *const *list)
Packit Service 706eca
{
Packit Service 706eca
  static char ret[100];
Packit Service 706eca
  const char *const *p;
Packit Service 706eca
  size_t offset = 0;
Packit Service 706eca
Packit Service 706eca
  if (list == NULL)
Packit Service 706eca
    return "(null)";
Packit Service 706eca
Packit Service 706eca
  ret[0] = '\0';
Packit Service 706eca
  for (p = list; *p != NULL && offset < sizeof (ret); ++p)
Packit Service 706eca
    {
Packit Service 706eca
      size_t s = xsnprintf (ret + offset, sizeof (ret) - offset, "%s, ", *p);
Packit Service 706eca
      offset += 2 + s;
Packit Service 706eca
    }
Packit Service 706eca
Packit Service 706eca
  if (offset > 0)
Packit Service 706eca
    {
Packit Service 706eca
      gdb_assert (offset - 2 < sizeof (ret));
Packit Service 706eca
      ret[offset - 2] = '\0';
Packit Service 706eca
    }
Packit Service 706eca
Packit Service 706eca
  return ret;
Packit Service 706eca
}
Packit Service 706eca
Packit Service 706eca
EOF
Packit Service 706eca
Packit Service 706eca
# gdbarch open the gdbarch object
Packit Service 706eca
printf "\n"
Packit Service 706eca
printf "/* Maintain the struct gdbarch object.  */\n"
Packit Service 706eca
printf "\n"
Packit Service 706eca
printf "struct gdbarch\n"
Packit Service 706eca
printf "{\n"
Packit Service 706eca
printf "  /* Has this architecture been fully initialized?  */\n"
Packit Service 706eca
printf "  int initialized_p;\n"
Packit Service 706eca
printf "\n"
Packit Service 706eca
printf "  /* An obstack bound to the lifetime of the architecture.  */\n"
Packit Service 706eca
printf "  struct obstack *obstack;\n"
Packit Service 706eca
printf "\n"
Packit Service 706eca
printf "  /* basic architectural information.  */\n"
Packit Service 706eca
function_list | while do_read
Packit Service 706eca
do
Packit Service 706eca
    if class_is_info_p
Packit Service 706eca
    then
Packit Service 706eca
	printf "  ${returntype} ${function};\n"
Packit Service 706eca
    fi
Packit Service 706eca
done
Packit Service 706eca
printf "\n"
Packit Service 706eca
printf "  /* target specific vector.  */\n"
Packit Service 706eca
printf "  struct gdbarch_tdep *tdep;\n"
Packit Service 706eca
printf "  gdbarch_dump_tdep_ftype *dump_tdep;\n"
Packit Service 706eca
printf "\n"
Packit Service 706eca
printf "  /* per-architecture data-pointers.  */\n"
Packit Service 706eca
printf "  unsigned nr_data;\n"
Packit Service 706eca
printf "  void **data;\n"
Packit Service 706eca
printf "\n"
Packit Service 706eca
cat <
Packit Service 706eca
  /* Multi-arch values.
Packit Service 706eca
Packit Service 706eca
     When extending this structure you must:
Packit Service 706eca
Packit Service 706eca
     Add the field below.
Packit Service 706eca
Packit Service 706eca
     Declare set/get functions and define the corresponding
Packit Service 706eca
     macro in gdbarch.h.
Packit Service 706eca
Packit Service 706eca
     gdbarch_alloc(): If zero/NULL is not a suitable default,
Packit Service 706eca
     initialize the new field.
Packit Service 706eca
Packit Service 706eca
     verify_gdbarch(): Confirm that the target updated the field
Packit Service 706eca
     correctly.
Packit Service 706eca
Packit Service 706eca
     gdbarch_dump(): Add a fprintf_unfiltered call so that the new
Packit Service 706eca
     field is dumped out
Packit Service 706eca
Packit Service 706eca
     get_gdbarch(): Implement the set/get functions (probably using
Packit Service 706eca
     the macro's as shortcuts).
Packit Service 706eca
Packit Service 706eca
     */
Packit Service 706eca
Packit Service 706eca
EOF
Packit Service 706eca
function_list | while do_read
Packit Service 706eca
do
Packit Service 706eca
    if class_is_variable_p
Packit Service 706eca
    then
Packit Service 706eca
	printf "  ${returntype} ${function};\n"
Packit Service 706eca
    elif class_is_function_p
Packit Service 706eca
    then
Packit Service 706eca
	printf "  gdbarch_${function}_ftype *${function};\n"
Packit Service 706eca
    fi
Packit Service 706eca
done
Packit Service 706eca
printf "};\n"
Packit Service 706eca
Packit Service 706eca
# Create a new gdbarch struct
Packit Service 706eca
cat <
Packit Service 706eca
Packit Service 706eca
/* Create a new \`\`struct gdbarch'' based on information provided by
Packit Service 706eca
   \`\`struct gdbarch_info''.  */
Packit Service 706eca
EOF
Packit Service 706eca
printf "\n"
Packit Service 706eca
cat <
Packit Service 706eca
struct gdbarch *
Packit Service 706eca
gdbarch_alloc (const struct gdbarch_info *info,
Packit Service 706eca
               struct gdbarch_tdep *tdep)
Packit Service 706eca
{
Packit Service 706eca
  struct gdbarch *gdbarch;
Packit Service 706eca
Packit Service 706eca
  /* Create an obstack for allocating all the per-architecture memory,
Packit Service 706eca
     then use that to allocate the architecture vector.  */
Packit Service 706eca
  struct obstack *obstack = XNEW (struct obstack);
Packit Service 706eca
  obstack_init (obstack);
Packit Service 706eca
  gdbarch = XOBNEW (obstack, struct gdbarch);
Packit Service 706eca
  memset (gdbarch, 0, sizeof (*gdbarch));
Packit Service 706eca
  gdbarch->obstack = obstack;
Packit Service 706eca
Packit Service 706eca
  alloc_gdbarch_data (gdbarch);
Packit Service 706eca
Packit Service 706eca
  gdbarch->tdep = tdep;
Packit Service 706eca
EOF
Packit Service 706eca
printf "\n"
Packit Service 706eca
function_list | while do_read
Packit Service 706eca
do
Packit Service 706eca
    if class_is_info_p
Packit Service 706eca
    then
Packit Service 706eca
	printf "  gdbarch->${function} = info->${function};\n"
Packit Service 706eca
    fi
Packit Service 706eca
done
Packit Service 706eca
printf "\n"
Packit Service 706eca
printf "  /* Force the explicit initialization of these.  */\n"
Packit Service 706eca
function_list | while do_read
Packit Service 706eca
do
Packit Service 706eca
    if class_is_function_p || class_is_variable_p
Packit Service 706eca
    then
Packit Service 706eca
	if [ -n "${predefault}" -a "x${predefault}" != "x0" ]
Packit Service 706eca
	then
Packit Service 706eca
	  printf "  gdbarch->${function} = ${predefault};\n"
Packit Service 706eca
	fi
Packit Service 706eca
    fi
Packit Service 706eca
done
Packit Service 706eca
cat <
Packit Service 706eca
  /* gdbarch_alloc() */
Packit Service 706eca
Packit Service 706eca
  return gdbarch;
Packit Service 706eca
}
Packit Service 706eca
EOF
Packit Service 706eca
Packit Service 706eca
# Free a gdbarch struct.
Packit Service 706eca
printf "\n"
Packit Service 706eca
printf "\n"
Packit Service 706eca
cat <
Packit Service 706eca
Packit Service 706eca
obstack *gdbarch_obstack (gdbarch *arch)
Packit Service 706eca
{
Packit Service 706eca
  return arch->obstack;
Packit Service 706eca
}
Packit Service 706eca
Packit Service 706eca
/* See gdbarch.h.  */
Packit Service 706eca
Packit Service 706eca
char *
Packit Service 706eca
gdbarch_obstack_strdup (struct gdbarch *arch, const char *string)
Packit Service 706eca
{
Packit Service 706eca
  return obstack_strdup (arch->obstack, string);
Packit Service 706eca
}
Packit Service 706eca
Packit Service 706eca
Packit Service 706eca
/* Free a gdbarch struct.  This should never happen in normal
Packit Service 706eca
   operation --- once you've created a gdbarch, you keep it around.
Packit Service 706eca
   However, if an architecture's init function encounters an error
Packit Service 706eca
   building the structure, it may need to clean up a partially
Packit Service 706eca
   constructed gdbarch.  */
Packit Service 706eca
Packit Service 706eca
void
Packit Service 706eca
gdbarch_free (struct gdbarch *arch)
Packit Service 706eca
{
Packit Service 706eca
  struct obstack *obstack;
Packit Service 706eca
Packit Service 706eca
  gdb_assert (arch != NULL);
Packit Service 706eca
  gdb_assert (!arch->initialized_p);
Packit Service 706eca
  obstack = arch->obstack;
Packit Service 706eca
  obstack_free (obstack, 0); /* Includes the ARCH.  */
Packit Service 706eca
  xfree (obstack);
Packit Service 706eca
}
Packit Service 706eca
EOF
Packit Service 706eca
Packit Service 706eca
# verify a new architecture
Packit Service 706eca
cat <
Packit Service 706eca
Packit Service 706eca
Packit Service 706eca
/* Ensure that all values in a GDBARCH are reasonable.  */
Packit Service 706eca
Packit Service 706eca
static void
Packit Service 706eca
verify_gdbarch (struct gdbarch *gdbarch)
Packit Service 706eca
{
Packit Service 706eca
  string_file log;
Packit Service 706eca
Packit Service 706eca
  /* fundamental */
Packit Service 706eca
  if (gdbarch->byte_order == BFD_ENDIAN_UNKNOWN)
Packit Service 706eca
    log.puts ("\n\tbyte-order");
Packit Service 706eca
  if (gdbarch->bfd_arch_info == NULL)
Packit Service 706eca
    log.puts ("\n\tbfd_arch_info");
Packit Service 706eca
  /* Check those that need to be defined for the given multi-arch level.  */
Packit Service 706eca
EOF
Packit Service 706eca
function_list | while do_read
Packit Service 706eca
do
Packit Service 706eca
    if class_is_function_p || class_is_variable_p
Packit Service 706eca
    then
Packit Service 706eca
	if [ "x${invalid_p}" = "x0" ]
Packit Service 706eca
	then
Packit Service 706eca
	    printf "  /* Skip verify of ${function}, invalid_p == 0 */\n"
Packit Service 706eca
	elif class_is_predicate_p
Packit Service 706eca
	then
Packit Service 706eca
	    printf "  /* Skip verify of ${function}, has predicate.  */\n"
Packit Service 706eca
	# FIXME: See do_read for potential simplification
Packit Service 706eca
 	elif [ -n "${invalid_p}" -a -n "${postdefault}" ]
Packit Service 706eca
	then
Packit Service 706eca
	    printf "  if (${invalid_p})\n"
Packit Service 706eca
	    printf "    gdbarch->${function} = ${postdefault};\n"
Packit Service 706eca
	elif [ -n "${predefault}" -a -n "${postdefault}" ]
Packit Service 706eca
	then
Packit Service 706eca
	    printf "  if (gdbarch->${function} == ${predefault})\n"
Packit Service 706eca
	    printf "    gdbarch->${function} = ${postdefault};\n"
Packit Service 706eca
	elif [ -n "${postdefault}" ]
Packit Service 706eca
	then
Packit Service 706eca
	    printf "  if (gdbarch->${function} == 0)\n"
Packit Service 706eca
	    printf "    gdbarch->${function} = ${postdefault};\n"
Packit Service 706eca
	elif [ -n "${invalid_p}" ]
Packit Service 706eca
	then
Packit Service 706eca
	    printf "  if (${invalid_p})\n"
Packit Service 706eca
	    printf "    log.puts (\"\\\\n\\\\t${function}\");\n"
Packit Service 706eca
	elif [ -n "${predefault}" ]
Packit Service 706eca
	then
Packit Service 706eca
	    printf "  if (gdbarch->${function} == ${predefault})\n"
Packit Service 706eca
	    printf "    log.puts (\"\\\\n\\\\t${function}\");\n"
Packit Service 706eca
	fi
Packit Service 706eca
    fi
Packit Service 706eca
done
Packit Service 706eca
cat <
Packit Service 706eca
  if (!log.empty ())
Packit Service 706eca
    internal_error (__FILE__, __LINE__,
Packit Service 706eca
                    _("verify_gdbarch: the following are invalid ...%s"),
Packit Service 706eca
                    log.c_str ());
Packit Service 706eca
}
Packit Service 706eca
EOF
Packit Service 706eca
Packit Service 706eca
# dump the structure
Packit Service 706eca
printf "\n"
Packit Service 706eca
printf "\n"
Packit Service 706eca
cat <
Packit Service 706eca
/* Print out the details of the current architecture.  */
Packit Service 706eca
Packit Service 706eca
void
Packit Service 706eca
gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file)
Packit Service 706eca
{
Packit Service 706eca
  const char *gdb_nm_file = "<not-defined>";
Packit Service 706eca
Packit Service 706eca
#if defined (GDB_NM_FILE)
Packit Service 706eca
  gdb_nm_file = GDB_NM_FILE;
Packit Service 706eca
#endif
Packit Service 706eca
  fprintf_unfiltered (file,
Packit Service 706eca
                      "gdbarch_dump: GDB_NM_FILE = %s\\n",
Packit Service 706eca
                      gdb_nm_file);
Packit Service 706eca
EOF
Packit Service 706eca
function_list | sort '-t;' -k 3 | while do_read
Packit Service 706eca
do
Packit Service 706eca
    # First the predicate
Packit Service 706eca
    if class_is_predicate_p
Packit Service 706eca
    then
Packit Service 706eca
	printf "  fprintf_unfiltered (file,\n"
Packit Service 706eca
	printf "                      \"gdbarch_dump: gdbarch_${function}_p() = %%d\\\\n\",\n"
Packit Service 706eca
	printf "                      gdbarch_${function}_p (gdbarch));\n"
Packit Service 706eca
    fi
Packit Service 706eca
    # Print the corresponding value.
Packit Service 706eca
    if class_is_function_p
Packit Service 706eca
    then
Packit Service 706eca
	printf "  fprintf_unfiltered (file,\n"
Packit Service 706eca
	printf "                      \"gdbarch_dump: ${function} = <%%s>\\\\n\",\n"
Packit Service 706eca
	printf "                      host_address_to_string (gdbarch->${function}));\n"
Packit Service 706eca
    else
Packit Service 706eca
	# It is a variable
Packit Service 706eca
	case "${print}:${returntype}" in
Packit Service 706eca
	    :CORE_ADDR )
Packit Service 706eca
		fmt="%s"
Packit Service 706eca
		print="core_addr_to_string_nz (gdbarch->${function})"
Packit Service 706eca
		;;
Packit Service 706eca
	    :* )
Packit Service 706eca
	        fmt="%s"
Packit Service 706eca
		print="plongest (gdbarch->${function})"
Packit Service 706eca
		;;
Packit Service 706eca
	    * )
Packit Service 706eca
	        fmt="%s"
Packit Service 706eca
		;;
Packit Service 706eca
        esac
Packit Service 706eca
	printf "  fprintf_unfiltered (file,\n"
Packit Service 706eca
	printf "                      \"gdbarch_dump: ${function} = %s\\\\n\",\n" "${fmt}"
Packit Service 706eca
	printf "                      ${print});\n"
Packit Service 706eca
    fi
Packit Service 706eca
done
Packit Service 706eca
cat <
Packit Service 706eca
  if (gdbarch->dump_tdep != NULL)
Packit Service 706eca
    gdbarch->dump_tdep (gdbarch, file);
Packit Service 706eca
}
Packit Service 706eca
EOF
Packit Service 706eca
Packit Service 706eca
Packit Service 706eca
# GET/SET
Packit Service 706eca
printf "\n"
Packit Service 706eca
cat <
Packit Service 706eca
struct gdbarch_tdep *
Packit Service 706eca
gdbarch_tdep (struct gdbarch *gdbarch)
Packit Service 706eca
{
Packit Service 706eca
  if (gdbarch_debug >= 2)
Packit Service 706eca
    fprintf_unfiltered (gdb_stdlog, "gdbarch_tdep called\\n");
Packit Service 706eca
  return gdbarch->tdep;
Packit Service 706eca
}
Packit Service 706eca
EOF
Packit Service 706eca
printf "\n"
Packit Service 706eca
function_list | while do_read
Packit Service 706eca
do
Packit Service 706eca
    if class_is_predicate_p
Packit Service 706eca
    then
Packit Service 706eca
	printf "\n"
Packit Service 706eca
	printf "int\n"
Packit Service 706eca
	printf "gdbarch_${function}_p (struct gdbarch *gdbarch)\n"
Packit Service 706eca
	printf "{\n"
Packit Service 706eca
        printf "  gdb_assert (gdbarch != NULL);\n"
Packit Service 706eca
	printf "  return ${predicate};\n"
Packit Service 706eca
	printf "}\n"
Packit Service 706eca
    fi
Packit Service 706eca
    if class_is_function_p
Packit Service 706eca
    then
Packit Service 706eca
	printf "\n"
Packit Service 706eca
	printf "${returntype}\n"
Packit Service 706eca
	if [ "x${formal}" = "xvoid" ]
Packit Service 706eca
	then
Packit Service 706eca
	  printf "gdbarch_${function} (struct gdbarch *gdbarch)\n"
Packit Service 706eca
	else
Packit Service 706eca
	  printf "gdbarch_${function} (struct gdbarch *gdbarch, ${formal})\n"
Packit Service 706eca
	fi
Packit Service 706eca
	printf "{\n"
Packit Service 706eca
        printf "  gdb_assert (gdbarch != NULL);\n"
Packit Service 706eca
	printf "  gdb_assert (gdbarch->${function} != NULL);\n"
Packit Service 706eca
	if class_is_predicate_p && test -n "${predefault}"
Packit Service 706eca
	then
Packit Service 706eca
	    # Allow a call to a function with a predicate.
Packit Service 706eca
	    printf "  /* Do not check predicate: ${predicate}, allow call.  */\n"
Packit Service 706eca
	fi
Packit Service 706eca
	printf "  if (gdbarch_debug >= 2)\n"
Packit Service 706eca
	printf "    fprintf_unfiltered (gdb_stdlog, \"gdbarch_${function} called\\\\n\");\n"
Packit Service 706eca
	if [ "x${actual}" = "x-" -o "x${actual}" = "x" ]
Packit Service 706eca
	then
Packit Service 706eca
	    if class_is_multiarch_p
Packit Service 706eca
	    then
Packit Service 706eca
		params="gdbarch"
Packit Service 706eca
	    else
Packit Service 706eca
		params=""
Packit Service 706eca
	    fi
Packit Service 706eca
	else
Packit Service 706eca
	    if class_is_multiarch_p
Packit Service 706eca
	    then
Packit Service 706eca
		params="gdbarch, ${actual}"
Packit Service 706eca
	    else
Packit Service 706eca
		params="${actual}"
Packit Service 706eca
	    fi
Packit Service 706eca
        fi
Packit Service 706eca
       	if [ "x${returntype}" = "xvoid" ]
Packit Service 706eca
	then
Packit Service 706eca
	  printf "  gdbarch->${function} (${params});\n"
Packit Service 706eca
	else
Packit Service 706eca
	  printf "  return gdbarch->${function} (${params});\n"
Packit Service 706eca
	fi
Packit Service 706eca
	printf "}\n"
Packit Service 706eca
	printf "\n"
Packit Service 706eca
	printf "void\n"
Packit Service 706eca
	printf "set_gdbarch_${function} (struct gdbarch *gdbarch,\n"
Packit Service 706eca
        printf "            `echo ${function} | sed -e 's/./ /g'`  gdbarch_${function}_ftype ${function})\n"
Packit Service 706eca
	printf "{\n"
Packit Service 706eca
	printf "  gdbarch->${function} = ${function};\n"
Packit Service 706eca
	printf "}\n"
Packit Service 706eca
    elif class_is_variable_p
Packit Service 706eca
    then
Packit Service 706eca
	printf "\n"
Packit Service 706eca
	printf "${returntype}\n"
Packit Service 706eca
	printf "gdbarch_${function} (struct gdbarch *gdbarch)\n"
Packit Service 706eca
	printf "{\n"
Packit Service 706eca
        printf "  gdb_assert (gdbarch != NULL);\n"
Packit Service 706eca
	if [ "x${invalid_p}" = "x0" ]
Packit Service 706eca
	then
Packit Service 706eca
	    printf "  /* Skip verify of ${function}, invalid_p == 0 */\n"
Packit Service 706eca
	elif [ -n "${invalid_p}" ]
Packit Service 706eca
	then
Packit Service 706eca
	    printf "  /* Check variable is valid.  */\n"
Packit Service 706eca
	    printf "  gdb_assert (!(${invalid_p}));\n"
Packit Service 706eca
	elif [ -n "${predefault}" ]
Packit Service 706eca
	then
Packit Service 706eca
	    printf "  /* Check variable changed from pre-default.  */\n"
Packit Service 706eca
	    printf "  gdb_assert (gdbarch->${function} != ${predefault});\n"
Packit Service 706eca
	fi
Packit Service 706eca
	printf "  if (gdbarch_debug >= 2)\n"
Packit Service 706eca
	printf "    fprintf_unfiltered (gdb_stdlog, \"gdbarch_${function} called\\\\n\");\n"
Packit Service 706eca
	printf "  return gdbarch->${function};\n"
Packit Service 706eca
	printf "}\n"
Packit Service 706eca
	printf "\n"
Packit Service 706eca
	printf "void\n"
Packit Service 706eca
	printf "set_gdbarch_${function} (struct gdbarch *gdbarch,\n"
Packit Service 706eca
        printf "            `echo ${function} | sed -e 's/./ /g'`  ${returntype} ${function})\n"
Packit Service 706eca
	printf "{\n"
Packit Service 706eca
	printf "  gdbarch->${function} = ${function};\n"
Packit Service 706eca
	printf "}\n"
Packit Service 706eca
    elif class_is_info_p
Packit Service 706eca
    then
Packit Service 706eca
	printf "\n"
Packit Service 706eca
	printf "${returntype}\n"
Packit Service 706eca
	printf "gdbarch_${function} (struct gdbarch *gdbarch)\n"
Packit Service 706eca
	printf "{\n"
Packit Service 706eca
        printf "  gdb_assert (gdbarch != NULL);\n"
Packit Service 706eca
	printf "  if (gdbarch_debug >= 2)\n"
Packit Service 706eca
	printf "    fprintf_unfiltered (gdb_stdlog, \"gdbarch_${function} called\\\\n\");\n"
Packit Service 706eca
	printf "  return gdbarch->${function};\n"
Packit Service 706eca
	printf "}\n"
Packit Service 706eca
    fi
Packit Service 706eca
done
Packit Service 706eca
Packit Service 706eca
# All the trailing guff
Packit Service 706eca
cat <
Packit Service 706eca
Packit Service 706eca
Packit Service 706eca
/* Keep a registry of per-architecture data-pointers required by GDB
Packit Service 706eca
   modules.  */
Packit Service 706eca
Packit Service 706eca
struct gdbarch_data
Packit Service 706eca
{
Packit Service 706eca
  unsigned index;
Packit Service 706eca
  int init_p;
Packit Service 706eca
  gdbarch_data_pre_init_ftype *pre_init;
Packit Service 706eca
  gdbarch_data_post_init_ftype *post_init;
Packit Service 706eca
};
Packit Service 706eca
Packit Service 706eca
struct gdbarch_data_registration
Packit Service 706eca
{
Packit Service 706eca
  struct gdbarch_data *data;
Packit Service 706eca
  struct gdbarch_data_registration *next;
Packit Service 706eca
};
Packit Service 706eca
Packit Service 706eca
struct gdbarch_data_registry
Packit Service 706eca
{
Packit Service 706eca
  unsigned nr;
Packit Service 706eca
  struct gdbarch_data_registration *registrations;
Packit Service 706eca
};
Packit Service 706eca
Packit Service 706eca
struct gdbarch_data_registry gdbarch_data_registry =
Packit Service 706eca
{
Packit Service 706eca
  0, NULL,
Packit Service 706eca
};
Packit Service 706eca
Packit Service 706eca
static struct gdbarch_data *
Packit Service 706eca
gdbarch_data_register (gdbarch_data_pre_init_ftype *pre_init,
Packit Service 706eca
		       gdbarch_data_post_init_ftype *post_init)
Packit Service 706eca
{
Packit Service 706eca
  struct gdbarch_data_registration **curr;
Packit Service 706eca
Packit Service 706eca
  /* Append the new registration.  */
Packit Service 706eca
  for (curr = &gdbarch_data_registry.registrations;
Packit Service 706eca
       (*curr) != NULL;
Packit Service 706eca
       curr = &(*curr)->next);
Packit Service 706eca
  (*curr) = XNEW (struct gdbarch_data_registration);
Packit Service 706eca
  (*curr)->next = NULL;
Packit Service 706eca
  (*curr)->data = XNEW (struct gdbarch_data);
Packit Service 706eca
  (*curr)->data->index = gdbarch_data_registry.nr++;
Packit Service 706eca
  (*curr)->data->pre_init = pre_init;
Packit Service 706eca
  (*curr)->data->post_init = post_init;
Packit Service 706eca
  (*curr)->data->init_p = 1;
Packit Service 706eca
  return (*curr)->data;
Packit Service 706eca
}
Packit Service 706eca
Packit Service 706eca
struct gdbarch_data *
Packit Service 706eca
gdbarch_data_register_pre_init (gdbarch_data_pre_init_ftype *pre_init)
Packit Service 706eca
{
Packit Service 706eca
  return gdbarch_data_register (pre_init, NULL);
Packit Service 706eca
}
Packit Service 706eca
Packit Service 706eca
struct gdbarch_data *
Packit Service 706eca
gdbarch_data_register_post_init (gdbarch_data_post_init_ftype *post_init)
Packit Service 706eca
{
Packit Service 706eca
  return gdbarch_data_register (NULL, post_init);
Packit Service 706eca
}
Packit Service 706eca
Packit Service 706eca
/* Create/delete the gdbarch data vector.  */
Packit Service 706eca
Packit Service 706eca
static void
Packit Service 706eca
alloc_gdbarch_data (struct gdbarch *gdbarch)
Packit Service 706eca
{
Packit Service 706eca
  gdb_assert (gdbarch->data == NULL);
Packit Service 706eca
  gdbarch->nr_data = gdbarch_data_registry.nr;
Packit Service 706eca
  gdbarch->data = GDBARCH_OBSTACK_CALLOC (gdbarch, gdbarch->nr_data, void *);
Packit Service 706eca
}
Packit Service 706eca
Packit Service 706eca
/* Initialize the current value of the specified per-architecture
Packit Service 706eca
   data-pointer.  */
Packit Service 706eca
Packit Service 706eca
void
Packit Service 706eca
deprecated_set_gdbarch_data (struct gdbarch *gdbarch,
Packit Service 706eca
			     struct gdbarch_data *data,
Packit Service 706eca
			     void *pointer)
Packit Service 706eca
{
Packit Service 706eca
  gdb_assert (data->index < gdbarch->nr_data);
Packit Service 706eca
  gdb_assert (gdbarch->data[data->index] == NULL);
Packit Service 706eca
  gdb_assert (data->pre_init == NULL);
Packit Service 706eca
  gdbarch->data[data->index] = pointer;
Packit Service 706eca
}
Packit Service 706eca
Packit Service 706eca
/* Return the current value of the specified per-architecture
Packit Service 706eca
   data-pointer.  */
Packit Service 706eca
Packit Service 706eca
void *
Packit Service 706eca
gdbarch_data (struct gdbarch *gdbarch, struct gdbarch_data *data)
Packit Service 706eca
{
Packit Service 706eca
  gdb_assert (data->index < gdbarch->nr_data);
Packit Service 706eca
  if (gdbarch->data[data->index] == NULL)
Packit Service 706eca
    {
Packit Service 706eca
      /* The data-pointer isn't initialized, call init() to get a
Packit Service 706eca
	 value.  */
Packit Service 706eca
      if (data->pre_init != NULL)
Packit Service 706eca
	/* Mid architecture creation: pass just the obstack, and not
Packit Service 706eca
	   the entire architecture, as that way it isn't possible for
Packit Service 706eca
	   pre-init code to refer to undefined architecture
Packit Service 706eca
	   fields.  */
Packit Service 706eca
	gdbarch->data[data->index] = data->pre_init (gdbarch->obstack);
Packit Service 706eca
      else if (gdbarch->initialized_p
Packit Service 706eca
	       && data->post_init != NULL)
Packit Service 706eca
	/* Post architecture creation: pass the entire architecture
Packit Service 706eca
	   (as all fields are valid), but be careful to also detect
Packit Service 706eca
	   recursive references.  */
Packit Service 706eca
	{
Packit Service 706eca
	  gdb_assert (data->init_p);
Packit Service 706eca
	  data->init_p = 0;
Packit Service 706eca
	  gdbarch->data[data->index] = data->post_init (gdbarch);
Packit Service 706eca
	  data->init_p = 1;
Packit Service 706eca
	}
Packit Service 706eca
      else
Packit Service 706eca
	/* The architecture initialization hasn't completed - punt -
Packit Service 706eca
	 hope that the caller knows what they are doing.  Once
Packit Service 706eca
	 deprecated_set_gdbarch_data has been initialized, this can be
Packit Service 706eca
	 changed to an internal error.  */
Packit Service 706eca
	return NULL;
Packit Service 706eca
      gdb_assert (gdbarch->data[data->index] != NULL);
Packit Service 706eca
    }
Packit Service 706eca
  return gdbarch->data[data->index];
Packit Service 706eca
}
Packit Service 706eca
Packit Service 706eca
Packit Service 706eca
/* Keep a registry of the architectures known by GDB.  */
Packit Service 706eca
Packit Service 706eca
struct gdbarch_registration
Packit Service 706eca
{
Packit Service 706eca
  enum bfd_architecture bfd_architecture;
Packit Service 706eca
  gdbarch_init_ftype *init;
Packit Service 706eca
  gdbarch_dump_tdep_ftype *dump_tdep;
Packit Service 706eca
  struct gdbarch_list *arches;
Packit Service 706eca
  struct gdbarch_registration *next;
Packit Service 706eca
};
Packit Service 706eca
Packit Service 706eca
static struct gdbarch_registration *gdbarch_registry = NULL;
Packit Service 706eca
Packit Service 706eca
static void
Packit Service 706eca
append_name (const char ***buf, int *nr, const char *name)
Packit Service 706eca
{
Packit Service 706eca
  *buf = XRESIZEVEC (const char *, *buf, *nr + 1);
Packit Service 706eca
  (*buf)[*nr] = name;
Packit Service 706eca
  *nr += 1;
Packit Service 706eca
}
Packit Service 706eca
Packit Service 706eca
const char **
Packit Service 706eca
gdbarch_printable_names (void)
Packit Service 706eca
{
Packit Service 706eca
  /* Accumulate a list of names based on the registed list of
Packit Service 706eca
     architectures.  */
Packit Service 706eca
  int nr_arches = 0;
Packit Service 706eca
  const char **arches = NULL;
Packit Service 706eca
  struct gdbarch_registration *rego;
Packit Service 706eca
Packit Service 706eca
  for (rego = gdbarch_registry;
Packit Service 706eca
       rego != NULL;
Packit Service 706eca
       rego = rego->next)
Packit Service 706eca
    {
Packit Service 706eca
      const struct bfd_arch_info *ap;
Packit Service 706eca
      ap = bfd_lookup_arch (rego->bfd_architecture, 0);
Packit Service 706eca
      if (ap == NULL)
Packit Service 706eca
        internal_error (__FILE__, __LINE__,
Packit Service 706eca
                        _("gdbarch_architecture_names: multi-arch unknown"));
Packit Service 706eca
      do
Packit Service 706eca
        {
Packit Service 706eca
          append_name (&arches, &nr_arches, ap->printable_name);
Packit Service 706eca
          ap = ap->next;
Packit Service 706eca
        }
Packit Service 706eca
      while (ap != NULL);
Packit Service 706eca
    }
Packit Service 706eca
  append_name (&arches, &nr_arches, NULL);
Packit Service 706eca
  return arches;
Packit Service 706eca
}
Packit Service 706eca
Packit Service 706eca
Packit Service 706eca
void
Packit Service 706eca
gdbarch_register (enum bfd_architecture bfd_architecture,
Packit Service 706eca
                  gdbarch_init_ftype *init,
Packit Service 706eca
		  gdbarch_dump_tdep_ftype *dump_tdep)
Packit Service 706eca
{
Packit Service 706eca
  struct gdbarch_registration **curr;
Packit Service 706eca
  const struct bfd_arch_info *bfd_arch_info;
Packit Service 706eca
Packit Service 706eca
  /* Check that BFD recognizes this architecture */
Packit Service 706eca
  bfd_arch_info = bfd_lookup_arch (bfd_architecture, 0);
Packit Service 706eca
  if (bfd_arch_info == NULL)
Packit Service 706eca
    {
Packit Service 706eca
      internal_error (__FILE__, __LINE__,
Packit Service 706eca
                      _("gdbarch: Attempt to register "
Packit Service 706eca
			"unknown architecture (%d)"),
Packit Service 706eca
                      bfd_architecture);
Packit Service 706eca
    }
Packit Service 706eca
  /* Check that we haven't seen this architecture before.  */
Packit Service 706eca
  for (curr = &gdbarch_registry;
Packit Service 706eca
       (*curr) != NULL;
Packit Service 706eca
       curr = &(*curr)->next)
Packit Service 706eca
    {
Packit Service 706eca
      if (bfd_architecture == (*curr)->bfd_architecture)
Packit Service 706eca
	internal_error (__FILE__, __LINE__,
Packit Service 706eca
                        _("gdbarch: Duplicate registration "
Packit Service 706eca
			  "of architecture (%s)"),
Packit Service 706eca
	                bfd_arch_info->printable_name);
Packit Service 706eca
    }
Packit Service 706eca
  /* log it */
Packit Service 706eca
  if (gdbarch_debug)
Packit Service 706eca
    fprintf_unfiltered (gdb_stdlog, "register_gdbarch_init (%s, %s)\n",
Packit Service 706eca
			bfd_arch_info->printable_name,
Packit Service 706eca
			host_address_to_string (init));
Packit Service 706eca
  /* Append it */
Packit Service 706eca
  (*curr) = XNEW (struct gdbarch_registration);
Packit Service 706eca
  (*curr)->bfd_architecture = bfd_architecture;
Packit Service 706eca
  (*curr)->init = init;
Packit Service 706eca
  (*curr)->dump_tdep = dump_tdep;
Packit Service 706eca
  (*curr)->arches = NULL;
Packit Service 706eca
  (*curr)->next = NULL;
Packit Service 706eca
}
Packit Service 706eca
Packit Service 706eca
void
Packit Service 706eca
register_gdbarch_init (enum bfd_architecture bfd_architecture,
Packit Service 706eca
		       gdbarch_init_ftype *init)
Packit Service 706eca
{
Packit Service 706eca
  gdbarch_register (bfd_architecture, init, NULL);
Packit Service 706eca
}
Packit Service 706eca
Packit Service 706eca
Packit Service 706eca
/* Look for an architecture using gdbarch_info.  */
Packit Service 706eca
Packit Service 706eca
struct gdbarch_list *
Packit Service 706eca
gdbarch_list_lookup_by_info (struct gdbarch_list *arches,
Packit Service 706eca
                             const struct gdbarch_info *info)
Packit Service 706eca
{
Packit Service 706eca
  for (; arches != NULL; arches = arches->next)
Packit Service 706eca
    {
Packit Service 706eca
      if (info->bfd_arch_info != arches->gdbarch->bfd_arch_info)
Packit Service 706eca
	continue;
Packit Service 706eca
      if (info->byte_order != arches->gdbarch->byte_order)
Packit Service 706eca
	continue;
Packit Service 706eca
      if (info->osabi != arches->gdbarch->osabi)
Packit Service 706eca
	continue;
Packit Service 706eca
      if (info->target_desc != arches->gdbarch->target_desc)
Packit Service 706eca
	continue;
Packit Service 706eca
      return arches;
Packit Service 706eca
    }
Packit Service 706eca
  return NULL;
Packit Service 706eca
}
Packit Service 706eca
Packit Service 706eca
Packit Service 706eca
/* Find an architecture that matches the specified INFO.  Create a new
Packit Service 706eca
   architecture if needed.  Return that new architecture.  */
Packit Service 706eca
Packit Service 706eca
struct gdbarch *
Packit Service 706eca
gdbarch_find_by_info (struct gdbarch_info info)
Packit Service 706eca
{
Packit Service 706eca
  struct gdbarch *new_gdbarch;
Packit Service 706eca
  struct gdbarch_registration *rego;
Packit Service 706eca
Packit Service 706eca
  /* Fill in missing parts of the INFO struct using a number of
Packit Service 706eca
     sources: "set ..."; INFOabfd supplied; and the global
Packit Service 706eca
     defaults.  */
Packit Service 706eca
  gdbarch_info_fill (&info;;
Packit Service 706eca
Packit Service 706eca
  /* Must have found some sort of architecture.  */
Packit Service 706eca
  gdb_assert (info.bfd_arch_info != NULL);
Packit Service 706eca
Packit Service 706eca
  if (gdbarch_debug)
Packit Service 706eca
    {
Packit Service 706eca
      fprintf_unfiltered (gdb_stdlog,
Packit Service 706eca
			  "gdbarch_find_by_info: info.bfd_arch_info %s\n",
Packit Service 706eca
			  (info.bfd_arch_info != NULL
Packit Service 706eca
			   ? info.bfd_arch_info->printable_name
Packit Service 706eca
			   : "(null)"));
Packit Service 706eca
      fprintf_unfiltered (gdb_stdlog,
Packit Service 706eca
			  "gdbarch_find_by_info: info.byte_order %d (%s)\n",
Packit Service 706eca
			  info.byte_order,
Packit Service 706eca
			  (info.byte_order == BFD_ENDIAN_BIG ? "big"
Packit Service 706eca
			   : info.byte_order == BFD_ENDIAN_LITTLE ? "little"
Packit Service 706eca
			   : "default"));
Packit Service 706eca
      fprintf_unfiltered (gdb_stdlog,
Packit Service 706eca
			  "gdbarch_find_by_info: info.osabi %d (%s)\n",
Packit Service 706eca
			  info.osabi, gdbarch_osabi_name (info.osabi));
Packit Service 706eca
      fprintf_unfiltered (gdb_stdlog,
Packit Service 706eca
			  "gdbarch_find_by_info: info.abfd %s\n",
Packit Service 706eca
			  host_address_to_string (info.abfd));
Packit Service 706eca
      fprintf_unfiltered (gdb_stdlog,
Packit Service 706eca
			  "gdbarch_find_by_info: info.tdep_info %s\n",
Packit Service 706eca
			  host_address_to_string (info.tdep_info));
Packit Service 706eca
    }
Packit Service 706eca
Packit Service 706eca
  /* Find the tdep code that knows about this architecture.  */
Packit Service 706eca
  for (rego = gdbarch_registry;
Packit Service 706eca
       rego != NULL;
Packit Service 706eca
       rego = rego->next)
Packit Service 706eca
    if (rego->bfd_architecture == info.bfd_arch_info->arch)
Packit Service 706eca
      break;
Packit Service 706eca
  if (rego == NULL)
Packit Service 706eca
    {
Packit Service 706eca
      if (gdbarch_debug)
Packit Service 706eca
	fprintf_unfiltered (gdb_stdlog, "gdbarch_find_by_info: "
Packit Service 706eca
			    "No matching architecture\n");
Packit Service 706eca
      return 0;
Packit Service 706eca
    }
Packit Service 706eca
Packit Service 706eca
  /* Ask the tdep code for an architecture that matches "info".  */
Packit Service 706eca
  new_gdbarch = rego->init (info, rego->arches);
Packit Service 706eca
Packit Service 706eca
  /* Did the tdep code like it?  No.  Reject the change and revert to
Packit Service 706eca
     the old architecture.  */
Packit Service 706eca
  if (new_gdbarch == NULL)
Packit Service 706eca
    {
Packit Service 706eca
      if (gdbarch_debug)
Packit Service 706eca
	fprintf_unfiltered (gdb_stdlog, "gdbarch_find_by_info: "
Packit Service 706eca
			    "Target rejected architecture\n");
Packit Service 706eca
      return NULL;
Packit Service 706eca
    }
Packit Service 706eca
Packit Service 706eca
  /* Is this a pre-existing architecture (as determined by already
Packit Service 706eca
     being initialized)?  Move it to the front of the architecture
Packit Service 706eca
     list (keeping the list sorted Most Recently Used).  */
Packit Service 706eca
  if (new_gdbarch->initialized_p)
Packit Service 706eca
    {
Packit Service 706eca
      struct gdbarch_list **list;
Packit Service 706eca
      struct gdbarch_list *self;
Packit Service 706eca
      if (gdbarch_debug)
Packit Service 706eca
	fprintf_unfiltered (gdb_stdlog, "gdbarch_find_by_info: "
Packit Service 706eca
			    "Previous architecture %s (%s) selected\n",
Packit Service 706eca
			    host_address_to_string (new_gdbarch),
Packit Service 706eca
			    new_gdbarch->bfd_arch_info->printable_name);
Packit Service 706eca
      /* Find the existing arch in the list.  */
Packit Service 706eca
      for (list = &rego->arches;
Packit Service 706eca
	   (*list) != NULL && (*list)->gdbarch != new_gdbarch;
Packit Service 706eca
	   list = &(*list)->next);
Packit Service 706eca
      /* It had better be in the list of architectures.  */
Packit Service 706eca
      gdb_assert ((*list) != NULL && (*list)->gdbarch == new_gdbarch);
Packit Service 706eca
      /* Unlink SELF.  */
Packit Service 706eca
      self = (*list);
Packit Service 706eca
      (*list) = self->next;
Packit Service 706eca
      /* Insert SELF at the front.  */
Packit Service 706eca
      self->next = rego->arches;
Packit Service 706eca
      rego->arches = self;
Packit Service 706eca
      /* Return it.  */
Packit Service 706eca
      return new_gdbarch;
Packit Service 706eca
    }
Packit Service 706eca
Packit Service 706eca
  /* It's a new architecture.  */
Packit Service 706eca
  if (gdbarch_debug)
Packit Service 706eca
    fprintf_unfiltered (gdb_stdlog, "gdbarch_find_by_info: "
Packit Service 706eca
			"New architecture %s (%s) selected\n",
Packit Service 706eca
			host_address_to_string (new_gdbarch),
Packit Service 706eca
			new_gdbarch->bfd_arch_info->printable_name);
Packit Service 706eca
  
Packit Service 706eca
  /* Insert the new architecture into the front of the architecture
Packit Service 706eca
     list (keep the list sorted Most Recently Used).  */
Packit Service 706eca
  {
Packit Service 706eca
    struct gdbarch_list *self = XNEW (struct gdbarch_list);
Packit Service 706eca
    self->next = rego->arches;
Packit Service 706eca
    self->gdbarch = new_gdbarch;
Packit Service 706eca
    rego->arches = self;
Packit Service 706eca
  }    
Packit Service 706eca
Packit Service 706eca
  /* Check that the newly installed architecture is valid.  Plug in
Packit Service 706eca
     any post init values.  */
Packit Service 706eca
  new_gdbarch->dump_tdep = rego->dump_tdep;
Packit Service 706eca
  verify_gdbarch (new_gdbarch);
Packit Service 706eca
  new_gdbarch->initialized_p = 1;
Packit Service 706eca
Packit Service 706eca
  if (gdbarch_debug)
Packit Service 706eca
    gdbarch_dump (new_gdbarch, gdb_stdlog);
Packit Service 706eca
Packit Service 706eca
  return new_gdbarch;
Packit Service 706eca
}
Packit Service 706eca
Packit Service 706eca
/* Make the specified architecture current.  */
Packit Service 706eca
Packit Service 706eca
void
Packit Service 706eca
set_target_gdbarch (struct gdbarch *new_gdbarch)
Packit Service 706eca
{
Packit Service 706eca
  gdb_assert (new_gdbarch != NULL);
Packit Service 706eca
  gdb_assert (new_gdbarch->initialized_p);
Packit Service 706eca
  current_inferior ()->gdbarch = new_gdbarch;
Packit Service 706eca
  gdb::observers::architecture_changed.notify (new_gdbarch);
Packit Service 706eca
  registers_changed ();
Packit Service 706eca
}
Packit Service 706eca
Packit Service 706eca
/* Return the current inferior's arch.  */
Packit Service 706eca
Packit Service 706eca
struct gdbarch *
Packit Service 706eca
target_gdbarch (void)
Packit Service 706eca
{
Packit Service 706eca
  return current_inferior ()->gdbarch;
Packit Service 706eca
}
Packit Service 706eca
Packit Service 706eca
void
Packit Service 706eca
_initialize_gdbarch (void)
Packit Service 706eca
{
Packit Service 706eca
  add_setshow_zuinteger_cmd ("arch", class_maintenance, &gdbarch_debug, _("\\
Packit Service 706eca
Set architecture debugging."), _("\\
Packit Service 706eca
Show architecture debugging."), _("\\
Packit Service 706eca
When non-zero, architecture debugging is enabled."),
Packit Service 706eca
                            NULL,
Packit Service 706eca
                            show_gdbarch_debug,
Packit Service 706eca
                            &setdebuglist, &showdebuglist);
Packit Service 706eca
}
Packit Service 706eca
EOF
Packit Service 706eca
Packit Service 706eca
# close things off
Packit Service 706eca
exec 1>&2
Packit Service 706eca
#../move-if-change new-gdbarch.c gdbarch.c
Packit Service 706eca
compare_new gdbarch.c