2000-08-11 10:55:38 +08:00
|
|
|
#!/bin/sh -u
|
1999-08-31 09:14:27 +08:00
|
|
|
|
|
|
|
# Architecture commands for GDB, the GNU debugger.
|
2004-01-18 07:21:21 +08:00
|
|
|
#
|
2008-01-02 06:53:26 +08:00
|
|
|
# Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
|
2010-01-01 15:32:07 +08:00
|
|
|
# 2008, 2009, 2010 Free Software Foundation, Inc.
|
1999-08-31 09:14:27 +08:00
|
|
|
#
|
|
|
|
# This file is part of GDB.
|
|
|
|
#
|
|
|
|
# This program is free software; you can redistribute it and/or modify
|
|
|
|
# it under the terms of the GNU General Public License as published by
|
2007-08-24 02:19:51 +08:00
|
|
|
# the Free Software Foundation; either version 3 of the License, or
|
1999-08-31 09:14:27 +08:00
|
|
|
# (at your option) any later version.
|
|
|
|
#
|
|
|
|
# This program is distributed in the hope that it will be useful,
|
|
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
# GNU General Public License for more details.
|
|
|
|
#
|
|
|
|
# You should have received a copy of the GNU General Public License
|
2007-08-24 02:19:51 +08:00
|
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
1999-08-31 09:14:27 +08:00
|
|
|
|
2006-07-13 02:04:30 +08:00
|
|
|
# Make certain that the script is not running in an internationalized
|
2002-04-18 02:47:54 +08:00
|
|
|
# environment.
|
2010-02-02 00:57:01 +08:00
|
|
|
LANG=C ; export LANG
|
|
|
|
LC_ALL=C ; export LC_ALL
|
2002-04-18 02:47:54 +08:00
|
|
|
|
|
|
|
|
2000-03-30 13:32:23 +08:00
|
|
|
compare_new ()
|
|
|
|
{
|
|
|
|
file=$1
|
2000-08-11 10:55:38 +08:00
|
|
|
if test ! -r ${file}
|
2000-03-30 13:32:23 +08:00
|
|
|
then
|
|
|
|
echo "${file} missing? cp new-${file} ${file}" 1>&2
|
2002-02-10 15:37:22 +08:00
|
|
|
elif diff -u ${file} new-${file}
|
2000-03-30 13:32:23 +08:00
|
|
|
then
|
|
|
|
echo "${file} unchanged" 1>&2
|
|
|
|
else
|
|
|
|
echo "${file} has changed? cp new-${file} ${file}" 1>&2
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
# Format of the input table
|
2007-10-19 20:34:38 +08:00
|
|
|
read="class returntype function formal actual staticdefault predefault postdefault invalid_p print garbage_at_eol"
|
2000-04-03 08:00:32 +08:00
|
|
|
|
|
|
|
do_read ()
|
|
|
|
{
|
2000-08-01 18:31:19 +08:00
|
|
|
comment=""
|
|
|
|
class=""
|
|
|
|
while read line
|
|
|
|
do
|
|
|
|
if test "${line}" = ""
|
|
|
|
then
|
|
|
|
continue
|
|
|
|
elif test "${line}" = "#" -a "${comment}" = ""
|
2000-06-02 09:59:13 +08:00
|
|
|
then
|
2000-08-01 18:31:19 +08:00
|
|
|
continue
|
|
|
|
elif expr "${line}" : "#" > /dev/null
|
2000-06-02 09:59:13 +08:00
|
|
|
then
|
2000-08-01 18:31:19 +08:00
|
|
|
comment="${comment}
|
|
|
|
${line}"
|
2000-06-02 09:59:13 +08:00
|
|
|
else
|
2000-09-04 19:40:20 +08:00
|
|
|
|
|
|
|
# The semantics of IFS varies between different SH's. Some
|
|
|
|
# treat ``::' as three fields while some treat it as just too.
|
|
|
|
# Work around this by eliminating ``::'' ....
|
|
|
|
line="`echo "${line}" | sed -e 's/::/: :/g' -e 's/::/: :/g'`"
|
|
|
|
|
|
|
|
OFS="${IFS}" ; IFS="[:]"
|
2000-08-01 18:31:19 +08:00
|
|
|
eval read ${read} <<EOF
|
|
|
|
${line}
|
|
|
|
EOF
|
|
|
|
IFS="${OFS}"
|
|
|
|
|
2004-06-21 23:01:04 +08:00
|
|
|
if test -n "${garbage_at_eol}"
|
|
|
|
then
|
|
|
|
echo "Garbage at end-of-line in ${line}" 1>&2
|
|
|
|
kill $$
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
2000-09-04 19:40:20 +08:00
|
|
|
# .... and then going back through each field and strip out those
|
|
|
|
# that ended up with just that space character.
|
|
|
|
for r in ${read}
|
|
|
|
do
|
|
|
|
if eval test \"\${${r}}\" = \"\ \"
|
|
|
|
then
|
|
|
|
eval ${r}=""
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
2001-11-08 09:33:04 +08:00
|
|
|
case "${class}" in
|
|
|
|
m ) staticdefault="${predefault}" ;;
|
|
|
|
M ) staticdefault="0" ;;
|
|
|
|
* ) test "${staticdefault}" || staticdefault=0 ;;
|
|
|
|
esac
|
2001-12-26 06:19:40 +08:00
|
|
|
|
2002-12-01 Andrew Cagney <ac131313@redhat.com>
* gdbarch.sh (DEPRECATED_PC_IN_CALL_DUMMY): Rename
PC_IN_CALL_DUMMY. Change to predicate. Always allow call.
* gdbarch.h, gdbarch.c: Re-generate.
* config/sparc/tm-sparc.h, config/sparc/tm-sp64.h: Update.
* config/mn10200/tm-mn10200.h, config/h8500/tm-h8500.h: Update.
* config/pa/tm-hppa.h, frame.h: Update.
* x86-64-tdep.c, vax-tdep.c, sparc-tdep.c: Update.
* s390-tdep.c, ns32k-tdep.c, mn10300-tdep.c: Update.
* m68k-tdep.c, i386-tdep.c, frv-tdep.c: Update.
* cris-tdep.c, alpha-tdep.c: Update.
* frame.c (set_unwind_by_pc, create_new_frame): Use either
DEPRECATED_PC_IN_CALL_DUMMY or pc_in_dummy_frame.
(get_prev_frame): Ditto.
Index: doc/ChangeLog
2002-12-01 Andrew Cagney <ac131313@redhat.com>
* gdbint.texinfo (Target Architecture Definition): Delete
PC_IN_CALL_DUMMY.
2002-12-02 03:07:16 +08:00
|
|
|
case "${class}" in
|
|
|
|
F | V | M )
|
|
|
|
case "${invalid_p}" in
|
2000-08-01 18:31:19 +08:00
|
|
|
"" )
|
2003-07-11 11:01:38 +08:00
|
|
|
if test -n "${predefault}"
|
2000-08-01 18:31:19 +08:00
|
|
|
then
|
|
|
|
#invalid_p="gdbarch->${function} == ${predefault}"
|
2002-12-01 Andrew Cagney <ac131313@redhat.com>
* gdbarch.sh (DEPRECATED_PC_IN_CALL_DUMMY): Rename
PC_IN_CALL_DUMMY. Change to predicate. Always allow call.
* gdbarch.h, gdbarch.c: Re-generate.
* config/sparc/tm-sparc.h, config/sparc/tm-sp64.h: Update.
* config/mn10200/tm-mn10200.h, config/h8500/tm-h8500.h: Update.
* config/pa/tm-hppa.h, frame.h: Update.
* x86-64-tdep.c, vax-tdep.c, sparc-tdep.c: Update.
* s390-tdep.c, ns32k-tdep.c, mn10300-tdep.c: Update.
* m68k-tdep.c, i386-tdep.c, frv-tdep.c: Update.
* cris-tdep.c, alpha-tdep.c: Update.
* frame.c (set_unwind_by_pc, create_new_frame): Use either
DEPRECATED_PC_IN_CALL_DUMMY or pc_in_dummy_frame.
(get_prev_frame): Ditto.
Index: doc/ChangeLog
2002-12-01 Andrew Cagney <ac131313@redhat.com>
* gdbint.texinfo (Target Architecture Definition): Delete
PC_IN_CALL_DUMMY.
2002-12-02 03:07:16 +08:00
|
|
|
predicate="gdbarch->${function} != ${predefault}"
|
2003-07-11 11:01:38 +08:00
|
|
|
elif class_is_variable_p
|
|
|
|
then
|
|
|
|
predicate="gdbarch->${function} != 0"
|
|
|
|
elif class_is_function_p
|
|
|
|
then
|
|
|
|
predicate="gdbarch->${function} != NULL"
|
2000-08-01 18:31:19 +08:00
|
|
|
fi
|
|
|
|
;;
|
2002-12-01 Andrew Cagney <ac131313@redhat.com>
* gdbarch.sh (DEPRECATED_PC_IN_CALL_DUMMY): Rename
PC_IN_CALL_DUMMY. Change to predicate. Always allow call.
* gdbarch.h, gdbarch.c: Re-generate.
* config/sparc/tm-sparc.h, config/sparc/tm-sp64.h: Update.
* config/mn10200/tm-mn10200.h, config/h8500/tm-h8500.h: Update.
* config/pa/tm-hppa.h, frame.h: Update.
* x86-64-tdep.c, vax-tdep.c, sparc-tdep.c: Update.
* s390-tdep.c, ns32k-tdep.c, mn10300-tdep.c: Update.
* m68k-tdep.c, i386-tdep.c, frv-tdep.c: Update.
* cris-tdep.c, alpha-tdep.c: Update.
* frame.c (set_unwind_by_pc, create_new_frame): Use either
DEPRECATED_PC_IN_CALL_DUMMY or pc_in_dummy_frame.
(get_prev_frame): Ditto.
Index: doc/ChangeLog
2002-12-01 Andrew Cagney <ac131313@redhat.com>
* gdbint.texinfo (Target Architecture Definition): Delete
PC_IN_CALL_DUMMY.
2002-12-02 03:07:16 +08:00
|
|
|
* )
|
2002-12-05 23:19:45 +08:00
|
|
|
echo "Predicate function ${function} with invalid_p." 1>&2
|
2002-12-01 Andrew Cagney <ac131313@redhat.com>
* gdbarch.sh (DEPRECATED_PC_IN_CALL_DUMMY): Rename
PC_IN_CALL_DUMMY. Change to predicate. Always allow call.
* gdbarch.h, gdbarch.c: Re-generate.
* config/sparc/tm-sparc.h, config/sparc/tm-sp64.h: Update.
* config/mn10200/tm-mn10200.h, config/h8500/tm-h8500.h: Update.
* config/pa/tm-hppa.h, frame.h: Update.
* x86-64-tdep.c, vax-tdep.c, sparc-tdep.c: Update.
* s390-tdep.c, ns32k-tdep.c, mn10300-tdep.c: Update.
* m68k-tdep.c, i386-tdep.c, frv-tdep.c: Update.
* cris-tdep.c, alpha-tdep.c: Update.
* frame.c (set_unwind_by_pc, create_new_frame): Use either
DEPRECATED_PC_IN_CALL_DUMMY or pc_in_dummy_frame.
(get_prev_frame): Ditto.
Index: doc/ChangeLog
2002-12-01 Andrew Cagney <ac131313@redhat.com>
* gdbint.texinfo (Target Architecture Definition): Delete
PC_IN_CALL_DUMMY.
2002-12-02 03:07:16 +08:00
|
|
|
kill $$
|
|
|
|
exit 1
|
|
|
|
;;
|
|
|
|
esac
|
2000-08-01 18:31:19 +08:00
|
|
|
esac
|
|
|
|
|
|
|
|
# PREDEFAULT is a valid fallback definition of MEMBER when
|
|
|
|
# multi-arch is not enabled. This ensures that the
|
|
|
|
# default value, when multi-arch is the same as the
|
|
|
|
# default value when not multi-arch. POSTDEFAULT is
|
|
|
|
# always a valid definition of MEMBER as this again
|
|
|
|
# ensures consistency.
|
|
|
|
|
2001-06-08 04:52:47 +08:00
|
|
|
if [ -n "${postdefault}" ]
|
2000-08-01 18:31:19 +08:00
|
|
|
then
|
|
|
|
fallbackdefault="${postdefault}"
|
2001-06-08 04:52:47 +08:00
|
|
|
elif [ -n "${predefault}" ]
|
2000-08-01 18:31:19 +08:00
|
|
|
then
|
|
|
|
fallbackdefault="${predefault}"
|
|
|
|
else
|
2001-10-16 05:38:44 +08:00
|
|
|
fallbackdefault="0"
|
2000-08-01 18:31:19 +08:00
|
|
|
fi
|
|
|
|
|
|
|
|
#NOT YET: See gdbarch.log for basic verification of
|
|
|
|
# database
|
|
|
|
|
|
|
|
break
|
2000-06-02 09:59:13 +08:00
|
|
|
fi
|
2000-08-01 18:31:19 +08:00
|
|
|
done
|
2001-06-08 04:52:47 +08:00
|
|
|
if [ -n "${class}" ]
|
2000-08-01 18:31:19 +08:00
|
|
|
then
|
|
|
|
true
|
2000-04-03 08:00:32 +08:00
|
|
|
else
|
|
|
|
false
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
1999-08-31 09:14:27 +08:00
|
|
|
|
2000-06-02 09:59:13 +08:00
|
|
|
fallback_default_p ()
|
|
|
|
{
|
2001-06-08 04:52:47 +08:00
|
|
|
[ -n "${postdefault}" -a "x${invalid_p}" != "x0" ] \
|
|
|
|
|| [ -n "${predefault}" -a "x${invalid_p}" = "x0" ]
|
2000-06-02 09:59:13 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
class_is_variable_p ()
|
|
|
|
{
|
2001-03-17 08:31:22 +08:00
|
|
|
case "${class}" in
|
|
|
|
*v* | *V* ) true ;;
|
|
|
|
* ) false ;;
|
|
|
|
esac
|
2000-06-02 09:59:13 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
class_is_function_p ()
|
|
|
|
{
|
2001-03-17 08:31:22 +08:00
|
|
|
case "${class}" in
|
|
|
|
*f* | *F* | *m* | *M* ) true ;;
|
|
|
|
* ) false ;;
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
|
|
|
class_is_multiarch_p ()
|
|
|
|
{
|
|
|
|
case "${class}" in
|
|
|
|
*m* | *M* ) true ;;
|
|
|
|
* ) false ;;
|
|
|
|
esac
|
2000-06-02 09:59:13 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
class_is_predicate_p ()
|
|
|
|
{
|
2001-03-17 08:31:22 +08:00
|
|
|
case "${class}" in
|
|
|
|
*F* | *V* | *M* ) true ;;
|
|
|
|
* ) false ;;
|
|
|
|
esac
|
2000-06-02 09:59:13 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
class_is_info_p ()
|
|
|
|
{
|
2001-03-17 08:31:22 +08:00
|
|
|
case "${class}" in
|
|
|
|
*i* ) true ;;
|
|
|
|
* ) false ;;
|
|
|
|
esac
|
2000-06-02 09:59:13 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
1999-09-14 05:40:00 +08:00
|
|
|
# dump out/verify the doco
|
|
|
|
for field in ${read}
|
|
|
|
do
|
|
|
|
case ${field} in
|
|
|
|
|
|
|
|
class ) : ;;
|
1999-12-14 09:06:04 +08:00
|
|
|
|
2000-04-03 08:00:32 +08:00
|
|
|
# # -> line disable
|
|
|
|
# f -> function
|
|
|
|
# hiding a function
|
2000-04-21 12:17:18 +08:00
|
|
|
# F -> function + predicate
|
|
|
|
# hiding a function + predicate to test function validity
|
2000-04-03 08:00:32 +08:00
|
|
|
# v -> variable
|
|
|
|
# hiding a variable
|
2000-04-21 12:17:18 +08:00
|
|
|
# V -> variable + predicate
|
|
|
|
# hiding a variable + predicate to test variables validity
|
2000-04-03 08:00:32 +08:00
|
|
|
# i -> set from info
|
|
|
|
# hiding something from the ``struct info'' object
|
2001-03-17 08:31:22 +08:00
|
|
|
# m -> multi-arch function
|
|
|
|
# hiding a multi-arch function (parameterised with the architecture)
|
|
|
|
# M -> multi-arch function + predicate
|
|
|
|
# hiding a multi-arch function + predicate to test function validity
|
1999-09-14 05:40:00 +08:00
|
|
|
|
|
|
|
returntype ) : ;;
|
|
|
|
|
2000-04-03 08:00:32 +08:00
|
|
|
# For functions, the return type; for variables, the data type
|
1999-09-14 05:40:00 +08:00
|
|
|
|
|
|
|
function ) : ;;
|
|
|
|
|
2000-04-03 08:00:32 +08:00
|
|
|
# For functions, the member function name; for variables, the
|
|
|
|
# variable name. Member function names are always prefixed with
|
|
|
|
# ``gdbarch_'' for name-space purity.
|
1999-09-14 05:40:00 +08:00
|
|
|
|
|
|
|
formal ) : ;;
|
|
|
|
|
2000-04-03 08:00:32 +08:00
|
|
|
# The formal argument list. It is assumed that the formal
|
|
|
|
# argument list includes the actual name of each list element.
|
|
|
|
# A function with no arguments shall have ``void'' as the
|
|
|
|
# formal argument list.
|
1999-09-14 05:40:00 +08:00
|
|
|
|
|
|
|
actual ) : ;;
|
|
|
|
|
2000-04-03 08:00:32 +08:00
|
|
|
# The list of actual arguments. The arguments specified shall
|
|
|
|
# match the FORMAL list given above. Functions with out
|
|
|
|
# arguments leave this blank.
|
1999-09-14 05:40:00 +08:00
|
|
|
|
2000-05-30 09:29:26 +08:00
|
|
|
staticdefault ) : ;;
|
2000-04-03 08:00:32 +08:00
|
|
|
|
|
|
|
# To help with the GDB startup a static gdbarch object is
|
2000-05-30 09:29:26 +08:00
|
|
|
# created. STATICDEFAULT is the value to insert into that
|
|
|
|
# static gdbarch object. Since this a static object only
|
|
|
|
# simple expressions can be used.
|
1999-09-14 05:40:00 +08:00
|
|
|
|
2000-05-30 09:29:26 +08:00
|
|
|
# If STATICDEFAULT is empty, zero is used.
|
2000-04-03 08:00:32 +08:00
|
|
|
|
2000-05-30 09:29:26 +08:00
|
|
|
predefault ) : ;;
|
1999-09-14 05:40:00 +08:00
|
|
|
|
2001-06-16 07:10:55 +08:00
|
|
|
# An initial value to assign to MEMBER of the freshly
|
|
|
|
# malloc()ed gdbarch object. After initialization, the
|
|
|
|
# freshly malloc()ed object is passed to the target
|
|
|
|
# architecture code for further updates.
|
1999-09-14 05:40:00 +08:00
|
|
|
|
2000-05-30 09:29:26 +08:00
|
|
|
# If PREDEFAULT is empty, zero is used.
|
|
|
|
|
2001-06-16 07:10:55 +08:00
|
|
|
# A non-empty PREDEFAULT, an empty POSTDEFAULT and a zero
|
|
|
|
# INVALID_P are specified, PREDEFAULT will be used as the
|
|
|
|
# default for the non- multi-arch target.
|
|
|
|
|
|
|
|
# A zero PREDEFAULT function will force the fallback to call
|
|
|
|
# internal_error().
|
2000-06-02 09:59:13 +08:00
|
|
|
|
|
|
|
# Variable declarations can refer to ``gdbarch'' which will
|
|
|
|
# contain the current architecture. Care should be taken.
|
2000-05-30 09:29:26 +08:00
|
|
|
|
|
|
|
postdefault ) : ;;
|
|
|
|
|
|
|
|
# A value to assign to MEMBER of the new gdbarch object should
|
2001-06-16 07:10:55 +08:00
|
|
|
# the target architecture code fail to change the PREDEFAULT
|
|
|
|
# value.
|
2000-05-30 09:29:26 +08:00
|
|
|
|
|
|
|
# If POSTDEFAULT is empty, no post update is performed.
|
|
|
|
|
|
|
|
# If both INVALID_P and POSTDEFAULT are non-empty then
|
|
|
|
# INVALID_P will be used to determine if MEMBER should be
|
|
|
|
# changed to POSTDEFAULT.
|
|
|
|
|
2001-06-16 07:10:55 +08:00
|
|
|
# If a non-empty POSTDEFAULT and a zero INVALID_P are
|
|
|
|
# specified, POSTDEFAULT will be used as the default for the
|
|
|
|
# non- multi-arch target (regardless of the value of
|
|
|
|
# PREDEFAULT).
|
|
|
|
|
2000-06-02 09:59:13 +08:00
|
|
|
# You cannot specify both a zero INVALID_P and a POSTDEFAULT.
|
|
|
|
|
2007-11-12 14:47:56 +08:00
|
|
|
# Variable declarations can refer to ``gdbarch'' which
|
2003-11-10 09:10:55 +08:00
|
|
|
# will contain the current architecture. Care should be
|
|
|
|
# taken.
|
1999-09-14 05:40:00 +08:00
|
|
|
|
1999-12-14 09:06:04 +08:00
|
|
|
invalid_p ) : ;;
|
1999-09-14 05:40:00 +08:00
|
|
|
|
2000-05-30 09:29:26 +08:00
|
|
|
# A predicate equation that validates MEMBER. Non-zero is
|
2000-04-03 08:00:32 +08:00
|
|
|
# returned if the code creating the new architecture failed to
|
2000-05-30 09:29:26 +08:00
|
|
|
# initialize MEMBER or the initialized the member is invalid.
|
|
|
|
# If POSTDEFAULT is non-empty then MEMBER will be updated to
|
|
|
|
# that value. If POSTDEFAULT is empty then internal_error()
|
|
|
|
# is called.
|
|
|
|
|
|
|
|
# If INVALID_P is empty, a check that MEMBER is no longer
|
|
|
|
# equal to PREDEFAULT is used.
|
|
|
|
|
2000-06-02 09:59:13 +08:00
|
|
|
# The expression ``0'' disables the INVALID_P check making
|
|
|
|
# PREDEFAULT a legitimate value.
|
2000-05-30 09:29:26 +08:00
|
|
|
|
|
|
|
# See also PREDEFAULT and POSTDEFAULT.
|
1999-09-14 05:40:00 +08:00
|
|
|
|
|
|
|
print ) : ;;
|
|
|
|
|
2004-08-09 04:50:57 +08:00
|
|
|
# An optional expression that convers MEMBER to a value
|
|
|
|
# suitable for formatting using %s.
|
2000-04-03 08:00:32 +08:00
|
|
|
|
2008-09-05 20:57:16 +08:00
|
|
|
# If PRINT is empty, core_addr_to_string_nz (for CORE_ADDR)
|
|
|
|
# or plongest (anything else) is used.
|
1999-09-14 05:40:00 +08:00
|
|
|
|
2004-06-21 23:01:04 +08:00
|
|
|
garbage_at_eol ) : ;;
|
2000-05-30 09:29:26 +08:00
|
|
|
|
2004-06-21 23:01:04 +08:00
|
|
|
# Catches stray fields.
|
1999-09-14 05:40:00 +08:00
|
|
|
|
2002-02-10 15:37:22 +08:00
|
|
|
*)
|
|
|
|
echo "Bad field ${field}"
|
|
|
|
exit 1;;
|
1999-09-14 05:40:00 +08:00
|
|
|
esac
|
|
|
|
done
|
|
|
|
|
|
|
|
|
1999-08-31 09:14:27 +08:00
|
|
|
function_list ()
|
|
|
|
{
|
1999-09-14 05:40:00 +08:00
|
|
|
# See below (DOCO) for description of each field
|
2000-08-01 18:31:19 +08:00
|
|
|
cat <<EOF
|
2007-11-12 14:47:56 +08:00
|
|
|
i:const struct bfd_arch_info *:bfd_arch_info:::&bfd_default_arch_struct::::gdbarch_bfd_arch_info (gdbarch)->printable_name
|
1999-08-31 09:14:27 +08:00
|
|
|
#
|
2007-10-19 20:34:38 +08:00
|
|
|
i:int:byte_order:::BFD_ENDIAN_BIG
|
2008-08-12 03:00:25 +08:00
|
|
|
i:int:byte_order_for_code:::BFD_ENDIAN_BIG
|
2003-01-05 07:38:46 +08:00
|
|
|
#
|
2007-10-19 20:34:38 +08:00
|
|
|
i:enum gdb_osabi:osabi:::GDB_OSABI_UNKNOWN
|
2006-11-29 06:10:26 +08:00
|
|
|
#
|
2009-01-09 19:06:48 +08:00
|
|
|
i:const struct target_desc *:target_desc:::::::host_address_to_string (gdbarch->target_desc)
|
2008-01-19 01:07:40 +08:00
|
|
|
|
|
|
|
# The bit byte-order has to do just with numbering of bits in debugging symbols
|
|
|
|
# and such. Conceptually, it's quite separate from byte/word byte order.
|
|
|
|
v:int:bits_big_endian:::1:(gdbarch->byte_order == BFD_ENDIAN_BIG)::0
|
|
|
|
|
2000-08-11 10:55:38 +08:00
|
|
|
# Number of bits in a char or unsigned char for the target machine.
|
|
|
|
# Just like CHAR_BIT in <limits.h> but describes the target machine.
|
2004-06-14 00:43:58 +08:00
|
|
|
# v:TARGET_CHAR_BIT:int:char_bit::::8 * sizeof (char):8::0:
|
2000-08-11 10:55:38 +08:00
|
|
|
#
|
|
|
|
# Number of bits in a short or unsigned short for the target machine.
|
2007-10-19 20:34:38 +08:00
|
|
|
v:int:short_bit:::8 * sizeof (short):2*TARGET_CHAR_BIT::0
|
2000-08-11 10:55:38 +08:00
|
|
|
# Number of bits in an int or unsigned int for the target machine.
|
2007-10-19 20:34:38 +08:00
|
|
|
v:int:int_bit:::8 * sizeof (int):4*TARGET_CHAR_BIT::0
|
2000-08-11 10:55:38 +08:00
|
|
|
# Number of bits in a long or unsigned long for the target machine.
|
2007-10-19 20:34:38 +08:00
|
|
|
v:int:long_bit:::8 * sizeof (long):4*TARGET_CHAR_BIT::0
|
2000-08-11 10:55:38 +08:00
|
|
|
# Number of bits in a long long or unsigned long long for the target
|
|
|
|
# machine.
|
2007-11-12 14:47:56 +08:00
|
|
|
v:int:long_long_bit:::8 * sizeof (LONGEST):2*gdbarch->long_bit::0
|
2004-08-09 03:49:43 +08:00
|
|
|
|
|
|
|
# The ABI default bit-size and format for "float", "double", and "long
|
|
|
|
# double". These bit/format pairs should eventually be combined into
|
|
|
|
# a single object. For the moment, just initialize them as a pair.
|
* doublest.c (floatformat_from_length): Use the right element from
gdbarch floatformats.
(floatformat_from_type, extract_typed_floating)
(store_typed_floating): Likewise.
* doublest.h: Remove declarations for undefined floatformat arrays.
* gdbarch.sh (float_format, double_format, long_double_format): Change
to pairs.
(pformat): Update for pairs.
* gdbarch.c, gdbarch.h: Regenerated.
* gdbtypes.c (floatformats_ieee_single, floatformats_ieee_double)
(floatformats_ieee_double_littlebyte_bigword)
(floatformats_i387_ext, floatformats_m68881_ext, floatformats_arm_ext)
(floatformats_ia64_spill, floatformats_ia64_quad, floatformats_vax_f)
(floatformats_vax_d): New variables.
(builtin_type_ieee_single, builtin_type_ieee_double)
(builtin_type_arm_ext, builtin_type_ia64_spill)
(builtin_type_ia64_quad): Replace arrays with individual types.
(builtin_type_ieee_single_big, builtin_type_ieee_single_little)
(builtin_type_ieee_double_big, builtin_type_ieee_double_little)
(builtin_type_ieee_double_littlebyte_bigword, builtin_type_i960_ext)
(builtin_type_m88110_ext, builtin_type_m88110_harris_ext)
(builtin_type_arm_ext_big, builtin_type_arm_ext_littlebyte_bigword)
(builtin_type_ia64_spill_big, builtin_type_ia64_spill_little)
(builtin_type_ia64_quad_big, builtin_type_ia64_quad_little): Delete
unused and endian-specific types.
(recursive_dump_type): Update for floatformat pairs.
(build_flt): Move higher. Handle bit == -1. Take a floatformat pair.
(build_gdbtypes): Use build_flt.
(_initialize_gdbtypes): Update set of initialized types.
* gdbtypes.h: Update declarations to match gdbtypes.c.
(struct main_type): Store a pointer to two floatformats.
* arch-utils.c (default_float_format, default_double_format): Delete.
* arch-utils.h (default_float_format, default_double_format): Delete.
* arm-tdep.c, avr-tdep.c, hppa-tdep.c, hppabsd-tdep.c, i386-tdep.c,
ia64-tdep.c, iq2000-tdep.c, m68k-tdep.c, m88k-tdep.c,
mips-linux-tdep.c, mips-tdep.c, mt-tdep.c, ppcobsd-tdep.c,
sparc-linux-tdep.c, sparc-tdep.c, sparcnbsd-tdep.c, spu-tdep.c,
vax-tdep.c, alpha-tdep.c, ppc-sysv-tdep.c: Update.
2007-01-30 01:31:06 +08:00
|
|
|
# Each format describes both the big and little endian layouts (if
|
|
|
|
# useful).
|
2004-08-09 03:49:43 +08:00
|
|
|
|
2007-10-19 20:34:38 +08:00
|
|
|
v:int:float_bit:::8 * sizeof (float):4*TARGET_CHAR_BIT::0
|
2007-11-12 14:47:56 +08:00
|
|
|
v:const struct floatformat **:float_format:::::floatformats_ieee_single::pformat (gdbarch->float_format)
|
2007-10-19 20:34:38 +08:00
|
|
|
v:int:double_bit:::8 * sizeof (double):8*TARGET_CHAR_BIT::0
|
2007-11-12 14:47:56 +08:00
|
|
|
v:const struct floatformat **:double_format:::::floatformats_ieee_double::pformat (gdbarch->double_format)
|
2007-10-19 20:34:38 +08:00
|
|
|
v:int:long_double_bit:::8 * sizeof (long double):8*TARGET_CHAR_BIT::0
|
2007-11-12 14:47:56 +08:00
|
|
|
v:const struct floatformat **:long_double_format:::::floatformats_ieee_double::pformat (gdbarch->long_double_format)
|
2004-08-09 03:49:43 +08:00
|
|
|
|
2000-08-26 04:51:19 +08:00
|
|
|
# For most targets, a pointer on the target and its representation as an
|
|
|
|
# address in GDB have the same size and "look the same". For such a
|
2007-06-14 01:59:51 +08:00
|
|
|
# target, you need only set gdbarch_ptr_bit and gdbarch_addr_bit
|
2000-08-26 04:51:19 +08:00
|
|
|
# / addr_bit will be set from it.
|
|
|
|
#
|
2007-06-14 01:59:51 +08:00
|
|
|
# If gdbarch_ptr_bit and gdbarch_addr_bit are different, you'll probably
|
2007-06-06 23:23:06 +08:00
|
|
|
# also need to set gdbarch_pointer_to_address and gdbarch_address_to_pointer
|
|
|
|
# as well.
|
2000-08-26 04:51:19 +08:00
|
|
|
#
|
|
|
|
# ptr_bit is the size of a pointer on the target
|
2007-11-12 14:47:56 +08:00
|
|
|
v:int:ptr_bit:::8 * sizeof (void*):gdbarch->int_bit::0
|
2000-08-26 04:51:19 +08:00
|
|
|
# addr_bit is the size of a target address as represented in gdb
|
2007-11-12 14:47:56 +08:00
|
|
|
v:int:addr_bit:::8 * sizeof (void*):0:gdbarch_ptr_bit (gdbarch):
|
1999-08-31 09:14:27 +08:00
|
|
|
#
|
2001-12-20 11:26:08 +08:00
|
|
|
# One if \`char' acts like \`signed char', zero if \`unsigned char'.
|
2007-10-19 20:34:38 +08:00
|
|
|
v:int:char_signed:::1:-1:1
|
2001-12-20 11:26:08 +08:00
|
|
|
#
|
2007-10-19 20:34:38 +08:00
|
|
|
F:CORE_ADDR:read_pc:struct regcache *regcache:regcache
|
|
|
|
F:void:write_pc:struct regcache *regcache, CORE_ADDR val:regcache, val
|
2001-08-11 08:59:29 +08:00
|
|
|
# Function for getting target's idea of a frame pointer. FIXME: GDB's
|
|
|
|
# whole scheme for dealing with "frames" and "frame pointers" needs a
|
|
|
|
# serious shakedown.
|
2007-11-07 14:58:31 +08:00
|
|
|
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
|
2000-08-11 10:55:38 +08:00
|
|
|
#
|
2007-10-19 20:34:38 +08:00
|
|
|
M:void:pseudo_register_read:struct regcache *regcache, int cookednum, gdb_byte *buf:regcache, cookednum, buf
|
|
|
|
M:void:pseudo_register_write:struct regcache *regcache, int cookednum, const gdb_byte *buf:regcache, cookednum, buf
|
2001-03-24 09:26:09 +08:00
|
|
|
#
|
2007-10-19 20:34:38 +08:00
|
|
|
v:int:num_regs:::0:-1
|
2000-07-24 22:25:22 +08:00
|
|
|
# This macro gives the number of pseudo-registers that live in the
|
|
|
|
# register namespace but do not get fetched or stored on the target.
|
2000-09-04 19:40:20 +08:00
|
|
|
# These pseudo-registers may be aliases for other registers,
|
|
|
|
# combinations of other registers, or they may be computed by GDB.
|
2007-10-19 20:34:38 +08:00
|
|
|
v:int:num_pseudo_regs:::0:0::0
|
2002-04-07 04:50:10 +08:00
|
|
|
|
|
|
|
# GDB's standard (or well known) register numbers. These can map onto
|
|
|
|
# a real register or a pseudo (computed) register or not be defined at
|
2002-04-07 10:16:46 +08:00
|
|
|
# all (-1).
|
2007-06-18 Markus Deuling <deuling@de.ibm.com>
* gdbarch.sh (SP_REGNUM): Replace by gdbarch_sp_regnum.
* v850-tdep.c (v850_unwind_sp): Likewise.
* std-regs.c (value_of_builtin_frame_sp_reg): Likewise.
* stack.c (frame_info): Likewise.
* stabsread.c (define_symbol): Likewise.
* sh-tdep.c (sh_push_dummy_call_fpu, sh_push_dummy_call_nofpu)
(sh_dwarf2_frame_init_reg, sh_frame_cache, sh_frame_prev_register)
(sh_unwind_sp): Likewise.
* sh64-tdep.c (sh64_push_dummy_call, sh64_frame_cache)
(sh64_frame_prev_register, sh64_unwind_sp): Likewise.
* rs6000-tdep.c (rs6000_push_dummy_call, rs6000_unwind_dummy_id)
(rs6000_frame_cache): Likewise.
* rs6000-nat.c (store_register): Likewise.
* remote-mips.c (mips_wait): Likewise.
* procfs.c (procfs_fetch_registers, procfs_store_registers): Likewise.
* ppc-sysv-tdep.c (ppc_sysv_abi_push_dummy_call)
(ppc64_sysv_abi_push_dummy_call): Likewise.
* ppcobsd-tdep.c (ppcobsd_sigtramp_frame_cache): Likewise.
* ppcobsd-nat.c (ppcobsd_supply_pcb): Likewise.
* ppcnbsd-tdep.c (ppcnbsd_sigtramp_cache_init): Likewise.
* ppc-linux-tdep.c (ppc_linux_sigtramp_cache): Likewise.
* m32r-rom.c (m32r_supply_register): Likewise.
* frame.c (frame_sp_unwind): Likewise.
* mips-tdep.c (mips_insn16_frame_cache)
(mips_insn32_frame_cache): Likewise (comment).
* m68klinux-nat.c (supply_gregset): Likewise.
* m68k-tdep.c (m68k_get_longjmp_target): Likewise.
* ia64-tdep.c (ia64_frame_prev_register): Likewise.
* i386-tdep.c (i386_get_longjmp_target): Likewise.
* dwarf2-frame.c (dwarf2_frame_default_init_reg): Likewise.
* cris-tdep.c (cris_regnums, cris_sigcontext_addr)
(cris_sigtramp_frame_unwind_cache, cris_push_dummy_call)
(cris_scan_prologue, crisv32_scan_prologue, cris_unwind_sp)
(cris_register_type, crisv32_register_type)
(cris_dwarf2_frame_init_reg): Likewise.
* arch-utils.c (legacy_virtual_frame_pointer): Likewise.
* amd64-tdep.c (amd64_frame_prev_register): Likewise.
* amd64-linux-tdep.c (amd64_linux_sigcontext_addr): Likewise.
* libunwind-frame.c (libunwind_frame_cache): Likewise.
* gdbarch.sh (PC_REGNUM): Replace by gdbarch_pc_regnum.
* regcache.c (read_pc_pid, generic_target_write_pc): Likewise.
* xtensa-tdep.c (xtensa_register_type, xtensa_supply_gregset)
(xtensa_unwind_pc, xtensa_frame_cache, xtensa_frame_prev_register)
(xtensa_extract_return_value, xtensa_store_return_value): Likewise.
* v850-tdep.c (v850_unwind_pc): Likewise.
* stack.c (frame_info): Likewise.
* sh-tdep.c (sh_generic_show_regs, sh3_show_regs, sh2e_show_regs)
(sh2a_show_regs, sh2a_nofpu_show_regs, sh3e_show_regs)
(sh3_dsp_show_regs, sh4_show_regs, sh4_nofpu_show_regs)
(sh_dwarf2_frame_init_reg, sh_frame_prev_register, sh_unwind_pc)
(sh_dsp_show_regs): Likewise.
* shnbsd-tdep.c (shnbsd_supply_gregset)
(shnbsd_collect_gregset): Likewise.
* shnbsd-nat.c (GETREGS_SUPPLIES): Likewise.
* sh64-tdep.c (sh64_compact_reg_base_num, sh64_show_media_regs)
(sh64_frame_prev_register, sh64_unwind_pc): Likewise.
* rs6000-tdep.c (ppc_supply_gregset, ppc_collect_gregset)
(6000_register_reggroup_p, rs6000_unwind_pc)
(rs6000_frame_cache): Likewise.
* rs6000-nat.c (regmap, rs6000_fetch_inferior_registers)
(rs6000_store_inferior_registers): Likewise.
* remote-mips.c (mips_wait, mips_load): Likewise.
* procfs.c (procfs_fetch_registers, procfs_store_registers): Likewise.
* ppcobsd-tdep.c (ppcobsd_sigtramp_frame_cache): Likewise.
* ppcobsd-nat.c (ppcobsd_supply_pcb): Likewise.
* ppcnbsd-tdep.c (ppcnbsd_sigtramp_cache_init): Likewise.
* ppcnbsd-nat.c (getregs_supplies, ppcnbsd_supply_pcb): Likewise.
* ppc-linux-tdep.c (ppc_linux_sigtramp_cache): Likewise.
* ppc-linux-nat.c (ppc_register_u_addr, fetch_ppc_registers)
(store_ppc_registers, fill_gregset): Likewise.
* mips-tdep.c (mips_stub_frame_cache, mips_gdbarch_init): Likewise.
* mipsnbsd-tdep.c (mipsnbsd_supply_reg, mipsnbsd_fill_reg): Likewise.
* mipsnbsd-nat.c (getregs_supplies): Likewise.
* m68k-tdep.c (m68k_register_type, m68k_unwind_pc): Likewise.
* m68klinux-nat.c (supply_gregset): Likewise.
* irix5-nat.c (fill_gregset): Likewise.
* i386-tdep.c (i386_unwind_pc): Likewise.
* i386-linux-nat.c (i386_linux_resume): Likewise.
* frame.c (get_prev_frame_1): Likewise.
* dwarf2-frame.c (dwarf2_frame_default_init_reg): Likewise.
* dbug-rom.c (dbug_supply_register): Likewise.
* cris-tdep.c (cris_sigtramp_frame_unwind_cache, cris_scan_prologue)
(crisv32_scan_prologue, cris_unwind_pc, cris_register_size)
(cris_register_type, crisv32_register_type, crisv32_register_name)
(cris_dwarf2_frame_init_reg, find_step_target)
(cris_software_single_step, cris_supply_gregset)
(cris_regnums): Likewise.
* alpha-linux-nat.c (alpha_linux_register_u_offset): Likewise.
* aix-thread.c (special_register_p, supply_sprs64, supply_sprs32)
(fill_sprs64, fill_sprs32, store_regs_user_thread): Likewise.
* mips-linux-tdep.c (mips_linux_write_pc): Likewise.
* gdbarch.sh (PS_REGNUM): Replace by gdbarch_ps_regnum.
* dbug-rom.c (dbug_supply_register): Likewise.
* xtensa-tdep.c (xtensa_supply_gregset, xtensa_frame_cache)
(xtensa_frame_prev_register, xtensa_push_dummy_call): Likewise.
* win32-nat.c (win32_resume): Likewise.
* std-regs.c (value_of_builtin_frame_ps_reg)
(value_of_builtin_frame_pc_reg): Likewise.
* m68k-tdep.c (m68k_register_type): Likewise.
* m68klinux-nat.c (supply_gregset): Likewise.
* gdbarch.sh (FP0_REGNUM): Replace by gdbarch_fp0_regnum.
* sh-tdep.c (sh_extract_return_value_fpu, sh_store_return_value_fpu)
(sh2e_show_regs, sh2a_show_regs, sh3e_show_regs, sh4_show_regs)
(sh_sh2a_register_type, sh_sh3e_register_type, sh_sh4_register_type)
(fv_reg_base_num, dr_reg_base_num): Likewise.
* sh64-tdep.c (sh64_fv_reg_base_num, sh64_dr_reg_base_num)
(sh64_fpp_reg_base_num, sh64_compact_reg_base_num, sh64_push_dummy_call)
(sh64_extract_return_value, sh64_store_return_value)
(sh64_show_media_regs, sh64_show_compact_regs, sh64_register_type)
(sh64_do_fp_register, sh64_media_print_registers_info): Likewise.
* procfs.c (procfs_fetch_registers, procfs_store_registers)
(invalidate_cache): Likewise.
* ppc-linux-tdep.c (ppc_linux_sigtramp_cache): Likewise.
* mipsnbsd-tdep.c (mipsnbsd_supply_fpreg)
(mipsnbsd_fill_fpreg): Likewise.
* mipsnbsd-nat.c (mipsnbsd_fetch_inferior_registers)
(mipsnbsd_store_inferior_registers): Likewise.
* mips-linux-tdep.c (mips_supply_fpregset, mips_fill_fpregset)
(mips64_supply_fpregset, mips64_fill_fpregset): Likewise.
* mips-linux-nat.c (mips64_linux_register_addr): Likewise.
* m68k-tdep.c (m68k_register_type, m68k_convert_register_p): Likewise.
* m68klinux-nat.c (getfpregs_supplies, supply_fpregset)
(fill_fpregset): Likewise.
* irix5-nat.c (supply_fpregset, fill_fpregset): Likewise.
* i386-tdep.h (struct_return): Likewise (comment).
* i386-nto-tdep.c (i386nto_register_area): Likewise.
* go32-nat.c (fetch_register, go32_fetch_registers, store_register)
(go32_store_registers): Likewise.
* alpha-tdep.c (alpha_next_pc): Likewise.
* alpha-linux-nat.c (alpha_linux_register_u_offset): Likewise.
* alphabsd-nat.c (alphabsd_fetch_inferior_registers)
(alphabsd_store_inferior_registers): Likewise.
* core-regset.c (fetch_core_registers): Likewise.
* i386v4-nat.c (supply_fpregset, fill_fpregset): Likewise.
* gdbarch.c, gdbarch.h: Regenerate.
2007-06-19 01:45:26 +08:00
|
|
|
# gdbarch_sp_regnum will hopefully be replaced by UNWIND_SP.
|
2007-10-19 20:34:38 +08:00
|
|
|
v:int:sp_regnum:::-1:-1::0
|
|
|
|
v:int:pc_regnum:::-1:-1::0
|
|
|
|
v:int:ps_regnum:::-1:-1::0
|
|
|
|
v:int:fp0_regnum:::0:-1::0
|
2000-12-04 12:01:16 +08:00
|
|
|
# Convert stab register number (from \`r\' declaration) to a gdb REGNUM.
|
2007-12-07 00:33:00 +08:00
|
|
|
m:int:stab_reg_to_regnum:int stab_regnr:stab_regnr::no_op_reg_to_regnum::0
|
2000-12-04 12:01:16 +08:00
|
|
|
# Provide a default mapping from a ecoff register number to a gdb REGNUM.
|
2007-12-07 00:33:00 +08:00
|
|
|
m:int:ecoff_reg_to_regnum:int ecoff_regnr:ecoff_regnr::no_op_reg_to_regnum::0
|
2000-12-04 12:01:16 +08:00
|
|
|
# Convert from an sdb register number to an internal gdb register number.
|
2007-12-07 00:33:00 +08:00
|
|
|
m:int:sdb_reg_to_regnum:int sdb_regnr:sdb_regnr::no_op_reg_to_regnum::0
|
* gdbarch.sh: Delete dwarf_reg_to_regnum.
* gdbarch.c, gdbarch.h: Regenerated.
* amd64-tdep.c, arm-tdep.c, h8300-tdep.c, hppa-linux-tdep.c,
hppa-tdep.c, i386-tdep.c, m32c-tdep.c, m68k-tdep.c, mips-tdep.c,
s390-tdep.c, xtensa-tdep.c: Do not set dwarf_reg_to_regnum.
* gdbint.texinfo (Target Conditionals): Delete entry for
gdbarch_dwarf_reg_to_regnum.
2008-05-16 08:27:24 +08:00
|
|
|
# Provide a default mapping from a DWARF2 register number to a gdb REGNUM.
|
2007-12-07 00:33:00 +08:00
|
|
|
m:int:dwarf2_reg_to_regnum:int dwarf2_regnr:dwarf2_regnr::no_op_reg_to_regnum::0
|
2007-11-02 Markus Deuling <deuling@de.ibm.com>
* gdbarch.sh (register_name): Add gdbarch parameter.
* gdbarch.{c,h}: Regenerate.
* target-descriptions.c (tdesc_register_name): Add gdbarch parameter.
(tdesc_register_name): Replace current_gdbarch by gdbarch.
* target-descriptions.h (tdesc_register_name): Add gdbarch parameter.
* xstormy16-tdep.c (xstormy16_register_name): Add gdbarch parameter.
* vax-tdep.c (vax_register_name): Add gdbarch parameter.
* spu-tdep.c (spu_register_name): Add gdbarch parameter.
* s390-tdep.c (s390_register_name): Add gdbarch parameter.
* mt-tdep.c (mt_register_name): Add gdbarch parameter.
(mt_registers_info): Replace current_gdbarch by gdbarch.
(mt_register_reggroup_p): Add gdbarch to mt_register_name call.
* mips-tdep.c (mips_register_name): Add gdbarch parameter. Replace
current_gdbarch by gdbarch.
(mips_register_name): Add gdbarch to tdesc_register_name call.
* mep-tdep.c (mep_register_name): Add gdbarch parameter. Replace
current_gdbarch by gdbarch.
(mep_register_reggroup_p): Add gdbarch to mep_register_name call.
* m32c-tdep.c (m32c_register_name): Add gdbarch parameter. Replace
current_gdbarch by gdbarch.
* m88k-tdep.c (m88k_register_name): Add gdbarch parameter.
* m68k-tdep.c (m68k_register_name): Add gdbarch parameter.
* m32r-tdep.c (m32r_register_name): Add gdbarch parameter.
(m32r_frame_unwind_cache): Use get_frame_arch to get at the current
architecture by frame_info.
* iq2000-tdep.c (iq2000_register_name): Add gdbarch parameter.
* ia64-tdep.c (ia64_register_name): Add gdbarch parameter.
* hppa-tdep.c (hppa32_register_name, hppa64_register_name): Add gdbarch
parameter.
* h8300-tdep.c (h8300_register_name, h8300s_register_name)
(h8300sx_register_name): Add gdbarch parameter.
* cris-tdep.c (cris_register_name, crisv32_register_name): Add
gdbarch parameter. Replace current_gdbarch by gdbarch.
(cris_gdbarch_init): Replace current_gdbarch by gdbarch (comment).
* avr-tdep.c (avr_register_name): Add gdbarch parameter.
* arm-tdep.c (arm_register_name): Add gdbarch paramete
* amd64-tdep.c (amd64_register_name): Add gdbarch parameter. Update
caller.
* amd64-tdep.h (amd64_register_name): Add gdbarch parameter.
* amd64-linux-tdep.c (amd64_linux_register_name): Add gdbarch parameter.
* alpha-tdep.c (alpha_register_name): Add gdbarch parameter.
(alpha_cannot_fetch_register, alpha_cannot_store_register): Update call
of alpha_register_name.
* frv-tdep.c (frv_register_name): Add gdbarch parameter.
* i386-tdep.c (i386_register_name): Add gdbarch parameter. Replace
current_gdbarch by gdbarch.
(i386_register_type): Replace ?current_gdbarch by gdbarch.
* i386-tdep.h (i386_register_name): Add gdbarch parameter.
* i386-linux-tdep.c (i386_linux_register_name): Add gdbarch parameter.
* m68hc11-tdep.c (m68hc11_register_name): Add gdbarch parameter.
(m68hc11_register_reggroup_p): Add gdbarch to call of
m68hc11_register_name.
* mn10300-tdep.c (mn10300_generic_register_name, am33_register_name)
(am33_2_register_name): Add gdbarch parameter.
(mn10300_frame_unwind_cache): Use get_frame_arch to get at the current
architecture by frame_info.
(mn10300_dump_tdep): Replace current_gdbarch by gdbarch.
* rs6000-tdep.c (rs6000_register_name): Add gdbarch parameter. Replace
current_gdbarch by gdbarch.
* score-tdep.c (score_register_name): Add gdbarch parameter.
(score_return_value, score_push_dummy_call): Replace current_gdbarch
by gdbarch.
* sh64-tdep.c (sh64_register_name): Add gdbarch parameter.
(sh64_compact_reg_base_num, sh64_register_convert_to_virtual)
(sh64_register_convert_to_raw, sh64_fv_reg_base_num)
(sh64_dr_reg_base_num, sh64_fpp_reg_base_num): Add gdbarch parameter
and update caller. Replace current_gdbarch by gdbarch.
(sh64_extract_return_value, sh64_store_return_value): Use
get_regcache_arch to get at the current architecture by regcache.
* sh-tdep.c (sh_sh_register_name, sh_sh3_register_name)
(sh_sh3e_register_name, sh_sh2e_register_name, sh_sh2a_register_name)
(sh_sh2a_nofpu_register_name, sh_sh_dsp_register_name)
(sh_sh3_dsp_register_name, sh_sh4_register_name)
(sh_sh4_nofpu_register_name, sh_sh4al_dsp_register_name): Add gdbarch
parameter.
(fv_reg_base_num, dr_reg_base_num, sh_justify_value_in_reg)
(sh_next_flt_argreg): Add gdbarch parameter and update caller. Replace
current_gdbarch by gdbarch.
(sh_extract_return_value_fpu, sh_store_return_value_fpu): Use
get_regcache_arch to get at the current architecture by regcache.
* sparc-tdep.c (sparc32_register_name): Add gdbarch parameter.
* sparc64-tdep.c (sparc64_register_name): Add gdbarch parameter.
* v850-tdep.c (v850_register_name, v850e_register_name): Add gdbarch
parameter.
(v850_unwind_sp, v850_unwind_pc): Replace current_gdbarch by gdbarch.
* xtensa-tdep.c (xtensa_register_name): Add gdbarch parameter. Replace
current_gdbarch by gdbarch.
(xtensa_pseudo_register_read, xtensa_pseudo_register_write)
(xtensa_frame_prev_register): Add gdbarch parameter to
xtensa_register_name call.
2007-11-02 22:27:15 +08:00
|
|
|
m:const char *:register_name:int regnr:regnr::0
|
2003-06-13 12:40:34 +08:00
|
|
|
|
2007-01-22 01:37:51 +08:00
|
|
|
# Return the type of a register specified by the architecture. Only
|
|
|
|
# the register cache should call this function directly; others should
|
|
|
|
# use "register_type".
|
2007-10-19 20:34:38 +08:00
|
|
|
M:struct type *:register_type:int reg_nr:reg_nr
|
2003-06-13 12:40:34 +08:00
|
|
|
|
2003-06-14 06:18:49 +08:00
|
|
|
# See gdbint.texinfo, and PUSH_DUMMY_CALL.
|
Convert frame unwinders to use the current frame and
"struct value".
* frame.c (frame_debug): Make global.
(get_frame_id): Pass this frame to unwinder routines.
(frame_pc_unwind): Remove unused unwind->prev_pc support.
(do_frame_register_read): Do not discard the return value of
frame_register_read.
(frame_register_unwind): Remove debug messages. Use
frame_unwind_register_value.
(frame_unwind_register_value, get_frame_register_value): New
functions.
(create_new_frame, get_frame_base_address, get_frame_locals_address)
(get_frame_args_address, get_frame_type): Pass this frame to
unwinder routines.
(frame_cleanup_after_sniffer, frame_prepare_for_sniffer): New
functions.
* frame.h: Update comments.
(frame_debug, frame_unwind_register_value, get_frame_register_value)
(frame_prepare_for_sniffer): Declare.
* frame-unwind.h: Update comments and parameter names.
(default_frame_sniffer): Declare.
(frame_prev_register_ftype): Return a struct value *.
(struct frame_unwind): Remove prev_pc member.
(frame_unwind_sniffer_ftype, frame_unwind_append_sniffer): Delete.
(frame_unwind_append_unwinder, frame_unwind_got_optimized)
(frame_unwind_got_register, frame_unwind_got_memory)
(frame_unwind_got_constant, frame_unwind_got_address): Declare.
* frame-base.h: Update comments and parameter names.
* valops.c (value_fetch_lazy): Use get_frame_register_value. Iterate
if necessary. Add debugging output.
* sentinel-frame.c (sentinel_frame_prev_register)
(sentinel_frame_this_id): Update for new signature.
(sentinel_frame_prev_pc): Delete.
(sentinel_frame_unwinder): Remove prev_pc.
* ia64-tdep.c (ia64_libunwind_frame_unwind): Do not initialize
prev_pc.
* libunwind-frame.c (libunwind_frame_unwind): Likewise.
* frame-unwind.c (struct frame_unwind_table_entry): Remove sniffer.
(frame_unwind_append_sniffer): Delete.
(frame_unwind_append_unwinder): New function.
(frame_unwind_find_by_frame): Take this frame. Only use sniffers
from unwinders. Use frame_prepare_for_sniffer.
(default_frame_sniffer, frame_unwind_got_optimized)
(frame_unwind_got_register, frame_unwind_got_memory)
(frame_unwind_got_constant, frame_unwind_got_address): New functions.
* dummy-frame.c (dummy_frame_sniffer): Use gdbarch_dummy_id.
(dummy_frame_prev_register, dummy_frame_this_id): Update for new
signature.
* gdbarch.sh: Replace unwind_dummy_id with dummy_id.
* gdbarch.c, gdbarch.c: Regenerated.
* frame-base.c (default_frame_base_address)
(default_frame_locals_address, default_frame_args_address): Update
for new signature.
(frame_base_find_by_frame): Pass this frame to unwinder routines.
* infcall.c (call_function_by_hand): Update comments.
* Makefile.in (frame-unwind.o): Update dependencies.
* gdbint.texinfo (Stack Frames): New chapter.
(Algorithms): Move Frames text to the new chapter.
(Target Conditionals): Delete SAVE_DUMMY_FRAME_TOS. Document
gdbarch_dummy_id instead of gdbarch_unwind_dummy_id.
2008-05-01 05:16:46 +08:00
|
|
|
M:struct frame_id:dummy_id:struct frame_info *this_frame:this_frame
|
|
|
|
# Implement DUMMY_ID and PUSH_DUMMY_CALL, then delete
|
2007-06-19 02:37:12 +08:00
|
|
|
# deprecated_fp_regnum.
|
2007-10-19 20:34:38 +08:00
|
|
|
v:int:deprecated_fp_regnum:::-1:-1::0
|
2003-06-14 06:18:49 +08:00
|
|
|
|
2005-09-03 03:02:46 +08:00
|
|
|
# See gdbint.texinfo. See infcall.c.
|
2007-10-19 20:34:38 +08:00
|
|
|
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
|
|
|
|
v:int:call_dummy_location::::AT_ENTRY_POINT::0
|
|
|
|
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
|
2004-06-14 00:43:58 +08:00
|
|
|
|
2007-10-19 20:34:38 +08:00
|
|
|
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
|
|
|
|
M:void:print_float_info:struct ui_file *file, struct frame_info *frame, const char *args:file, frame, args
|
|
|
|
M:void:print_vector_info:struct ui_file *file, struct frame_info *frame, const char *args:file, frame, args
|
2000-08-02 19:05:50 +08:00
|
|
|
# MAP a GDB RAW register number onto a simulator register number. See
|
|
|
|
# also include/...-sim.h.
|
2007-11-19 13:06:24 +08:00
|
|
|
m:int:register_sim_regno:int reg_nr:reg_nr::legacy_register_sim_regno::0
|
2007-11-16 12:56:45 +08:00
|
|
|
m:int:cannot_fetch_register:int regnum:regnum::cannot_register_not::0
|
|
|
|
m:int:cannot_store_register:int regnum:regnum::cannot_register_not::0
|
2002-02-18 21:35:31 +08:00
|
|
|
# setjmp/longjmp support.
|
2007-10-19 20:34:38 +08:00
|
|
|
F:int:get_longjmp_target:struct frame_info *frame, CORE_ADDR *pc:frame, pc
|
1999-08-31 09:14:27 +08:00
|
|
|
#
|
2007-10-19 20:34:38 +08:00
|
|
|
v:int:believe_pcc_promotion:::::::
|
1999-08-31 09:14:27 +08:00
|
|
|
#
|
2007-11-09 13:32:19 +08:00
|
|
|
m:int:convert_register_p:int regnum, struct type *type:regnum, type:0:generic_convert_register_p::0
|
2007-10-19 20:34:38 +08:00
|
|
|
f:void:register_to_value:struct frame_info *frame, int regnum, struct type *type, gdb_byte *buf:frame, regnum, type, buf:0
|
|
|
|
f:void:value_to_register:struct frame_info *frame, int regnum, struct type *type, const gdb_byte *buf:frame, regnum, type, buf:0
|
2007-01-09 04:03:49 +08:00
|
|
|
# Construct a value representing the contents of register REGNUM in
|
|
|
|
# frame FRAME, interpreted as type TYPE. The routine needs to
|
|
|
|
# allocate and return a struct value with all value attributes
|
|
|
|
# (but not the value contents) filled in.
|
2007-10-19 20:34:38 +08:00
|
|
|
f:struct value *:value_from_register:struct type *type, int regnum, struct frame_info *frame:type, regnum, frame::default_value_from_register::0
|
1999-08-31 09:14:27 +08:00
|
|
|
#
|
2009-06-18 02:50:31 +08:00
|
|
|
m:CORE_ADDR:pointer_to_address:struct type *type, const gdb_byte *buf:type, buf::unsigned_pointer_to_address::0
|
|
|
|
m:void:address_to_pointer:struct type *type, gdb_byte *buf, CORE_ADDR addr:type, buf, addr::unsigned_address_to_pointer::0
|
2007-10-19 20:34:38 +08:00
|
|
|
M:CORE_ADDR:integer_to_address:struct type *type, const gdb_byte *buf:type, buf
|
2003-10-20 23:38:02 +08:00
|
|
|
|
2008-04-30 00:06:07 +08:00
|
|
|
# Return the return-value convention that will be used by FUNCTYPE
|
|
|
|
# to return a value of type VALTYPE. FUNCTYPE may be NULL in which
|
|
|
|
# case the return convention is computed based only on VALTYPE.
|
|
|
|
#
|
|
|
|
# If READBUF is not NULL, extract the return value and save it in this buffer.
|
|
|
|
#
|
|
|
|
# If WRITEBUF is not NULL, it contains a return value which will be
|
|
|
|
# stored into the appropriate register. This can be used when we want
|
|
|
|
# to force the value returned by a function (see the "return" command
|
|
|
|
# for instance).
|
2008-04-22 19:03:42 +08:00
|
|
|
M:enum return_value_convention:return_value:struct type *functype, struct type *valtype, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf:functype, valtype, regcache, readbuf, writebuf
|
2003-10-20 23:38:02 +08:00
|
|
|
|
2008-01-11 21:20:02 +08:00
|
|
|
m:CORE_ADDR:skip_prologue:CORE_ADDR ip:ip:0:0
|
2008-06-12 06:03:49 +08:00
|
|
|
M:CORE_ADDR:skip_main_prologue:CORE_ADDR ip:ip
|
2007-10-19 20:34:38 +08:00
|
|
|
f:int:inner_than:CORE_ADDR lhs, CORE_ADDR rhs:lhs, rhs:0:0
|
2007-11-07 14:33:01 +08:00
|
|
|
m:const gdb_byte *:breakpoint_from_pc:CORE_ADDR *pcptr, int *lenptr:pcptr, lenptr::0:
|
2010-02-02 00:09:22 +08:00
|
|
|
# Return the adjusted address and kind to use for Z0/Z1 packets.
|
|
|
|
# KIND is usually the memory length of the breakpoint, but may have a
|
|
|
|
# different target-specific meaning.
|
2010-02-02 00:57:01 +08:00
|
|
|
m:void:remote_breakpoint_from_pc:CORE_ADDR *pcptr, int *kindptr:pcptr, kindptr:0:default_remote_breakpoint_from_pc::0
|
2007-10-19 20:34:38 +08:00
|
|
|
M:CORE_ADDR:adjust_breakpoint_address:CORE_ADDR bpaddr:bpaddr
|
2008-02-20 22:31:40 +08:00
|
|
|
m:int:memory_insert_breakpoint:struct bp_target_info *bp_tgt:bp_tgt:0:default_memory_insert_breakpoint::0
|
|
|
|
m:int:memory_remove_breakpoint:struct bp_target_info *bp_tgt:bp_tgt:0:default_memory_remove_breakpoint::0
|
2007-10-19 20:34:38 +08:00
|
|
|
v:CORE_ADDR:decr_pc_after_break:::0:::0
|
2004-06-19 05:36:16 +08:00
|
|
|
|
|
|
|
# A function can be addressed by either it's "pointer" (possibly a
|
|
|
|
# descriptor address) or "entry point" (first executable instruction).
|
|
|
|
# The method "convert_from_func_ptr_addr" converting the former to the
|
2007-06-19 02:23:08 +08:00
|
|
|
# latter. gdbarch_deprecated_function_start_offset is being used to implement
|
2004-06-19 05:36:16 +08:00
|
|
|
# a simplified subset of that functionality - the function's address
|
|
|
|
# corresponds to the "function pointer" and the function's start
|
|
|
|
# corresponds to the "function entry point" - and hence is redundant.
|
|
|
|
|
2007-10-19 20:34:38 +08:00
|
|
|
v:CORE_ADDR:deprecated_function_start_offset:::0:::0
|
2004-06-19 05:36:16 +08:00
|
|
|
|
* Makefile.in (arm-tdep.o, eval.o, target-descriptions.o)
(xml-tdesc.o): Update.
* xml-support.c: Add a comment.
(gdb_xml_enums_boolean): New variable.
(gdb_xml_parse_attr_enum): Use strcasecmp.
* xml-support.h (gdb_xml_enums_boolean): Declare.
* xml-tdesc.c (struct tdesc_parsing_data): Record current_feature,
next_regnum, and current_union.
(tdesc_start_feature, tdesc_start_reg, tdesc_start_union)
(tdesc_end_union, tdesc_start_field, tdesc_start_vector)
(field_attributes, union_children, reg_attributes, union_attributes)
(vector_attributes, feature_attributes, feature_children): New.
(target_children): Make static. Add <feature>.
(tdesc_elements): Make static.
* target-descriptions.c (struct tdesc_reg, tdesc_reg_p, type_p)
(struct tdesc_feature, tdesc_feature_p): New types.
(struct target_desc): Add features member.
(struct tdesc_arch_data, tdesc_data): New.
(target_find_description): Clarify error message. Warn about
ignored register descriptions.
(tdesc_has_registers, tdesc_find_feature, tdesc_feature_name)
(tdesc_named_type, tdesc_data_init, tdesc_data_alloc)
(tdesc_data_cleanup, tdesc_numbered_register)
(tdesc_numbered_register_choices, tdesc_find_register)
(tdesc_register_name, tdesc_register_type)
(tdesc_remote_register_number, tdesc_register_reggroup_p)
(set_tdesc_pseudo_register_name, set_tdesc_pseudo_register_type)
(set_tdesc_pseudo_register_reggroup_p, tdesc_use_registers)
(tdesc_free_reg, tdesc_create_reg, tdesc_free_feature)
(tdesc_create_feature, tdesc_record_type): New.
(free_target_description): Free features.
(_initialize_target_descriptions): Initialize tdesc_data.
* arch-utils.c (default_remote_register_number): New.
* arch-utils.h (default_remote_register_number): New prototype.
* target-descriptions.h (set_tdesc_pseudo_register_name)
(set_tdesc_pseudo_register_type, set_tdesc_pseudo_register_reggroup_p)
(tdesc_use_registers, tdesc_data_alloc, tdesc_data_cleanup)
(tdesc_numbered_register, tdesc_numbered_register_choices)
(tdesc_has_registers, tdesc_find_feature, tdesc_feature_name)
(tdesc_named_type, tdesc_create_feature, tdesc_record_type)
(tdesc_create_reg): Declare.
* gdbarch.sh (remote_register_number): New entry.
* gdbarch.c, gdbarch.h: Regenerate.
* remote.c (init_remote_state): Use gdbarch_remote_register_number.
* features/gdb-target.dtd: Add feature, reg, vector, union, and field.
* arm-tdep.c (arm_register_aliases): New.
(arm_register_name_strings): Rename to...
(arm_register_names): ...this. Make const. Delete the old version.
(current_option, arm_register_byte): Delete.
(set_disassembly_style): Simplify. Do not adjust arm_register_names.
(value_of_arm_user_reg): New.
(arm_gdbarch_init): Verify any described registers. Call
tdesc_use_registers. Don't use arm_register_byte. Create aliases
for standard register names.
(_initialize_arm_tdep): Do not adjust arm_register_names.
* user-regs.c (struct user_reg): Add baton member.
(append_user_reg, user_reg_add_builtin, user_regs_init)
(user_reg_add, value_of_user_reg): Use a baton for user
register functions.
* std-regs.c: Update.
* user-regs.h (user_reg_read_ftype, user_reg_add_builtin)
(user_reg_add): Add baton argument.
* NEWS: Mention target description register support.
* features/arm-core.xml, features/arm-fpa.xml: New.
* eval.c (evaluate_subexp_standard): Allow ptype $register
when the program is not running.
* gdb.texinfo (-target-disconnect): Use @smallexample.
(Requirements): Add anchor for Expat. Update description.
(Target Descriptions): Mention Expat.
(Target Description Format): Document new elements. Use
@smallexample.
(Predefined Target Types, Standard Target Features): New sections.
* doc/gdbint.texinfo (Target Descriptions): New section.
* gdb.xml/single-reg.xml, gdb.xml/tdesc-regs.exp,
gdb.xml/core-only.xml, gdb.xml/extra-regs.xml: New files.
2007-02-09 05:00:36 +08:00
|
|
|
# Return the remote protocol register number associated with this
|
|
|
|
# register. Normally the identity mapping.
|
2007-10-19 20:34:38 +08:00
|
|
|
m:int:remote_register_number:int regno:regno::default_remote_register_number::0
|
* Makefile.in (arm-tdep.o, eval.o, target-descriptions.o)
(xml-tdesc.o): Update.
* xml-support.c: Add a comment.
(gdb_xml_enums_boolean): New variable.
(gdb_xml_parse_attr_enum): Use strcasecmp.
* xml-support.h (gdb_xml_enums_boolean): Declare.
* xml-tdesc.c (struct tdesc_parsing_data): Record current_feature,
next_regnum, and current_union.
(tdesc_start_feature, tdesc_start_reg, tdesc_start_union)
(tdesc_end_union, tdesc_start_field, tdesc_start_vector)
(field_attributes, union_children, reg_attributes, union_attributes)
(vector_attributes, feature_attributes, feature_children): New.
(target_children): Make static. Add <feature>.
(tdesc_elements): Make static.
* target-descriptions.c (struct tdesc_reg, tdesc_reg_p, type_p)
(struct tdesc_feature, tdesc_feature_p): New types.
(struct target_desc): Add features member.
(struct tdesc_arch_data, tdesc_data): New.
(target_find_description): Clarify error message. Warn about
ignored register descriptions.
(tdesc_has_registers, tdesc_find_feature, tdesc_feature_name)
(tdesc_named_type, tdesc_data_init, tdesc_data_alloc)
(tdesc_data_cleanup, tdesc_numbered_register)
(tdesc_numbered_register_choices, tdesc_find_register)
(tdesc_register_name, tdesc_register_type)
(tdesc_remote_register_number, tdesc_register_reggroup_p)
(set_tdesc_pseudo_register_name, set_tdesc_pseudo_register_type)
(set_tdesc_pseudo_register_reggroup_p, tdesc_use_registers)
(tdesc_free_reg, tdesc_create_reg, tdesc_free_feature)
(tdesc_create_feature, tdesc_record_type): New.
(free_target_description): Free features.
(_initialize_target_descriptions): Initialize tdesc_data.
* arch-utils.c (default_remote_register_number): New.
* arch-utils.h (default_remote_register_number): New prototype.
* target-descriptions.h (set_tdesc_pseudo_register_name)
(set_tdesc_pseudo_register_type, set_tdesc_pseudo_register_reggroup_p)
(tdesc_use_registers, tdesc_data_alloc, tdesc_data_cleanup)
(tdesc_numbered_register, tdesc_numbered_register_choices)
(tdesc_has_registers, tdesc_find_feature, tdesc_feature_name)
(tdesc_named_type, tdesc_create_feature, tdesc_record_type)
(tdesc_create_reg): Declare.
* gdbarch.sh (remote_register_number): New entry.
* gdbarch.c, gdbarch.h: Regenerate.
* remote.c (init_remote_state): Use gdbarch_remote_register_number.
* features/gdb-target.dtd: Add feature, reg, vector, union, and field.
* arm-tdep.c (arm_register_aliases): New.
(arm_register_name_strings): Rename to...
(arm_register_names): ...this. Make const. Delete the old version.
(current_option, arm_register_byte): Delete.
(set_disassembly_style): Simplify. Do not adjust arm_register_names.
(value_of_arm_user_reg): New.
(arm_gdbarch_init): Verify any described registers. Call
tdesc_use_registers. Don't use arm_register_byte. Create aliases
for standard register names.
(_initialize_arm_tdep): Do not adjust arm_register_names.
* user-regs.c (struct user_reg): Add baton member.
(append_user_reg, user_reg_add_builtin, user_regs_init)
(user_reg_add, value_of_user_reg): Use a baton for user
register functions.
* std-regs.c: Update.
* user-regs.h (user_reg_read_ftype, user_reg_add_builtin)
(user_reg_add): Add baton argument.
* NEWS: Mention target description register support.
* features/arm-core.xml, features/arm-fpa.xml: New.
* eval.c (evaluate_subexp_standard): Allow ptype $register
when the program is not running.
* gdb.texinfo (-target-disconnect): Use @smallexample.
(Requirements): Add anchor for Expat. Update description.
(Target Descriptions): Mention Expat.
(Target Description Format): Document new elements. Use
@smallexample.
(Predefined Target Types, Standard Target Features): New sections.
* doc/gdbint.texinfo (Target Descriptions): New section.
* gdb.xml/single-reg.xml, gdb.xml/tdesc-regs.exp,
gdb.xml/core-only.xml, gdb.xml/extra-regs.xml: New files.
2007-02-09 05:00:36 +08:00
|
|
|
|
2005-04-01 03:58:26 +08:00
|
|
|
# Fetch the target specific address used to represent a load module.
|
2007-10-19 20:34:38 +08:00
|
|
|
F:CORE_ADDR:fetch_tls_load_module_address:struct objfile *objfile:objfile
|
1999-08-31 09:14:27 +08:00
|
|
|
#
|
2007-10-19 20:34:38 +08:00
|
|
|
v:CORE_ADDR:frame_args_skip:::0:::0
|
|
|
|
M:CORE_ADDR:unwind_pc:struct frame_info *next_frame:next_frame
|
|
|
|
M:CORE_ADDR:unwind_sp:struct frame_info *next_frame:next_frame
|
2003-06-27 01:18:43 +08:00
|
|
|
# DEPRECATED_FRAME_LOCALS_ADDRESS as been replaced by the per-frame
|
|
|
|
# frame-base. Enable frame-base before frame-unwind.
|
2007-10-19 20:34:38 +08:00
|
|
|
F:int:frame_num_args:struct frame_info *frame:frame
|
1999-08-31 09:14:27 +08:00
|
|
|
#
|
2007-10-19 20:34:38 +08:00
|
|
|
M:CORE_ADDR:frame_align:CORE_ADDR address:address
|
|
|
|
m:int:stabs_argument_has_addr:struct type *type:type::default_stabs_argument_has_addr::0
|
|
|
|
v:int:frame_red_zone_size
|
2000-06-02 09:59:13 +08:00
|
|
|
#
|
2007-10-19 20:34:38 +08:00
|
|
|
m:CORE_ADDR:convert_from_func_ptr_addr:CORE_ADDR addr, struct target_ops *targ:addr, targ::convert_from_func_ptr_addr_identity::0
|
2001-06-16 06:10:21 +08:00
|
|
|
# On some machines there are bits in addresses which are not really
|
|
|
|
# part of the address, but are used by the kernel, the hardware, etc.
|
2007-06-09 21:49:20 +08:00
|
|
|
# for special purposes. gdbarch_addr_bits_remove takes out any such bits so
|
2001-06-16 06:10:21 +08:00
|
|
|
# we get a "real" address such as one would find in a symbol table.
|
|
|
|
# This is used only for addresses of instructions, and even then I'm
|
|
|
|
# not sure it's used in all contexts. It exists to deal with there
|
|
|
|
# being a few stray bits in the PC which would mislead us, not as some
|
|
|
|
# sort of generic thing to handle alignment or segmentation (it's
|
|
|
|
# possible it should be in TARGET_READ_PC instead).
|
2008-09-05 19:42:32 +08:00
|
|
|
m:CORE_ADDR:addr_bits_remove:CORE_ADDR addr:addr::core_addr_identity::0
|
2007-06-13 00:55:32 +08:00
|
|
|
# It is not at all clear why gdbarch_smash_text_address is not folded into
|
2007-06-09 21:49:20 +08:00
|
|
|
# gdbarch_addr_bits_remove.
|
2008-09-05 19:42:32 +08:00
|
|
|
m:CORE_ADDR:smash_text_address:CORE_ADDR addr:addr::core_addr_identity::0
|
2007-04-12 22:52:20 +08:00
|
|
|
|
|
|
|
# FIXME/cagney/2001-01-18: This should be split in two. A target method that
|
|
|
|
# indicates if the target needs software single step. An ISA method to
|
|
|
|
# implement it.
|
|
|
|
#
|
|
|
|
# FIXME/cagney/2001-01-18: This should be replaced with something that inserts
|
|
|
|
# breakpoints using the breakpoint system instead of blatting memory directly
|
|
|
|
# (as with rs6000).
|
2001-03-24 10:07:49 +08:00
|
|
|
#
|
2007-04-12 22:52:20 +08:00
|
|
|
# FIXME/cagney/2001-01-18: The logic is backwards. It should be asking if the
|
|
|
|
# target can single step. If not, then implement single step using breakpoints.
|
2001-03-24 10:07:49 +08:00
|
|
|
#
|
2007-04-12 22:52:20 +08:00
|
|
|
# A return value of 1 means that the software_single_step breakpoints
|
|
|
|
# were inserted; 0 means they were not.
|
2007-10-19 20:34:38 +08:00
|
|
|
F:int:software_single_step:struct frame_info *frame:frame
|
2007-04-12 22:52:20 +08:00
|
|
|
|
2004-11-01 01:38:16 +08:00
|
|
|
# Return non-zero if the processor is executing a delay slot and a
|
|
|
|
# further single-step is needed before the instruction finishes.
|
2007-10-19 20:34:38 +08:00
|
|
|
M:int:single_step_through_delay:struct frame_info *frame:frame
|
2003-09-04 08:05:52 +08:00
|
|
|
# FIXME: cagney/2003-08-28: Need to find a better way of selecting the
|
2004-07-10 09:17:53 +08:00
|
|
|
# disassembler. Perhaps objdump can handle it?
|
2007-10-19 20:34:38 +08:00
|
|
|
f:int:print_insn:bfd_vma vma, struct disassemble_info *info:vma, info::0:
|
|
|
|
f:CORE_ADDR:skip_trampoline_code:struct frame_info *frame, CORE_ADDR pc:frame, pc::generic_skip_trampoline_code::0
|
2002-08-21 07:01:29 +08:00
|
|
|
|
|
|
|
|
2008-07-22 10:10:14 +08:00
|
|
|
# If in_solib_dynsym_resolve_code() returns true, and SKIP_SOLIB_RESOLVER
|
2003-11-09 20:07:16 +08:00
|
|
|
# evaluates non-zero, this is the address where the debugger will place
|
|
|
|
# a step-resume breakpoint to get us past the dynamic linker.
|
2007-10-19 20:34:38 +08:00
|
|
|
m:CORE_ADDR:skip_solib_resolver:CORE_ADDR pc:pc::generic_skip_solib_resolver::0
|
2002-08-21 07:01:29 +08:00
|
|
|
# Some systems also have trampoline code for returning from shared libs.
|
* defs.h (extract_signed_integer, extract_unsigned_integer,
extract_long_unsigned_integer, store_signed_integer,
store_unsigned_integer): Add BYTE_ORDER parameter.
* findvar.c (extract_signed_integer, extract_unsigned_integer,
extract_long_unsigned_integer, store_signed_integer,
store_unsigned_integer): Add BYTE_ORDER parameter. Use it
instead of current_gdbarch.
* gdbcore.h (read_memory_integer, safe_read_memory_integer,
read_memory_unsigned_integer, write_memory_signed_integer,
write_memory_unsigned_integer): Add BYTE_ORDER parameter.
* corefile.c (struct captured_read_memory_integer_arguments): Add
BYTE_ORDER member.
(safe_read_memory_integer): Add BYTE_ORDER parameter. Store it into
struct captured_read_memory_integer_arguments.
(do_captured_read_memory_integer): Pass it to read_memory_integer.
(read_memory_integer): Add BYTE_ORDER parameter. Pass it to
extract_signed_integer.
(read_memory_unsigned_integer): Add BYTE_ORDER parameter. Pass it to
extract_unsigned_integer.
(write_memory_signed_integer): Add BYTE_ORDER parameter. Pass it
to store_signed_integer.
(write_memory_unsigned_integer): Add BYTE_ORDER parameter. Pass it
to store_unsigned_integer.
* target.h (get_target_memory_unsigned): Add BYTE_ORDER parameter.
* target.c (get_target_memory_unsigned): Add BYTE_ORDER parameter.
Pass it to extract_unsigned_integer.
Update calls to extract_signed_integer, extract_unsigned_integer,
extract_long_unsigned_integer, store_signed_integer,
store_unsigned_integer, read_memory_integer,
read_memory_unsigned_integer, safe_read_memory_integer,
write_memory_signed_integer, write_memory_unsigned_integer, and
get_target_memory_unsigned to pass byte order:
* ada-lang.c (ada_value_binop): Update.
* ada-valprint.c (char_at): Update.
* alpha-osf1-tdep.c (alpha_osf1_sigcontext_addr): Update.
* alpha-tdep.c (alpha_lds, alpha_sts, alpha_push_dummy_call,
alpha_extract_return_value, alpha_read_insn,
alpha_get_longjmp_target): Update.
* amd64-linux-tdep.c (amd64_linux_sigcontext_addr): Update.
* amd64obsd-tdep.c (amd64obsd_supply_uthread,
amd64obsd_collect_uthread, amd64obsd_trapframe_cache): Update.
* amd64-tdep.c (amd64_push_dummy_call, amd64_analyze_prologue,
amd64_frame_cache, amd64_sigtramp_frame_cache, fixup_riprel,
amd64_displaced_step_fixup): Update.
* arm-linux-tdep.c (arm_linux_sigreturn_init,
arm_linux_rt_sigreturn_init, arm_linux_supply_gregset): Update.
* arm-tdep.c (thumb_analyze_prologue, arm_skip_prologue,
arm_scan_prologue, arm_push_dummy_call, thumb_get_next_pc,
arm_get_next_pc, arm_extract_return_value, arm_store_return_value,
arm_return_value): Update.
* arm-wince-tdep.c (arm_pe_skip_trampoline_code): Update.
* auxv.c (default_auxv_parse): Update.
* avr-tdep.c (avr_address_to_pointer, avr_pointer_to_address,
avr_scan_prologue, avr_extract_return_value,
avr_frame_prev_register, avr_push_dummy_call): Update.
* bsd-uthread.c (bsd_uthread_check_magic, bsd_uthread_lookup_offset,
bsd_uthread_wait, bsd_uthread_thread_alive,
bsd_uthread_extra_thread_info): Update.
* c-lang.c (c_printstr, print_wchar): Update.
* cp-valprint.c (cp_print_class_member): Update.
* cris-tdep.c (cris_sigcontext_addr, cris_sigtramp_frame_unwind_cache,
cris_push_dummy_call, cris_scan_prologue, cris_store_return_value,
cris_extract_return_value, find_step_target, dip_prefix,
sixteen_bit_offset_branch_op, none_reg_mode_jump_op,
move_mem_to_reg_movem_op, get_data_from_address): Update.
* dwarf2expr.c (dwarf2_read_address, execute_stack_op): Update.
* dwarf2-frame.c (execute_cfa_program): Update.
* dwarf2loc.c (find_location_expression): Update.
* dwarf2read.c (dwarf2_const_value): Update.
* expprint.c (print_subexp_standard): Update.
* findvar.c (unsigned_pointer_to_address, signed_pointer_to_address,
unsigned_address_to_pointer, address_to_signed_pointer,
read_var_value): Update.
* frame.c (frame_unwind_register_signed,
frame_unwind_register_unsigned, get_frame_memory_signed,
get_frame_memory_unsigned): Update.
* frame-unwind.c (frame_unwind_got_constant): Update.
* frv-linux-tdep.c (frv_linux_pc_in_sigtramp,
frv_linux_sigcontext_reg_addr, frv_linux_sigtramp_frame_cache):
Update.
* frv-tdep.c (frv_analyze_prologue, frv_skip_main_prologue,
frv_extract_return_value, find_func_descr,
frv_convert_from_func_ptr_addr, frv_push_dummy_call): Update.
* f-valprint.c (f_val_print): Update.
* gnu-v3-abi.c (gnuv3_decode_method_ptr, gnuv3_make_method_ptr):
Update.
* h8300-tdep.c (h8300_is_argument_spill, h8300_analyze_prologue,
h8300_push_dummy_call, h8300_extract_return_value,
h8300h_extract_return_value, h8300_store_return_value,
h8300h_store_return_value): Update.
* hppabsd-tdep.c (hppabsd_find_global_pointer): Update.
* hppa-hpux-nat.c (hppa_hpux_fetch_register, hppa_hpux_store_register):
Update.
* hppa-hpux-tdep.c (hppa32_hpux_in_solib_call_trampoline,
hppa64_hpux_in_solib_call_trampoline,
hppa_hpux_in_solib_return_trampoline, hppa_hpux_skip_trampoline_code,
hppa_hpux_sigtramp_frame_unwind_cache,
hppa_hpux_sigtramp_unwind_sniffer, hppa32_hpux_find_global_pointer,
hppa64_hpux_find_global_pointer, hppa_hpux_search_pattern,
hppa32_hpux_search_dummy_call_sequence,
hppa64_hpux_search_dummy_call_sequence, hppa_hpux_supply_save_state,
hppa_hpux_unwind_adjust_stub): Update.
* hppa-linux-tdep.c (insns_match_pattern,
hppa_linux_find_global_pointer): Update.
* hppa-tdep.c (hppa_in_function_epilogue_p, hppa32_push_dummy_call,
hppa64_convert_code_addr_to_fptr, hppa64_push_dummy_call,
skip_prologue_hard_way, hppa_frame_cache, hppa_fallback_frame_cache,
hppa_pseudo_register_read, hppa_frame_prev_register_helper,
hppa_match_insns): Update.
* hpux-thread.c (hpux_thread_fetch_registers): Update.
* i386-tdep.c (i386bsd_sigcontext_addr): Update.
* i386-cygwin-tdep.c (core_process_module_section): Update.
* i386-darwin-nat.c (i386_darwin_sstep_at_sigreturn,
amd64_darwin_sstep_at_sigreturn): Update.
* i386-darwin-tdep.c (i386_darwin_sigcontext_addr,
amd64_darwin_sigcontext_addr): Likewise.
* i386-linux-nat.c (i386_linux_sigcontext_addr): Update.
* i386nbsd-tdep.c (i386nbsd_sigtramp_cache_init): Update.
* i386-nto-tdep.c (i386nto_sigcontext_addr): Update.
* i386obsd-nat.c (i386obsd_supply_pcb): Update.
* i386obsd-tdep.c (i386obsd_supply_uthread, i386obsd_collect_uthread,
i386obsd_trapframe_cache): Update.
* i386-tdep.c (i386_displaced_step_fixup, i386_follow_jump,
i386_analyze_frame_setup, i386_analyze_prologue,
i386_skip_main_prologue, i386_frame_cache, i386_sigtramp_frame_cache,
i386_get_longjmp_target, i386_push_dummy_call,
i386_pe_skip_trampoline_code, i386_svr4_sigcontext_addr,
i386_fetch_pointer_argument): Update.
* i387-tdep.c (i387_supply_fsave): Update.
* ia64-linux-tdep.c (ia64_linux_sigcontext_register_address): Update.
* ia64-tdep.c (ia64_pseudo_register_read, ia64_pseudo_register_write,
examine_prologue, ia64_frame_cache, ia64_frame_prev_register,
ia64_sigtramp_frame_cache, ia64_sigtramp_frame_prev_register,
ia64_access_reg, ia64_access_rse_reg, ia64_libunwind_frame_this_id,
ia64_libunwind_frame_prev_register,
ia64_libunwind_sigtramp_frame_this_id,
ia64_libunwind_sigtramp_frame_prev_register, ia64_find_global_pointer,
find_extant_func_descr, find_func_descr,
ia64_convert_from_func_ptr_addr, ia64_push_dummy_call, ia64_dummy_id,
ia64_unwind_pc): Update.
* iq2000-tdep.c (iq2000_pointer_to_address, iq2000_address_to_pointer,
iq2000_scan_prologue, iq2000_extract_return_value,
iq2000_push_dummy_call): Update.
* irix5nat.c (fill_gregset): Update.
* jv-lang.c (evaluate_subexp_java): Update.
* jv-valprint.c (java_value_print): Update.
* lm32-tdep.c (lm32_analyze_prologue, lm32_push_dummy_call,
lm32_extract_return_value, lm32_store_return_value): Update.
* m32c-tdep.c (m32c_push_dummy_call, m32c_return_value,
m32c_skip_trampoline_code, m32c_m16c_address_to_pointer,
m32c_m16c_pointer_to_address): Update.
* m32r-tdep.c (m32r_store_return_value, decode_prologue,
m32r_skip_prologue, m32r_push_dummy_call, m32r_extract_return_value):
Update.
* m68hc11-tdep.c (m68hc11_pseudo_register_read,
m68hc11_pseudo_register_write, m68hc11_analyze_instruction,
m68hc11_push_dummy_call): Update.
* m68linux-tdep.c (m68k_linux_pc_in_sigtramp,
m68k_linux_get_sigtramp_info, m68k_linux_sigtramp_frame_cache):
Update.
* m68k-tdep.c (m68k_push_dummy_call, m68k_analyze_frame_setup,
m68k_analyze_register_saves, m68k_analyze_prologue, m68k_frame_cache,
m68k_get_longjmp_target): Update.
* m88k-tdep.c (m88k_fetch_instruction): Update.
* mep-tdep.c (mep_pseudo_cr32_read, mep_pseudo_csr_write,
mep_pseudo_cr32_write, mep_get_insn, mep_push_dummy_call): Update.
* mi/mi-main.c (mi_cmd_data_write_memory): Update.
* mips-linux-tdep.c (mips_linux_get_longjmp_target, supply_32bit_reg,
mips64_linux_get_longjmp_target, mips64_fill_gregset,
mips64_fill_fpregset, mips_linux_in_dynsym_stub): Update.
* mipsnbdsd-tdep.c (mipsnbsd_get_longjmp_target): Update.
* mips-tdep.c (mips_fetch_instruction, fetch_mips_16,
mips_eabi_push_dummy_call, mips_n32n64_push_dummy_call,
mips_o32_push_dummy_call, mips_o64_push_dummy_call,
mips_single_step_through_delay, mips_skip_pic_trampoline_code,
mips_integer_to_address): Update.
* mn10300-tdep.c (mn10300_analyze_prologue, mn10300_push_dummy_call):
Update.
* monitor.c (monitor_supply_register, monitor_write_memory,
monitor_read_memory_single): Update.
* moxie-tdep.c (moxie_store_return_value, moxie_extract_return_value,
moxie_analyze_prologue): Update.
* mt-tdep.c (mt_return_value, mt_skip_prologue, mt_select_coprocessor,
mt_pseudo_register_read, mt_pseudo_register_write, mt_registers_info,
mt_push_dummy_call): Update.
* objc-lang.c (read_objc_method, read_objc_methlist_nmethods,
read_objc_methlist_method, read_objc_object, read_objc_super,
read_objc_class, find_implementation_from_class): Update.
* ppc64-linux-tdep.c (ppc64_desc_entry_point,
ppc64_linux_convert_from_func_ptr_addr, ppc_linux_sigtramp_cache):
Update.
* ppcobsd-tdep.c (ppcobsd_sigtramp_frame_sniffer,
ppcobsd_sigtramp_frame_cache): Update.
* ppc-sysv-tdep.c (ppc_sysv_abi_push_dummy_call,
do_ppc_sysv_return_value, ppc64_sysv_abi_push_dummy_call,
ppc64_sysv_abi_return_value): Update.
* ppc-linux-nat.c (ppc_linux_auxv_parse): Update.
* procfs.c (procfs_auxv_parse): Update.
* p-valprint.c (pascal_val_print): Update.
* regcache.c (regcache_raw_read_signed, regcache_raw_read_unsigned,
regcache_raw_write_signed, regcache_raw_write_unsigned,
regcache_cooked_read_signed, regcache_cooked_read_unsigned,
regcache_cooked_write_signed, regcache_cooked_write_unsigned): Update.
* remote-m32r-sdi.c (m32r_fetch_register): Update.
* remote-mips.c (mips_wait, mips_fetch_registers, mips_xfer_memory):
Update.
* rs6000-aix-tdep.c (rs6000_push_dummy_call, rs6000_return_value,
rs6000_convert_from_func_ptr_addr, branch_dest,
rs6000_software_single_step): Update.
* rs6000-tdep.c (rs6000_in_function_epilogue_p,
ppc_displaced_step_fixup, ppc_deal_with_atomic_sequence,
bl_to_blrl_insn_p, rs6000_fetch_instruction, skip_prologue,
rs6000_skip_main_prologue, rs6000_skip_trampoline_code,
rs6000_frame_cache): Update.
* s390-tdep.c (s390_pseudo_register_read, s390_pseudo_register_write,
s390x_pseudo_register_read, s390x_pseudo_register_write, s390_load,
s390_backchain_frame_unwind_cache, s390_sigtramp_frame_unwind_cache,
extend_simple_arg, s390_push_dummy_call, s390_return_value): Update.
* scm-exp.c (scm_lreadr): Update.
* scm-lang.c (scm_get_field, scm_unpack): Update.
* scm-valprint.c (scm_val_print): Update.
* score-tdep.c (score_breakpoint_from_pc, score_push_dummy_call,
score_fetch_inst): Update.
* sh64-tdep.c (look_for_args_moves, sh64_skip_prologue_hard_way,
sh64_analyze_prologue, sh64_push_dummy_call, sh64_extract_return_value,
sh64_pseudo_register_read, sh64_pseudo_register_write,
sh64_frame_prev_register): Update:
* sh-tdep.c (sh_analyze_prologue, sh_push_dummy_call_fpu,
sh_push_dummy_call_nofpu, sh_extract_return_value_nofpu,
sh_store_return_value_nofpu, sh_in_function_epilogue_p): Update.
* solib-darwin.c (darwin_load_image_infos): Update.
* solib-frv.c (fetch_loadmap, lm_base, frv_current_sos, enable_break2,
find_canonical_descriptor_in_load_object): Update.
* solib-irix.c (extract_mips_address, fetch_lm_info, irix_current_sos,
irix_open_symbol_file_object): Update.
* solib-som.c (som_solib_create_inferior_hook, link_map_start,
som_current_sos, som_open_symbol_file_object): Update.
* solib-sunos.c (SOLIB_EXTRACT_ADDRESS, LM_ADDR, LM_NEXT, LM_NAME):
Update.
* solib-svr4.c (read_program_header, scan_dyntag_auxv,
solib_svr4_r_ldsomap): Update.
* sparc64-linux-tdep.c (sparc64_linux_step_trap): Update.
* sparc64obsd-tdep.c (sparc64obsd_supply_uthread,
sparc64obsd_collect_uthread): Update.
* sparc64-tdep.c (sparc64_pseudo_register_read,
sparc64_pseudo_register_write, sparc64_supply_gregset,
sparc64_collect_gregset): Update.
* sparc-linux-tdep.c (sparc32_linux_step_trap): Update.
* sparcobsd-tdep.c (sparc32obsd_supply_uthread,
sparc32obsd_collect_uthread): Update.
* sparc-tdep.c (sparc_fetch_wcookie, sparc32_push_dummy_code,
sparc32_store_arguments, sparc32_return_value, sparc_supply_rwindow,
sparc_collect_rwindow): Update.
* spu-linux-nat.c (parse_spufs_run): Update.
* spu-tdep.c (spu_pseudo_register_read_spu,
spu_pseudo_register_write_spu, spu_pointer_to_address,
spu_analyze_prologue, spu_in_function_epilogue_p,
spu_frame_unwind_cache, spu_push_dummy_call, spu_software_single_step,
spu_get_longjmp_target, spu_get_overlay_table, spu_overlay_update_osect,
info_spu_signal_command, info_spu_mailbox_list, info_spu_dma_cmdlist,
info_spu_dma_command, info_spu_proxydma_command): Update.
* stack.c (print_frame_nameless_args, frame_info): Update.
* symfile.c (read_target_long_array, simple_read_overlay_table,
simple_read_overlay_region_table): Update.
* target.c (debug_print_register): Update.
* tramp-frame.c (tramp_frame_start): Update.
* v850-tdep.c (v850_analyze_prologue, v850_push_dummy_call,
v850_extract_return_value, v850_store_return_value,
* valarith.c (value_binop, value_bit_index): Update.
* valops.c (value_cast): Update.
* valprint.c (val_print_type_code_int, val_print_string,
read_string): Update.
* value.c (unpack_long, unpack_double, unpack_field_as_long,
modify_field, pack_long): Update.
* vax-tdep.c (vax_store_arguments, vax_push_dummy_call,
vax_skip_prologue): Update.
* xstormy16-tdep.c (xstormy16_push_dummy_call,
xstormy16_analyze_prologue, xstormy16_in_function_epilogue_p,
xstormy16_resolve_jmp_table_entry, xstormy16_find_jmp_table_entry,
xstormy16_pointer_to_address, xstormy16_address_to_pointer): Update.
* xtensa-tdep.c (extract_call_winsize, xtensa_pseudo_register_read,
xtensa_pseudo_register_write, xtensa_frame_cache,
xtensa_push_dummy_call, call0_track_op, call0_frame_cache): Update.
* dfp.h (decimal_to_string, decimal_from_string, decimal_from_integral,
decimal_from_floating, decimal_to_doublest, decimal_is_zero): Add
BYTE_ORDER parameter.
(decimal_binop): Add BYTE_ORDER_X, BYTE_ORDER_Y, and BYTE_ORDER_RESULT
parameters.
(decimal_compare): Add BYTE_ORDER_X and BYTE_ORDER_Y parameters.
(decimal_convert): Add BYTE_ORDER_FROM and BYTE_ORDER_TO parameters.
* dfp.c (match_endianness): Add BYTE_ORDER parameter. Use it
instead of current_gdbarch.
(decimal_to_string, decimal_from_integral, decimal_from_floating,
decimal_to_doublest, decimal_is_zero): Add BYTE_ORDER parameter.
Pass it to match_endianness.
(decimal_binop): Add BYTE_ORDER_X, BYTE_ORDER_Y, and BYTE_ORDER_RESULT
parameters. Pass them to match_endianness.
(decimal_compare): Add BYTE_ORDER_X and BYTE_ORDER_Y parameters.
Pass them to match_endianness.
(decimal_convert): Add BYTE_ORDER_FROM and BYTE_ORDER_TO parameters.
Pass them to match_endianness.
* valarith.c (value_args_as_decimal): Add BYTE_ORDER_X and
BYTE_ORDER_Y output parameters.
(value_binop): Update call to value_args_as_decimal.
Update calls to decimal_to_string, decimal_from_string,
decimal_from_integral, decimal_from_floating, decimal_to_doublest,
decimal_is_zero, decimal_binop, decimal_compare and decimal_convert
to pass/receive byte order:
* c-exp.y (parse_number): Update.
* printcmd.c (printf_command): Update.
* valarith.c (value_args_as_decimal, value_binop, value_logical_not,
value_equal, value_less): Update.
* valops.c (value_cast, value_one): Update.
* valprint.c (print_decimal_floating): Update.
* value.c (unpack_long, unpack_double): Update.
* python/python-value.c (valpy_nonzero): Update.
* ada-valprint.c (char_at): Add BYTE_ORDER parameter.
(printstr): Update calls to char_at.
(ada_val_print_array): Likewise.
* valprint.c (read_string): Add BYTE_ORDER parameter.
(val_print_string): Update call to read_string.
* c-lang.c (c_get_string): Likewise.
* charset.h (target_wide_charset): Add BYTE_ORDER parameter.
* charset.c (target_wide_charset): Add BYTE_ORDER parameter.
Use it instead of current_gdbarch.
* printcmd.c (printf_command): Update calls to target_wide_charset.
* c-lang.c (charset_for_string_type): Add BYTE_ORDER parameter.
Pass to target_wide_charset. Use it instead of current_gdbarch.
(classify_type): Add BYTE_ORDER parameter. Pass to
charset_for_string_type. Allow NULL encoding pointer.
(print_wchar): Add BYTE_ORDER parameter.
(c_emit_char): Update calls to classify_type and print_wchar.
(c_printchar, c_printstr): Likewise.
* gdbarch.sh (in_solib_return_trampoline): Convert to type "m".
* gdbarch.c, gdbarch.h: Regenerate.
* arch-utils.h (generic_in_solib_return_trampoline): Add GDBARCH
parameter.
* arch-utils.c (generic_in_solib_return_trampoline): Likewise.
* hppa-hpux-tdep.c (hppa_hpux_in_solib_return_trampoline): Likewise.
* rs6000-tdep.c (rs6000_in_solib_return_trampoline): Likewise.
(rs6000_skip_trampoline_code): Update call.
* alpha-tdep.h (struct gdbarch_tdep): Add GDBARCH parameter to
dynamic_sigtramp_offset and pc_in_sigtramp callbacks.
(alpha_read_insn): Add GDBARCH parameter.
* alpha-tdep.c (alpha_lds, alpha_sts): Add GDBARCH parameter.
(alpha_register_to_value): Pass architecture to alpha_sts.
(alpha_extract_return_value): Likewise.
(alpha_value_to_register): Pass architecture to alpha_lds.
(alpha_store_return_value): Likewise.
(alpha_read_insn): Add GDBARCH parameter.
(alpha_skip_prologue): Pass architecture to alpha_read_insn.
(alpha_heuristic_proc_start): Likewise.
(alpha_heuristic_frame_unwind_cache): Likewise.
(alpha_next_pc): Likewise.
(alpha_sigtramp_frame_this_id): Pass architecture to
tdep->dynamic_sigtramp_offset callback.
(alpha_sigtramp_frame_sniffer): Pass architecture to
tdep->pc_in_sigtramp callback.
* alphafbsd-tdep.c (alphafbsd_pc_in_sigtramp): Add GDBARCH parameter.
(alphafbsd_sigtramp_offset): Likewise.
* alpha-linux-tdep.c (alpha_linux_sigtramp_offset_1): Add GDBARCH
parameter. Pass to alpha_read_insn.
(alpha_linux_sigtramp_offset): Add GDBARCH parameter. Pass to
alpha_linux_sigtramp_offset_1.
(alpha_linux_pc_in_sigtramp): Add GDBARCH parameter. Pass to
alpha_linux_sigtramp_offset.
(alpha_linux_sigcontext_addr): Pass architecture to alpha_read_insn
and alpha_linux_sigtramp_offset.
* alphanbsd-tdep.c (alphanbsd_sigtramp_offset): Add GDBARCH parameter.
(alphanbsd_pc_in_sigtramp): Add GDBARCH parameter. Pass to
alphanbsd_sigtramp_offset.
* alphaobsd-tdep.c (alphaobsd_sigtramp_offset): Add GDBARCH parameter.
(alphaobsd_pc_in_sigtramp): Add GDBARCH parameter. Pass to
alpha_read_insn.
(alphaobsd_sigcontext_addr): Pass architecture to
alphaobsd_sigtramp_offset.
* alpha-osf1-tdep.c (alpha_osf1_pc_in_sigtramp): Add GDBARCH
parameter.
* amd64-tdep.c (amd64_analyze_prologue): Add GDBARCH parameter.
(amd64_skip_prologue): Pass architecture to amd64_analyze_prologue.
(amd64_frame_cache): Likewise.
* arm-tdep.c (SWAP_SHORT, SWAP_INT): Remove.
(thumb_analyze_prologue, arm_skip_prologue, arm_scan_prologue,
thumb_get_next_pc, arm_get_next_pc): Do not use SWAP_ macros.
* arm-wince-tdep.c: Include "frame.h".
* avr-tdep.c (EXTRACT_INSN): Remove.
(avr_scan_prologue): Add GDBARCH argument, inline EXTRACT_INSN.
(avr_skip_prologue): Pass architecture to avr_scan_prologue.
(avr_frame_unwind_cache): Likewise.
* cris-tdep.c (struct instruction_environment): Add BYTE_ORDER member.
(find_step_target): Initialize it.
(get_data_from_address): Add BYTE_ORDER parameter.
(bdap_prefix): Pass byte order to get_data_from_address.
(handle_prefix_assign_mode_for_aritm_op): Likewise.
(three_operand_add_sub_cmp_and_or_op): Likewise.
(handle_inc_and_index_mode_for_aritm_op): Likewise.
* frv-linux-tdep.c (frv_linux_pc_in_sigtramp): Add GDBARCH parameter.
(frv_linux_sigcontext_reg_addr): Pass architecture to
frv_linux_pc_in_sigtramp.
(frv_linux_sigtramp_frame_sniffer): Likewise.
* h8300-tdep.c (h8300_is_argument_spill): Add GDBARCH parameter.
(h8300_analyze_prologue): Add GDBARCH parameter. Pass to
h8300_is_argument_spill.
(h8300_frame_cache, h8300_skip_prologue): Pass architecture
to h8300_analyze_prologue.
* hppa-tdep.h (struct gdbarch_tdep): Add GDBARCH parameter to
in_solib_call_trampoline callback.
(hppa_in_solib_call_trampoline): Add GDBARCH parameter.
* hppa-tdep.c (hppa64_convert_code_addr_to_fptr): Add GDBARCH
parameter.
(hppa64_push_dummy_call): Pass architecture to
hppa64_convert_code_addr_to_fptr.
(hppa_match_insns): Add GDBARCH parameter.
(hppa_match_insns_relaxed): Add GDBARCH parameter. Pass to
hppa_match_insns.
(hppa_skip_trampoline_code): Pass architecture to hppa_match_insns.
(hppa_in_solib_call_trampoline): Add GDBARCH parameter. Pass to
hppa_match_insns_relaxed.
(hppa_stub_unwind_sniffer): Pass architecture to
tdep->in_solib_call_trampoline callback.
* hppa-hpux-tdep.c (hppa_hpux_search_pattern): Add GDBARCH parameter.
(hppa32_hpux_search_dummy_call_sequence): Pass architecture to
hppa_hpux_search_pattern.
* hppa-linux-tdep.c (insns_match_pattern): Add GDBARCH parameter.
(hppa_linux_sigtramp_find_sigcontext): Add GDBARCH parameter.
Pass to insns_match_pattern.
(hppa_linux_sigtramp_frame_unwind_cache): Pass architecture to
hppa_linux_sigtramp_find_sigcontext.
(hppa_linux_sigtramp_frame_sniffer): Likewise.
(hppa32_hpux_in_solib_call_trampoline): Add GDBARCH parameter.
(hppa64_hpux_in_solib_call_trampoline): Likewise.
* i386-tdep.c (i386_follow_jump): Add GDBARCH parameter.
(i386_analyze_frame_setup): Add GDBARCH parameter.
(i386_analyze_prologue): Add GDBARCH parameter. Pass to
i386_follow_jump and i386_analyze_frame_setup.
(i386_skip_prologue): Pass architecture to i386_analyze_prologue
and i386_follow_jump.
(i386_frame_cache): Pass architecture to i386_analyze_prologue.
(i386_pe_skip_trampoline_code): Add FRAME parameter.
* i386-tdep.h (i386_pe_skip_trampoline_code): Add FRAME parameter.
* i386-cygwin-tdep.c (i386_cygwin_skip_trampoline_code): Pass
frame to i386_pe_skip_trampoline_code.
* ia64-tdep.h (struct gdbarch_tdep): Add GDBARCH parameter
to sigcontext_register_address callback.
* ia64-tdep.c (ia64_find_global_pointer): Add GDBARCH parameter.
(ia64_find_unwind_table): Pass architecture to
ia64_find_global_pointer.
(find_extant_func_descr): Add GDBARCH parameter.
(find_func_descr): Pass architecture to find_extant_func_descr
and ia64_find_global_pointer.
(ia64_sigtramp_frame_init_saved_regs): Pass architecture to
tdep->sigcontext_register_address callback.
* ia64-linux-tdep.c (ia64_linux_sigcontext_register_address): Add
GDBARCH parameter.
* iq2000-tdep.c (iq2000_scan_prologue): Add GDBARCH parameter.
(iq2000_frame_cache): Pass architecture to iq2000_scan_prologue.
* lm32-tdep.c (lm32_analyze_prologue): Add GDBARCH parameter.
(lm32_skip_prologue, lm32_frame_cache): Pass architecture to
lm32_analyze_prologue.
* m32r-tdep.c (decode_prologue): Add GDBARCH parameter.
(m32r_skip_prologue): Pass architecture to decode_prologue.
* m68hc11-tdep.c (m68hc11_analyze_instruction): Add GDBARCH parameter.
(m68hc11_scan_prologue): Pass architecture to
m68hc11_analyze_instruction.
* m68k-tdep.c (m68k_analyze_frame_setup): Add GDBARCH parameter.
(m68k_analyze_prologue): Pass architecture to
m68k_analyze_frame_setup.
* m88k-tdep.c (m88k_fetch_instruction): Add BYTE_ORDER parameter.
(m88k_analyze_prologue): Add GDBARCH parameter. Pass byte order
to m88k_fetch_instruction.
(m88k_skip_prologue): Pass architecture to m88k_analyze_prologue.
(m88k_frame_cache): Likewise.
* mep-tdep.c (mep_get_insn): Add GDBARCH parameter.
(mep_analyze_prologue): Pass architecture to mep_get_insn.
* mips-tdep.c (mips_fetch_instruction): Add GDBARCH parameter.
(mips32_next_pc): Pass architecture to mips_fetch_instruction.
(deal_with_atomic_sequence): Likewise.
(unpack_mips16): Add GDBARCH parameter, pass to mips_fetch_instruction.
(mips16_scan_prologue): Likewise.
(mips32_scan_prologue): Likewise.
(mips16_in_function_epilogue_p): Likewise.
(mips32_in_function_epilogue_p): Likewise.
(mips_about_to_return): Likewise.
(mips_insn16_frame_cache): Pass architecture to mips16_scan_prologue.
(mips_insn32_frame_cache): Pass architecture to mips32_scan_prologue.
(mips_skip_prologue): Pass architecture to mips16_scan_prologue
and mips32_scan_prologue.
(mips_in_function_epilogue_p): Pass architecture to
mips16_in_function_epilogue_p and
mips32_in_function_epilogue_p.
(heuristic_proc_start): Pass architecture to mips_fetch_instruction
and mips_about_to_return.
(mips_skip_mips16_trampoline_code): Pass architecture to
mips_fetch_instruction.
(fetch_mips_16): Add GDBARCH parameter.
(mips16_next_pc): Pass architecture to fetch_mips_16.
(extended_mips16_next_pc): Pass architecture to unpack_mips16 and
fetch_mips_16.
* objc-lang.c (read_objc_method, read_objc_methlist_nmethods,
read_objc_methlist_method, read_objc_object, read_objc_super,
read_objc_class): Add GDBARCH parameter.
(find_implementation_from_class): Add GDBARCH parameter, pass
to read_objc_class, read_objc_methlist_nmethods, and
read_objc_methlist_method.
(find_implementation): Add GDBARCH parameter, pass to
read_objc_object and find_implementation_from_class.
(resolve_msgsend, resolve_msgsend_stret): Pass architecture
to find_implementation.
(resolve_msgsend_super, resolve_msgsend_super_stret): Pass
architecture to read_objc_super and find_implementation_from_class.
* ppc64-linux-tdep.c (ppc64_desc_entry_point): Add GDBARCH parameter.
(ppc64_standard_linkage1_target, ppc64_standard_linkage2_target,
ppc64_standard_linkage3_target): Pass architecture to
ppc64_desc_entry_point.
* rs6000-tdep.c (bl_to_blrl_insn_p): Add BYTE_ORDER parameter.
(skip_prologue): Pass byte order to bl_to_blrl_insn_p.
(rs6000_fetch_instruction): Add GDBARCH parameter.
(rs6000_skip_stack_check): Add GDBARCH parameter, pass to
rs6000_fetch_instruction.
(skip_prologue): Pass architecture to rs6000_fetch_instruction.
* remote-mips.c (mips_store_word): Return old_contents as host
integer value instead of target bytes.
* s390-tdep.c (struct s390_prologue_data): Add BYTE_ORDER member.
(s390_analyze_prologue): Initialize it.
(extend_simple_arg): Add GDBARCH parameter.
(s390_push_dummy_call): Pass architecture to extend_simple_arg.
* scm-lang.c (scm_get_field): Add BYTE_ORDER parameter.
* scm-lang.h (scm_get_field): Add BYTE_ORDER parameter.
(SCM_CAR, SCM_CDR): Pass SCM_BYTE_ORDER to scm_get_field.
* scm-valprint.c (scm_scmval_print): Likewise.
(scm_scmlist_print, scm_ipruk, scm_scmval_print): Define
SCM_BYTE_ORDER.
* sh64-tdep.c (look_for_args_moves): Add GDBARCH parameter.
(sh64_skip_prologue_hard_way): Add GDBARCH parameter, pass to
look_for_args_moves.
(sh64_skip_prologue): Pass architecture to
sh64_skip_prologue_hard_way.
* sh-tdep.c (sh_analyze_prologue): Add GDBARCH parameter.
(sh_skip_prologue): Pass architecture to sh_analyze_prologue.
(sh_frame_cache): Likewise.
* solib-irix.c (extract_mips_address): Add GDBARCH parameter.
(fetch_lm_info, irix_current_sos, irix_open_symbol_file_object):
Pass architecture to extract_mips_address.
* sparc-tdep.h (sparc_fetch_wcookie): Add GDBARCH parameter.
* sparc-tdep.c (sparc_fetch_wcookie): Add GDBARCH parameter.
(sparc_supply_rwindow, sparc_collect_rwindow): Pass architecture
to sparc_fetch_wcookie.
(sparc32_frame_prev_register): Likewise.
* sparc64-tdep.c (sparc64_frame_prev_register): Likewise.
* sparc32nbsd-tdep.c (sparc32nbsd_sigcontext_saved_regs): Likewise.
* sparc64nbsd-tdep.c (sparc64nbsd_sigcontext_saved_regs): Likewise.
* spu-tdep.c (spu_analyze_prologue): Add GDBARCH parameter.
(spu_skip_prologue): Pass architecture to spu_analyze_prologue.
(spu_virtual_frame_pointer): Likewise.
(spu_frame_unwind_cache): Likewise.
(info_spu_mailbox_list): Add BYTE_ORER parameter.
(info_spu_mailbox_command): Pass byte order to info_spu_mailbox_list.
(info_spu_dma_cmdlist): Add BYTE_ORER parameter.
(info_spu_dma_command, info_spu_proxydma_command): Pass byte order
to info_spu_dma_cmdlist.
* symfile.c (read_target_long_array): Add GDBARCH parameter.
(simple_read_overlay_table, simple_read_overlay_region_table,
simple_overlay_update_1): Pass architecture to read_target_long_array.
* v850-tdep.c (v850_analyze_prologue): Add GDBARCH parameter.
(v850_frame_cache): Pass architecture to v850_analyze_prologue.
* xstormy16-tdep.c (xstormy16_analyze_prologue): Add GDBARCH
parameter.
(xstormy16_skip_prologue, xstormy16_frame_cache): Pass architecture
to xstormy16_analyze_prologue.
(xstormy16_resolve_jmp_table_entry): Add GDBARCH parameter.
(xstormy16_find_jmp_table_entry): Likewise.
(xstormy16_skip_trampoline_code): Pass architecture to
xstormy16_resolve_jmp_table_entry.
(xstormy16_pointer_to_address): Likewise.
(xstormy16_address_to_pointer): Pass architecture to
xstormy16_find_jmp_table_entry.
* xtensa-tdep.c (call0_track_op): Add GDBARCH parameter.
(call0_analyze_prologue): Add GDBARCH parameter, pass to
call0_track_op.
(call0_frame_cache): Pass architecture to call0_analyze_prologue.
(xtensa_skip_prologue): Likewise.
2009-07-03 01:25:59 +08:00
|
|
|
m:int:in_solib_return_trampoline:CORE_ADDR pc, char *name:pc, name::generic_in_solib_return_trampoline::0
|
2002-08-21 07:01:29 +08:00
|
|
|
|
2001-11-06 19:02:12 +08:00
|
|
|
# A target might have problems with watchpoints as soon as the stack
|
|
|
|
# frame of the current function has been destroyed. This mostly happens
|
|
|
|
# as the first action in a funtion's epilogue. in_function_epilogue_p()
|
|
|
|
# is defined to return a non-zero value if either the given addr is one
|
|
|
|
# instruction after the stack destroying instruction up to the trailing
|
|
|
|
# return instruction or if we can figure out that the stack frame has
|
|
|
|
# already been invalidated regardless of the value of addr. Targets
|
|
|
|
# which don't suffer from that problem could just let this functionality
|
|
|
|
# untouched.
|
2007-10-19 20:34:38 +08:00
|
|
|
m:int:in_function_epilogue_p:CORE_ADDR addr:addr:0:generic_in_function_epilogue_p::0
|
|
|
|
f:void:elf_make_msymbol_special:asymbol *sym, struct minimal_symbol *msym:sym, msym::default_elf_make_msymbol_special::0
|
|
|
|
f:void:coff_make_msymbol_special:int val, struct minimal_symbol *msym:val, msym::default_coff_make_msymbol_special::0
|
|
|
|
v:int:cannot_step_breakpoint:::0:0::0
|
|
|
|
v:int:have_nonsteppable_watchpoint:::0:0::0
|
|
|
|
F:int:address_class_type_flags:int byte_size, int dwarf2_addr_class:byte_size, dwarf2_addr_class
|
|
|
|
M:const char *:address_class_type_flags_to_name:int type_flags:type_flags
|
|
|
|
M:int:address_class_name_to_type_flags:const char *name, int *type_flags_ptr:name, type_flags_ptr
|
2002-11-02 23:13:34 +08:00
|
|
|
# Is a register in a group
|
2007-10-19 20:34:38 +08:00
|
|
|
m:int:register_reggroup_p:int regnum, struct reggroup *reggroup:regnum, reggroup::default_register_reggroup_p::0
|
2003-10-11 20:05:44 +08:00
|
|
|
# Fetch the pointer to the ith function argument.
|
2007-10-19 20:34:38 +08:00
|
|
|
F:CORE_ADDR:fetch_pointer_argument:struct frame_info *frame, int argi, struct type *type:frame, argi, type
|
2003-10-11 20:52:30 +08:00
|
|
|
|
|
|
|
# Return the appropriate register set for a core file section with
|
|
|
|
# name SECT_NAME and size SECT_SIZE.
|
2007-10-19 20:34:38 +08:00
|
|
|
M:const struct regset *:regset_from_core_section:const char *sect_name, size_t sect_size:sect_name, sect_size
|
* NEWS: Mention pointer to member improvements.
* Makefile.in (gnu-v3-abi.o): Delete special rule.
(eval.o, gnu-v3-abi.o, ia64-tdep.o): Update.
* ada-valprint.c (ada_print_scalar): Update for new type codes.
* c-typeprint.c (c_print_type): Update for new type codes.
(c_type_print_varspec_prefix, c_type_print_varspec_suffix)
(c_type_print_base): Likewise.
(c_type_print_args): Rewrite.
* c-valprint.c (c_val_print): Update for new type codes. Remove
support for references to members. Treat methods like functions.
* cp-abi.c (cplus_print_method_ptr, cplus_method_ptr_size)
(cplus_make_method_ptr, cplus_method_ptr_to_value): New.
* cp-abi.h (cplus_print_method_ptr, cplus_method_ptr_size)
(cplus_make_method_ptr, cplus_method_ptr_to_value): New prototypes.
(struct cp_abi_ops): Add corresponding members.
* cp-valprint.c (cp_print_class_method): Delete.
(cp_find_class_member): New function.
(cp_print_class_member): Use it. Simplify support for bogus
member pointers.
* dwarf2read.c (quirk_gcc_member_function_pointer): Use
lookup_methodptr_type.
(read_tag_ptr_to_member_type): Likewise, and lookup_memberptr_type.
* eval.c (evaluate_subexp_standard): Implement EVAL_SKIP for
OP_SCOPE. Update call to value_aggregate_elt. Rewrite member
pointer support.
(evaluate_subexp_for_address): Handle OP_SCOPE explicitly. Handle
references returned by user defined operators.
* f-typeprint.c (f_print_type, f_type_print_varspec_prefix)
(f_type_print_varspec_suffix): Remove support for member pointers.
* gdbtypes.c (lookup_memberptr_type): Renamed from lookup_member_type
and adjusted.
(smash_to_memberptr_type): Likewise, from smash_to_member_type.
(lookup_methodptr_type): New.
(rank_one_type): Adjust for TYPE_CODE_MEMBERPTR.
(recursive_dump_type): Update for new types.
* gdbtypes.h (enum type_code): Replace TYPE_CODE_MEMBER with
TYPE_CODE_MEMBERPTR and TYPE_CODE_METHODPTR.
(lookup_memberptr_type, lookup_methodptr_type)
(smash_to_memberptr_type): New prototypes.
(smash_to_method_type): Formatting fix.
(lookup_member_type, smash_to_member_type): Delete prototypes.
* gnu-v3-abi.c (gnuv3_get_vtable, gnuv3_get_virtual_fn): New.
Do not rely on debug information for the vptr or the method's
enclosing type. Handle function descriptors for IA64.
(gnuv3_virtual_fn_field): Rewrite using the new functions.
(gnuv3_find_method_in, gnuv3_print_method_ptr)
(gnuv3_method_ptr_size, gnuv3_make_method_ptr)
(gnuv3_method_ptr_to_value): New.
(init_gnuv3_ops): Set new members of gnu_v3_abi_ops.
* hpread.c (hpread_type_lookup): Update for new types.
* infcall.c (value_arg_coerce): Likewise.
* m2-typeprint.c (m2_print_type): Remove explicit support
for member pointers.
* m2-valprint.c (m2_val_print): Likewise.
* p-typeprint.c (pascal_type_print_varspec_prefix)
(pascal_type_print_varspec_suffix, pascal_type_print_base): Likewise.
* p-valprint.c (pascal_val_print): Likewise.
(pascal_object_print_class_method, pascal_object_print_class_member):
Delete.
* p-lang.h (pascal_object_print_class_method)
(pascal_object_print_class_member): Delete prototypes.
* stabsread.c (read_type): Update for new types.
* typeprint.c (print_type_scalar): Likewise.
* valops.c (value_struct_elt_for_reference, value_namespace_elt)
(value_maybe_namespace_elt, value_aggregate_elt): Add want_address
argument. Construct a pointer to member if the address of a
function or data member is requested.
(value_cast_pointers): Don't modify the input value.
(value_cast): Adjust pointer to member handling for new types.
Allow null pointer to member constants. Don't modify the input
value.
(value_ind): Remove pointer to member check. Handle function
descriptors for function pointers.
(value_struct_elt, value_find_oload_method_list, check_field):
Remove pointer to member checks.
* value.c (unpack_long): Allow pointers to data members.
(value_from_longest): Allow member pointers.
* value.h (value_aggregate_elt): Add want_address.
* varobj.c (c_variable_editable): Remove check for members.
* gdbarch.sh: Add vtable_function_descriptors and vbit_in_delta.
* ia64-tdep.c (ia64_convert_from_func_ptr_addr): Handle descriptors
in virtual tables.
(ia64_gdbarch_init): Call set_gdbarch_vtable_function_descriptors.
* c-lang.h (cp_print_class_method): Delete prototype.
* arm-tdep.c (arm_gdbarch_init): Call set_gdbarch_vbit_in_delta.
* mips-tdep.c (mips_gdbarch_init): Likewise.
* gdbarch.c, gdbarch.h: Regenerated.
* gdb.cp/classes.exp (test_pointers_to_class_members): Update expected
output. Test the types of members and member pointers.
* gdb.cp/inherit.exp (test_print_mi_member_types): Remove KFAILs for
gdb/2092.
* gdb.cp/member-ptr.exp: Search for a comment instead of a
statement. Enable for GCC. Update expected output for some tests
and add new tests. Remove obsolete GCC KFAILs. Allow GCC's class
layout.
* gdb.cp/member-ptr.cc (Padding, Padding::vspacer, Base, Base::get_x)
(Base::vget_base, Left, Left::vget, Right, Right::vget, Diamond)
(Diamond::vget_base): New.
(main): Add new tests.
* gdb.cp/printmethod.exp: Update expected output for member functions.
* gdb.cp/virtfunc.exp (test_virtual_calls): Add a KFAIL for
print pEe->D::vg().
2007-01-04 02:05:45 +08:00
|
|
|
|
2009-02-16 11:16:24 +08:00
|
|
|
# When creating core dumps, some systems encode the PID in addition
|
|
|
|
# to the LWP id in core file register section names. In those cases, the
|
|
|
|
# "XXX" in ".reg/XXX" is encoded as [LWPID << 16 | PID]. This setting
|
|
|
|
# is set to true for such architectures; false if "XXX" represents an LWP
|
|
|
|
# or thread id with no special encoding.
|
|
|
|
v:int:core_reg_section_encodes_pid:::0:0::0
|
|
|
|
|
2008-05-25 00:32:01 +08:00
|
|
|
# Supported register notes in a core file.
|
|
|
|
v:struct core_regset_section *:core_regset_sections:const char *name, int len::::::host_address_to_string (gdbarch->core_regset_sections)
|
|
|
|
|
2007-09-04 07:06:35 +08:00
|
|
|
# Read offset OFFSET of TARGET_OBJECT_LIBRARIES formatted shared libraries list from
|
|
|
|
# core file into buffer READBUF with length LEN.
|
2007-10-19 20:34:38 +08:00
|
|
|
M:LONGEST:core_xfer_shared_libraries:gdb_byte *readbuf, ULONGEST offset, LONGEST len:readbuf, offset, len
|
2007-09-04 07:06:35 +08:00
|
|
|
|
* corelow.c (get_core_registers): Adjust.
(core_file_thread_alive): Rename to...
(core_thread_alive): ... this.
(core_pid_to_str): Try gdbarch_core_pid_to_str first.
(init_core_ops): Adjust.
(coreops_suppress_target): Delete.
(_initialize_corelow): Unconditionally add core_ops.
* procfs.c: Include "inf-child.h".
(procfs_ops): Delete.
(init_procfs_ops): Delete. Reimplement as...
(procfs_target): ... this, inheriting from inf-child.
(procfs_attach, procfs_detach, procfs_fetch_registers): Adjust.
(procfs_prepare_to_store): Delete.
(procfs_store_registers, procfs_resume): Adjust.
(procfs_open): Delete.
(procfs_suppress_run): Delete.
(procfs_can_run): Delete.
(procfs_mourn_inferior): Adjust.
(procfs_init_inferior): Add target_ops parameter. Adjust.
(procfs_create_inferior): Don't pass procfs_init_inferior to
fork_inferior. Instead call it after fork_inferior returns.
(procfs_find_new_threads): Adjust.
(_initialize_procfs): Adjust to use procfs_target instead of
init_procfs_ops.
* sol-thread.c (orig_core_ops, sol_core_ops): Delete.
(lwp_to_thread): Use target_thread_alive.
(sol_thread_open): Delete.
(sol_thread_attach): Delete.
(sol_thread_detach, sol_thread_resume, sol_thread_wait)
(sol_thread_fetch_registers, sol_thread_store_registers): Adjust
to use find_target_beneath.
(sol_thread_prepare_to_store, sol_thread_xfer_memory): Delete.
(sol_thread_xfer_partial): Adjust to use find_target_beneath.
(sol_thread_files_info, sol_thread_kill_inferior): Delete.
(check_for_thread_db): New.
(sol_thread_notice_signals, sol_thread_create_inferior): Delete.
(sol_thread_new_objfile): Call check_for_thread_db.
(sol_thread_mourn_inferior): Adjust to use find_target_beneath.
(sol_thread_can_run): Delete.
(sol_thread_alive): Adjust to use find_target_beneath.
(sol_thread_stop): Delete.
(rw_common): Use target_write_memory or target_read_memory.
(ps_lgetregs, ps_lgetfpregs): Use target_fetch_registers.
(ps_lsetregs, ps_lsetfpregs): Use target_store_registers.
(solaris_pid_to_str): Remove check for libthread_db initialization
failing.
(sol_find_new_threads): Remove check for libthread_db
initialization failing, or for an invalid inferior_ptid. Adjust
to use find_target_beneath.
(sol_core_open, sol_core_close, sol_core_detach,
sol_core_files_info, sol_find_memory_regions,
sol_make_note_section, ignore): Delete.
(init_sol_thread_ops): Make it a thread_stratum target. Remove
unneeded callback settings.
(init_sol_core_ops): Delete.
(_initialize_sol_thread): No longer call init_sol_core_ops, set
procfs_suppress_run, or hack with core_ops.
* target.h (struct target_ops): Add a target_ops * parameter to
to_resume, to_fetch_registers, to_store_registers, to_thread_alive
and to_find_new_threads.
(target_fetch_registers, target_store_registers)
(target_thread_alive, target_find_new_threads): Redeclare as
function.
* target.c (update_current_target): Do not inherit or de_fault
to_resume, to_fetch_registers, to_store_registers,
to_thread_alive, to_find_new_threads.
(target_resume): Adjust.
(target_thread_alive, target_find_new_threads): New.
(debug_to_resume, debug_to_fetch_registers): Delete.
(target_fetch_registers): New.
(debug_to_store_registers): Delete.
(target_store_registers): New.
(debug_to_thread_alive, debug_to_find_new_threads): Delete.
(setup_target_debug): Adjust.
* gdbcore.h (core_ops): Delete declaration.
* inf-ptrace.c, linux-nat.c, remote.c, amd64-linux-nat.c,
inf-child.c, linux-thread-db.c, bsd-uthread.c, inf-ttrace.c,
i386-sol2-tdep.c, darwin-nat.c, gnu-nat.c, go32-nat.c,
hpux-thread.c, i386-linux-nat.c, i386fbsd-nat.c, monitor.c,
nto-procfs.c, remote-m32r-sdi.c, remote-mips.c, windows-nat.c,
alphabsd-nat.c, amd64bsd-nat.c, arm-linux-nat.c, armnbsd-nat.c,
bsd-kvm.c, hppa-hpux-nat.c, hppa-linux-nat.c, hppabsd-nat.c,
hppanbsd-nat.c, i386-darwin-nat.c, i386bsd-nat.c,
ia64-linux-nat.c, m32r-linux-nat.c, m68kbsd-nat.c,
m68klinux-nat.c, m88kbsd-nat.c, mips-linux-nat.c,
mips64obsd-nat.c, mipsnbsd-nat.c, ppc-linux-nat.c, ppcnbsd-nat.c,
ppcobsd-nat.c, remote-sim.c, rs6000-nat.c, s390-nat.c,
shnbsd-nat.c, sparc-nat.c, sparc-nat.h, spu-linux-nat.c,
vaxbsd-nat.c, xtensa-linux-nat.c: Adjust to target_ops changes.
* gdbarch.sh (core_pid_to_str): New gdbarch callback.
* gdbarch.h, gdbarch.c: Regenerate.
* sol2-tdep.c: Include "inferior.h".
(sol2_core_pid_to_str): New.
* sol2-tdep.h (sol2_core_pid_to_str): Declare.
* amd64-sol2-tdep.c (amd64_sol2_init_abi): Set it.
* sparc-sol2-tdep.c (sparc32_sol2_init_abi): Set it.
* sparc64-sol2-tdep.c (sparc64_sol2_init_abi): Set it.
* i386-sol2-tdep.c (i386_sol2_init_abi): Set it.
2009-02-23 08:03:50 +08:00
|
|
|
# How the core_stratum layer converts a PTID from a core file to a
|
|
|
|
# string.
|
|
|
|
M:char *:core_pid_to_str:ptid_t ptid:ptid
|
|
|
|
|
2009-06-18 02:48:26 +08:00
|
|
|
# BFD target to use when generating a core file.
|
|
|
|
V:const char *:gcore_bfd_target:::0:0:::gdbarch->gcore_bfd_target
|
|
|
|
|
* NEWS: Mention pointer to member improvements.
* Makefile.in (gnu-v3-abi.o): Delete special rule.
(eval.o, gnu-v3-abi.o, ia64-tdep.o): Update.
* ada-valprint.c (ada_print_scalar): Update for new type codes.
* c-typeprint.c (c_print_type): Update for new type codes.
(c_type_print_varspec_prefix, c_type_print_varspec_suffix)
(c_type_print_base): Likewise.
(c_type_print_args): Rewrite.
* c-valprint.c (c_val_print): Update for new type codes. Remove
support for references to members. Treat methods like functions.
* cp-abi.c (cplus_print_method_ptr, cplus_method_ptr_size)
(cplus_make_method_ptr, cplus_method_ptr_to_value): New.
* cp-abi.h (cplus_print_method_ptr, cplus_method_ptr_size)
(cplus_make_method_ptr, cplus_method_ptr_to_value): New prototypes.
(struct cp_abi_ops): Add corresponding members.
* cp-valprint.c (cp_print_class_method): Delete.
(cp_find_class_member): New function.
(cp_print_class_member): Use it. Simplify support for bogus
member pointers.
* dwarf2read.c (quirk_gcc_member_function_pointer): Use
lookup_methodptr_type.
(read_tag_ptr_to_member_type): Likewise, and lookup_memberptr_type.
* eval.c (evaluate_subexp_standard): Implement EVAL_SKIP for
OP_SCOPE. Update call to value_aggregate_elt. Rewrite member
pointer support.
(evaluate_subexp_for_address): Handle OP_SCOPE explicitly. Handle
references returned by user defined operators.
* f-typeprint.c (f_print_type, f_type_print_varspec_prefix)
(f_type_print_varspec_suffix): Remove support for member pointers.
* gdbtypes.c (lookup_memberptr_type): Renamed from lookup_member_type
and adjusted.
(smash_to_memberptr_type): Likewise, from smash_to_member_type.
(lookup_methodptr_type): New.
(rank_one_type): Adjust for TYPE_CODE_MEMBERPTR.
(recursive_dump_type): Update for new types.
* gdbtypes.h (enum type_code): Replace TYPE_CODE_MEMBER with
TYPE_CODE_MEMBERPTR and TYPE_CODE_METHODPTR.
(lookup_memberptr_type, lookup_methodptr_type)
(smash_to_memberptr_type): New prototypes.
(smash_to_method_type): Formatting fix.
(lookup_member_type, smash_to_member_type): Delete prototypes.
* gnu-v3-abi.c (gnuv3_get_vtable, gnuv3_get_virtual_fn): New.
Do not rely on debug information for the vptr or the method's
enclosing type. Handle function descriptors for IA64.
(gnuv3_virtual_fn_field): Rewrite using the new functions.
(gnuv3_find_method_in, gnuv3_print_method_ptr)
(gnuv3_method_ptr_size, gnuv3_make_method_ptr)
(gnuv3_method_ptr_to_value): New.
(init_gnuv3_ops): Set new members of gnu_v3_abi_ops.
* hpread.c (hpread_type_lookup): Update for new types.
* infcall.c (value_arg_coerce): Likewise.
* m2-typeprint.c (m2_print_type): Remove explicit support
for member pointers.
* m2-valprint.c (m2_val_print): Likewise.
* p-typeprint.c (pascal_type_print_varspec_prefix)
(pascal_type_print_varspec_suffix, pascal_type_print_base): Likewise.
* p-valprint.c (pascal_val_print): Likewise.
(pascal_object_print_class_method, pascal_object_print_class_member):
Delete.
* p-lang.h (pascal_object_print_class_method)
(pascal_object_print_class_member): Delete prototypes.
* stabsread.c (read_type): Update for new types.
* typeprint.c (print_type_scalar): Likewise.
* valops.c (value_struct_elt_for_reference, value_namespace_elt)
(value_maybe_namespace_elt, value_aggregate_elt): Add want_address
argument. Construct a pointer to member if the address of a
function or data member is requested.
(value_cast_pointers): Don't modify the input value.
(value_cast): Adjust pointer to member handling for new types.
Allow null pointer to member constants. Don't modify the input
value.
(value_ind): Remove pointer to member check. Handle function
descriptors for function pointers.
(value_struct_elt, value_find_oload_method_list, check_field):
Remove pointer to member checks.
* value.c (unpack_long): Allow pointers to data members.
(value_from_longest): Allow member pointers.
* value.h (value_aggregate_elt): Add want_address.
* varobj.c (c_variable_editable): Remove check for members.
* gdbarch.sh: Add vtable_function_descriptors and vbit_in_delta.
* ia64-tdep.c (ia64_convert_from_func_ptr_addr): Handle descriptors
in virtual tables.
(ia64_gdbarch_init): Call set_gdbarch_vtable_function_descriptors.
* c-lang.h (cp_print_class_method): Delete prototype.
* arm-tdep.c (arm_gdbarch_init): Call set_gdbarch_vbit_in_delta.
* mips-tdep.c (mips_gdbarch_init): Likewise.
* gdbarch.c, gdbarch.h: Regenerated.
* gdb.cp/classes.exp (test_pointers_to_class_members): Update expected
output. Test the types of members and member pointers.
* gdb.cp/inherit.exp (test_print_mi_member_types): Remove KFAILs for
gdb/2092.
* gdb.cp/member-ptr.exp: Search for a comment instead of a
statement. Enable for GCC. Update expected output for some tests
and add new tests. Remove obsolete GCC KFAILs. Allow GCC's class
layout.
* gdb.cp/member-ptr.cc (Padding, Padding::vspacer, Base, Base::get_x)
(Base::vget_base, Left, Left::vget, Right, Right::vget, Diamond)
(Diamond::vget_base): New.
(main): Add new tests.
* gdb.cp/printmethod.exp: Update expected output for member functions.
* gdb.cp/virtfunc.exp (test_virtual_calls): Add a KFAIL for
print pEe->D::vg().
2007-01-04 02:05:45 +08:00
|
|
|
# If the elements of C++ vtables are in-place function descriptors rather
|
|
|
|
# than normal function pointers (which may point to code or a descriptor),
|
|
|
|
# set this to one.
|
2007-10-19 20:34:38 +08:00
|
|
|
v:int:vtable_function_descriptors:::0:0::0
|
* NEWS: Mention pointer to member improvements.
* Makefile.in (gnu-v3-abi.o): Delete special rule.
(eval.o, gnu-v3-abi.o, ia64-tdep.o): Update.
* ada-valprint.c (ada_print_scalar): Update for new type codes.
* c-typeprint.c (c_print_type): Update for new type codes.
(c_type_print_varspec_prefix, c_type_print_varspec_suffix)
(c_type_print_base): Likewise.
(c_type_print_args): Rewrite.
* c-valprint.c (c_val_print): Update for new type codes. Remove
support for references to members. Treat methods like functions.
* cp-abi.c (cplus_print_method_ptr, cplus_method_ptr_size)
(cplus_make_method_ptr, cplus_method_ptr_to_value): New.
* cp-abi.h (cplus_print_method_ptr, cplus_method_ptr_size)
(cplus_make_method_ptr, cplus_method_ptr_to_value): New prototypes.
(struct cp_abi_ops): Add corresponding members.
* cp-valprint.c (cp_print_class_method): Delete.
(cp_find_class_member): New function.
(cp_print_class_member): Use it. Simplify support for bogus
member pointers.
* dwarf2read.c (quirk_gcc_member_function_pointer): Use
lookup_methodptr_type.
(read_tag_ptr_to_member_type): Likewise, and lookup_memberptr_type.
* eval.c (evaluate_subexp_standard): Implement EVAL_SKIP for
OP_SCOPE. Update call to value_aggregate_elt. Rewrite member
pointer support.
(evaluate_subexp_for_address): Handle OP_SCOPE explicitly. Handle
references returned by user defined operators.
* f-typeprint.c (f_print_type, f_type_print_varspec_prefix)
(f_type_print_varspec_suffix): Remove support for member pointers.
* gdbtypes.c (lookup_memberptr_type): Renamed from lookup_member_type
and adjusted.
(smash_to_memberptr_type): Likewise, from smash_to_member_type.
(lookup_methodptr_type): New.
(rank_one_type): Adjust for TYPE_CODE_MEMBERPTR.
(recursive_dump_type): Update for new types.
* gdbtypes.h (enum type_code): Replace TYPE_CODE_MEMBER with
TYPE_CODE_MEMBERPTR and TYPE_CODE_METHODPTR.
(lookup_memberptr_type, lookup_methodptr_type)
(smash_to_memberptr_type): New prototypes.
(smash_to_method_type): Formatting fix.
(lookup_member_type, smash_to_member_type): Delete prototypes.
* gnu-v3-abi.c (gnuv3_get_vtable, gnuv3_get_virtual_fn): New.
Do not rely on debug information for the vptr or the method's
enclosing type. Handle function descriptors for IA64.
(gnuv3_virtual_fn_field): Rewrite using the new functions.
(gnuv3_find_method_in, gnuv3_print_method_ptr)
(gnuv3_method_ptr_size, gnuv3_make_method_ptr)
(gnuv3_method_ptr_to_value): New.
(init_gnuv3_ops): Set new members of gnu_v3_abi_ops.
* hpread.c (hpread_type_lookup): Update for new types.
* infcall.c (value_arg_coerce): Likewise.
* m2-typeprint.c (m2_print_type): Remove explicit support
for member pointers.
* m2-valprint.c (m2_val_print): Likewise.
* p-typeprint.c (pascal_type_print_varspec_prefix)
(pascal_type_print_varspec_suffix, pascal_type_print_base): Likewise.
* p-valprint.c (pascal_val_print): Likewise.
(pascal_object_print_class_method, pascal_object_print_class_member):
Delete.
* p-lang.h (pascal_object_print_class_method)
(pascal_object_print_class_member): Delete prototypes.
* stabsread.c (read_type): Update for new types.
* typeprint.c (print_type_scalar): Likewise.
* valops.c (value_struct_elt_for_reference, value_namespace_elt)
(value_maybe_namespace_elt, value_aggregate_elt): Add want_address
argument. Construct a pointer to member if the address of a
function or data member is requested.
(value_cast_pointers): Don't modify the input value.
(value_cast): Adjust pointer to member handling for new types.
Allow null pointer to member constants. Don't modify the input
value.
(value_ind): Remove pointer to member check. Handle function
descriptors for function pointers.
(value_struct_elt, value_find_oload_method_list, check_field):
Remove pointer to member checks.
* value.c (unpack_long): Allow pointers to data members.
(value_from_longest): Allow member pointers.
* value.h (value_aggregate_elt): Add want_address.
* varobj.c (c_variable_editable): Remove check for members.
* gdbarch.sh: Add vtable_function_descriptors and vbit_in_delta.
* ia64-tdep.c (ia64_convert_from_func_ptr_addr): Handle descriptors
in virtual tables.
(ia64_gdbarch_init): Call set_gdbarch_vtable_function_descriptors.
* c-lang.h (cp_print_class_method): Delete prototype.
* arm-tdep.c (arm_gdbarch_init): Call set_gdbarch_vbit_in_delta.
* mips-tdep.c (mips_gdbarch_init): Likewise.
* gdbarch.c, gdbarch.h: Regenerated.
* gdb.cp/classes.exp (test_pointers_to_class_members): Update expected
output. Test the types of members and member pointers.
* gdb.cp/inherit.exp (test_print_mi_member_types): Remove KFAILs for
gdb/2092.
* gdb.cp/member-ptr.exp: Search for a comment instead of a
statement. Enable for GCC. Update expected output for some tests
and add new tests. Remove obsolete GCC KFAILs. Allow GCC's class
layout.
* gdb.cp/member-ptr.cc (Padding, Padding::vspacer, Base, Base::get_x)
(Base::vget_base, Left, Left::vget, Right, Right::vget, Diamond)
(Diamond::vget_base): New.
(main): Add new tests.
* gdb.cp/printmethod.exp: Update expected output for member functions.
* gdb.cp/virtfunc.exp (test_virtual_calls): Add a KFAIL for
print pEe->D::vg().
2007-01-04 02:05:45 +08:00
|
|
|
|
|
|
|
# Set if the least significant bit of the delta is used instead of the least
|
|
|
|
# significant bit of the pfn for pointers to virtual member functions.
|
2007-10-19 20:34:38 +08:00
|
|
|
v:int:vbit_in_delta:::0:0::0
|
2007-05-08 02:20:21 +08:00
|
|
|
|
|
|
|
# Advance PC to next instruction in order to skip a permanent breakpoint.
|
2007-10-19 20:34:38 +08:00
|
|
|
F:void:skip_permanent_breakpoint:struct regcache *regcache:regcache
|
2007-05-12 03:57:17 +08:00
|
|
|
|
Implement displaced stepping.
gdb/
* gdbarch.sh (max_insn_length): New 'variable'.
(displaced_step_copy, displaced_step_fixup)
(displaced_step_free_closure, displaced_step_location): New
functions.
(struct displaced_step_closure): Add forward declaration.
* gdbarch.c, gdbarch.h: Regenerated.
* arch-utils.c: #include "objfiles.h".
(simple_displaced_step_copy_insn)
(simple_displaced_step_free_closure)
(displaced_step_at_entry_point): New functions.
* arch-utils.h (simple_displaced_step_copy_insn)
(simple_displaced_step_free_closure)
(displaced_step_at_entry_point): New prototypes.
* i386-tdep.c (I386_MAX_INSN_LEN): Rename to...
(I386_MAX_MATCHED_INSN_LEN): ... this.
(i386_absolute_jmp_p, i386_absolute_call_p)
(i386_ret_p, i386_call_p, i386_breakpoint_p, i386_syscall_p)
(i386_displaced_step_fixup): New functions.
(struct i386_insn, i386_match_insn): Update.
(i386_gdbarch_init): Set gdbarch_max_insn_length.
* i386-tdep.h (I386_MAX_INSN_LEN): New.
(i386_displaced_step_fixup): New prototype.
* i386-linux-tdep.c (i386_linux_init_abi): Include "arch-utils.h".
Register gdbarch_displaced_step_copy,
gdbarch_displaced_step_fixup, gdbarch_displaced_step_free_closure,
and gdbarch_displaced_step_location functions.
* infrun.c (debug_displaced): New variable.
(show_debug_displaced): New function.
(struct displaced_step_request): New struct.
(displaced_step_request_queue, displaced_step_ptid)
(displaced_step_gdbarch, displaced_step_closure)
(displaced_step_original, displaced_step_copy)
(displaced_step_saved_copy, can_use_displaced_stepping): New
variables.
(show_can_use_displaced_stepping, use_displaced_stepping)
(displaced_step_clear, cleanup_displaced_step_closure)
(displaced_step_dump_bytes, displaced_step_prepare)
(displaced_step_clear_cleanup, write_memory_ptid)
(displaced_step_fixup): New functions.
(resume): Call displaced_step_prepare.
(proceed): Call read_pc once, and remember the value. If using
displaced stepping, don't remove breakpoints.
(handle_inferior_event): Call displaced_step_fixup. Add some
debugging output. When we try to step over a breakpoint, but get
a signal to deliver to the thread instead, ensure the step-resume
breakpoint is actually inserted. If a thread hop is needed, and
displaced stepping is enabled, don't remove breakpoints.
(init_wait_for_inferior): Call displaced_step_clear.
(_initialize_infrun): Add "set debug displaced" command. Add
"maint set can-use-displaced-stepping" command. Clear
displaced_step_ptid.
* inferior.h (debug_displaced): Declare variable.
(displaced_step_dump_bytes): Declare function.
* Makefile.in (arch-utils.o, i386-linux-tdep.o): Update
dependencies.
gdb/testsuite/
* gdb.asm/asmsrc1.s: Add scratch space.
gdb/doc/
* gdb.texinfo (Debugging Output): Document "set/show debug
displaced".
(Maintenance Commands): Document "maint set/show
can-use-displaced-stepping".
2008-05-03 00:49:54 +08:00
|
|
|
# The maximum length of an instruction on this architecture.
|
|
|
|
V:ULONGEST:max_insn_length:::0:0
|
|
|
|
|
|
|
|
# Copy the instruction at FROM to TO, and make any adjustments
|
|
|
|
# necessary to single-step it at that address.
|
|
|
|
#
|
|
|
|
# REGS holds the state the thread's registers will have before
|
|
|
|
# executing the copied instruction; the PC in REGS will refer to FROM,
|
|
|
|
# not the copy at TO. The caller should update it to point at TO later.
|
|
|
|
#
|
|
|
|
# Return a pointer to data of the architecture's choice to be passed
|
|
|
|
# to gdbarch_displaced_step_fixup. Or, return NULL to indicate that
|
|
|
|
# the instruction's effects have been completely simulated, with the
|
|
|
|
# resulting state written back to REGS.
|
|
|
|
#
|
|
|
|
# For a general explanation of displaced stepping and how GDB uses it,
|
|
|
|
# see the comments in infrun.c.
|
|
|
|
#
|
|
|
|
# The TO area is only guaranteed to have space for
|
|
|
|
# gdbarch_max_insn_length (arch) bytes, so this function must not
|
|
|
|
# write more bytes than that to that area.
|
|
|
|
#
|
|
|
|
# If you do not provide this function, GDB assumes that the
|
|
|
|
# architecture does not support displaced stepping.
|
|
|
|
#
|
|
|
|
# If your architecture doesn't need to adjust instructions before
|
|
|
|
# single-stepping them, consider using simple_displaced_step_copy_insn
|
|
|
|
# here.
|
|
|
|
M:struct displaced_step_closure *:displaced_step_copy_insn:CORE_ADDR from, CORE_ADDR to, struct regcache *regs:from, to, regs
|
|
|
|
|
2009-09-29 08:53:04 +08:00
|
|
|
# Return true if GDB should use hardware single-stepping to execute
|
|
|
|
# the displaced instruction identified by CLOSURE. If false,
|
|
|
|
# GDB will simply restart execution at the displaced instruction
|
|
|
|
# location, and it is up to the target to ensure GDB will receive
|
|
|
|
# control again (e.g. by placing a software breakpoint instruction
|
|
|
|
# into the displaced instruction buffer).
|
|
|
|
#
|
|
|
|
# The default implementation returns false on all targets that
|
|
|
|
# provide a gdbarch_software_single_step routine, and true otherwise.
|
|
|
|
m:int:displaced_step_hw_singlestep:struct displaced_step_closure *closure:closure::default_displaced_step_hw_singlestep::0
|
|
|
|
|
Implement displaced stepping.
gdb/
* gdbarch.sh (max_insn_length): New 'variable'.
(displaced_step_copy, displaced_step_fixup)
(displaced_step_free_closure, displaced_step_location): New
functions.
(struct displaced_step_closure): Add forward declaration.
* gdbarch.c, gdbarch.h: Regenerated.
* arch-utils.c: #include "objfiles.h".
(simple_displaced_step_copy_insn)
(simple_displaced_step_free_closure)
(displaced_step_at_entry_point): New functions.
* arch-utils.h (simple_displaced_step_copy_insn)
(simple_displaced_step_free_closure)
(displaced_step_at_entry_point): New prototypes.
* i386-tdep.c (I386_MAX_INSN_LEN): Rename to...
(I386_MAX_MATCHED_INSN_LEN): ... this.
(i386_absolute_jmp_p, i386_absolute_call_p)
(i386_ret_p, i386_call_p, i386_breakpoint_p, i386_syscall_p)
(i386_displaced_step_fixup): New functions.
(struct i386_insn, i386_match_insn): Update.
(i386_gdbarch_init): Set gdbarch_max_insn_length.
* i386-tdep.h (I386_MAX_INSN_LEN): New.
(i386_displaced_step_fixup): New prototype.
* i386-linux-tdep.c (i386_linux_init_abi): Include "arch-utils.h".
Register gdbarch_displaced_step_copy,
gdbarch_displaced_step_fixup, gdbarch_displaced_step_free_closure,
and gdbarch_displaced_step_location functions.
* infrun.c (debug_displaced): New variable.
(show_debug_displaced): New function.
(struct displaced_step_request): New struct.
(displaced_step_request_queue, displaced_step_ptid)
(displaced_step_gdbarch, displaced_step_closure)
(displaced_step_original, displaced_step_copy)
(displaced_step_saved_copy, can_use_displaced_stepping): New
variables.
(show_can_use_displaced_stepping, use_displaced_stepping)
(displaced_step_clear, cleanup_displaced_step_closure)
(displaced_step_dump_bytes, displaced_step_prepare)
(displaced_step_clear_cleanup, write_memory_ptid)
(displaced_step_fixup): New functions.
(resume): Call displaced_step_prepare.
(proceed): Call read_pc once, and remember the value. If using
displaced stepping, don't remove breakpoints.
(handle_inferior_event): Call displaced_step_fixup. Add some
debugging output. When we try to step over a breakpoint, but get
a signal to deliver to the thread instead, ensure the step-resume
breakpoint is actually inserted. If a thread hop is needed, and
displaced stepping is enabled, don't remove breakpoints.
(init_wait_for_inferior): Call displaced_step_clear.
(_initialize_infrun): Add "set debug displaced" command. Add
"maint set can-use-displaced-stepping" command. Clear
displaced_step_ptid.
* inferior.h (debug_displaced): Declare variable.
(displaced_step_dump_bytes): Declare function.
* Makefile.in (arch-utils.o, i386-linux-tdep.o): Update
dependencies.
gdb/testsuite/
* gdb.asm/asmsrc1.s: Add scratch space.
gdb/doc/
* gdb.texinfo (Debugging Output): Document "set/show debug
displaced".
(Maintenance Commands): Document "maint set/show
can-use-displaced-stepping".
2008-05-03 00:49:54 +08:00
|
|
|
# Fix up the state resulting from successfully single-stepping a
|
|
|
|
# displaced instruction, to give the result we would have gotten from
|
|
|
|
# stepping the instruction in its original location.
|
|
|
|
#
|
|
|
|
# REGS is the register state resulting from single-stepping the
|
|
|
|
# displaced instruction.
|
|
|
|
#
|
|
|
|
# CLOSURE is the result from the matching call to
|
|
|
|
# gdbarch_displaced_step_copy_insn.
|
|
|
|
#
|
|
|
|
# If you provide gdbarch_displaced_step_copy_insn.but not this
|
|
|
|
# function, then GDB assumes that no fixup is needed after
|
|
|
|
# single-stepping the instruction.
|
|
|
|
#
|
|
|
|
# For a general explanation of displaced stepping and how GDB uses it,
|
|
|
|
# see the comments in infrun.c.
|
|
|
|
M:void:displaced_step_fixup:struct displaced_step_closure *closure, CORE_ADDR from, CORE_ADDR to, struct regcache *regs:closure, from, to, regs::NULL
|
|
|
|
|
|
|
|
# Free a closure returned by gdbarch_displaced_step_copy_insn.
|
|
|
|
#
|
|
|
|
# If you provide gdbarch_displaced_step_copy_insn, you must provide
|
|
|
|
# this function as well.
|
|
|
|
#
|
|
|
|
# If your architecture uses closures that don't need to be freed, then
|
|
|
|
# you can use simple_displaced_step_free_closure here.
|
|
|
|
#
|
|
|
|
# For a general explanation of displaced stepping and how GDB uses it,
|
|
|
|
# see the comments in infrun.c.
|
|
|
|
m:void:displaced_step_free_closure:struct displaced_step_closure *closure:closure::NULL::(! gdbarch->displaced_step_free_closure) != (! gdbarch->displaced_step_copy_insn)
|
|
|
|
|
|
|
|
# Return the address of an appropriate place to put displaced
|
|
|
|
# instructions while we step over them. There need only be one such
|
|
|
|
# place, since we're only stepping one thread over a breakpoint at a
|
|
|
|
# time.
|
|
|
|
#
|
|
|
|
# For a general explanation of displaced stepping and how GDB uses it,
|
|
|
|
# see the comments in infrun.c.
|
|
|
|
m:CORE_ADDR:displaced_step_location:void:::NULL::(! gdbarch->displaced_step_location) != (! gdbarch->displaced_step_copy_insn)
|
|
|
|
|
2010-05-27 02:19:28 +08:00
|
|
|
# Relocate an instruction to execute at a different address. OLDLOC
|
|
|
|
# is the address in the inferior memory where the instruction to
|
|
|
|
# relocate is currently at. On input, TO points to the destination
|
|
|
|
# where we want the instruction to be copied (and possibly adjusted)
|
|
|
|
# to. On output, it points to one past the end of the resulting
|
|
|
|
# instruction(s). The effect of executing the instruction at TO shall
|
|
|
|
# be the same as if executing it at FROM. For example, call
|
|
|
|
# instructions that implicitly push the return address on the stack
|
|
|
|
# should be adjusted to return to the instruction after OLDLOC;
|
|
|
|
# relative branches, and other PC-relative instructions need the
|
|
|
|
# offset adjusted; etc.
|
|
|
|
M:void:relocate_instruction:CORE_ADDR *to, CORE_ADDR from:to, from::NULL
|
|
|
|
|
2007-05-12 03:57:17 +08:00
|
|
|
# Refresh overlay mapped state for section OSECT.
|
2007-10-19 20:34:38 +08:00
|
|
|
F:void:overlay_update:struct obj_section *osect:osect
|
2007-09-11 05:14:11 +08:00
|
|
|
|
2007-10-19 20:34:38 +08:00
|
|
|
M:const struct target_desc *:core_read_description:struct target_ops *target, bfd *abfd:target, abfd
|
2007-10-19 20:23:21 +08:00
|
|
|
|
|
|
|
# Handle special encoding of static variables in stabs debug info.
|
2007-10-19 20:34:38 +08:00
|
|
|
F:char *:static_transform_name:char *name:name
|
2007-10-19 20:26:35 +08:00
|
|
|
# Set if the address in N_SO or N_FUN stabs may be zero.
|
2007-10-19 20:34:38 +08:00
|
|
|
v:int:sofun_address_maybe_missing:::0:0::0
|
2008-05-02 03:31:52 +08:00
|
|
|
|
2009-04-30 10:52:16 +08:00
|
|
|
# Parse the instruction at ADDR storing in the record execution log
|
|
|
|
# the registers REGCACHE and memory ranges that will be affected when
|
|
|
|
# the instruction executes, along with their current values.
|
|
|
|
# Return -1 if something goes wrong, 0 otherwise.
|
|
|
|
M:int:process_record:struct regcache *regcache, CORE_ADDR addr:regcache, addr
|
|
|
|
|
2009-09-21 13:52:06 +08:00
|
|
|
# Save process state after a signal.
|
|
|
|
# Return -1 if something goes wrong, 0 otherwise.
|
|
|
|
M:int:process_record_signal:struct regcache *regcache, enum target_signal signal:regcache, signal
|
|
|
|
|
2008-05-02 03:31:52 +08:00
|
|
|
# Signal translation: translate inferior's signal (host's) number into
|
|
|
|
# GDB's representation.
|
|
|
|
m:enum target_signal:target_signal_from_host:int signo:signo::default_target_signal_from_host::0
|
|
|
|
# Signal translation: translate GDB's signal number into inferior's host
|
|
|
|
# signal number.
|
|
|
|
m:int:target_signal_to_host:enum target_signal ts:ts::default_target_signal_to_host::0
|
2008-05-03 04:38:16 +08:00
|
|
|
|
2009-02-07 06:59:01 +08:00
|
|
|
# Extra signal info inspection.
|
|
|
|
#
|
|
|
|
# Return a type suitable to inspect extra signal information.
|
|
|
|
M:struct type *:get_siginfo_type:void:
|
|
|
|
|
2008-05-03 04:38:16 +08:00
|
|
|
# Record architecture-specific information from the symbol table.
|
|
|
|
M:void:record_special_symbol:struct objfile *objfile, asymbol *sym:objfile, sym
|
* remote.c (remote_start_remote): If the solib list is global,
fetch libraries and insert breakpoints after connecting.
* infcmd.c (post_create_inferior): If the solist is shared between
inferiors, no need to refetch it on every new inferior.
(detach_command): If the shared library list is shared between
inferiors, then don't clear it on every inferior detach.
* gdbarch.sh (has_global_solist): New.
* i386-dicos-tdep.c (i386_dicos_init_abi): Set
gdbarch_has_global_solist.
* target.c (target_pre_inferior): If the shared library list is
shared between inferiors, then don't clear it here, neither
invalidate the memory regions or clear the target description.
(target_detach): If the shared library list is shared between
inferiors, then don't remove breakpoints from the target here.
(target_disconnect): Comment.
* solib.c (update_solib_list): Check for null_ptid.
* breakpoint.c (insert_breakpoints, update_global_location_list):
If the shared library list is shared between inferiors, insert
breakpoints even if there's no execution.
(breakpoint_init_inferior): If the shared library list is shared
between inferiors, don't delete breakpoints or mark them
uninserted here.
* gdbarch.c, gdbarch.h: Regenerate.
2008-11-03 22:01:27 +08:00
|
|
|
|
2009-09-15 11:30:08 +08:00
|
|
|
# Function for the 'catch syscall' feature.
|
|
|
|
|
|
|
|
# Get architecture-specific system calls information from registers.
|
|
|
|
M:LONGEST:get_syscall_number:ptid_t ptid:ptid
|
|
|
|
|
* remote.c (remote_start_remote): If the solib list is global,
fetch libraries and insert breakpoints after connecting.
* infcmd.c (post_create_inferior): If the solist is shared between
inferiors, no need to refetch it on every new inferior.
(detach_command): If the shared library list is shared between
inferiors, then don't clear it on every inferior detach.
* gdbarch.sh (has_global_solist): New.
* i386-dicos-tdep.c (i386_dicos_init_abi): Set
gdbarch_has_global_solist.
* target.c (target_pre_inferior): If the shared library list is
shared between inferiors, then don't clear it here, neither
invalidate the memory regions or clear the target description.
(target_detach): If the shared library list is shared between
inferiors, then don't remove breakpoints from the target here.
(target_disconnect): Comment.
* solib.c (update_solib_list): Check for null_ptid.
* breakpoint.c (insert_breakpoints, update_global_location_list):
If the shared library list is shared between inferiors, insert
breakpoints even if there's no execution.
(breakpoint_init_inferior): If the shared library list is shared
between inferiors, don't delete breakpoints or mark them
uninserted here.
* gdbarch.c, gdbarch.h: Regenerate.
2008-11-03 22:01:27 +08:00
|
|
|
# True if the list of shared libraries is one and only for all
|
|
|
|
# processes, as opposed to a list of shared libraries per inferior.
|
2009-05-19 08:23:49 +08:00
|
|
|
# This usually means that all processes, although may or may not share
|
|
|
|
# an address space, will see the same set of symbols at the same
|
|
|
|
# addresses.
|
* remote.c (remote_start_remote): If the solib list is global,
fetch libraries and insert breakpoints after connecting.
* infcmd.c (post_create_inferior): If the solist is shared between
inferiors, no need to refetch it on every new inferior.
(detach_command): If the shared library list is shared between
inferiors, then don't clear it on every inferior detach.
* gdbarch.sh (has_global_solist): New.
* i386-dicos-tdep.c (i386_dicos_init_abi): Set
gdbarch_has_global_solist.
* target.c (target_pre_inferior): If the shared library list is
shared between inferiors, then don't clear it here, neither
invalidate the memory regions or clear the target description.
(target_detach): If the shared library list is shared between
inferiors, then don't remove breakpoints from the target here.
(target_disconnect): Comment.
* solib.c (update_solib_list): Check for null_ptid.
* breakpoint.c (insert_breakpoints, update_global_location_list):
If the shared library list is shared between inferiors, insert
breakpoints even if there's no execution.
(breakpoint_init_inferior): If the shared library list is shared
between inferiors, don't delete breakpoints or mark them
uninserted here.
* gdbarch.c, gdbarch.h: Regenerate.
2008-11-03 22:01:27 +08:00
|
|
|
v:int:has_global_solist:::0:0::0
|
2009-05-19 08:23:49 +08:00
|
|
|
|
|
|
|
# On some targets, even though each inferior has its own private
|
|
|
|
# address space, the debug interface takes care of making breakpoints
|
|
|
|
# visible to all address spaces automatically. For such cases,
|
|
|
|
# this property should be set to true.
|
|
|
|
v:int:has_global_breakpoints:::0:0::0
|
2009-10-19 Pedro Alves <pedro@codesourcery.com>
Stan Shebs <stan@codesourcery.com>
Add base multi-executable/process support to GDB.
gdb/
* Makefile.in (SFILES): Add progspace.c.
(COMMON_OBS): Add progspace.o.
* progspace.h: New.
* progspace.c: New.
* breakpoint.h (struct bp_target_info) <placed_address_space>: New
field.
(struct bp_location) <pspace>: New field.
(struct breakpoint) <pspace>: New field.
(bpstat_stop_status, breakpoint_here_p)
(moribund_breakpoint_here_p, breakpoint_inserted_here_p)
(regular_breakpoint_inserted_here_p)
(software_breakpoint_inserted_here_p, breakpoint_thread_match)
(set_default_breakpoint): Adjust prototypes.
(remove_breakpoints_pid, breakpoint_program_space_exit): Declare.
(insert_single_step_breakpoint, deprecated_insert_raw_breakpoint):
Adjust prototypes.
* breakpoint.c (executing_startup): Delete.
(default_breakpoint_sspace): New.
(breakpoint_restore_shadows): Skip if the address space doesn't
match.
(update_watchpoint): Record the frame's program space in the
breakpoint location.
(insert_bp_location): Record the address space in target_info.
Adjust to pass the symbol space to solib_name_from_address.
(breakpoint_program_space_exit): New.
(insert_breakpoint_locations): Switch the symbol space and thread
when inserting breakpoints. Don't insert breakpoints in a vfork
parent waiting for vfork done if we're not attached to the vfork
child.
(remove_breakpoints_pid): New.
(reattach_breakpoints): Switch to a thread of PID. Ignore
breakpoints of other symbol spaces.
(create_internal_breakpoint): Store the symbol space in the sal.
(create_longjmp_master_breakpoint): Iterate over all symbol
spaces.
(update_breakpoints_after_exec): Ignore breakpoints for other
symbol spaces.
(remove_breakpoint): Rename to ...
(remove_breakpoint_1): ... this. Pass the breakpoints symbol
space to solib_name_from_address.
(remove_breakpoint): New.
(mark_breakpoints_out): Ignore breakpoints from other symbol
spaces.
(breakpoint_init_inferior): Ditto.
(breakpoint_here_p): Add an address space argument and adjust to
use breakpoint_address_match.
(moribund_breakpoint_here_p): Ditto.
(regular_breakpoint_inserted_here_p): Ditto.
(breakpoint_inserted_here_p): Ditto.
(software_breakpoint_inserted_here_p): Ditto.
(breakpoint_thread_match): Ditto.
(bpstat_check_location): Ditto.
(bpstat_stop_status): Ditto.
(print_breakpoint_location): If there's a location to print,
switch the current symbol space.
(print_one_breakpoint_location): Add `allflag' argument.
(print_one_breakpoint): Ditto. Adjust.
(do_captured_breakpoint_query): Adjust.
(breakpoint_1): Adjust.
(breakpoint_has_pc): Also match the symbol space.
(describe_other_breakpoints): Add a symbol space argument and
adjust.
(set_default_breakpoint): Add a symbol space argument. Set
default_breakpoint_sspace.
(breakpoint_address_match): New.
(check_duplicates_for): Add an address space argument, and adjust.
(set_raw_breakpoint): Record the symbol space in the location and
in the breakpoint.
(set_longjmp_breakpoint): Skip longjmp master breakpoints from
other symbol spaces.
(remove_thread_event_breakpoints, remove_solib_event_breakpoints)
(disable_breakpoints_in_shlibs): Skip breakpoints from other
symbol spaces.
(disable_breakpoints_in_unloaded_shlib): Match symbol spaces.
(create_catchpoint): Set the symbol space in the sal.
(disable_breakpoints_before_startup): Skip breakpoints from other
symbol spaces. Set executing_startup in the current symbol space.
(enable_breakpoints_after_startup): Clear executing_startup in the
current symbol space. Skip breakpoints from other symbol spaces.
(clone_momentary_breakpoint): Also copy the symbol space.
(add_location_to_breakpoint): Set the location's symbol space.
(bp_loc_is_permanent): Switch thread and symbol space.
(create_breakpoint): Adjust.
(expand_line_sal_maybe): Expand comment to mention symbol spaces.
Switch thread and symbol space when reading memory.
(parse_breakpoint_sals): Set the symbol space in the sal.
(break_command_really): Ditto.
(skip_prologue_sal): Switch and space.
(resolve_sal_pc): Ditto.
(watch_command_1): Record the symbol space in the sal.
(create_ada_exception_breakpoint): Adjust.
(clear_command): Adjust. Match symbol spaces.
(update_global_location_list): Use breakpoint_address_match.
(breakpoint_re_set_one): Switch thread and space.
(breakpoint_re_set): Save symbol space.
(breakpoint_re_set_thread): Also reset the symbol space.
(deprecated_insert_raw_breakpoint): Add an address space argument.
Adjust.
(insert_single_step_breakpoint): Ditto.
(single_step_breakpoint_inserted_here_p): Ditto.
(clear_syscall_counts): New.
(_initialize_breakpoint): Install it as inferior_exit observer.
* exec.h: Include "progspace.h".
(exec_bfd, exec_bfd_mtime): New defines.
(exec_close): Declare.
* exec.c: Include "gdbthread.h" and "progspace.h".
(exec_bfd, exec_bfd_mtime, current_target_sections_1): Delete.
(using_exec_ops): New.
(exec_close_1): Rename to exec_close, and make public.
(exec_close): Rename to exec_close_1, and adjust all callers. Add
description. Remove target sections and close executables from
all program spaces.
(exec_file_attach): Add comment.
(add_target_sections): Check on `using_exec_ops' to check if the
target should be pushed.
(remove_target_sections): Only unpush the target if there are no
more target sections in any symbol space.
* gdbcore.h: Include "exec.h".
(exec_bfd, exec_bfd_mtime): Remove declarations.
* frame.h (get_frame_program_space, get_frame_address_space)
(frame_unwind_program_space): Declare.
* frame.c (struct frame_info) <pspace, aspace>: New fields.
(create_sentinel_frame): Add program space argument. Set the
pspace and aspace fields of the frame object.
(get_current_frame, create_new_frame): Adjust.
(get_frame_program_space): New.
(frame_unwind_program_space): New.
(get_frame_address_space): New.
* stack.c (print_frame_info): Adjust.
(print_frame): Use the frame's program space.
* gdbthread.h (any_live_thread_of_process): Declare.
* thread.c (any_live_thread_of_process): New.
(switch_to_thread): Switch the program space as well.
(restore_selected_frame): Don't warn if trying to restore frame
level 0.
* inferior.h: Include "progspace.h".
(detach_fork): Declare.
(struct inferior) <removable, aspace, pspace>
<vfork_parent, vfork_child, pending_detach>
<waiting_for_vfork_done>: New fields.
<terminal_info>: Remove field.
<data, num_data>: New fields.
(register_inferior_data, register_inferior_data_with_cleanup)
(clear_inferior_data, set_inferior_data, inferior_data): Declare.
(exit_inferior, exit_inferior_silent, exit_inferior_num_silent)
(inferior_appeared): Declare.
(find_inferior_pid): Typo.
(find_inferior_id, find_inferior_for_program_space): Declare.
(set_current_inferior, save_current_inferior, prune_inferiors)
(number_of_inferiors): Declare.
(inferior_list): Declare.
* inferior.c: Include "gdbcore.h" and "symfile.h".
(inferior_list): Make public.
(delete_inferior_1): Always delete thread silently.
(find_inferior_id): Make public.
(current_inferior_): New.
(current_inferior): Use it.
(set_current_inferior): New.
(restore_inferior): New.
(save_current_inferior): New.
(free_inferior): Free the per-inferior data.
(add_inferior_silent): Allocate per-inferior data.
Call inferior_appeared.
(delete_threads_of_inferior): New.
(delete_inferior_1): Adjust interface to take an inferior pointer.
(delete_inferior): Adjust.
(delete_inferior_silent): Adjust.
(exit_inferior_1): New.
(exit_inferior): New.
(exit_inferior_silent): New.
(exit_inferior_num_silent): New.
(detach_inferior): Adjust.
(inferior_appeared): New.
(discard_all_inferiors): Adjust.
(find_inferior_id): Make public. Assert pid is not zero.
(find_inferior_for_program_space): New.
(have_inferiors): Check if we have any inferior with pid not zero.
(have_live_inferiors): Go over all pushed targets looking for
process_stratum.
(prune_inferiors): New.
(number_of_inferiors): New.
(print_inferior): Add executable column. Print vfork parent/child
relationships.
(inferior_command): Adjust to cope with not running inferiors.
(remove_inferior_command): New.
(add_inferior_command): New.
(clone_inferior_command): New.
(struct inferior_data): New.
(struct inferior_data_registration): New.
(struct inferior_data_registry): New.
(inferior_data_registry): New.
(register_inferior_data_with_cleanup): New.
(register_inferior_data): New.
(inferior_alloc_data): New.
(inferior_free_data): New.
(clear_inferior_data): New.
(set_inferior_data): New.
(inferior_data): New.
(initialize_inferiors): New.
(_initialize_inferiors): Register "add-inferior",
"remove-inferior" and "clone-inferior" commands.
* objfiles.h: Include "progspace.h".
(struct objfile) <pspace>: New field.
(symfile_objfile, object_files): Don't declare.
(ALL_PSPACE_OBJFILES): New.
(ALL_PSPACE_OBJFILES_SAFE): New.
(ALL_OBJFILES, ALL_OBJFILES_SAFE): Adjust.
(ALL_PSPACE_SYMTABS): New.
(ALL_PRIMARY_SYMTABS): Adjust.
(ALL_PSPACE_PRIMARY_SYMTABS): New.
(ALL_PSYMTABS): Adjust.
(ALL_PSPACE_PSYMTABS): New.
* objfiles.c (object_files, symfile_objfile): Delete.
(struct objfile_sspace_info): New.
(objfiles_pspace_data): New.
(objfiles_pspace_data_cleanup): New.
(get_objfile_pspace_data): New.
(objfiles_changed_p): Delete.
(allocate_objfile): Set the objfile's program space. Adjust to
reference objfiles_changed_p in pspace data.
(free_objfile): Adjust to reference objfiles_changed_p in pspace
data.
(objfile_relocate): Ditto.
(update_section_map): Add pspace argument. Adjust to iterate over
objfiles in the passed in pspace.
(find_pc_section): Delete sections and num_sections statics.
Adjust to refer to program space's objfiles_changed_p. Adjust to
refer to sections and num_sections store in the objfile's pspace
data.
(objfiles_changed): Adjust to reference objfiles_changed_p in
pspace data.
(_initialize_objfiles): New.
* linespec.c (decode_all_digits, decode_dollar): Set the sal's
program space.
* source.c (current_source_pspace): New.
(get_current_source_symtab_and_line): Set the sal's program space.
(set_current_source_symtab_and_line): Set current_source_pspace.
(select_source_symtab): Ditto. Use ALL_OBJFILES.
(forget_cached_source_info): Iterate over all program spaces.
* symfile.c (clear_symtab_users): Adjust.
* symmisc.c (print_symbol_bcache_statistics): Iterate over all
program spaces.
(print_objfile_statistics): Ditto.
(maintenance_print_msymbols): Ditto.
(maintenance_print_objfiles): Ditto.
(maintenance_info_symtabs): Ditto.
(maintenance_info_psymtabs): Ditto.
* symtab.h (SYMTAB_PSPACE): New.
(struct symtab_and_line) <pspace>: New field.
* symtab.c (init_sal): Clear the sal's program space.
(find_pc_sect_symtab): Set the sal's program space. Switch thread
and space.
(append_expanded_sal): Add program space argument. Iterate over
all program spaces.
(expand_line_sal): Iterate over all program spaces. Switch
program space.
* target.h (enum target_waitkind) <TARGET_WAITKIND_VFORK_DONE>: New.
(struct target_ops) <to_thread_address_space>: New field.
(target_thread_address_space): Define.
* target.c (target_detach): Only remove breakpoints from the
inferior we're detaching.
(target_thread_address_space): New.
* defs.h (initialize_progspace): Declare.
* top.c (gdb_init): Call it.
* solist.h (struct so_list) <sspace>: New field.
* solib.h (struct program_space): Forward declare.
(solib_name_from_address): Adjust prototype.
* solib.c (so_list_head): Replace with a macro referencing the
program space.
(update_solib_list): Set the so's program space.
(solib_name_from_address): Add a program space argument and adjust.
* solib-svr4.c (struct svr4_info) <pid>: Delete field.
<interp_text_sect_low, interp_text_sect_high, interp_plt_sect_low>
<interp_plt_sect_high>: New fields.
(svr4_info_p, svr4_info): Delete.
(solib_svr4_sspace_data): New.
(get_svr4_info): Rewrite.
(svr4_sspace_data_cleanup): New.
(open_symbol_file_object): Adjust.
(svr4_default_sos): Adjust.
(svr4_fetch_objfile_link_map): Adjust.
(interp_text_sect_low, interp_text_sect_high, interp_plt_sect_low)
(interp_plt_sect_high): Delete.
(svr4_in_dynsym_resolve_code): Adjust.
(enable_break): Adjust.
(svr4_clear_solib): Revert bit that removed the svr4_info here,
and reinstate clearing debug_base, debug_loader_offset_p,
debug_loader_offset and debug_loader_name.
(_initialize_svr4_solib): Register solib_svr4_pspace_data. Don't
install an inferior_exit observer anymore.
* printcmd.c (struct display) <pspace>: New field.
(display_command): Set the display's sspace.
(do_one_display): Match the display's sspace.
(display_uses_solib_p): Ditto.
* linux-fork.c (detach_fork): Moved to infrun.c.
(_initialize_linux_fork): Moved "detach-on-fork" command to
infrun.c.
* infrun.c (detach_fork): Moved from linux-fork.c.
(proceed_after_vfork_done): New.
(handle_vfork_child_exec_or_exit): New.
(follow_exec_mode_replace, follow_exec_mode_keep)
(follow_exec_mode_names, follow_exec_mode_string)
(show_follow_exec_mode_string): New.
(follow_exec): New. Reinstate the mark_breakpoints_out call.
Remove shared libraries before attaching new executable. If user
wants to keep the inferior, keep it.
(displaced_step_fixup): Adjust to pass an address space to the
breakpoints module.
(resume): Ditto.
(clear_proceed_status): In all-stop mode, always clear the proceed
status of all threads.
(prepare_to_proceed): Adjust to pass an address space to the
breakpoints module.
(proceed): Ditto.
(adjust_pc_after_break): Ditto.
(handle_inferior_event): When handling a process exit, switch the
program space to the inferior's that had exited. Call
handle_vfork_child_exec_or_exit. Adjust to pass an address space
to the breakpoints module. In non-stop mode, when following a
fork and detach-fork is off, also resume the other branch. Handle
TARGET_WAITKIND_VFORK_DONE. Set the program space in sals.
(normal_stop): Prune inferiors.
(_initialize_infrun): Install the new "follow-exec-mode" command.
"detach-on-fork" moved here.
* regcache.h (get_regcache_aspace): Declare.
* regcache.c (struct regcache) <aspace>: New field.
(regcache_xmalloc): Clear the aspace.
(get_regcache_aspace): New.
(regcache_cpy): Copy the aspace field.
(regcache_cpy_no_passthrough): Ditto.
(get_thread_regcache): Fetch the thread's address space from the
target, and store it in the regcache.
* infcall.c (call_function_by_hand): Set the sal's pspace.
* arch-utils.c (default_has_shared_address_space): New.
* arch-utils.h (default_has_shared_address_space): Declare.
* gdbarch.sh (has_shared_address_space): New.
* gdbarch.h, gdbarch.c: Regenerate.
* linux-tdep.c: Include auxv.h, target.h, elf/common.h.
(linux_has_shared_address_space): New.
(_initialize_linux_tdep): Declare.
* arm-tdep.c (arm_software_single_step): Pass the frame's address
space to insert_single_step_breakpoint.
* arm-linux-tdep.c (arm_linux_software_single_step): Pass the
frame's pspace to breakpoint functions.
* cris-tdep.c (crisv32_single_step_through_delay): Ditto.
(cris_software_single_step): Ditto.
* mips-tdep.c (deal_with_atomic_sequence): Add frame argument.
Pass the frame's pspace to breakpoint functions.
(mips_software_single_step): Adjust.
(mips_single_step_through_delay): Adjust.
* rs6000-aix-tdep.c (rs6000_software_single_step): Adjust.
* rs6000-tdep.c (ppc_deal_with_atomic_sequence): Adjust.
* solib-irix.c (enable_break): Adjust to pass the current frame's
address space to breakpoint functions.
* sparc-tdep.c (sparc_software_single_step): Ditto.
* spu-tdep.c (spu_software_single_step): Ditto.
* alpha-tdep.c (alpha_software_single_step): Ditto.
* record.c (record_wait): Adjust to pass an address space to the
breakpoints module.
* fork-child.c (fork_inferior): Set the new inferior's program and
address spaces.
* inf-ptrace.c (inf_ptrace_follow_fork): Copy the parent's program
and address spaces.
(inf_ptrace_attach): Set the inferior's program and address spaces.
* linux-nat.c: Include "solib.h".
(linux_child_follow_fork): Manage parent and child's program and
address spaces. Clone the parent's program space if necessary.
Don't wait for the vfork to be done here. Refuse to resume if
following the vfork parent while leaving the child stopped.
(resume_callback): Don't resume a vfork parent.
(linux_nat_resume): Also check for pending events in the
lp->waitstatus field.
(linux_handle_extended_wait): Report TARGET_WAITKIND_VFORK_DONE
events to the core.
(stop_wait_callback): Don't wait for SIGSTOP on vfork parents.
(cancel_breakpoint): Adjust.
* linux-thread-db.c (thread_db_wait): Don't remove thread event
breakpoints here.
(thread_db_mourn_inferior): Don't mark breakpoints out here.
Remove thread event breakpoints after mourning.
* corelow.c: Include progspace.h.
(core_open): Set the inferior's program and address spaces.
* remote.c (remote_add_inferior): Set the new inferior's program
and address spaces.
(remote_start_remote): Update address spaces.
(extended_remote_create_inferior_1): Don't init the thread list if
we already debugging other inferiors.
* darwin-nat.c (darwin_attach): Set the new inferior's program and
address spaces.
* gnu-nat.c (gnu_attach): Ditto.
* go32-nat.c (go32_create_inferior): Ditto.
* inf-ttrace.c (inf_ttrace_follow_fork, inf_ttrace_attach): Ditto.
* monitor.c (monitor_open): Ditto.
* nto-procfs.c (procfs_attach, procfs_create_inferior): Ditto.
* procfs.c (do_attach): Ditto.
* windows-nat.c (do_initial_windows_stuff): Ditto.
* inflow.c (inferior_process_group)
(terminal_init_inferior_with_pgrp, terminal_inferior,
(terminal_ours_1, inflow_inferior_exit, copy_terminal_info)
(child_terminal_info, new_tty_postfork, set_sigint_trap): Adjust
to use per-inferior data instead of inferior->terminal_info.
(inflow_inferior_data): New.
(inflow_new_inferior): Delete.
(inflow_inferior_data_cleanup): New.
(get_inflow_inferior_data): New.
* mi/mi-interp.c (mi_new_inferior): Rename to...
(mi_inferior_appeared): ... this.
(mi_interpreter_init): Adjust.
* tui/tui-disasm.c: Include "progspace.h".
(tui_set_disassem_content): Pass an address space to
breakpoint_here_p.
* NEWS: Mention multi-program debugging support. Mention new
commands "add-inferior", "clone-inferior", "remove-inferior",
"maint info program-spaces", and new option "set
follow-exec-mode".
2009-10-19 Pedro Alves <pedro@codesourcery.com>
Stan Shebs <stan@codesourcery.com>
gdb/doc/
* observer.texi (new_inferior): Rename to...
(inferior_appeared): ... this.
2009-10-19 Pedro Alves <pedro@codesourcery.com>
Stan Shebs <stan@codesourcery.com>
gdb/testsuite/
* gdb.base/foll-vfork.exp: Adjust to spell out "follow-fork".
* gdb.base/foll-exec.exp: Adjust to expect a process id before
"Executing new program".
* gdb.base/foll-fork.exp: Adjust to spell out "follow-fork".
* gdb.base/multi-forks.exp: Ditto. Adjust to the inferior being
left listed after having been killed.
* gdb.base/attach.exp: Adjust to spell out "symbol-file".
* gdb.base/maint.exp: Adjust test.
* Makefile.in (ALL_SUBDIRS): Add gdb.multi.
* gdb.multi/Makefile.in: New.
* gdb.multi/base.exp: New.
* gdb.multi/goodbye.c: New.
* gdb.multi/hangout.c: New.
* gdb.multi/hello.c: New.
* gdb.multi/bkpt-multi-exec.c: New.
* gdb.multi/bkpt-multi-exec.exp: New.
* gdb.multi/crashme.c: New.
2009-10-19 Pedro Alves <pedro@codesourcery.com>
Stan Shebs <stan@codesourcery.com>
gdb/doc/
* gdb.texinfo (Inferiors): Rename node to ...
(Inferiors and Programs): ... this. Mention running multiple
programs in the same debug session.
<info inferiors>: Mention the new 'Executable' column if "info
inferiors". Update examples. Document the "add-inferior",
"clone-inferior", "remove-inferior" and "maint info
program-spaces" commands.
(Process): Rename node to...
(Forks): ... this. Document "set|show follow-exec-mode".
2009-10-19 17:51:43 +08:00
|
|
|
|
|
|
|
# True if inferiors share an address space (e.g., uClinux).
|
|
|
|
m:int:has_shared_address_space:void:::default_has_shared_address_space::0
|
2010-01-06 12:20:27 +08:00
|
|
|
|
|
|
|
# True if a fast tracepoint can be set at an address.
|
|
|
|
m:int:fast_tracepoint_valid_at:CORE_ADDR addr, int *isize, char **msg:addr, isize, msg::default_fast_tracepoint_valid_at::0
|
2010-02-04 00:43:03 +08:00
|
|
|
|
2010-03-06 04:18:19 +08:00
|
|
|
# Return the "auto" target charset.
|
|
|
|
f:const char *:auto_charset:void::default_auto_charset:default_auto_charset::0
|
|
|
|
# Return the "auto" target wide charset.
|
|
|
|
f:const char *:auto_wide_charset:void::default_auto_wide_charset:default_auto_wide_charset::0
|
2010-03-09 03:28:27 +08:00
|
|
|
|
|
|
|
# If non-empty, this is a file extension that will be opened in place
|
|
|
|
# of the file extension reported by the shared library list.
|
|
|
|
#
|
|
|
|
# This is most useful for toolchains that use a post-linker tool,
|
|
|
|
# where the names of the files run on the target differ in extension
|
|
|
|
# compared to the names of the files GDB should load for debug info.
|
|
|
|
v:const char *:solib_symbols_extension:::::::pstring (gdbarch->solib_symbols_extension)
|
2010-04-24 21:12:56 +08:00
|
|
|
|
|
|
|
# If true, the target OS has DOS-based file system semantics. That
|
|
|
|
# is, absolute paths include a drive name, and the backslash is
|
|
|
|
# considered a directory separator.
|
|
|
|
v:int:has_dos_based_file_system:::0:0::0
|
1999-08-31 09:14:27 +08:00
|
|
|
EOF
|
|
|
|
}
|
|
|
|
|
2000-05-30 09:29:26 +08:00
|
|
|
#
|
|
|
|
# The .log file
|
|
|
|
#
|
|
|
|
exec > new-gdbarch.log
|
2000-08-01 18:31:19 +08:00
|
|
|
function_list | while do_read
|
2000-05-30 09:29:26 +08:00
|
|
|
do
|
|
|
|
cat <<EOF
|
2004-08-09 04:50:57 +08:00
|
|
|
${class} ${returntype} ${function} ($formal)
|
1999-08-31 09:14:27 +08:00
|
|
|
EOF
|
2000-09-04 19:40:20 +08:00
|
|
|
for r in ${read}
|
|
|
|
do
|
|
|
|
eval echo \"\ \ \ \ ${r}=\${${r}}\"
|
|
|
|
done
|
2000-06-02 09:59:13 +08:00
|
|
|
if class_is_predicate_p && fallback_default_p
|
2000-05-30 09:29:26 +08:00
|
|
|
then
|
2004-06-21 03:17:17 +08:00
|
|
|
echo "Error: predicate function ${function} can not have a non- multi-arch default" 1>&2
|
2000-05-30 09:29:26 +08:00
|
|
|
kill $$
|
|
|
|
exit 1
|
|
|
|
fi
|
2001-06-08 04:52:47 +08:00
|
|
|
if [ "x${invalid_p}" = "x0" -a -n "${postdefault}" ]
|
2000-06-02 09:59:13 +08:00
|
|
|
then
|
|
|
|
echo "Error: postdefault is useless when invalid_p=0" 1>&2
|
|
|
|
kill $$
|
|
|
|
exit 1
|
|
|
|
fi
|
2001-11-08 09:33:04 +08:00
|
|
|
if class_is_multiarch_p
|
|
|
|
then
|
|
|
|
if class_is_predicate_p ; then :
|
|
|
|
elif test "x${predefault}" = "x"
|
|
|
|
then
|
2004-08-09 04:50:57 +08:00
|
|
|
echo "Error: pure multi-arch function ${function} must have a predefault" 1>&2
|
2001-11-08 09:33:04 +08:00
|
|
|
kill $$
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
fi
|
2000-09-04 19:40:20 +08:00
|
|
|
echo ""
|
2000-05-30 09:29:26 +08:00
|
|
|
done
|
|
|
|
|
|
|
|
exec 1>&2
|
|
|
|
compare_new gdbarch.log
|
|
|
|
|
1999-08-31 09:14:27 +08:00
|
|
|
|
|
|
|
copyright ()
|
|
|
|
{
|
|
|
|
cat <<EOF
|
2000-03-30 13:32:23 +08:00
|
|
|
/* *INDENT-OFF* */ /* THIS FILE IS GENERATED */
|
|
|
|
|
1999-08-31 09:14:27 +08:00
|
|
|
/* Dynamic architecture support for GDB, the GNU debugger.
|
2004-01-18 07:21:21 +08:00
|
|
|
|
2009-11-12 04:07:39 +08:00
|
|
|
Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
|
|
|
|
2007, 2008, 2009 Free Software Foundation, Inc.
|
1999-08-31 09:14:27 +08:00
|
|
|
|
|
|
|
This file is part of GDB.
|
|
|
|
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
|
|
it under the terms of the GNU General Public License as published by
|
2007-08-24 02:19:51 +08:00
|
|
|
the Free Software Foundation; either version 3 of the License, or
|
1999-08-31 09:14:27 +08:00
|
|
|
(at your option) any later version.
|
2007-08-24 02:19:51 +08:00
|
|
|
|
1999-08-31 09:14:27 +08:00
|
|
|
This program is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
GNU General Public License for more details.
|
2007-08-24 02:19:51 +08:00
|
|
|
|
1999-08-31 09:14:27 +08:00
|
|
|
You should have received a copy of the GNU General Public License
|
2007-08-24 02:19:51 +08:00
|
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
1999-08-31 09:14:27 +08:00
|
|
|
|
|
|
|
/* This file was created with the aid of \`\`gdbarch.sh''.
|
|
|
|
|
2000-08-26 04:51:19 +08:00
|
|
|
The Bourne shell script \`\`gdbarch.sh'' creates the files
|
1999-08-31 09:14:27 +08:00
|
|
|
\`\`new-gdbarch.c'' and \`\`new-gdbarch.h and then compares them
|
|
|
|
against the existing \`\`gdbarch.[hc]''. Any differences found
|
|
|
|
being reported.
|
|
|
|
|
|
|
|
If editing this file, please also run gdbarch.sh and merge any
|
2000-08-26 04:51:19 +08:00
|
|
|
changes into that script. Conversely, when making sweeping changes
|
1999-08-31 09:14:27 +08:00
|
|
|
to this file, modifying gdbarch.sh and using its output may prove
|
|
|
|
easier. */
|
|
|
|
|
|
|
|
EOF
|
|
|
|
}
|
|
|
|
|
|
|
|
#
|
|
|
|
# The .h file
|
|
|
|
#
|
|
|
|
|
|
|
|
exec > new-gdbarch.h
|
|
|
|
copyright
|
|
|
|
cat <<EOF
|
|
|
|
#ifndef GDBARCH_H
|
|
|
|
#define GDBARCH_H
|
|
|
|
|
2003-04-12 Andrew Cagney <cagney@redhat.com>
* gdbarch.sh: Add missing opaque declarations.
* gdbarch.h: Regnerate.
* symtab.h: Add missing opaque declarations.
* value.h, target.h, symfile.h, stabsread.h: Ditto.
* x86-64-tdep.h, xmodem.h, monitor.h, typeprint.h: Ditto.
* srec.h, solib-svr4.h, source.h, inferior.h: Ditto.
* ser-unix.h, serial.h, remote-utils.h, gdbcore.h: Ditto.
* ppc-tdep.h, ocd.h, mips-tdep.h, gdbtypes.h: Ditto.
* buildsym.h, builtin-regs.h, linespec.h, language.h: Ditto.
* i387-tdep.h, gdbthread.h, event-top.h, gdb.h: Ditto.
* dwarf2cfi.h, doublest.h, disasm.h, cp-abi.h: Ditto.
* cli-out.h, c-lang.h, ax-gdb.h, arch-utils.h: Ditto.
* ada-lang.h, config/nm-lynx.h, config/nm-linux.h: Ditto.
* config/sparc/tm-sp64.h, config/rs6000/tm-rs6000.h: Ditto.
* config/pa/tm-hppah.h, config/m68k/tm-delta68.h: Ditto.
* cli/cli-setshow.h, cli/cli-script.h: Ditto.
2003-04-13 01:41:26 +08:00
|
|
|
struct floatformat;
|
|
|
|
struct ui_file;
|
1999-08-31 09:14:27 +08:00
|
|
|
struct frame_info;
|
|
|
|
struct value;
|
2001-12-07 20:10:15 +08:00
|
|
|
struct objfile;
|
2007-05-12 03:57:17 +08:00
|
|
|
struct obj_section;
|
2002-02-06 09:20:23 +08:00
|
|
|
struct minimal_symbol;
|
2002-07-04 05:27:55 +08:00
|
|
|
struct regcache;
|
2002-11-02 23:13:34 +08:00
|
|
|
struct reggroup;
|
2003-10-11 20:52:30 +08:00
|
|
|
struct regset;
|
2003-09-04 Andrew Cagney <cagney@redhat.com>
* avr-tdep.c: Include "dis-asm.h".
* cris-tdep.c: Include "dis-asm.h".
(cris_delayed_get_disassembler): Use "struct disassemble_info"
instead of corresponding typedef.
* h8300-tdep.c: Include "dis-asm.h".
* ia64-tdep.c: Include "dis-asm.h".
* i386-tdep.c: Include "dis-asm.h".
(i386_print_insn): Use "struct disassemble_info" instead of
corresponding typedef.
* m68k-tdep.c: Include "dis-asm.h".
* mcore-tdep.c: Include "dis-asm.h".
* mips-tdep.c: Include "dis-asm.h".
(gdb_print_insn_mips): Make static, use "struct disassemble_info"
instead of corresponding typedef.
* ns32k-tdep.c: Include "dis-asm.h".
* s390-tdep.c: Include "dis-asm.h".
* sparc-tdep.c: Include "dis-asm.h".
* vax-tdep.c: Include "dis-asm.h".
* v850-tdep.c: Include "dis-asm.h".
* mn10300-tdep.c: Include "dis-asm.h".
* rs6000-tdep.c: Include "dis-asm.h".
* xstormy16-tdep.c: Include "dis-asm.h".
(_initialize_xstormy16_tdep): Delete "extern" declaration of
print_insn_xstormy16.
* Makefile.in (v850-tdep.o): Update dependencies.
(vax-tdep.o, sparc-tdep.o, s390-tdep.o): Ditto.
(ns32k-tdep.o, mips-tdep.o, mcore-tdep.o): Ditto.
(m68k-tdep.o, ia64-tdep.o, i386-tdep.o): Ditto.
(h8300-tdep.o, cris-tdep.o, avr-tdep.o): Ditto.
(mn10300-tdep.o, xstormy16-tdep.o, disasm.o): Ditto.
(gdbarch_h): Remove $(dis_asm_h).
* disasm.c: Include "dis-asm.h".
(dis_asm_read_memory): Use "struct disassemble_info" instead of
corresponding typedef.
(dis_asm_memory_error, dump_insns, do_assembly_only): Ditto.
(gdb_disassemble_info, gdb_disassembly, gdb_print_insn): Ditto.
* gdbarch.sh: Do not include "dis-asm.h".
(struct disassemble_info): Declare opaque.
(TARGET_PRINT_INSN): Update declaration.
* gdbarch.h, gdbarch.c: Re-generate.
2003-09-09 12:41:32 +08:00
|
|
|
struct disassemble_info;
|
2003-10-23 07:54:11 +08:00
|
|
|
struct target_ops;
|
2004-03-16 04:38:08 +08:00
|
|
|
struct obstack;
|
gdb/
* breakpoint.c (deprecated_read_memory_nobpt): Update to use
shadow_len.
(insert_bp_location, reattach_breakpoints, remove_breakpoint)
(delete_breakpoint): Update calls to changed methods.
(deprecated_insert_raw_breakpoint, deprecated_remove_raw_breakpoint)
(single_step_breakpoints, insert_single_step_breakpoint)
(remove_single_step_breakpoints): New.
* breakpoint.h (struct bp_target_info): New.
(struct bp_location): Replace shadow_contents with
target_info and overlay_target_info.
(deprecated_insert_raw_breakpoint, deprecated_remove_raw_breakpoint)
(insert_single_step_breakpoint, remove_single_step_breakpoints): New
prototypes.
* gdbarch.sh: Forward declare struct bp_target_info in gdbarch.h.
(memory_insert_breakpoint, memory_remove_breakpoint): Update second
argument.
* mem-break.c (default_memory_insert_breakpoint): Update. Set
placed_address, placed_size, and shadow_len.
(default_memory_remove_breakpoint): Update. Don't use
BREAKPOINT_FROM_PC.
(memory_insert_breakpoint, memory_remove_breakpoint): Update.
* target.c (update_current_target): Update prototypes for changed
functions.
(debug_to_insert_breakpoint, debug_to_remove_breakpoint)
(debug_to_insert_hw_breakpoint, debug_to_remove_hw_breakpoint):
Update.
* target.h: Forward declare struct bp_target_info.
(struct target_ops): Use a bp_target_info argument for
to_insert_breakpoint, to_remove_breakpoint,
to_insert_hw_breakpoint, and to_remove_hw_breakpoint.
(target_insert_breakpoint, target_remove_breakpoint)
(target_insert_hw_breakpoint, target_remove_hw_breakpoint)
(memory_insert_breakpoint, memory_remove_breakpoint)
(default_memory_insert_breakpoint, default_memory_remove_breakpoint):
Update.
* config/i386/nm-i386.h: Forward declare struct bp_target_info.
(i386_insert_hw_breakpoint, i386_remove_hw_breakpoint): Update.
(target_insert_hw_breakpoint, target_remove_hw_breakpoint): Likewise.
* gdbarch.c, gdbarch.h: Regenerated.
* alpha-tdep.c (alpha_software_single_step): Use
insert_single_step_breakpoint and remove_single_step_breakpoints.
Remove unused statics.
* arm-tdep.c (arm_software_single_step): Likewise. Add a note.
* cris-tdep.c (cris_software_single_step): Likewise.
* mips-tdep.c (mips_software_single_step): Likewise.
* rs6000-tdep.c (rs6000_software_single_step): Likewise.
* sparc-tdep.c (sparc_software_single_step): Likewise.
* wince.c (struct thread_info_struct): Remove step_prev.
(undoSStep): Use remove_single_step_breakpoints.
(wince_software_single_step): Use insert_single_step_breakpoint.
* corelow.c (ignore): Remove unneeded prototype. Update arguments.
* exec.c (ignore): Likewise.
* sol-thread.c (ignore): Likewise.
* procfs.c (dbx_link_shadow_contents): Delete.
(dbx_link_bpt): New.
(procfs_mourn_inferior): Remove it if necessary.
(remove_dbx_link_breakpoint): Use it.
(insert_dbx_link_bpt_in_file): Set it.
(procfs_init_inferior): Don't update dbx_link_bpt_addr.
* rs6000-nat.c (exec_one_dummy_insn): Use
deprecated_insert_raw_breakpoint and
deprecated_remove_raw_breakpoint.
* solib-irix.c (shadow_contents, breakpoint_addr): Delete.
(base_breakpoint): New.
(disable_break): Use it.
(enable_break): Set it.
* i386-nat.c (i386_insert_hw_breakpoint, i386_remove_hw_breakpoint):
Update.
* ia64-tdep.c (ia64_memory_insert_breakpoint)
(ia64_memory_remove_breakpoint): Likewise.
* m32r-tdep.c (m32r_memory_insert_breakpoint)
(m32r_memory_remove_breakpoint): Likewise.
* monitor.c (monitor_insert_breakpoint, monitor_remove_breakpoint):
Likewise. Remove unnecessary prototypes. Use placed_address
and placed_size. Removed useless read from memory.
* nto-procfs.c (procfs_insert_breakpoint)
(procfs_remove_breakpoint, procfs_insert_hw_breakpoint)
(procfs_remove_hw_breakpoint): Update.
* ocd.c (ocd_insert_breakpoint, ocd_remove_breakpoint): Likewise.
* ocd.h (ocd_insert_breakpoint, ocd_remove_breakpoint): Likewise.
* ppc-linux-tdep.c (ppc_linux_memory_remove_breakpoint): Likewise.
* ppc-tdep.h (ppc_linux_memory_remove_breakpoint): Likewise.
* remote-e7000.c (e7000_insert_breakpoint)
(e7000_remove_breakpoint): Likewise.
* remote-m32r-sdi.c (m32r_insert_breakpoint)
(m32r_remove_breakpoint): Likewise.
* remote-mips.c (mips_insert_breakpoint)
(mips_remove_breakpoint): Likewise.
* remote-rdp.c (remote_rdp_insert_breakpoint)
(remote_rdp_remove_breakpoint): Likewise.
(rdp_step): Use deprecated_insert_raw_breakpoint and
deprecated_remove_raw_breakpoint.
* remote-sds.c (sds_insert_breakpoint, sds_remove_breakpoint):
Update.
* remote-sim.c (gdbsim_insert_breakpoint, gdbsim_remove_breakpoint):
Delete.
(init_gdbsim_ops): Use memory_insert_breakpoint and
memory_remove_breakpoint.
* remote-st.c (st2000_insert_breakpoint)
(st2000_remove_breakpoint): Update. Remove unused
BREAKPOINT_FROM_PC.
* remote.c (remote_insert_breakpoint, remote_remove_breakpoint):
Update. Use placed_address and placed_size.
(remote_insert_hw_breakpoint, remote_remove_hw_breakpoint): Likewise.
gdb/doc/
* gdbint.texinfo (x86 Watchpoints, Target Conditionals): Update insert
and remove breakpoint prototypes.
(Watchpoints): Move description of target_insert_hw_breakpoint and
target_remove_hw_breakpoint ...
(Breakpoints): ... to here. Document target_insert_breakpoint and
target_remove_breakpoint.
2006-04-19 03:20:08 +08:00
|
|
|
struct bp_target_info;
|
2006-11-29 06:10:26 +08:00
|
|
|
struct target_desc;
|
Implement displaced stepping.
gdb/
* gdbarch.sh (max_insn_length): New 'variable'.
(displaced_step_copy, displaced_step_fixup)
(displaced_step_free_closure, displaced_step_location): New
functions.
(struct displaced_step_closure): Add forward declaration.
* gdbarch.c, gdbarch.h: Regenerated.
* arch-utils.c: #include "objfiles.h".
(simple_displaced_step_copy_insn)
(simple_displaced_step_free_closure)
(displaced_step_at_entry_point): New functions.
* arch-utils.h (simple_displaced_step_copy_insn)
(simple_displaced_step_free_closure)
(displaced_step_at_entry_point): New prototypes.
* i386-tdep.c (I386_MAX_INSN_LEN): Rename to...
(I386_MAX_MATCHED_INSN_LEN): ... this.
(i386_absolute_jmp_p, i386_absolute_call_p)
(i386_ret_p, i386_call_p, i386_breakpoint_p, i386_syscall_p)
(i386_displaced_step_fixup): New functions.
(struct i386_insn, i386_match_insn): Update.
(i386_gdbarch_init): Set gdbarch_max_insn_length.
* i386-tdep.h (I386_MAX_INSN_LEN): New.
(i386_displaced_step_fixup): New prototype.
* i386-linux-tdep.c (i386_linux_init_abi): Include "arch-utils.h".
Register gdbarch_displaced_step_copy,
gdbarch_displaced_step_fixup, gdbarch_displaced_step_free_closure,
and gdbarch_displaced_step_location functions.
* infrun.c (debug_displaced): New variable.
(show_debug_displaced): New function.
(struct displaced_step_request): New struct.
(displaced_step_request_queue, displaced_step_ptid)
(displaced_step_gdbarch, displaced_step_closure)
(displaced_step_original, displaced_step_copy)
(displaced_step_saved_copy, can_use_displaced_stepping): New
variables.
(show_can_use_displaced_stepping, use_displaced_stepping)
(displaced_step_clear, cleanup_displaced_step_closure)
(displaced_step_dump_bytes, displaced_step_prepare)
(displaced_step_clear_cleanup, write_memory_ptid)
(displaced_step_fixup): New functions.
(resume): Call displaced_step_prepare.
(proceed): Call read_pc once, and remember the value. If using
displaced stepping, don't remove breakpoints.
(handle_inferior_event): Call displaced_step_fixup. Add some
debugging output. When we try to step over a breakpoint, but get
a signal to deliver to the thread instead, ensure the step-resume
breakpoint is actually inserted. If a thread hop is needed, and
displaced stepping is enabled, don't remove breakpoints.
(init_wait_for_inferior): Call displaced_step_clear.
(_initialize_infrun): Add "set debug displaced" command. Add
"maint set can-use-displaced-stepping" command. Clear
displaced_step_ptid.
* inferior.h (debug_displaced): Declare variable.
(displaced_step_dump_bytes): Declare function.
* Makefile.in (arch-utils.o, i386-linux-tdep.o): Update
dependencies.
gdb/testsuite/
* gdb.asm/asmsrc1.s: Add scratch space.
gdb/doc/
* gdb.texinfo (Debugging Output): Document "set/show debug
displaced".
(Maintenance Commands): Document "maint set/show
can-use-displaced-stepping".
2008-05-03 00:49:54 +08:00
|
|
|
struct displaced_step_closure;
|
2008-05-25 00:32:01 +08:00
|
|
|
struct core_regset_section;
|
2009-09-15 11:30:08 +08:00
|
|
|
struct syscall;
|
1999-08-31 09:14:27 +08:00
|
|
|
|
2009-05-15 03:16:28 +08:00
|
|
|
/* The architecture associated with the connection to the target.
|
|
|
|
|
|
|
|
The architecture vector provides some information that is really
|
|
|
|
a property of the target: The layout of certain packets, for instance;
|
|
|
|
or the solib_ops vector. Etc. To differentiate architecture accesses
|
|
|
|
to per-target properties from per-thread/per-frame/per-objfile properties,
|
|
|
|
accesses to per-target properties should be made through target_gdbarch.
|
|
|
|
|
|
|
|
Eventually, when support for multiple targets is implemented in
|
|
|
|
GDB, this global should be made target-specific. */
|
* gdbarch.sh (target_gdbarch): New global variable.
(deprecated_current_gdbarch_select_hack): Set it.
* gdbarch.c, gdbarch.h: Regenerate.
* arch-utils.c (gdbarch_update_p): Use target_gdbarch instead
of current_gdbarch.
* target-descriptions.c (target_find_description): Likewise.
* arm-tdep.c (arm_update_current_architecture): Likewise.
(show_fp_model, arm_show_abi, arm_show_fallback_mode,
arm_show_force_mode): Likewise.
* mips-tdep.c (show_mask_address, show_mipsfpu_command,
show_mips_abi): Likewise.
* mep-tdep.c (me_module_register_set, current_me_module): Likewise.
* target.c (target_translate_tls_address): Use target_gdbarch
instead of current_gdbarch.
* remote.c (struct packet_reg): Likewise.
(get_remote_arch_state, packet_reg_from_regnum,
packet_reg_from_pnum, remote_check_symbols, remote_wait,
remote_address_masked, remote_insert_breakpoint,
remote_insert_hw_breakpoint, remote_read_description): Likewise.
* remote-m32r-sdi.c (m32r_resume, m32r_wait): Likewise.
* remote-mips.c (mips_open, mips_common_breakpoint): Likewise.
* cris-tdep.c (cris_can_use_hardware_watchpoint): Likewise.
* solib.c (solib_open, solib_map_sections, solib_read_symbols,
solib_add, info_sharedlibrary_command, solib_address,
solib_create_inferior_hook, in_solib_dynsym_resolve_code,
solib_global_lookup): Likewise.
* solib-frv.c (enable_break2, frv_relocate_main_executable): Likewise.
* solib-irix.c (irix_current_sos, irix_open_symbol_file_object):
Likewise.
* solib-sunos.c (sunos_solib_create_inferior_hook): Likewise.
* solib-svr4.c (exec_entry_point, enable_break, svr4_free_so,
set_solib_svr4_fetch_link_map_offsets, svr4_fetch_link_map_offsets):
Likewise.
* nto-tdep.c (nto_find_and_open_solib, nto_init_solib_absolute_prefix,
nto_truncate_ptr): Likewise.
* mips-linux-tdep.c (mips_linux_in_dynsym_stub): Likewise.
2008-08-27 01:21:29 +08:00
|
|
|
extern struct gdbarch *target_gdbarch;
|
1999-08-31 09:14:27 +08:00
|
|
|
EOF
|
|
|
|
|
|
|
|
# function typedef's
|
2000-09-04 19:40:20 +08:00
|
|
|
printf "\n"
|
|
|
|
printf "\n"
|
|
|
|
printf "/* The following are pre-initialized by GDBARCH. */\n"
|
2000-08-01 18:31:19 +08:00
|
|
|
function_list | while do_read
|
1999-08-31 09:14:27 +08:00
|
|
|
do
|
2000-04-21 12:17:18 +08:00
|
|
|
if class_is_info_p
|
|
|
|
then
|
2000-09-04 19:40:20 +08:00
|
|
|
printf "\n"
|
|
|
|
printf "extern ${returntype} gdbarch_${function} (struct gdbarch *gdbarch);\n"
|
|
|
|
printf "/* set_gdbarch_${function}() - not applicable - pre-initialized. */\n"
|
2000-04-21 12:17:18 +08:00
|
|
|
fi
|
1999-08-31 09:14:27 +08:00
|
|
|
done
|
|
|
|
|
|
|
|
# function typedef's
|
2000-09-04 19:40:20 +08:00
|
|
|
printf "\n"
|
|
|
|
printf "\n"
|
|
|
|
printf "/* The following are initialized by the target dependent code. */\n"
|
2000-08-01 18:31:19 +08:00
|
|
|
function_list | while do_read
|
1999-08-31 09:14:27 +08:00
|
|
|
do
|
2001-06-08 04:52:47 +08:00
|
|
|
if [ -n "${comment}" ]
|
2000-08-01 18:31:19 +08:00
|
|
|
then
|
|
|
|
echo "${comment}" | sed \
|
|
|
|
-e '2 s,#,/*,' \
|
|
|
|
-e '3,$ s,#, ,' \
|
|
|
|
-e '$ s,$, */,'
|
|
|
|
fi
|
2004-06-21 Andrew Cagney <cagney@gnu.org>
* gdbarch.sh: When the macro field is empty, do not generate a
macro definition. When the macro field is "=", generate the macro
name from the upper-case function name.
(NUM_REGS, NUM_PSEUDO_REGS, SP_REGNUM, PC_REGNUM, PS_REGNUM)
(FP0_REGNUM, STAB_REG_TO_REGNUM, ECOFF_REG_TO_REGNUM)
(DWARF_REG_TO_REGNUM, SDB_REG_TO_REGNUM, DWARF2_REG_TO_REGNUM)
(REGISTER_NAME, DEPRECATED_REGISTER_VIRTUAL_TYPE)
(DEPRECATED_REGISTER_BYTES, DEPRECATED_REGISTER_BYTE)
(DEPRECATED_REGISTER_RAW_SIZE, DEPRECATED_REGISTER_VIRTUAL_SIZE)
(DEPRECATED_SAVE_DUMMY_FRAME_TOS, DEPRECATED_FP_REGNUM)
(DEPRECATED_TARGET_READ_FP, DEPRECATED_PUSH_ARGUMENTS)
(DEPRECATED_PUSH_RETURN_ADDRESS, DEPRECATED_DUMMY_WRITE_SP)
(DEPRECATED_REGISTER_SIZE, CALL_DUMMY_LOCATION)
(DEPRECATED_DO_REGISTERS_INFO, REGISTER_SIM_REGNO)
(REGISTER_BYTES_OK, CANNOT_FETCH_REGISTER, CANNOT_STORE_REGISTER)
(GET_LONGJMP_TARGET, DEPRECATED_INIT_FRAME_PC)
(BELIEVE_PCC_PROMOTION, DEPRECATED_GET_SAVED_REGISTER)
(CONVERT_REGISTER_P, REGISTER_TO_VALUE, VALUE_TO_REGISTER)
(POINTER_TO_ADDRESS, ADDRESS_TO_POINTER, INTEGER_TO_ADDRESS)
(DEPRECATED_POP_FRAME, DEPRECATED_STORE_STRUCT_RETURN)
(EXTRACT_RETURN_VALUE, STORE_RETURN_VALUE)
(DEPRECATED_EXTRACT_RETURN_VALUE, DEPRECATED_STORE_RETURN_VALUE)
(DEPRECATED_USE_STRUCT_CONVENTION)
(DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS)
(DEPRECATED_FRAME_INIT_SAVED_REGS)
(DEPRECATED_INIT_EXTRA_FRAME_INFO, SKIP_PROLOGUE, INNER_THAN)
(BREAKPOINT_FROM_PC, MEMORY_INSERT_BREAKPOINT)
(MEMORY_REMOVE_BREAKPOINT, DECR_PC_AFTER_BREAK)
(DEPRECATED_FUNCTION_START_OFFSET, FRAME_ARGS_SKIP)
(DEPRECATED_FRAMELESS_FUNCTION_INVOCATION, DEPRECATED_FRAME_CHAIN)
(DEPRECATED_FRAME_CHAIN_VALID, DEPRECATED_FRAME_SAVED_PC)
(DEPRECATED_FRAME_ARGS_ADDRESS, DEPRECATED_FRAME_LOCALS_ADDRESS)
(DEPRECATED_SAVED_PC_AFTER_CALL, FRAME_NUM_ARGS)
(DEPRECATED_STACK_ALIGN, DEPRECATED_REG_STRUCT_HAS_ADDR)
(FRAME_RED_ZONE_SIZE, ADDR_BITS_REMOVE, SMASH_TEXT_ADDRESS)
(SOFTWARE_SINGLE_STEP, SKIP_TRAMPOLINE_CODE)
(IN_SOLIB_CALL_TRAMPOLINE, IN_SOLIB_RETURN_TRAMPOLINE)
(ELF_MAKE_MSYMBOL_SPECIAL, COFF_MAKE_MSYMBOL_SPECIAL)
(NAME_OF_MALLOC, CANNOT_STEP_BREAKPOINT)
(HAVE_NONSTEPPABLE_WATCHPOINT, ADDRESS_CLASS_TYPE_FLAGS)
(FETCH_POINTER_ARGUMENT): Replace the macro name with "=".
2004-06-22 03:54:50 +08:00
|
|
|
|
|
|
|
if class_is_predicate_p
|
2000-04-21 12:17:18 +08:00
|
|
|
then
|
2004-06-21 Andrew Cagney <cagney@gnu.org>
* gdbarch.sh: When the macro field is empty, do not generate a
macro definition. When the macro field is "=", generate the macro
name from the upper-case function name.
(NUM_REGS, NUM_PSEUDO_REGS, SP_REGNUM, PC_REGNUM, PS_REGNUM)
(FP0_REGNUM, STAB_REG_TO_REGNUM, ECOFF_REG_TO_REGNUM)
(DWARF_REG_TO_REGNUM, SDB_REG_TO_REGNUM, DWARF2_REG_TO_REGNUM)
(REGISTER_NAME, DEPRECATED_REGISTER_VIRTUAL_TYPE)
(DEPRECATED_REGISTER_BYTES, DEPRECATED_REGISTER_BYTE)
(DEPRECATED_REGISTER_RAW_SIZE, DEPRECATED_REGISTER_VIRTUAL_SIZE)
(DEPRECATED_SAVE_DUMMY_FRAME_TOS, DEPRECATED_FP_REGNUM)
(DEPRECATED_TARGET_READ_FP, DEPRECATED_PUSH_ARGUMENTS)
(DEPRECATED_PUSH_RETURN_ADDRESS, DEPRECATED_DUMMY_WRITE_SP)
(DEPRECATED_REGISTER_SIZE, CALL_DUMMY_LOCATION)
(DEPRECATED_DO_REGISTERS_INFO, REGISTER_SIM_REGNO)
(REGISTER_BYTES_OK, CANNOT_FETCH_REGISTER, CANNOT_STORE_REGISTER)
(GET_LONGJMP_TARGET, DEPRECATED_INIT_FRAME_PC)
(BELIEVE_PCC_PROMOTION, DEPRECATED_GET_SAVED_REGISTER)
(CONVERT_REGISTER_P, REGISTER_TO_VALUE, VALUE_TO_REGISTER)
(POINTER_TO_ADDRESS, ADDRESS_TO_POINTER, INTEGER_TO_ADDRESS)
(DEPRECATED_POP_FRAME, DEPRECATED_STORE_STRUCT_RETURN)
(EXTRACT_RETURN_VALUE, STORE_RETURN_VALUE)
(DEPRECATED_EXTRACT_RETURN_VALUE, DEPRECATED_STORE_RETURN_VALUE)
(DEPRECATED_USE_STRUCT_CONVENTION)
(DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS)
(DEPRECATED_FRAME_INIT_SAVED_REGS)
(DEPRECATED_INIT_EXTRA_FRAME_INFO, SKIP_PROLOGUE, INNER_THAN)
(BREAKPOINT_FROM_PC, MEMORY_INSERT_BREAKPOINT)
(MEMORY_REMOVE_BREAKPOINT, DECR_PC_AFTER_BREAK)
(DEPRECATED_FUNCTION_START_OFFSET, FRAME_ARGS_SKIP)
(DEPRECATED_FRAMELESS_FUNCTION_INVOCATION, DEPRECATED_FRAME_CHAIN)
(DEPRECATED_FRAME_CHAIN_VALID, DEPRECATED_FRAME_SAVED_PC)
(DEPRECATED_FRAME_ARGS_ADDRESS, DEPRECATED_FRAME_LOCALS_ADDRESS)
(DEPRECATED_SAVED_PC_AFTER_CALL, FRAME_NUM_ARGS)
(DEPRECATED_STACK_ALIGN, DEPRECATED_REG_STRUCT_HAS_ADDR)
(FRAME_RED_ZONE_SIZE, ADDR_BITS_REMOVE, SMASH_TEXT_ADDRESS)
(SOFTWARE_SINGLE_STEP, SKIP_TRAMPOLINE_CODE)
(IN_SOLIB_CALL_TRAMPOLINE, IN_SOLIB_RETURN_TRAMPOLINE)
(ELF_MAKE_MSYMBOL_SPECIAL, COFF_MAKE_MSYMBOL_SPECIAL)
(NAME_OF_MALLOC, CANNOT_STEP_BREAKPOINT)
(HAVE_NONSTEPPABLE_WATCHPOINT, ADDRESS_CLASS_TYPE_FLAGS)
(FETCH_POINTER_ARGUMENT): Replace the macro name with "=".
2004-06-22 03:54:50 +08:00
|
|
|
printf "\n"
|
|
|
|
printf "extern int gdbarch_${function}_p (struct gdbarch *gdbarch);\n"
|
2001-03-17 08:31:22 +08:00
|
|
|
fi
|
2000-04-21 12:17:18 +08:00
|
|
|
if class_is_variable_p
|
|
|
|
then
|
2000-09-04 19:40:20 +08:00
|
|
|
printf "\n"
|
|
|
|
printf "extern ${returntype} gdbarch_${function} (struct gdbarch *gdbarch);\n"
|
|
|
|
printf "extern void set_gdbarch_${function} (struct gdbarch *gdbarch, ${returntype} ${function});\n"
|
2000-04-21 12:17:18 +08:00
|
|
|
fi
|
|
|
|
if class_is_function_p
|
|
|
|
then
|
2000-09-04 19:40:20 +08:00
|
|
|
printf "\n"
|
2001-06-08 04:52:47 +08:00
|
|
|
if [ "x${formal}" = "xvoid" ] && class_is_multiarch_p
|
2001-03-17 08:31:22 +08:00
|
|
|
then
|
|
|
|
printf "typedef ${returntype} (gdbarch_${function}_ftype) (struct gdbarch *gdbarch);\n"
|
|
|
|
elif class_is_multiarch_p
|
|
|
|
then
|
|
|
|
printf "typedef ${returntype} (gdbarch_${function}_ftype) (struct gdbarch *gdbarch, ${formal});\n"
|
|
|
|
else
|
|
|
|
printf "typedef ${returntype} (gdbarch_${function}_ftype) (${formal});\n"
|
|
|
|
fi
|
2001-06-08 04:52:47 +08:00
|
|
|
if [ "x${formal}" = "xvoid" ]
|
1999-08-31 09:14:27 +08:00
|
|
|
then
|
2000-09-04 19:40:20 +08:00
|
|
|
printf "extern ${returntype} gdbarch_${function} (struct gdbarch *gdbarch);\n"
|
1999-08-31 09:14:27 +08:00
|
|
|
else
|
2000-09-04 19:40:20 +08:00
|
|
|
printf "extern ${returntype} gdbarch_${function} (struct gdbarch *gdbarch, ${formal});\n"
|
1999-08-31 09:14:27 +08:00
|
|
|
fi
|
2000-09-04 19:40:20 +08:00
|
|
|
printf "extern void set_gdbarch_${function} (struct gdbarch *gdbarch, gdbarch_${function}_ftype *${function});\n"
|
2000-04-21 12:17:18 +08:00
|
|
|
fi
|
1999-08-31 09:14:27 +08:00
|
|
|
done
|
|
|
|
|
|
|
|
# close it off
|
|
|
|
cat <<EOF
|
|
|
|
|
2009-09-15 11:30:08 +08:00
|
|
|
/* Definition for an unknown syscall, used basically in error-cases. */
|
|
|
|
#define UNKNOWN_SYSCALL (-1)
|
|
|
|
|
1999-08-31 09:14:27 +08:00
|
|
|
extern struct gdbarch_tdep *gdbarch_tdep (struct gdbarch *gdbarch);
|
|
|
|
|
|
|
|
|
|
|
|
/* Mechanism for co-ordinating the selection of a specific
|
|
|
|
architecture.
|
|
|
|
|
|
|
|
GDB targets (*-tdep.c) can register an interest in a specific
|
|
|
|
architecture. Other GDB components can register a need to maintain
|
|
|
|
per-architecture data.
|
|
|
|
|
|
|
|
The mechanisms below ensures that there is only a loose connection
|
|
|
|
between the set-architecture command and the various GDB
|
2000-09-02 08:02:54 +08:00
|
|
|
components. Each component can independently register their need
|
1999-08-31 09:14:27 +08:00
|
|
|
to maintain architecture specific data with gdbarch.
|
|
|
|
|
|
|
|
Pragmatics:
|
|
|
|
|
|
|
|
Previously, a single TARGET_ARCHITECTURE_HOOK was provided. It
|
|
|
|
didn't scale.
|
|
|
|
|
|
|
|
The more traditional mega-struct containing architecture specific
|
|
|
|
data for all the various GDB components was also considered. Since
|
2000-09-02 08:02:54 +08:00
|
|
|
GDB is built from a variable number of (fairly independent)
|
1999-08-31 09:14:27 +08:00
|
|
|
components it was determined that the global aproach was not
|
|
|
|
applicable. */
|
|
|
|
|
|
|
|
|
|
|
|
/* Register a new architectural family with GDB.
|
|
|
|
|
|
|
|
Register support for the specified ARCHITECTURE with GDB. When
|
|
|
|
gdbarch determines that the specified architecture has been
|
|
|
|
selected, the corresponding INIT function is called.
|
|
|
|
|
|
|
|
--
|
|
|
|
|
|
|
|
The INIT function takes two parameters: INFO which contains the
|
|
|
|
information available to gdbarch about the (possibly new)
|
|
|
|
architecture; ARCHES which is a list of the previously created
|
|
|
|
\`\`struct gdbarch'' for this architecture.
|
|
|
|
|
2002-04-21 01:41:18 +08:00
|
|
|
The INFO parameter is, as far as possible, be pre-initialized with
|
2006-11-11 03:20:37 +08:00
|
|
|
information obtained from INFO.ABFD or the global defaults.
|
2002-04-21 01:41:18 +08:00
|
|
|
|
|
|
|
The ARCHES parameter is a linked list (sorted most recently used)
|
|
|
|
of all the previously created architures for this architecture
|
|
|
|
family. The (possibly NULL) ARCHES->gdbarch can used to access
|
|
|
|
values from the previously selected architecture for this
|
2009-07-03 01:29:17 +08:00
|
|
|
architecture family.
|
1999-08-31 09:14:27 +08:00
|
|
|
|
|
|
|
The INIT function shall return any of: NULL - indicating that it
|
2000-10-28 03:17:57 +08:00
|
|
|
doesn't recognize the selected architecture; an existing \`\`struct
|
1999-08-31 09:14:27 +08:00
|
|
|
gdbarch'' from the ARCHES list - indicating that the new
|
|
|
|
architecture is just a synonym for an earlier architecture (see
|
|
|
|
gdbarch_list_lookup_by_info()); a newly created \`\`struct gdbarch''
|
2000-06-10 13:37:47 +08:00
|
|
|
- that describes the selected architecture (see gdbarch_alloc()).
|
|
|
|
|
|
|
|
The DUMP_TDEP function shall print out all target specific values.
|
|
|
|
Care should be taken to ensure that the function works in both the
|
|
|
|
multi-arch and non- multi-arch cases. */
|
1999-08-31 09:14:27 +08:00
|
|
|
|
|
|
|
struct gdbarch_list
|
|
|
|
{
|
|
|
|
struct gdbarch *gdbarch;
|
|
|
|
struct gdbarch_list *next;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct gdbarch_info
|
|
|
|
{
|
|
|
|
/* Use default: NULL (ZERO). */
|
|
|
|
const struct bfd_arch_info *bfd_arch_info;
|
|
|
|
|
2001-12-30 03:25:58 +08:00
|
|
|
/* Use default: BFD_ENDIAN_UNKNOWN (NB: is not ZERO). */
|
1999-08-31 09:14:27 +08:00
|
|
|
int byte_order;
|
|
|
|
|
2008-08-12 03:00:25 +08:00
|
|
|
int byte_order_for_code;
|
|
|
|
|
1999-08-31 09:14:27 +08:00
|
|
|
/* Use default: NULL (ZERO). */
|
|
|
|
bfd *abfd;
|
|
|
|
|
|
|
|
/* Use default: NULL (ZERO). */
|
|
|
|
struct gdbarch_tdep_info *tdep_info;
|
2003-01-05 07:38:46 +08:00
|
|
|
|
|
|
|
/* Use default: GDB_OSABI_UNINITIALIZED (-1). */
|
|
|
|
enum gdb_osabi osabi;
|
2006-11-29 06:10:26 +08:00
|
|
|
|
|
|
|
/* Use default: NULL (ZERO). */
|
|
|
|
const struct target_desc *target_desc;
|
1999-08-31 09:14:27 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
typedef struct gdbarch *(gdbarch_init_ftype) (struct gdbarch_info info, struct gdbarch_list *arches);
|
2000-06-10 13:37:47 +08:00
|
|
|
typedef void (gdbarch_dump_tdep_ftype) (struct gdbarch *gdbarch, struct ui_file *file);
|
1999-08-31 09:14:27 +08:00
|
|
|
|
2000-06-10 13:37:47 +08:00
|
|
|
/* DEPRECATED - use gdbarch_register() */
|
1999-08-31 09:14:27 +08:00
|
|
|
extern void register_gdbarch_init (enum bfd_architecture architecture, gdbarch_init_ftype *);
|
|
|
|
|
2000-06-10 13:37:47 +08:00
|
|
|
extern void gdbarch_register (enum bfd_architecture architecture,
|
|
|
|
gdbarch_init_ftype *,
|
|
|
|
gdbarch_dump_tdep_ftype *);
|
|
|
|
|
1999-08-31 09:14:27 +08:00
|
|
|
|
2000-06-07 12:38:02 +08:00
|
|
|
/* Return a freshly allocated, NULL terminated, array of the valid
|
|
|
|
architecture names. Since architectures are registered during the
|
|
|
|
_initialize phase this function only returns useful information
|
|
|
|
once initialization has been completed. */
|
|
|
|
|
|
|
|
extern const char **gdbarch_printable_names (void);
|
|
|
|
|
|
|
|
|
1999-08-31 09:14:27 +08:00
|
|
|
/* Helper function. Search the list of ARCHES for a GDBARCH that
|
|
|
|
matches the information provided by INFO. */
|
|
|
|
|
2006-11-29 06:10:26 +08:00
|
|
|
extern struct gdbarch_list *gdbarch_list_lookup_by_info (struct gdbarch_list *arches, const struct gdbarch_info *info);
|
1999-08-31 09:14:27 +08:00
|
|
|
|
|
|
|
|
|
|
|
/* Helper function. Create a preliminary \`\`struct gdbarch''. Perform
|
2006-11-29 06:10:26 +08:00
|
|
|
basic initialization using values obtained from the INFO and TDEP
|
1999-08-31 09:14:27 +08:00
|
|
|
parameters. set_gdbarch_*() functions are called to complete the
|
|
|
|
initialization of the object. */
|
|
|
|
|
|
|
|
extern struct gdbarch *gdbarch_alloc (const struct gdbarch_info *info, struct gdbarch_tdep *tdep);
|
|
|
|
|
|
|
|
|
2000-06-10 13:37:47 +08:00
|
|
|
/* Helper function. Free a partially-constructed \`\`struct gdbarch''.
|
|
|
|
It is assumed that the caller freeds the \`\`struct
|
|
|
|
gdbarch_tdep''. */
|
|
|
|
|
2000-03-22 04:40:43 +08:00
|
|
|
extern void gdbarch_free (struct gdbarch *);
|
|
|
|
|
|
|
|
|
2003-07-23 03:49:58 +08:00
|
|
|
/* Helper function. Allocate memory from the \`\`struct gdbarch''
|
|
|
|
obstack. The memory is freed when the corresponding architecture
|
|
|
|
is also freed. */
|
|
|
|
|
|
|
|
extern void *gdbarch_obstack_zalloc (struct gdbarch *gdbarch, long size);
|
|
|
|
#define GDBARCH_OBSTACK_CALLOC(GDBARCH, NR, TYPE) ((TYPE *) gdbarch_obstack_zalloc ((GDBARCH), (NR) * sizeof (TYPE)))
|
|
|
|
#define GDBARCH_OBSTACK_ZALLOC(GDBARCH, TYPE) ((TYPE *) gdbarch_obstack_zalloc ((GDBARCH), sizeof (TYPE)))
|
|
|
|
|
|
|
|
|
2001-05-15 00:43:35 +08:00
|
|
|
/* Helper function. Force an update of the current architecture.
|
1999-08-31 09:14:27 +08:00
|
|
|
|
2001-05-15 00:43:35 +08:00
|
|
|
The actual architecture selected is determined by INFO, \`\`(gdb) set
|
|
|
|
architecture'' et.al., the existing architecture and BFD's default
|
|
|
|
architecture. INFO should be initialized to zero and then selected
|
|
|
|
fields should be updated.
|
1999-08-31 09:14:27 +08:00
|
|
|
|
2000-08-11 09:30:11 +08:00
|
|
|
Returns non-zero if the update succeeds */
|
|
|
|
|
|
|
|
extern int gdbarch_update_p (struct gdbarch_info info);
|
1999-08-31 09:14:27 +08:00
|
|
|
|
|
|
|
|
2003-11-10 12:39:17 +08:00
|
|
|
/* Helper function. Find an architecture matching info.
|
|
|
|
|
|
|
|
INFO should be initialized using gdbarch_info_init, relevant fields
|
|
|
|
set, and then finished using gdbarch_info_fill.
|
|
|
|
|
|
|
|
Returns the corresponding architecture, or NULL if no matching
|
2009-07-03 01:29:17 +08:00
|
|
|
architecture was found. */
|
2003-11-10 12:39:17 +08:00
|
|
|
|
|
|
|
extern struct gdbarch *gdbarch_find_by_info (struct gdbarch_info info);
|
|
|
|
|
|
|
|
|
2009-07-03 01:29:17 +08:00
|
|
|
/* Helper function. Set the global "target_gdbarch" to "gdbarch".
|
2003-11-10 12:39:17 +08:00
|
|
|
|
|
|
|
FIXME: kettenis/20031124: Of the functions that follow, only
|
|
|
|
gdbarch_from_bfd is supposed to survive. The others will
|
|
|
|
dissappear since in the future GDB will (hopefully) be truly
|
|
|
|
multi-arch. However, for now we're still stuck with the concept of
|
|
|
|
a single active architecture. */
|
|
|
|
|
2009-07-03 01:29:17 +08:00
|
|
|
extern void deprecated_target_gdbarch_select_hack (struct gdbarch *gdbarch);
|
2003-11-10 12:39:17 +08:00
|
|
|
|
1999-08-31 09:14:27 +08:00
|
|
|
|
|
|
|
/* Register per-architecture data-pointer.
|
|
|
|
|
|
|
|
Reserve space for a per-architecture data-pointer. An identifier
|
|
|
|
for the reserved data-pointer is returned. That identifer should
|
2001-02-07 10:17:48 +08:00
|
|
|
be saved in a local static variable.
|
1999-08-31 09:14:27 +08:00
|
|
|
|
2003-08-05 06:24:44 +08:00
|
|
|
Memory for the per-architecture data shall be allocated using
|
|
|
|
gdbarch_obstack_zalloc. That memory will be deleted when the
|
|
|
|
corresponding architecture object is deleted.
|
1999-08-31 09:14:27 +08:00
|
|
|
|
2001-02-07 10:17:48 +08:00
|
|
|
When a previously created architecture is re-selected, the
|
|
|
|
per-architecture data-pointer for that previous architecture is
|
2002-06-09 02:09:01 +08:00
|
|
|
restored. INIT() is not re-called.
|
1999-08-31 09:14:27 +08:00
|
|
|
|
|
|
|
Multiple registrarants for any architecture are allowed (and
|
|
|
|
strongly encouraged). */
|
|
|
|
|
2001-02-07 10:17:48 +08:00
|
|
|
struct gdbarch_data;
|
1999-08-31 09:14:27 +08:00
|
|
|
|
2004-03-16 04:38:08 +08:00
|
|
|
typedef void *(gdbarch_data_pre_init_ftype) (struct obstack *obstack);
|
|
|
|
extern struct gdbarch_data *gdbarch_data_register_pre_init (gdbarch_data_pre_init_ftype *init);
|
|
|
|
typedef void *(gdbarch_data_post_init_ftype) (struct gdbarch *gdbarch);
|
|
|
|
extern struct gdbarch_data *gdbarch_data_register_post_init (gdbarch_data_post_init_ftype *init);
|
|
|
|
extern void deprecated_set_gdbarch_data (struct gdbarch *gdbarch,
|
|
|
|
struct gdbarch_data *data,
|
|
|
|
void *pointer);
|
1999-08-31 09:14:27 +08:00
|
|
|
|
2002-05-12 09:02:58 +08:00
|
|
|
extern void *gdbarch_data (struct gdbarch *gdbarch, struct gdbarch_data *);
|
1999-08-31 09:14:27 +08:00
|
|
|
|
|
|
|
|
2000-09-02 08:02:54 +08:00
|
|
|
/* Set the dynamic target-system-dependent parameters (architecture,
|
1999-08-31 09:14:27 +08:00
|
|
|
byte-order, ...) using information found in the BFD */
|
|
|
|
|
|
|
|
extern void set_gdbarch_from_file (bfd *);
|
|
|
|
|
|
|
|
|
1999-10-26 11:43:48 +08:00
|
|
|
/* Initialize the current architecture to the "first" one we find on
|
|
|
|
our list. */
|
|
|
|
|
|
|
|
extern void initialize_current_architecture (void);
|
|
|
|
|
1999-08-31 09:14:27 +08:00
|
|
|
/* gdbarch trace variable */
|
|
|
|
extern int gdbarch_debug;
|
|
|
|
|
2000-06-10 13:37:47 +08:00
|
|
|
extern void gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file);
|
1999-08-31 09:14:27 +08:00
|
|
|
|
|
|
|
#endif
|
|
|
|
EOF
|
|
|
|
exec 1>&2
|
|
|
|
#../move-if-change new-gdbarch.h gdbarch.h
|
2000-03-30 13:32:23 +08:00
|
|
|
compare_new gdbarch.h
|
1999-08-31 09:14:27 +08:00
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# C file
|
|
|
|
#
|
|
|
|
|
|
|
|
exec > new-gdbarch.c
|
|
|
|
copyright
|
|
|
|
cat <<EOF
|
|
|
|
|
|
|
|
#include "defs.h"
|
Bring IEEE_FLOAT under gdbarch's control.
* gdbarch.sh (IEEE_FLOAT): New entry.
* gdbarch.c, gdbarch.h: Regenerated.
* valprint.c (IEEE_FLOAT): Provide a default #definition for this.
(print_floating): Use IEEE_FLOAT as if it were an expression; use
the code specific to IEEE-format numbers whenever the value of
IEEE_FLOAT is non-zero.
* config/a29k/tm-a29k.h, config/alpha/tm-alpha.h,
config/arc/tm-arc.h, config/arm/tm-arm.h, config/fr30/tm-fr30.h,
config/h8300/tm-h8300.h, config/i386/tm-i386.h,
config/i960/tm-i960.h, config/m88k/tm-m88k.h,
config/mips/tm-mips.h, config/pa/tm-hppa.h,
config/sparc/tm-sparc.h, config/delta/tm-delta.h,
config/frv/tm-frv.h (IEEE_FLOAT): For all ports that #define
IEEE_FLOAT, make sure they give it the value (1).
2000-04-15 03:14:19 +08:00
|
|
|
#include "arch-utils.h"
|
1999-08-31 09:14:27 +08:00
|
|
|
|
|
|
|
#include "gdbcmd.h"
|
2007-06-01 00:57:30 +08:00
|
|
|
#include "inferior.h"
|
1999-08-31 09:14:27 +08:00
|
|
|
#include "symcat.h"
|
|
|
|
|
2000-06-02 09:59:13 +08:00
|
|
|
#include "floatformat.h"
|
1999-08-31 09:14:27 +08:00
|
|
|
|
2001-02-07 10:17:48 +08:00
|
|
|
#include "gdb_assert.h"
|
2002-08-03 04:51:21 +08:00
|
|
|
#include "gdb_string.h"
|
2002-11-02 23:13:34 +08:00
|
|
|
#include "reggroups.h"
|
2003-01-05 07:38:46 +08:00
|
|
|
#include "osabi.h"
|
2003-07-23 03:49:58 +08:00
|
|
|
#include "gdb_obstack.h"
|
gdb:
* tui/tui-hooks.c: Include observer.h.
(tui_event_default, tui_old_event_hooks, tui_event_hooks):
Remove.
(tui_bp_created_observer, tui_bp_deleted_observer,
tui_bp_modified_observer): New globals.
(tui_install_hooks): Use observers, not events.
(tui_remove_hooks): Likewise.
* mi/mi-cmd-break.c: Include observer.h, not gdb-events.h.
(mi_breakpoint_observers_installed, mi_can_breakpoint_notify): New
globals.
(breakpoint_notify): Check mi_can_breakpoint_notify.
(breakpoint_hooks): Remove.
(mi_cmd_break_insert): Attach observers. Don't use events.
* tracepoint.c: Include observer.h, not gdb-events.h.
(tracepoint_operation, trace_pass_command): Notify observer.
* interps.c: Don't include gdb-events.h.
(clear_interpreter_hooks): Don't call clear_gdb_event_hooks.
* gdbarch.c: Rebuild.
* gdbarch.sh: Emit include for observer.h, not gdb-events.h.
(deprecated_current_gdbarch_select_hack): Notify observer.
* breakpoint.h: Don't include gdb-events.h.
* breakpoint.c: Don't include gdb-events.h.
(condition_command): Notify observer.
(commands_command): Likewise.
(commands_from_control_command): Likewise.
(mention, delete_breakpoint, set_ignore_count): Likewise.
(disable_breakpoint, do_enable_breakpoint): Likewise.
* Makefile.in (gdb_events_h): Remove.
(breakpoint_h): Update.
(COMMON_OBS): Remove gdb-events.o.
(gdb-events.o): Remove.
(breakpoint.o, gdbarch.o, interps.o, tracepoint.o, gdbtk-bp.o,
gdbtk-hooks.o, mi-cmd-break.o, tui-hooks.o): Update.
* gdb-events.c: Remove.
* gdb-events.h: Remove.
* gdb-events.sh: Remove.
gdb/doc:
* observer.texi (GDB Observers): Document new observers:
breakpoint_created, breakpoint_deleted, breakpoint_modified,
tracepoint_created, tracepoint_deleted, tracepoint_modified,
architecture_changed.
gdb/gdbtk:
* generic/gdbtk-hooks.c: Include observer.h, not gdb-events.h.
(gdbtk_add_hooks): Use observers, not events.
(gdbtk_architecture_changed): Add argument, for observer.
* generic/gdbtk-bp.c: Include observer.h.
(gdb_set_bp): Notify observer.
(gdb_set_bp_addr): Likewise.
2008-07-26 00:12:03 +08:00
|
|
|
#include "observer.h"
|
2008-08-22 21:35:00 +08:00
|
|
|
#include "regcache.h"
|
2001-02-07 10:17:48 +08:00
|
|
|
|
1999-08-31 09:14:27 +08:00
|
|
|
/* Static function declarations */
|
|
|
|
|
2001-06-06 22:46:30 +08:00
|
|
|
static void alloc_gdbarch_data (struct gdbarch *);
|
1999-08-31 09:14:27 +08:00
|
|
|
|
|
|
|
/* Non-zero if we want to trace architecture code. */
|
|
|
|
|
|
|
|
#ifndef GDBARCH_DEBUG
|
|
|
|
#define GDBARCH_DEBUG 0
|
|
|
|
#endif
|
|
|
|
int gdbarch_debug = GDBARCH_DEBUG;
|
2005-02-24 Andrew Cagney <cagney@gnu.org>
Add show_VARIABLE functions, update add_setshow call.
* varobj.c (_initialize_varobj, show_varobjdebug): Add and update.
* valprint.c (_initialize_valprint, show_print_max)
(show_stop_print_at_null, show_repeat_count_threshold)
(show_prettyprint_structs, show_unionprint)
(show_prettyprint_arrays, show_addressprint, show_input_radix)
(show_output_radix): Ditto.
* valops.c (_initialize_valops, show_overload_resolution): Ditto.
* utils.c (initialize_utils, show_chars_per_line)
(show_lines_per_page, show_demangle, show_pagination_enabled)
(show_sevenbit_strings, show_asm_demangle): Ditto
* tui/tui-win.c (_initialize_tui_win, show_tui_border_kind)
(show_tui_border_mode, show_tui_active_border_mode): Ditto.
* top.c (init_main, show_new_async_prompt)
(show_async_command_editing_p, show_write_history_p)
(show_history_size, show_history_filename, show_caution)
(show_annotation_level, init_main): Ditto.
* target.c (initialize_targets, show_targetdebug)
(show_trust_readonly): Ditto.
* symfile.c (_initialize_symfile, show_symbol_reloading)
(show_ext_args, show_download_write_size)
(show_debug_file_directory): Ditto.
* source.c (_initialize_source, show_lines_to_list): Ditto.
* solib.c (_initialize_solib, show_auto_solib_add)
(show_solib_search_path): Ditto.
* p-valprint.c (_initialize_pascal_valprint)
(show_pascal_static_field_print): Ditto.
* printcmd.c (_initialize_printcmd, show_max_symbolic_offset)
(show_print_symbol_filename): Add and update.
* parse.c (_initialize_parse, show_expressiondebug): Dito.
* observer.c (_initialize_observer, show_observer_debug): Dito.
* maint.c (_initialize_maint_cmds, show_watchdog)
(show_maintenance_profile_p): Dito.
* linux-nat.c (_initialize_linux_nat, show_debug_linux_nat): Dito.
* infrun.c (_initialize_infrun, show_debug_infrun)
(show_stop_on_solib_events, show_follow_fork_mode_string)
(show_scheduler_mode, show_step_stop_if_no_debug): Ditto.
* infcall.c (_initialize_infcall, show_coerce_float_to_double_p)
(show_unwind_on_signal_p): Ditto.
* gdbtypes.c (build_gdbtypes, show_opaque_type_resolution)
(_initialize_gdbtypes, show_overload_debug): Ditto.
* gdb-events.c, gdb-events.sh (_initialize_gdb_events)
(show_gdb_events_debug): Ditto.
* gdbarch.c, gdbarch.sh (show_gdbarch_debug)
(_initialize_gdbarch): Ditto.
* frame.c (_initialize_frame, show_backtrace_past_main)
(show_backtrace_past_entry, show_backtrace_limit)
(show_frame_debug): Ditto.
* exec.c (_initialize_exec, show_write_files): Ditto.
* dwarf2read.c (_initialize_dwarf2_read)
(show_dwarf2_max_cache_age): Ditto.
* demangle.c (_initialize_demangler)
(show_demangling_style_names): Ditto.
* dcache.c (_initialize_dcache, show_dcache_enabled_p): Ditto.
* cp-valprint.c (show_static_field_print)
(_initialize_cp_valprint, show_vtblprint, show_objectprint): Ditto.
* corefile.c (_initialize_core, show_gnutarget_string): Ditto.
* cli/cli-logging.c (_initialize_cli_logging)
(show_logging_overwrite, show_logging_redirect)
(show_logging_filename): Ditto.
* cli/cli-cmds.c (show_info_verbose, show_history_expansion_p)
(init_cli_cmds, show_baud_rate, show_remote_debug)
(show_remote_timeout, show_max_user_call_depth): Ditto.
* charset.c (show_host_charset_name, show_target_charset_name)
(initialize_charset): Ditto.
* breakpoint.c (show_can_use_hw_watchpoints)
(show_pending_break_support, _initialize_breakpoint): Ditto.
2005-02-24 21:51:36 +08:00
|
|
|
static void
|
|
|
|
show_gdbarch_debug (struct ui_file *file, int from_tty,
|
|
|
|
struct cmd_list_element *c, const char *value)
|
|
|
|
{
|
|
|
|
fprintf_filtered (file, _("Architecture debugging is %s.\\n"), value);
|
|
|
|
}
|
1999-08-31 09:14:27 +08:00
|
|
|
|
2004-08-09 03:49:43 +08:00
|
|
|
static const char *
|
* doublest.c (floatformat_from_length): Use the right element from
gdbarch floatformats.
(floatformat_from_type, extract_typed_floating)
(store_typed_floating): Likewise.
* doublest.h: Remove declarations for undefined floatformat arrays.
* gdbarch.sh (float_format, double_format, long_double_format): Change
to pairs.
(pformat): Update for pairs.
* gdbarch.c, gdbarch.h: Regenerated.
* gdbtypes.c (floatformats_ieee_single, floatformats_ieee_double)
(floatformats_ieee_double_littlebyte_bigword)
(floatformats_i387_ext, floatformats_m68881_ext, floatformats_arm_ext)
(floatformats_ia64_spill, floatformats_ia64_quad, floatformats_vax_f)
(floatformats_vax_d): New variables.
(builtin_type_ieee_single, builtin_type_ieee_double)
(builtin_type_arm_ext, builtin_type_ia64_spill)
(builtin_type_ia64_quad): Replace arrays with individual types.
(builtin_type_ieee_single_big, builtin_type_ieee_single_little)
(builtin_type_ieee_double_big, builtin_type_ieee_double_little)
(builtin_type_ieee_double_littlebyte_bigword, builtin_type_i960_ext)
(builtin_type_m88110_ext, builtin_type_m88110_harris_ext)
(builtin_type_arm_ext_big, builtin_type_arm_ext_littlebyte_bigword)
(builtin_type_ia64_spill_big, builtin_type_ia64_spill_little)
(builtin_type_ia64_quad_big, builtin_type_ia64_quad_little): Delete
unused and endian-specific types.
(recursive_dump_type): Update for floatformat pairs.
(build_flt): Move higher. Handle bit == -1. Take a floatformat pair.
(build_gdbtypes): Use build_flt.
(_initialize_gdbtypes): Update set of initialized types.
* gdbtypes.h: Update declarations to match gdbtypes.c.
(struct main_type): Store a pointer to two floatformats.
* arch-utils.c (default_float_format, default_double_format): Delete.
* arch-utils.h (default_float_format, default_double_format): Delete.
* arm-tdep.c, avr-tdep.c, hppa-tdep.c, hppabsd-tdep.c, i386-tdep.c,
ia64-tdep.c, iq2000-tdep.c, m68k-tdep.c, m88k-tdep.c,
mips-linux-tdep.c, mips-tdep.c, mt-tdep.c, ppcobsd-tdep.c,
sparc-linux-tdep.c, sparc-tdep.c, sparcnbsd-tdep.c, spu-tdep.c,
vax-tdep.c, alpha-tdep.c, ppc-sysv-tdep.c: Update.
2007-01-30 01:31:06 +08:00
|
|
|
pformat (const struct floatformat **format)
|
2004-08-09 03:49:43 +08:00
|
|
|
{
|
|
|
|
if (format == NULL)
|
|
|
|
return "(null)";
|
|
|
|
else
|
* doublest.c (floatformat_from_length): Use the right element from
gdbarch floatformats.
(floatformat_from_type, extract_typed_floating)
(store_typed_floating): Likewise.
* doublest.h: Remove declarations for undefined floatformat arrays.
* gdbarch.sh (float_format, double_format, long_double_format): Change
to pairs.
(pformat): Update for pairs.
* gdbarch.c, gdbarch.h: Regenerated.
* gdbtypes.c (floatformats_ieee_single, floatformats_ieee_double)
(floatformats_ieee_double_littlebyte_bigword)
(floatformats_i387_ext, floatformats_m68881_ext, floatformats_arm_ext)
(floatformats_ia64_spill, floatformats_ia64_quad, floatformats_vax_f)
(floatformats_vax_d): New variables.
(builtin_type_ieee_single, builtin_type_ieee_double)
(builtin_type_arm_ext, builtin_type_ia64_spill)
(builtin_type_ia64_quad): Replace arrays with individual types.
(builtin_type_ieee_single_big, builtin_type_ieee_single_little)
(builtin_type_ieee_double_big, builtin_type_ieee_double_little)
(builtin_type_ieee_double_littlebyte_bigword, builtin_type_i960_ext)
(builtin_type_m88110_ext, builtin_type_m88110_harris_ext)
(builtin_type_arm_ext_big, builtin_type_arm_ext_littlebyte_bigword)
(builtin_type_ia64_spill_big, builtin_type_ia64_spill_little)
(builtin_type_ia64_quad_big, builtin_type_ia64_quad_little): Delete
unused and endian-specific types.
(recursive_dump_type): Update for floatformat pairs.
(build_flt): Move higher. Handle bit == -1. Take a floatformat pair.
(build_gdbtypes): Use build_flt.
(_initialize_gdbtypes): Update set of initialized types.
* gdbtypes.h: Update declarations to match gdbtypes.c.
(struct main_type): Store a pointer to two floatformats.
* arch-utils.c (default_float_format, default_double_format): Delete.
* arch-utils.h (default_float_format, default_double_format): Delete.
* arm-tdep.c, avr-tdep.c, hppa-tdep.c, hppabsd-tdep.c, i386-tdep.c,
ia64-tdep.c, iq2000-tdep.c, m68k-tdep.c, m88k-tdep.c,
mips-linux-tdep.c, mips-tdep.c, mt-tdep.c, ppcobsd-tdep.c,
sparc-linux-tdep.c, sparc-tdep.c, sparcnbsd-tdep.c, spu-tdep.c,
vax-tdep.c, alpha-tdep.c, ppc-sysv-tdep.c: Update.
2007-01-30 01:31:06 +08:00
|
|
|
/* Just print out one of them - this is only for diagnostics. */
|
|
|
|
return format[0]->name;
|
2004-08-09 03:49:43 +08:00
|
|
|
}
|
|
|
|
|
2010-03-09 03:28:27 +08:00
|
|
|
static const char *
|
|
|
|
pstring (const char *string)
|
|
|
|
{
|
|
|
|
if (string == NULL)
|
|
|
|
return "(null)";
|
|
|
|
return string;
|
|
|
|
}
|
|
|
|
|
1999-08-31 09:14:27 +08:00
|
|
|
EOF
|
|
|
|
|
|
|
|
# gdbarch open the gdbarch object
|
2000-09-04 19:40:20 +08:00
|
|
|
printf "\n"
|
|
|
|
printf "/* Maintain the struct gdbarch object */\n"
|
|
|
|
printf "\n"
|
|
|
|
printf "struct gdbarch\n"
|
|
|
|
printf "{\n"
|
2002-06-09 02:09:01 +08:00
|
|
|
printf " /* Has this architecture been fully initialized? */\n"
|
|
|
|
printf " int initialized_p;\n"
|
2003-07-23 03:49:58 +08:00
|
|
|
printf "\n"
|
|
|
|
printf " /* An obstack bound to the lifetime of the architecture. */\n"
|
|
|
|
printf " struct obstack *obstack;\n"
|
|
|
|
printf "\n"
|
2000-09-04 19:40:20 +08:00
|
|
|
printf " /* basic architectural information */\n"
|
2000-08-01 18:31:19 +08:00
|
|
|
function_list | while do_read
|
1999-08-31 09:14:27 +08:00
|
|
|
do
|
2000-04-21 12:17:18 +08:00
|
|
|
if class_is_info_p
|
|
|
|
then
|
2000-09-04 19:40:20 +08:00
|
|
|
printf " ${returntype} ${function};\n"
|
2000-04-21 12:17:18 +08:00
|
|
|
fi
|
1999-08-31 09:14:27 +08:00
|
|
|
done
|
2000-09-04 19:40:20 +08:00
|
|
|
printf "\n"
|
|
|
|
printf " /* target specific vector. */\n"
|
|
|
|
printf " struct gdbarch_tdep *tdep;\n"
|
|
|
|
printf " gdbarch_dump_tdep_ftype *dump_tdep;\n"
|
|
|
|
printf "\n"
|
|
|
|
printf " /* per-architecture data-pointers */\n"
|
2001-02-07 10:17:48 +08:00
|
|
|
printf " unsigned nr_data;\n"
|
2000-09-04 19:40:20 +08:00
|
|
|
printf " void **data;\n"
|
|
|
|
printf "\n"
|
|
|
|
printf " /* per-architecture swap-regions */\n"
|
|
|
|
printf " struct gdbarch_swap *swap;\n"
|
|
|
|
printf "\n"
|
1999-08-31 09:14:27 +08:00
|
|
|
cat <<EOF
|
|
|
|
/* Multi-arch values.
|
|
|
|
|
|
|
|
When extending this structure you must:
|
|
|
|
|
|
|
|
Add the field below.
|
|
|
|
|
|
|
|
Declare set/get functions and define the corresponding
|
|
|
|
macro in gdbarch.h.
|
|
|
|
|
|
|
|
gdbarch_alloc(): If zero/NULL is not a suitable default,
|
|
|
|
initialize the new field.
|
|
|
|
|
|
|
|
verify_gdbarch(): Confirm that the target updated the field
|
|
|
|
correctly.
|
|
|
|
|
2000-10-27 23:02:42 +08:00
|
|
|
gdbarch_dump(): Add a fprintf_unfiltered call so that the new
|
1999-08-31 09:14:27 +08:00
|
|
|
field is dumped out
|
|
|
|
|
2000-04-03 08:00:32 +08:00
|
|
|
\`\`startup_gdbarch()'': Append an initial value to the static
|
1999-08-31 09:14:27 +08:00
|
|
|
variable (base values on the host's c-type system).
|
|
|
|
|
|
|
|
get_gdbarch(): Implement the set/get functions (probably using
|
|
|
|
the macro's as shortcuts).
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
EOF
|
2000-08-01 18:31:19 +08:00
|
|
|
function_list | while do_read
|
1999-08-31 09:14:27 +08:00
|
|
|
do
|
2000-04-21 12:17:18 +08:00
|
|
|
if class_is_variable_p
|
|
|
|
then
|
2000-09-04 19:40:20 +08:00
|
|
|
printf " ${returntype} ${function};\n"
|
2000-04-21 12:17:18 +08:00
|
|
|
elif class_is_function_p
|
|
|
|
then
|
2004-08-09 04:50:57 +08:00
|
|
|
printf " gdbarch_${function}_ftype *${function};\n"
|
2000-04-21 12:17:18 +08:00
|
|
|
fi
|
1999-08-31 09:14:27 +08:00
|
|
|
done
|
2000-09-04 19:40:20 +08:00
|
|
|
printf "};\n"
|
1999-08-31 09:14:27 +08:00
|
|
|
|
|
|
|
# A pre-initialized vector
|
2000-09-04 19:40:20 +08:00
|
|
|
printf "\n"
|
|
|
|
printf "\n"
|
1999-08-31 09:14:27 +08:00
|
|
|
cat <<EOF
|
|
|
|
/* The default architecture uses host values (for want of a better
|
|
|
|
choice). */
|
|
|
|
EOF
|
2000-09-04 19:40:20 +08:00
|
|
|
printf "\n"
|
|
|
|
printf "extern const struct bfd_arch_info bfd_default_arch_struct;\n"
|
|
|
|
printf "\n"
|
|
|
|
printf "struct gdbarch startup_gdbarch =\n"
|
|
|
|
printf "{\n"
|
2002-06-09 02:09:01 +08:00
|
|
|
printf " 1, /* Always initialized. */\n"
|
2003-07-23 03:49:58 +08:00
|
|
|
printf " NULL, /* The obstack. */\n"
|
2000-09-04 19:40:20 +08:00
|
|
|
printf " /* basic architecture information */\n"
|
2000-06-10 13:37:47 +08:00
|
|
|
function_list | while do_read
|
1999-08-31 09:14:27 +08:00
|
|
|
do
|
2000-04-21 12:17:18 +08:00
|
|
|
if class_is_info_p
|
|
|
|
then
|
2003-06-08 01:09:19 +08:00
|
|
|
printf " ${staticdefault}, /* ${function} */\n"
|
2000-04-21 12:17:18 +08:00
|
|
|
fi
|
1999-08-31 09:14:27 +08:00
|
|
|
done
|
|
|
|
cat <<EOF
|
2000-06-10 13:37:47 +08:00
|
|
|
/* target specific vector and its dump routine */
|
|
|
|
NULL, NULL,
|
1999-08-31 09:14:27 +08:00
|
|
|
/*per-architecture data-pointers and swap regions */
|
|
|
|
0, NULL, NULL,
|
|
|
|
/* Multi-arch values */
|
|
|
|
EOF
|
2000-08-01 18:31:19 +08:00
|
|
|
function_list | while do_read
|
1999-08-31 09:14:27 +08:00
|
|
|
do
|
2000-04-21 12:17:18 +08:00
|
|
|
if class_is_function_p || class_is_variable_p
|
|
|
|
then
|
2003-06-08 01:09:19 +08:00
|
|
|
printf " ${staticdefault}, /* ${function} */\n"
|
2000-04-21 12:17:18 +08:00
|
|
|
fi
|
1999-08-31 09:14:27 +08:00
|
|
|
done
|
|
|
|
cat <<EOF
|
2000-04-03 08:00:32 +08:00
|
|
|
/* startup_gdbarch() */
|
1999-08-31 09:14:27 +08:00
|
|
|
};
|
2000-06-10 13:37:47 +08:00
|
|
|
|
* gdbarch.sh (target_gdbarch): New global variable.
(deprecated_current_gdbarch_select_hack): Set it.
* gdbarch.c, gdbarch.h: Regenerate.
* arch-utils.c (gdbarch_update_p): Use target_gdbarch instead
of current_gdbarch.
* target-descriptions.c (target_find_description): Likewise.
* arm-tdep.c (arm_update_current_architecture): Likewise.
(show_fp_model, arm_show_abi, arm_show_fallback_mode,
arm_show_force_mode): Likewise.
* mips-tdep.c (show_mask_address, show_mipsfpu_command,
show_mips_abi): Likewise.
* mep-tdep.c (me_module_register_set, current_me_module): Likewise.
* target.c (target_translate_tls_address): Use target_gdbarch
instead of current_gdbarch.
* remote.c (struct packet_reg): Likewise.
(get_remote_arch_state, packet_reg_from_regnum,
packet_reg_from_pnum, remote_check_symbols, remote_wait,
remote_address_masked, remote_insert_breakpoint,
remote_insert_hw_breakpoint, remote_read_description): Likewise.
* remote-m32r-sdi.c (m32r_resume, m32r_wait): Likewise.
* remote-mips.c (mips_open, mips_common_breakpoint): Likewise.
* cris-tdep.c (cris_can_use_hardware_watchpoint): Likewise.
* solib.c (solib_open, solib_map_sections, solib_read_symbols,
solib_add, info_sharedlibrary_command, solib_address,
solib_create_inferior_hook, in_solib_dynsym_resolve_code,
solib_global_lookup): Likewise.
* solib-frv.c (enable_break2, frv_relocate_main_executable): Likewise.
* solib-irix.c (irix_current_sos, irix_open_symbol_file_object):
Likewise.
* solib-sunos.c (sunos_solib_create_inferior_hook): Likewise.
* solib-svr4.c (exec_entry_point, enable_break, svr4_free_so,
set_solib_svr4_fetch_link_map_offsets, svr4_fetch_link_map_offsets):
Likewise.
* nto-tdep.c (nto_find_and_open_solib, nto_init_solib_absolute_prefix,
nto_truncate_ptr): Likewise.
* mips-linux-tdep.c (mips_linux_in_dynsym_stub): Likewise.
2008-08-27 01:21:29 +08:00
|
|
|
struct gdbarch *target_gdbarch = &startup_gdbarch;
|
1999-08-31 09:14:27 +08:00
|
|
|
EOF
|
|
|
|
|
|
|
|
# Create a new gdbarch struct
|
|
|
|
cat <<EOF
|
2003-11-10 10:50:04 +08:00
|
|
|
|
2000-08-11 10:55:38 +08:00
|
|
|
/* Create a new \`\`struct gdbarch'' based on information provided by
|
1999-08-31 09:14:27 +08:00
|
|
|
\`\`struct gdbarch_info''. */
|
|
|
|
EOF
|
2000-09-04 19:40:20 +08:00
|
|
|
printf "\n"
|
1999-08-31 09:14:27 +08:00
|
|
|
cat <<EOF
|
|
|
|
struct gdbarch *
|
|
|
|
gdbarch_alloc (const struct gdbarch_info *info,
|
|
|
|
struct gdbarch_tdep *tdep)
|
|
|
|
{
|
2007-11-12 14:47:56 +08:00
|
|
|
struct gdbarch *gdbarch;
|
2003-07-23 03:49:58 +08:00
|
|
|
|
|
|
|
/* Create an obstack for allocating all the per-architecture memory,
|
|
|
|
then use that to allocate the architecture vector. */
|
|
|
|
struct obstack *obstack = XMALLOC (struct obstack);
|
|
|
|
obstack_init (obstack);
|
2007-11-12 14:47:56 +08:00
|
|
|
gdbarch = obstack_alloc (obstack, sizeof (*gdbarch));
|
|
|
|
memset (gdbarch, 0, sizeof (*gdbarch));
|
|
|
|
gdbarch->obstack = obstack;
|
2001-10-01 00:54:28 +08:00
|
|
|
|
2007-11-12 14:47:56 +08:00
|
|
|
alloc_gdbarch_data (gdbarch);
|
2001-10-01 00:54:28 +08:00
|
|
|
|
2007-11-12 14:47:56 +08:00
|
|
|
gdbarch->tdep = tdep;
|
1999-08-31 09:14:27 +08:00
|
|
|
EOF
|
2000-09-04 19:40:20 +08:00
|
|
|
printf "\n"
|
2000-08-01 18:31:19 +08:00
|
|
|
function_list | while do_read
|
1999-08-31 09:14:27 +08:00
|
|
|
do
|
2000-04-21 12:17:18 +08:00
|
|
|
if class_is_info_p
|
|
|
|
then
|
2007-11-12 14:47:56 +08:00
|
|
|
printf " gdbarch->${function} = info->${function};\n"
|
2000-04-21 12:17:18 +08:00
|
|
|
fi
|
1999-08-31 09:14:27 +08:00
|
|
|
done
|
2000-09-04 19:40:20 +08:00
|
|
|
printf "\n"
|
|
|
|
printf " /* Force the explicit initialization of these. */\n"
|
2000-08-01 18:31:19 +08:00
|
|
|
function_list | while do_read
|
1999-08-31 09:14:27 +08:00
|
|
|
do
|
2000-04-21 12:17:18 +08:00
|
|
|
if class_is_function_p || class_is_variable_p
|
|
|
|
then
|
2001-06-08 04:52:47 +08:00
|
|
|
if [ -n "${predefault}" -a "x${predefault}" != "x0" ]
|
1999-08-31 09:14:27 +08:00
|
|
|
then
|
2007-11-12 14:47:56 +08:00
|
|
|
printf " gdbarch->${function} = ${predefault};\n"
|
1999-08-31 09:14:27 +08:00
|
|
|
fi
|
2000-04-21 12:17:18 +08:00
|
|
|
fi
|
1999-08-31 09:14:27 +08:00
|
|
|
done
|
|
|
|
cat <<EOF
|
|
|
|
/* gdbarch_alloc() */
|
|
|
|
|
2007-11-12 14:47:56 +08:00
|
|
|
return gdbarch;
|
1999-08-31 09:14:27 +08:00
|
|
|
}
|
|
|
|
EOF
|
|
|
|
|
2000-03-22 04:40:43 +08:00
|
|
|
# Free a gdbarch struct.
|
2000-09-04 19:40:20 +08:00
|
|
|
printf "\n"
|
|
|
|
printf "\n"
|
2000-03-22 04:40:43 +08:00
|
|
|
cat <<EOF
|
2003-07-23 03:49:58 +08:00
|
|
|
/* Allocate extra space using the per-architecture obstack. */
|
|
|
|
|
|
|
|
void *
|
|
|
|
gdbarch_obstack_zalloc (struct gdbarch *arch, long size)
|
|
|
|
{
|
|
|
|
void *data = obstack_alloc (arch->obstack, size);
|
2010-05-14 05:56:58 +08:00
|
|
|
|
2003-07-23 03:49:58 +08:00
|
|
|
memset (data, 0, size);
|
|
|
|
return data;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2000-03-22 04:40:43 +08:00
|
|
|
/* Free a gdbarch struct. This should never happen in normal
|
|
|
|
operation --- once you've created a gdbarch, you keep it around.
|
|
|
|
However, if an architecture's init function encounters an error
|
|
|
|
building the structure, it may need to clean up a partially
|
|
|
|
constructed gdbarch. */
|
2000-06-10 13:37:47 +08:00
|
|
|
|
2000-03-22 04:40:43 +08:00
|
|
|
void
|
|
|
|
gdbarch_free (struct gdbarch *arch)
|
|
|
|
{
|
2003-07-23 03:49:58 +08:00
|
|
|
struct obstack *obstack;
|
2010-05-14 05:56:58 +08:00
|
|
|
|
2001-02-07 10:17:48 +08:00
|
|
|
gdb_assert (arch != NULL);
|
2003-07-23 03:49:58 +08:00
|
|
|
gdb_assert (!arch->initialized_p);
|
|
|
|
obstack = arch->obstack;
|
|
|
|
obstack_free (obstack, 0); /* Includes the ARCH. */
|
|
|
|
xfree (obstack);
|
2000-03-22 04:40:43 +08:00
|
|
|
}
|
|
|
|
EOF
|
|
|
|
|
1999-08-31 09:14:27 +08:00
|
|
|
# verify a new architecture
|
|
|
|
cat <<EOF
|
2003-11-10 09:10:55 +08:00
|
|
|
|
|
|
|
|
|
|
|
/* Ensure that all values in a GDBARCH are reasonable. */
|
|
|
|
|
1999-08-31 09:14:27 +08:00
|
|
|
static void
|
2007-11-12 14:47:56 +08:00
|
|
|
verify_gdbarch (struct gdbarch *gdbarch)
|
1999-08-31 09:14:27 +08:00
|
|
|
{
|
2001-11-06 05:34:33 +08:00
|
|
|
struct ui_file *log;
|
|
|
|
struct cleanup *cleanups;
|
2009-08-14 08:32:33 +08:00
|
|
|
long length;
|
2001-11-06 05:34:33 +08:00
|
|
|
char *buf;
|
2010-05-14 05:56:58 +08:00
|
|
|
|
2001-11-06 05:34:33 +08:00
|
|
|
log = mem_fileopen ();
|
|
|
|
cleanups = make_cleanup_ui_file_delete (log);
|
1999-08-31 09:14:27 +08:00
|
|
|
/* fundamental */
|
2007-11-12 14:47:56 +08:00
|
|
|
if (gdbarch->byte_order == BFD_ENDIAN_UNKNOWN)
|
2001-11-06 05:34:33 +08:00
|
|
|
fprintf_unfiltered (log, "\n\tbyte-order");
|
2007-11-12 14:47:56 +08:00
|
|
|
if (gdbarch->bfd_arch_info == NULL)
|
2001-11-06 05:34:33 +08:00
|
|
|
fprintf_unfiltered (log, "\n\tbfd_arch_info");
|
1999-08-31 09:14:27 +08:00
|
|
|
/* Check those that need to be defined for the given multi-arch level. */
|
|
|
|
EOF
|
2000-08-01 18:31:19 +08:00
|
|
|
function_list | while do_read
|
1999-08-31 09:14:27 +08:00
|
|
|
do
|
2000-04-21 12:17:18 +08:00
|
|
|
if class_is_function_p || class_is_variable_p
|
|
|
|
then
|
2001-06-08 04:52:47 +08:00
|
|
|
if [ "x${invalid_p}" = "x0" ]
|
2000-04-03 08:00:32 +08:00
|
|
|
then
|
2000-09-04 19:40:20 +08:00
|
|
|
printf " /* Skip verify of ${function}, invalid_p == 0 */\n"
|
2000-04-21 12:17:18 +08:00
|
|
|
elif class_is_predicate_p
|
|
|
|
then
|
2000-09-04 19:40:20 +08:00
|
|
|
printf " /* Skip verify of ${function}, has predicate */\n"
|
2000-06-02 09:59:13 +08:00
|
|
|
# FIXME: See do_read for potential simplification
|
2001-06-08 04:52:47 +08:00
|
|
|
elif [ -n "${invalid_p}" -a -n "${postdefault}" ]
|
2000-06-02 09:59:13 +08:00
|
|
|
then
|
2000-09-04 19:40:20 +08:00
|
|
|
printf " if (${invalid_p})\n"
|
2007-11-12 14:47:56 +08:00
|
|
|
printf " gdbarch->${function} = ${postdefault};\n"
|
2001-06-08 04:52:47 +08:00
|
|
|
elif [ -n "${predefault}" -a -n "${postdefault}" ]
|
2000-06-02 09:59:13 +08:00
|
|
|
then
|
2007-11-12 14:47:56 +08:00
|
|
|
printf " if (gdbarch->${function} == ${predefault})\n"
|
|
|
|
printf " gdbarch->${function} = ${postdefault};\n"
|
2001-06-08 04:52:47 +08:00
|
|
|
elif [ -n "${postdefault}" ]
|
2000-06-02 09:59:13 +08:00
|
|
|
then
|
2007-11-12 14:47:56 +08:00
|
|
|
printf " if (gdbarch->${function} == 0)\n"
|
|
|
|
printf " gdbarch->${function} = ${postdefault};\n"
|
2001-06-08 04:52:47 +08:00
|
|
|
elif [ -n "${invalid_p}" ]
|
1999-08-31 09:14:27 +08:00
|
|
|
then
|
2004-09-03 00:01:33 +08:00
|
|
|
printf " if (${invalid_p})\n"
|
2001-11-06 05:34:33 +08:00
|
|
|
printf " fprintf_unfiltered (log, \"\\\\n\\\\t${function}\");\n"
|
2001-06-08 04:52:47 +08:00
|
|
|
elif [ -n "${predefault}" ]
|
1999-08-31 09:14:27 +08:00
|
|
|
then
|
2007-11-12 14:47:56 +08:00
|
|
|
printf " if (gdbarch->${function} == ${predefault})\n"
|
2001-11-06 05:34:33 +08:00
|
|
|
printf " fprintf_unfiltered (log, \"\\\\n\\\\t${function}\");\n"
|
1999-08-31 09:14:27 +08:00
|
|
|
fi
|
2000-04-21 12:17:18 +08:00
|
|
|
fi
|
1999-08-31 09:14:27 +08:00
|
|
|
done
|
|
|
|
cat <<EOF
|
2009-08-14 08:32:33 +08:00
|
|
|
buf = ui_file_xstrdup (log, &length);
|
2001-11-06 05:34:33 +08:00
|
|
|
make_cleanup (xfree, buf);
|
2009-08-14 08:32:33 +08:00
|
|
|
if (length > 0)
|
2001-11-06 05:34:33 +08:00
|
|
|
internal_error (__FILE__, __LINE__,
|
2005-02-18 Andrew Cagney <cagney@gnu.org>
Use add_setshow_zinteger_cmd through out. Re-sync gdbarch.sh
and gdbarch.c.
* breakpoint.c, frame.c, gdb-events.sh, gdbarch.sh: Update.
* gdbtypes.c, infrun.c, linux-nat.c, maint.c, monitor.c: Update.
* pa64solib.c, parse.c, remote-mips.c, ser-go32.c: Update.
* serial.c, solib-frv.c, somsolib.c, target.c, top.c: Update.
* varobj.c, cli/cli-cmds.c: Update.
* gdbarch.c, gdb-events.c: Regenerate.
2005-02-19 02:58:56 +08:00
|
|
|
_("verify_gdbarch: the following are invalid ...%s"),
|
2001-11-06 05:34:33 +08:00
|
|
|
buf);
|
|
|
|
do_cleanups (cleanups);
|
1999-08-31 09:14:27 +08:00
|
|
|
}
|
|
|
|
EOF
|
|
|
|
|
|
|
|
# dump the structure
|
2000-09-04 19:40:20 +08:00
|
|
|
printf "\n"
|
|
|
|
printf "\n"
|
1999-08-31 09:14:27 +08:00
|
|
|
cat <<EOF
|
2000-06-10 13:37:47 +08:00
|
|
|
/* Print out the details of the current architecture. */
|
|
|
|
|
1999-08-31 09:14:27 +08:00
|
|
|
void
|
2007-11-12 14:47:56 +08:00
|
|
|
gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file)
|
1999-08-31 09:14:27 +08:00
|
|
|
{
|
2004-09-03 01:22:08 +08:00
|
|
|
const char *gdb_nm_file = "<not-defined>";
|
2010-05-14 05:56:58 +08:00
|
|
|
|
2004-09-03 01:22:08 +08:00
|
|
|
#if defined (GDB_NM_FILE)
|
|
|
|
gdb_nm_file = GDB_NM_FILE;
|
|
|
|
#endif
|
|
|
|
fprintf_unfiltered (file,
|
|
|
|
"gdbarch_dump: GDB_NM_FILE = %s\\n",
|
|
|
|
gdb_nm_file);
|
1999-08-31 09:14:27 +08:00
|
|
|
EOF
|
2007-10-19 20:34:38 +08:00
|
|
|
function_list | sort -t: -k 3 | while do_read
|
1999-08-31 09:14:27 +08:00
|
|
|
do
|
2002-12-05 23:19:45 +08:00
|
|
|
# First the predicate
|
|
|
|
if class_is_predicate_p
|
|
|
|
then
|
2003-08-17 09:06:47 +08:00
|
|
|
printf " fprintf_unfiltered (file,\n"
|
2004-06-22 01:54:57 +08:00
|
|
|
printf " \"gdbarch_dump: gdbarch_${function}_p() = %%d\\\\n\",\n"
|
2007-11-12 14:47:56 +08:00
|
|
|
printf " gdbarch_${function}_p (gdbarch));\n"
|
2001-09-30 06:35:53 +08:00
|
|
|
fi
|
2004-06-22 01:54:57 +08:00
|
|
|
# Print the corresponding value.
|
2004-06-21 23:01:04 +08:00
|
|
|
if class_is_function_p
|
2000-06-10 13:37:47 +08:00
|
|
|
then
|
2003-08-17 09:06:47 +08:00
|
|
|
printf " fprintf_unfiltered (file,\n"
|
2009-01-09 19:06:48 +08:00
|
|
|
printf " \"gdbarch_dump: ${function} = <%%s>\\\\n\",\n"
|
|
|
|
printf " host_address_to_string (gdbarch->${function}));\n"
|
2000-06-10 13:37:47 +08:00
|
|
|
else
|
2004-06-22 01:54:57 +08:00
|
|
|
# It is a variable
|
2004-08-09 04:50:57 +08:00
|
|
|
case "${print}:${returntype}" in
|
|
|
|
:CORE_ADDR )
|
2008-09-05 20:57:16 +08:00
|
|
|
fmt="%s"
|
|
|
|
print="core_addr_to_string_nz (gdbarch->${function})"
|
2004-06-22 01:54:57 +08:00
|
|
|
;;
|
2004-08-09 04:50:57 +08:00
|
|
|
:* )
|
2004-06-22 01:54:57 +08:00
|
|
|
fmt="%s"
|
2008-09-05 06:49:30 +08:00
|
|
|
print="plongest (gdbarch->${function})"
|
2004-06-22 01:54:57 +08:00
|
|
|
;;
|
|
|
|
* )
|
2004-08-09 04:50:57 +08:00
|
|
|
fmt="%s"
|
2004-06-22 01:54:57 +08:00
|
|
|
;;
|
|
|
|
esac
|
2000-09-04 19:40:20 +08:00
|
|
|
printf " fprintf_unfiltered (file,\n"
|
2004-06-22 01:54:57 +08:00
|
|
|
printf " \"gdbarch_dump: ${function} = %s\\\\n\",\n" "${fmt}"
|
2000-09-04 19:40:20 +08:00
|
|
|
printf " ${print});\n"
|
2000-04-21 12:17:18 +08:00
|
|
|
fi
|
1999-08-31 09:14:27 +08:00
|
|
|
done
|
2000-05-11 19:49:21 +08:00
|
|
|
cat <<EOF
|
2007-11-12 14:47:56 +08:00
|
|
|
if (gdbarch->dump_tdep != NULL)
|
|
|
|
gdbarch->dump_tdep (gdbarch, file);
|
2000-05-11 19:49:21 +08:00
|
|
|
}
|
|
|
|
EOF
|
1999-08-31 09:14:27 +08:00
|
|
|
|
|
|
|
|
|
|
|
# GET/SET
|
2000-09-04 19:40:20 +08:00
|
|
|
printf "\n"
|
1999-08-31 09:14:27 +08:00
|
|
|
cat <<EOF
|
|
|
|
struct gdbarch_tdep *
|
|
|
|
gdbarch_tdep (struct gdbarch *gdbarch)
|
|
|
|
{
|
|
|
|
if (gdbarch_debug >= 2)
|
2000-09-04 19:40:20 +08:00
|
|
|
fprintf_unfiltered (gdb_stdlog, "gdbarch_tdep called\\n");
|
1999-08-31 09:14:27 +08:00
|
|
|
return gdbarch->tdep;
|
|
|
|
}
|
|
|
|
EOF
|
2000-09-04 19:40:20 +08:00
|
|
|
printf "\n"
|
2000-08-01 18:31:19 +08:00
|
|
|
function_list | while do_read
|
1999-08-31 09:14:27 +08:00
|
|
|
do
|
2000-04-21 12:17:18 +08:00
|
|
|
if class_is_predicate_p
|
|
|
|
then
|
2000-09-04 19:40:20 +08:00
|
|
|
printf "\n"
|
|
|
|
printf "int\n"
|
|
|
|
printf "gdbarch_${function}_p (struct gdbarch *gdbarch)\n"
|
|
|
|
printf "{\n"
|
2002-05-04 05:05:36 +08:00
|
|
|
printf " gdb_assert (gdbarch != NULL);\n"
|
2003-07-11 11:01:38 +08:00
|
|
|
printf " return ${predicate};\n"
|
2000-09-04 19:40:20 +08:00
|
|
|
printf "}\n"
|
2000-04-21 12:17:18 +08:00
|
|
|
fi
|
|
|
|
if class_is_function_p
|
|
|
|
then
|
2000-09-04 19:40:20 +08:00
|
|
|
printf "\n"
|
|
|
|
printf "${returntype}\n"
|
2001-06-08 04:52:47 +08:00
|
|
|
if [ "x${formal}" = "xvoid" ]
|
1999-08-31 09:14:27 +08:00
|
|
|
then
|
2000-09-04 19:40:20 +08:00
|
|
|
printf "gdbarch_${function} (struct gdbarch *gdbarch)\n"
|
1999-08-31 09:14:27 +08:00
|
|
|
else
|
2000-09-04 19:40:20 +08:00
|
|
|
printf "gdbarch_${function} (struct gdbarch *gdbarch, ${formal})\n"
|
1999-08-31 09:14:27 +08:00
|
|
|
fi
|
2000-09-04 19:40:20 +08:00
|
|
|
printf "{\n"
|
2002-05-04 05:05:36 +08:00
|
|
|
printf " gdb_assert (gdbarch != NULL);\n"
|
2003-07-11 06:01:14 +08:00
|
|
|
printf " gdb_assert (gdbarch->${function} != NULL);\n"
|
2003-07-11 11:01:38 +08:00
|
|
|
if class_is_predicate_p && test -n "${predefault}"
|
2002-12-01 Andrew Cagney <ac131313@redhat.com>
* gdbarch.sh (DEPRECATED_PC_IN_CALL_DUMMY): Rename
PC_IN_CALL_DUMMY. Change to predicate. Always allow call.
* gdbarch.h, gdbarch.c: Re-generate.
* config/sparc/tm-sparc.h, config/sparc/tm-sp64.h: Update.
* config/mn10200/tm-mn10200.h, config/h8500/tm-h8500.h: Update.
* config/pa/tm-hppa.h, frame.h: Update.
* x86-64-tdep.c, vax-tdep.c, sparc-tdep.c: Update.
* s390-tdep.c, ns32k-tdep.c, mn10300-tdep.c: Update.
* m68k-tdep.c, i386-tdep.c, frv-tdep.c: Update.
* cris-tdep.c, alpha-tdep.c: Update.
* frame.c (set_unwind_by_pc, create_new_frame): Use either
DEPRECATED_PC_IN_CALL_DUMMY or pc_in_dummy_frame.
(get_prev_frame): Ditto.
Index: doc/ChangeLog
2002-12-01 Andrew Cagney <ac131313@redhat.com>
* gdbint.texinfo (Target Architecture Definition): Delete
PC_IN_CALL_DUMMY.
2002-12-02 03:07:16 +08:00
|
|
|
then
|
|
|
|
# Allow a call to a function with a predicate.
|
2003-07-11 06:01:14 +08:00
|
|
|
printf " /* Do not check predicate: ${predicate}, allow call. */\n"
|
2002-12-01 Andrew Cagney <ac131313@redhat.com>
* gdbarch.sh (DEPRECATED_PC_IN_CALL_DUMMY): Rename
PC_IN_CALL_DUMMY. Change to predicate. Always allow call.
* gdbarch.h, gdbarch.c: Re-generate.
* config/sparc/tm-sparc.h, config/sparc/tm-sp64.h: Update.
* config/mn10200/tm-mn10200.h, config/h8500/tm-h8500.h: Update.
* config/pa/tm-hppa.h, frame.h: Update.
* x86-64-tdep.c, vax-tdep.c, sparc-tdep.c: Update.
* s390-tdep.c, ns32k-tdep.c, mn10300-tdep.c: Update.
* m68k-tdep.c, i386-tdep.c, frv-tdep.c: Update.
* cris-tdep.c, alpha-tdep.c: Update.
* frame.c (set_unwind_by_pc, create_new_frame): Use either
DEPRECATED_PC_IN_CALL_DUMMY or pc_in_dummy_frame.
(get_prev_frame): Ditto.
Index: doc/ChangeLog
2002-12-01 Andrew Cagney <ac131313@redhat.com>
* gdbint.texinfo (Target Architecture Definition): Delete
PC_IN_CALL_DUMMY.
2002-12-02 03:07:16 +08:00
|
|
|
fi
|
2000-09-04 19:40:20 +08:00
|
|
|
printf " if (gdbarch_debug >= 2)\n"
|
|
|
|
printf " fprintf_unfiltered (gdb_stdlog, \"gdbarch_${function} called\\\\n\");\n"
|
2001-06-08 04:52:47 +08:00
|
|
|
if [ "x${actual}" = "x-" -o "x${actual}" = "x" ]
|
2001-03-17 08:31:22 +08:00
|
|
|
then
|
|
|
|
if class_is_multiarch_p
|
|
|
|
then
|
|
|
|
params="gdbarch"
|
|
|
|
else
|
|
|
|
params=""
|
|
|
|
fi
|
|
|
|
else
|
|
|
|
if class_is_multiarch_p
|
|
|
|
then
|
|
|
|
params="gdbarch, ${actual}"
|
|
|
|
else
|
|
|
|
params="${actual}"
|
|
|
|
fi
|
|
|
|
fi
|
2001-06-08 04:52:47 +08:00
|
|
|
if [ "x${returntype}" = "xvoid" ]
|
1999-08-31 09:14:27 +08:00
|
|
|
then
|
2001-03-17 08:31:22 +08:00
|
|
|
printf " gdbarch->${function} (${params});\n"
|
1999-08-31 09:14:27 +08:00
|
|
|
else
|
2001-03-17 08:31:22 +08:00
|
|
|
printf " return gdbarch->${function} (${params});\n"
|
1999-08-31 09:14:27 +08:00
|
|
|
fi
|
2000-09-04 19:40:20 +08:00
|
|
|
printf "}\n"
|
|
|
|
printf "\n"
|
|
|
|
printf "void\n"
|
|
|
|
printf "set_gdbarch_${function} (struct gdbarch *gdbarch,\n"
|
|
|
|
printf " `echo ${function} | sed -e 's/./ /g'` gdbarch_${function}_ftype ${function})\n"
|
|
|
|
printf "{\n"
|
|
|
|
printf " gdbarch->${function} = ${function};\n"
|
|
|
|
printf "}\n"
|
2000-04-21 12:17:18 +08:00
|
|
|
elif class_is_variable_p
|
|
|
|
then
|
2000-09-04 19:40:20 +08:00
|
|
|
printf "\n"
|
|
|
|
printf "${returntype}\n"
|
|
|
|
printf "gdbarch_${function} (struct gdbarch *gdbarch)\n"
|
|
|
|
printf "{\n"
|
2002-05-04 05:05:36 +08:00
|
|
|
printf " gdb_assert (gdbarch != NULL);\n"
|
2001-06-08 04:52:47 +08:00
|
|
|
if [ "x${invalid_p}" = "x0" ]
|
2000-04-03 08:00:32 +08:00
|
|
|
then
|
2000-09-04 19:40:20 +08:00
|
|
|
printf " /* Skip verify of ${function}, invalid_p == 0 */\n"
|
2001-06-08 04:52:47 +08:00
|
|
|
elif [ -n "${invalid_p}" ]
|
1999-08-31 09:14:27 +08:00
|
|
|
then
|
2003-07-11 06:01:14 +08:00
|
|
|
printf " /* Check variable is valid. */\n"
|
|
|
|
printf " gdb_assert (!(${invalid_p}));\n"
|
2001-06-08 04:52:47 +08:00
|
|
|
elif [ -n "${predefault}" ]
|
1999-08-31 09:14:27 +08:00
|
|
|
then
|
2003-07-11 06:01:14 +08:00
|
|
|
printf " /* Check variable changed from pre-default. */\n"
|
|
|
|
printf " gdb_assert (gdbarch->${function} != ${predefault});\n"
|
1999-08-31 09:14:27 +08:00
|
|
|
fi
|
2000-09-04 19:40:20 +08:00
|
|
|
printf " if (gdbarch_debug >= 2)\n"
|
|
|
|
printf " fprintf_unfiltered (gdb_stdlog, \"gdbarch_${function} called\\\\n\");\n"
|
|
|
|
printf " return gdbarch->${function};\n"
|
|
|
|
printf "}\n"
|
|
|
|
printf "\n"
|
|
|
|
printf "void\n"
|
|
|
|
printf "set_gdbarch_${function} (struct gdbarch *gdbarch,\n"
|
|
|
|
printf " `echo ${function} | sed -e 's/./ /g'` ${returntype} ${function})\n"
|
|
|
|
printf "{\n"
|
|
|
|
printf " gdbarch->${function} = ${function};\n"
|
|
|
|
printf "}\n"
|
2000-04-21 12:17:18 +08:00
|
|
|
elif class_is_info_p
|
|
|
|
then
|
2000-09-04 19:40:20 +08:00
|
|
|
printf "\n"
|
|
|
|
printf "${returntype}\n"
|
|
|
|
printf "gdbarch_${function} (struct gdbarch *gdbarch)\n"
|
|
|
|
printf "{\n"
|
2002-05-04 05:05:36 +08:00
|
|
|
printf " gdb_assert (gdbarch != NULL);\n"
|
2000-09-04 19:40:20 +08:00
|
|
|
printf " if (gdbarch_debug >= 2)\n"
|
|
|
|
printf " fprintf_unfiltered (gdb_stdlog, \"gdbarch_${function} called\\\\n\");\n"
|
|
|
|
printf " return gdbarch->${function};\n"
|
|
|
|
printf "}\n"
|
2000-04-21 12:17:18 +08:00
|
|
|
fi
|
1999-08-31 09:14:27 +08:00
|
|
|
done
|
|
|
|
|
|
|
|
# All the trailing guff
|
|
|
|
cat <<EOF
|
|
|
|
|
|
|
|
|
2000-11-09 07:58:46 +08:00
|
|
|
/* Keep a registry of per-architecture data-pointers required by GDB
|
1999-08-31 09:14:27 +08:00
|
|
|
modules. */
|
|
|
|
|
|
|
|
struct gdbarch_data
|
|
|
|
{
|
2001-02-07 10:17:48 +08:00
|
|
|
unsigned index;
|
2002-06-09 02:09:01 +08:00
|
|
|
int init_p;
|
2004-03-16 04:38:08 +08:00
|
|
|
gdbarch_data_pre_init_ftype *pre_init;
|
|
|
|
gdbarch_data_post_init_ftype *post_init;
|
1999-08-31 09:14:27 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
struct gdbarch_data_registration
|
|
|
|
{
|
|
|
|
struct gdbarch_data *data;
|
|
|
|
struct gdbarch_data_registration *next;
|
|
|
|
};
|
|
|
|
|
2000-11-09 07:58:46 +08:00
|
|
|
struct gdbarch_data_registry
|
1999-08-31 09:14:27 +08:00
|
|
|
{
|
2001-02-07 10:17:48 +08:00
|
|
|
unsigned nr;
|
1999-08-31 09:14:27 +08:00
|
|
|
struct gdbarch_data_registration *registrations;
|
|
|
|
};
|
|
|
|
|
2000-11-09 07:58:46 +08:00
|
|
|
struct gdbarch_data_registry gdbarch_data_registry =
|
1999-08-31 09:14:27 +08:00
|
|
|
{
|
|
|
|
0, NULL,
|
|
|
|
};
|
|
|
|
|
2004-03-16 04:38:08 +08:00
|
|
|
static struct gdbarch_data *
|
|
|
|
gdbarch_data_register (gdbarch_data_pre_init_ftype *pre_init,
|
|
|
|
gdbarch_data_post_init_ftype *post_init)
|
1999-08-31 09:14:27 +08:00
|
|
|
{
|
|
|
|
struct gdbarch_data_registration **curr;
|
2010-05-14 05:56:58 +08:00
|
|
|
|
|
|
|
/* Append the new registration. */
|
2000-11-09 07:58:46 +08:00
|
|
|
for (curr = &gdbarch_data_registry.registrations;
|
1999-08-31 09:14:27 +08:00
|
|
|
(*curr) != NULL;
|
|
|
|
curr = &(*curr)->next);
|
|
|
|
(*curr) = XMALLOC (struct gdbarch_data_registration);
|
|
|
|
(*curr)->next = NULL;
|
|
|
|
(*curr)->data = XMALLOC (struct gdbarch_data);
|
2000-11-09 07:58:46 +08:00
|
|
|
(*curr)->data->index = gdbarch_data_registry.nr++;
|
2004-03-16 04:38:08 +08:00
|
|
|
(*curr)->data->pre_init = pre_init;
|
|
|
|
(*curr)->data->post_init = post_init;
|
2002-06-09 02:09:01 +08:00
|
|
|
(*curr)->data->init_p = 1;
|
1999-08-31 09:14:27 +08:00
|
|
|
return (*curr)->data;
|
|
|
|
}
|
|
|
|
|
2004-03-16 04:38:08 +08:00
|
|
|
struct gdbarch_data *
|
|
|
|
gdbarch_data_register_pre_init (gdbarch_data_pre_init_ftype *pre_init)
|
|
|
|
{
|
|
|
|
return gdbarch_data_register (pre_init, NULL);
|
|
|
|
}
|
|
|
|
|
|
|
|
struct gdbarch_data *
|
|
|
|
gdbarch_data_register_post_init (gdbarch_data_post_init_ftype *post_init)
|
|
|
|
{
|
|
|
|
return gdbarch_data_register (NULL, post_init);
|
|
|
|
}
|
1999-08-31 09:14:27 +08:00
|
|
|
|
2001-06-06 22:46:30 +08:00
|
|
|
/* Create/delete the gdbarch data vector. */
|
2001-02-07 10:17:48 +08:00
|
|
|
|
|
|
|
static void
|
2001-06-06 22:46:30 +08:00
|
|
|
alloc_gdbarch_data (struct gdbarch *gdbarch)
|
2001-02-07 10:17:48 +08:00
|
|
|
{
|
2001-06-06 22:46:30 +08:00
|
|
|
gdb_assert (gdbarch->data == NULL);
|
|
|
|
gdbarch->nr_data = gdbarch_data_registry.nr;
|
2003-07-23 03:49:58 +08:00
|
|
|
gdbarch->data = GDBARCH_OBSTACK_CALLOC (gdbarch, gdbarch->nr_data, void *);
|
2001-06-06 22:46:30 +08:00
|
|
|
}
|
2001-06-02 11:50:56 +08:00
|
|
|
|
2002-06-09 02:09:01 +08:00
|
|
|
/* Initialize the current value of the specified per-architecture
|
2001-06-06 22:46:30 +08:00
|
|
|
data-pointer. */
|
|
|
|
|
2001-02-07 10:17:48 +08:00
|
|
|
void
|
2004-03-16 04:38:08 +08:00
|
|
|
deprecated_set_gdbarch_data (struct gdbarch *gdbarch,
|
|
|
|
struct gdbarch_data *data,
|
|
|
|
void *pointer)
|
2001-02-07 10:17:48 +08:00
|
|
|
{
|
|
|
|
gdb_assert (data->index < gdbarch->nr_data);
|
2003-07-23 03:49:58 +08:00
|
|
|
gdb_assert (gdbarch->data[data->index] == NULL);
|
2004-03-16 04:38:08 +08:00
|
|
|
gdb_assert (data->pre_init == NULL);
|
2001-02-07 10:17:48 +08:00
|
|
|
gdbarch->data[data->index] = pointer;
|
|
|
|
}
|
|
|
|
|
1999-08-31 09:14:27 +08:00
|
|
|
/* Return the current value of the specified per-architecture
|
|
|
|
data-pointer. */
|
|
|
|
|
|
|
|
void *
|
2002-05-12 09:02:58 +08:00
|
|
|
gdbarch_data (struct gdbarch *gdbarch, struct gdbarch_data *data)
|
1999-08-31 09:14:27 +08:00
|
|
|
{
|
2002-05-12 09:02:58 +08:00
|
|
|
gdb_assert (data->index < gdbarch->nr_data);
|
2004-03-16 04:38:08 +08:00
|
|
|
if (gdbarch->data[data->index] == NULL)
|
2002-06-09 02:09:01 +08:00
|
|
|
{
|
2004-03-16 04:38:08 +08:00
|
|
|
/* The data-pointer isn't initialized, call init() to get a
|
|
|
|
value. */
|
|
|
|
if (data->pre_init != NULL)
|
|
|
|
/* Mid architecture creation: pass just the obstack, and not
|
|
|
|
the entire architecture, as that way it isn't possible for
|
|
|
|
pre-init code to refer to undefined architecture
|
|
|
|
fields. */
|
|
|
|
gdbarch->data[data->index] = data->pre_init (gdbarch->obstack);
|
|
|
|
else if (gdbarch->initialized_p
|
|
|
|
&& data->post_init != NULL)
|
|
|
|
/* Post architecture creation: pass the entire architecture
|
|
|
|
(as all fields are valid), but be careful to also detect
|
|
|
|
recursive references. */
|
|
|
|
{
|
|
|
|
gdb_assert (data->init_p);
|
|
|
|
data->init_p = 0;
|
|
|
|
gdbarch->data[data->index] = data->post_init (gdbarch);
|
|
|
|
data->init_p = 1;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
/* The architecture initialization hasn't completed - punt -
|
|
|
|
hope that the caller knows what they are doing. Once
|
|
|
|
deprecated_set_gdbarch_data has been initialized, this can be
|
|
|
|
changed to an internal error. */
|
|
|
|
return NULL;
|
2002-06-09 02:09:01 +08:00
|
|
|
gdb_assert (gdbarch->data[data->index] != NULL);
|
|
|
|
}
|
2002-05-12 09:02:58 +08:00
|
|
|
return gdbarch->data[data->index];
|
1999-08-31 09:14:27 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2000-11-09 07:58:46 +08:00
|
|
|
/* Keep a registry of the architectures known by GDB. */
|
1999-08-31 09:14:27 +08:00
|
|
|
|
2000-06-10 13:37:47 +08:00
|
|
|
struct gdbarch_registration
|
1999-08-31 09:14:27 +08:00
|
|
|
{
|
|
|
|
enum bfd_architecture bfd_architecture;
|
|
|
|
gdbarch_init_ftype *init;
|
2000-06-10 13:37:47 +08:00
|
|
|
gdbarch_dump_tdep_ftype *dump_tdep;
|
1999-08-31 09:14:27 +08:00
|
|
|
struct gdbarch_list *arches;
|
2000-06-10 13:37:47 +08:00
|
|
|
struct gdbarch_registration *next;
|
1999-08-31 09:14:27 +08:00
|
|
|
};
|
|
|
|
|
2000-11-09 07:58:46 +08:00
|
|
|
static struct gdbarch_registration *gdbarch_registry = NULL;
|
1999-08-31 09:14:27 +08:00
|
|
|
|
2000-06-07 12:38:02 +08:00
|
|
|
static void
|
|
|
|
append_name (const char ***buf, int *nr, const char *name)
|
|
|
|
{
|
|
|
|
*buf = xrealloc (*buf, sizeof (char**) * (*nr + 1));
|
|
|
|
(*buf)[*nr] = name;
|
|
|
|
*nr += 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
const char **
|
|
|
|
gdbarch_printable_names (void)
|
|
|
|
{
|
2003-08-17 09:06:47 +08:00
|
|
|
/* Accumulate a list of names based on the registed list of
|
|
|
|
architectures. */
|
|
|
|
int nr_arches = 0;
|
|
|
|
const char **arches = NULL;
|
|
|
|
struct gdbarch_registration *rego;
|
2010-05-14 05:56:58 +08:00
|
|
|
|
2003-08-17 09:06:47 +08:00
|
|
|
for (rego = gdbarch_registry;
|
|
|
|
rego != NULL;
|
|
|
|
rego = rego->next)
|
2000-06-07 12:38:02 +08:00
|
|
|
{
|
2003-08-17 09:06:47 +08:00
|
|
|
const struct bfd_arch_info *ap;
|
|
|
|
ap = bfd_lookup_arch (rego->bfd_architecture, 0);
|
|
|
|
if (ap == NULL)
|
|
|
|
internal_error (__FILE__, __LINE__,
|
2005-02-18 Andrew Cagney <cagney@gnu.org>
Use add_setshow_zinteger_cmd through out. Re-sync gdbarch.sh
and gdbarch.c.
* breakpoint.c, frame.c, gdb-events.sh, gdbarch.sh: Update.
* gdbtypes.c, infrun.c, linux-nat.c, maint.c, monitor.c: Update.
* pa64solib.c, parse.c, remote-mips.c, ser-go32.c: Update.
* serial.c, solib-frv.c, somsolib.c, target.c, top.c: Update.
* varobj.c, cli/cli-cmds.c: Update.
* gdbarch.c, gdb-events.c: Regenerate.
2005-02-19 02:58:56 +08:00
|
|
|
_("gdbarch_architecture_names: multi-arch unknown"));
|
2003-08-17 09:06:47 +08:00
|
|
|
do
|
|
|
|
{
|
|
|
|
append_name (&arches, &nr_arches, ap->printable_name);
|
|
|
|
ap = ap->next;
|
|
|
|
}
|
|
|
|
while (ap != NULL);
|
2000-06-07 12:38:02 +08:00
|
|
|
}
|
2003-08-17 09:06:47 +08:00
|
|
|
append_name (&arches, &nr_arches, NULL);
|
|
|
|
return arches;
|
2000-06-07 12:38:02 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
1999-08-31 09:14:27 +08:00
|
|
|
void
|
2000-06-10 13:37:47 +08:00
|
|
|
gdbarch_register (enum bfd_architecture bfd_architecture,
|
|
|
|
gdbarch_init_ftype *init,
|
|
|
|
gdbarch_dump_tdep_ftype *dump_tdep)
|
1999-08-31 09:14:27 +08:00
|
|
|
{
|
2000-06-10 13:37:47 +08:00
|
|
|
struct gdbarch_registration **curr;
|
1999-08-31 09:14:27 +08:00
|
|
|
const struct bfd_arch_info *bfd_arch_info;
|
2010-05-14 05:56:58 +08:00
|
|
|
|
2000-10-28 03:17:57 +08:00
|
|
|
/* Check that BFD recognizes this architecture */
|
1999-08-31 09:14:27 +08:00
|
|
|
bfd_arch_info = bfd_lookup_arch (bfd_architecture, 0);
|
|
|
|
if (bfd_arch_info == NULL)
|
|
|
|
{
|
2001-02-08 14:03:54 +08:00
|
|
|
internal_error (__FILE__, __LINE__,
|
2005-02-18 Andrew Cagney <cagney@gnu.org>
Use add_setshow_zinteger_cmd through out. Re-sync gdbarch.sh
and gdbarch.c.
* breakpoint.c, frame.c, gdb-events.sh, gdbarch.sh: Update.
* gdbtypes.c, infrun.c, linux-nat.c, maint.c, monitor.c: Update.
* pa64solib.c, parse.c, remote-mips.c, ser-go32.c: Update.
* serial.c, solib-frv.c, somsolib.c, target.c, top.c: Update.
* varobj.c, cli/cli-cmds.c: Update.
* gdbarch.c, gdb-events.c: Regenerate.
2005-02-19 02:58:56 +08:00
|
|
|
_("gdbarch: Attempt to register unknown architecture (%d)"),
|
2001-02-08 14:03:54 +08:00
|
|
|
bfd_architecture);
|
1999-08-31 09:14:27 +08:00
|
|
|
}
|
|
|
|
/* Check that we haven't seen this architecture before */
|
2000-11-09 07:58:46 +08:00
|
|
|
for (curr = &gdbarch_registry;
|
1999-08-31 09:14:27 +08:00
|
|
|
(*curr) != NULL;
|
|
|
|
curr = &(*curr)->next)
|
|
|
|
{
|
|
|
|
if (bfd_architecture == (*curr)->bfd_architecture)
|
2001-02-08 14:03:54 +08:00
|
|
|
internal_error (__FILE__, __LINE__,
|
2005-02-18 Andrew Cagney <cagney@gnu.org>
Use add_setshow_zinteger_cmd through out. Re-sync gdbarch.sh
and gdbarch.c.
* breakpoint.c, frame.c, gdb-events.sh, gdbarch.sh: Update.
* gdbtypes.c, infrun.c, linux-nat.c, maint.c, monitor.c: Update.
* pa64solib.c, parse.c, remote-mips.c, ser-go32.c: Update.
* serial.c, solib-frv.c, somsolib.c, target.c, top.c: Update.
* varobj.c, cli/cli-cmds.c: Update.
* gdbarch.c, gdb-events.c: Regenerate.
2005-02-19 02:58:56 +08:00
|
|
|
_("gdbarch: Duplicate registraration of architecture (%s)"),
|
2001-02-08 14:03:54 +08:00
|
|
|
bfd_arch_info->printable_name);
|
1999-08-31 09:14:27 +08:00
|
|
|
}
|
|
|
|
/* log it */
|
|
|
|
if (gdbarch_debug)
|
2009-01-09 19:06:48 +08:00
|
|
|
fprintf_unfiltered (gdb_stdlog, "register_gdbarch_init (%s, %s)\n",
|
1999-08-31 09:14:27 +08:00
|
|
|
bfd_arch_info->printable_name,
|
2009-01-09 19:06:48 +08:00
|
|
|
host_address_to_string (init));
|
1999-08-31 09:14:27 +08:00
|
|
|
/* Append it */
|
2000-06-10 13:37:47 +08:00
|
|
|
(*curr) = XMALLOC (struct gdbarch_registration);
|
1999-08-31 09:14:27 +08:00
|
|
|
(*curr)->bfd_architecture = bfd_architecture;
|
|
|
|
(*curr)->init = init;
|
2000-06-10 13:37:47 +08:00
|
|
|
(*curr)->dump_tdep = dump_tdep;
|
1999-08-31 09:14:27 +08:00
|
|
|
(*curr)->arches = NULL;
|
|
|
|
(*curr)->next = NULL;
|
2000-06-10 13:37:47 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
register_gdbarch_init (enum bfd_architecture bfd_architecture,
|
|
|
|
gdbarch_init_ftype *init)
|
|
|
|
{
|
|
|
|
gdbarch_register (bfd_architecture, init, NULL);
|
1999-08-31 09:14:27 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2006-11-29 06:10:26 +08:00
|
|
|
/* Look for an architecture using gdbarch_info. */
|
1999-08-31 09:14:27 +08:00
|
|
|
|
|
|
|
struct gdbarch_list *
|
|
|
|
gdbarch_list_lookup_by_info (struct gdbarch_list *arches,
|
|
|
|
const struct gdbarch_info *info)
|
|
|
|
{
|
|
|
|
for (; arches != NULL; arches = arches->next)
|
|
|
|
{
|
|
|
|
if (info->bfd_arch_info != arches->gdbarch->bfd_arch_info)
|
|
|
|
continue;
|
|
|
|
if (info->byte_order != arches->gdbarch->byte_order)
|
|
|
|
continue;
|
2003-01-05 07:38:46 +08:00
|
|
|
if (info->osabi != arches->gdbarch->osabi)
|
|
|
|
continue;
|
2006-11-29 06:10:26 +08:00
|
|
|
if (info->target_desc != arches->gdbarch->target_desc)
|
|
|
|
continue;
|
1999-08-31 09:14:27 +08:00
|
|
|
return arches;
|
|
|
|
}
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2003-11-10 12:39:17 +08:00
|
|
|
/* Find an architecture that matches the specified INFO. Create a new
|
2009-07-03 01:29:17 +08:00
|
|
|
architecture if needed. Return that new architecture. */
|
1999-08-31 09:14:27 +08:00
|
|
|
|
2009-07-03 01:29:17 +08:00
|
|
|
struct gdbarch *
|
|
|
|
gdbarch_find_by_info (struct gdbarch_info info)
|
1999-08-31 09:14:27 +08:00
|
|
|
{
|
|
|
|
struct gdbarch *new_gdbarch;
|
2000-06-10 13:37:47 +08:00
|
|
|
struct gdbarch_registration *rego;
|
1999-08-31 09:14:27 +08:00
|
|
|
|
2001-05-15 00:43:35 +08:00
|
|
|
/* Fill in missing parts of the INFO struct using a number of
|
2006-11-11 03:20:37 +08:00
|
|
|
sources: "set ..."; INFOabfd supplied; and the global
|
|
|
|
defaults. */
|
|
|
|
gdbarch_info_fill (&info);
|
2003-01-05 07:38:46 +08:00
|
|
|
|
2001-05-15 00:43:35 +08:00
|
|
|
/* Must have found some sort of architecture. */
|
|
|
|
gdb_assert (info.bfd_arch_info != NULL);
|
1999-08-31 09:14:27 +08:00
|
|
|
|
|
|
|
if (gdbarch_debug)
|
|
|
|
{
|
|
|
|
fprintf_unfiltered (gdb_stdlog,
|
2009-07-03 01:29:17 +08:00
|
|
|
"gdbarch_find_by_info: info.bfd_arch_info %s\n",
|
1999-08-31 09:14:27 +08:00
|
|
|
(info.bfd_arch_info != NULL
|
|
|
|
? info.bfd_arch_info->printable_name
|
|
|
|
: "(null)"));
|
|
|
|
fprintf_unfiltered (gdb_stdlog,
|
2009-07-03 01:29:17 +08:00
|
|
|
"gdbarch_find_by_info: info.byte_order %d (%s)\n",
|
1999-08-31 09:14:27 +08:00
|
|
|
info.byte_order,
|
2002-01-05 12:30:46 +08:00
|
|
|
(info.byte_order == BFD_ENDIAN_BIG ? "big"
|
2001-12-16 00:53:24 +08:00
|
|
|
: info.byte_order == BFD_ENDIAN_LITTLE ? "little"
|
1999-08-31 09:14:27 +08:00
|
|
|
: "default"));
|
2003-01-05 07:38:46 +08:00
|
|
|
fprintf_unfiltered (gdb_stdlog,
|
2009-07-03 01:29:17 +08:00
|
|
|
"gdbarch_find_by_info: info.osabi %d (%s)\n",
|
2003-01-05 07:38:46 +08:00
|
|
|
info.osabi, gdbarch_osabi_name (info.osabi));
|
1999-08-31 09:14:27 +08:00
|
|
|
fprintf_unfiltered (gdb_stdlog,
|
2009-07-03 01:29:17 +08:00
|
|
|
"gdbarch_find_by_info: info.abfd %s\n",
|
2009-01-09 19:06:48 +08:00
|
|
|
host_address_to_string (info.abfd));
|
1999-08-31 09:14:27 +08:00
|
|
|
fprintf_unfiltered (gdb_stdlog,
|
2009-07-03 01:29:17 +08:00
|
|
|
"gdbarch_find_by_info: info.tdep_info %s\n",
|
2009-01-09 19:06:48 +08:00
|
|
|
host_address_to_string (info.tdep_info));
|
1999-08-31 09:14:27 +08:00
|
|
|
}
|
|
|
|
|
2003-11-10 12:39:17 +08:00
|
|
|
/* Find the tdep code that knows about this architecture. */
|
2001-05-15 00:43:35 +08:00
|
|
|
for (rego = gdbarch_registry;
|
|
|
|
rego != NULL;
|
|
|
|
rego = rego->next)
|
|
|
|
if (rego->bfd_architecture == info.bfd_arch_info->arch)
|
|
|
|
break;
|
|
|
|
if (rego == NULL)
|
|
|
|
{
|
|
|
|
if (gdbarch_debug)
|
2009-07-03 01:29:17 +08:00
|
|
|
fprintf_unfiltered (gdb_stdlog, "gdbarch_find_by_info: "
|
2003-11-10 12:39:17 +08:00
|
|
|
"No matching architecture\n");
|
2001-05-15 00:43:35 +08:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2003-11-10 12:39:17 +08:00
|
|
|
/* Ask the tdep code for an architecture that matches "info". */
|
1999-08-31 09:14:27 +08:00
|
|
|
new_gdbarch = rego->init (info, rego->arches);
|
|
|
|
|
2003-11-10 12:39:17 +08:00
|
|
|
/* Did the tdep code like it? No. Reject the change and revert to
|
|
|
|
the old architecture. */
|
1999-08-31 09:14:27 +08:00
|
|
|
if (new_gdbarch == NULL)
|
|
|
|
{
|
|
|
|
if (gdbarch_debug)
|
2009-07-03 01:29:17 +08:00
|
|
|
fprintf_unfiltered (gdb_stdlog, "gdbarch_find_by_info: "
|
2003-11-10 12:39:17 +08:00
|
|
|
"Target rejected architecture\n");
|
|
|
|
return NULL;
|
1999-08-31 09:14:27 +08:00
|
|
|
}
|
|
|
|
|
2003-11-10 12:39:17 +08:00
|
|
|
/* Is this a pre-existing architecture (as determined by already
|
|
|
|
being initialized)? Move it to the front of the architecture
|
|
|
|
list (keeping the list sorted Most Recently Used). */
|
|
|
|
if (new_gdbarch->initialized_p)
|
1999-08-31 09:14:27 +08:00
|
|
|
{
|
2003-11-10 12:39:17 +08:00
|
|
|
struct gdbarch_list **list;
|
|
|
|
struct gdbarch_list *this;
|
1999-08-31 09:14:27 +08:00
|
|
|
if (gdbarch_debug)
|
2009-07-03 01:29:17 +08:00
|
|
|
fprintf_unfiltered (gdb_stdlog, "gdbarch_find_by_info: "
|
2009-01-09 19:06:48 +08:00
|
|
|
"Previous architecture %s (%s) selected\n",
|
|
|
|
host_address_to_string (new_gdbarch),
|
1999-08-31 09:14:27 +08:00
|
|
|
new_gdbarch->bfd_arch_info->printable_name);
|
2003-11-10 12:39:17 +08:00
|
|
|
/* Find the existing arch in the list. */
|
|
|
|
for (list = ®o->arches;
|
|
|
|
(*list) != NULL && (*list)->gdbarch != new_gdbarch;
|
|
|
|
list = &(*list)->next);
|
|
|
|
/* It had better be in the list of architectures. */
|
|
|
|
gdb_assert ((*list) != NULL && (*list)->gdbarch == new_gdbarch);
|
|
|
|
/* Unlink THIS. */
|
|
|
|
this = (*list);
|
|
|
|
(*list) = this->next;
|
|
|
|
/* Insert THIS at the front. */
|
|
|
|
this->next = rego->arches;
|
|
|
|
rego->arches = this;
|
|
|
|
/* Return it. */
|
|
|
|
return new_gdbarch;
|
1999-08-31 09:14:27 +08:00
|
|
|
}
|
|
|
|
|
2003-11-10 12:39:17 +08:00
|
|
|
/* It's a new architecture. */
|
|
|
|
if (gdbarch_debug)
|
2009-07-03 01:29:17 +08:00
|
|
|
fprintf_unfiltered (gdb_stdlog, "gdbarch_find_by_info: "
|
2009-01-09 19:06:48 +08:00
|
|
|
"New architecture %s (%s) selected\n",
|
|
|
|
host_address_to_string (new_gdbarch),
|
2003-11-10 12:39:17 +08:00
|
|
|
new_gdbarch->bfd_arch_info->printable_name);
|
|
|
|
|
|
|
|
/* Insert the new architecture into the front of the architecture
|
|
|
|
list (keep the list sorted Most Recently Used). */
|
2002-04-21 01:41:18 +08:00
|
|
|
{
|
|
|
|
struct gdbarch_list *this = XMALLOC (struct gdbarch_list);
|
|
|
|
this->next = rego->arches;
|
|
|
|
this->gdbarch = new_gdbarch;
|
|
|
|
rego->arches = this;
|
|
|
|
}
|
1999-08-31 09:14:27 +08:00
|
|
|
|
2000-06-10 13:37:47 +08:00
|
|
|
/* Check that the newly installed architecture is valid. Plug in
|
|
|
|
any post init values. */
|
|
|
|
new_gdbarch->dump_tdep = rego->dump_tdep;
|
1999-08-31 09:14:27 +08:00
|
|
|
verify_gdbarch (new_gdbarch);
|
2003-11-10 12:39:17 +08:00
|
|
|
new_gdbarch->initialized_p = 1;
|
1999-08-31 09:14:27 +08:00
|
|
|
|
2000-06-10 13:37:47 +08:00
|
|
|
if (gdbarch_debug)
|
2003-11-10 12:39:17 +08:00
|
|
|
gdbarch_dump (new_gdbarch, gdb_stdlog);
|
|
|
|
|
|
|
|
return new_gdbarch;
|
|
|
|
}
|
|
|
|
|
* gdbarch.sh (gdbarch_swap_ftype, deprecated_register_gdbarch_swap,
DEPRECATED_REGISTER_GDBARCH_SWAP): Remove.
(struct gdbarch_swap, struct gdbarch_swap_registration,
struct gdbarch_swap_registry, gdbarch_swap_registry,
current_gdbarch_swap_init_hack, current_gdbarch_swap_out_hack,
current_gdbarch_swap_in_hack): Remove.
(find_arch_by_info): Do not call current_gdbarch_swap_init_hack.
(gdbarch_find_by_info): Do not call current_gdbarch_swap_in_hack
and current_gdbarch_swap_out_hack, update current_gdbarch directly.
(deprecated_current_gdbarch_select_hack): Likewise.
* gdbarch.h, gdbarch.c: Regenerate.
2007-06-22 20:45:38 +08:00
|
|
|
/* Make the specified architecture current. */
|
2003-11-10 12:39:17 +08:00
|
|
|
|
|
|
|
void
|
2009-07-03 01:29:17 +08:00
|
|
|
deprecated_target_gdbarch_select_hack (struct gdbarch *new_gdbarch)
|
2003-11-10 12:39:17 +08:00
|
|
|
{
|
|
|
|
gdb_assert (new_gdbarch != NULL);
|
|
|
|
gdb_assert (new_gdbarch->initialized_p);
|
* gdbarch.sh (target_gdbarch): New global variable.
(deprecated_current_gdbarch_select_hack): Set it.
* gdbarch.c, gdbarch.h: Regenerate.
* arch-utils.c (gdbarch_update_p): Use target_gdbarch instead
of current_gdbarch.
* target-descriptions.c (target_find_description): Likewise.
* arm-tdep.c (arm_update_current_architecture): Likewise.
(show_fp_model, arm_show_abi, arm_show_fallback_mode,
arm_show_force_mode): Likewise.
* mips-tdep.c (show_mask_address, show_mipsfpu_command,
show_mips_abi): Likewise.
* mep-tdep.c (me_module_register_set, current_me_module): Likewise.
* target.c (target_translate_tls_address): Use target_gdbarch
instead of current_gdbarch.
* remote.c (struct packet_reg): Likewise.
(get_remote_arch_state, packet_reg_from_regnum,
packet_reg_from_pnum, remote_check_symbols, remote_wait,
remote_address_masked, remote_insert_breakpoint,
remote_insert_hw_breakpoint, remote_read_description): Likewise.
* remote-m32r-sdi.c (m32r_resume, m32r_wait): Likewise.
* remote-mips.c (mips_open, mips_common_breakpoint): Likewise.
* cris-tdep.c (cris_can_use_hardware_watchpoint): Likewise.
* solib.c (solib_open, solib_map_sections, solib_read_symbols,
solib_add, info_sharedlibrary_command, solib_address,
solib_create_inferior_hook, in_solib_dynsym_resolve_code,
solib_global_lookup): Likewise.
* solib-frv.c (enable_break2, frv_relocate_main_executable): Likewise.
* solib-irix.c (irix_current_sos, irix_open_symbol_file_object):
Likewise.
* solib-sunos.c (sunos_solib_create_inferior_hook): Likewise.
* solib-svr4.c (exec_entry_point, enable_break, svr4_free_so,
set_solib_svr4_fetch_link_map_offsets, svr4_fetch_link_map_offsets):
Likewise.
* nto-tdep.c (nto_find_and_open_solib, nto_init_solib_absolute_prefix,
nto_truncate_ptr): Likewise.
* mips-linux-tdep.c (mips_linux_in_dynsym_stub): Likewise.
2008-08-27 01:21:29 +08:00
|
|
|
target_gdbarch = new_gdbarch;
|
gdb:
* tui/tui-hooks.c: Include observer.h.
(tui_event_default, tui_old_event_hooks, tui_event_hooks):
Remove.
(tui_bp_created_observer, tui_bp_deleted_observer,
tui_bp_modified_observer): New globals.
(tui_install_hooks): Use observers, not events.
(tui_remove_hooks): Likewise.
* mi/mi-cmd-break.c: Include observer.h, not gdb-events.h.
(mi_breakpoint_observers_installed, mi_can_breakpoint_notify): New
globals.
(breakpoint_notify): Check mi_can_breakpoint_notify.
(breakpoint_hooks): Remove.
(mi_cmd_break_insert): Attach observers. Don't use events.
* tracepoint.c: Include observer.h, not gdb-events.h.
(tracepoint_operation, trace_pass_command): Notify observer.
* interps.c: Don't include gdb-events.h.
(clear_interpreter_hooks): Don't call clear_gdb_event_hooks.
* gdbarch.c: Rebuild.
* gdbarch.sh: Emit include for observer.h, not gdb-events.h.
(deprecated_current_gdbarch_select_hack): Notify observer.
* breakpoint.h: Don't include gdb-events.h.
* breakpoint.c: Don't include gdb-events.h.
(condition_command): Notify observer.
(commands_command): Likewise.
(commands_from_control_command): Likewise.
(mention, delete_breakpoint, set_ignore_count): Likewise.
(disable_breakpoint, do_enable_breakpoint): Likewise.
* Makefile.in (gdb_events_h): Remove.
(breakpoint_h): Update.
(COMMON_OBS): Remove gdb-events.o.
(gdb-events.o): Remove.
(breakpoint.o, gdbarch.o, interps.o, tracepoint.o, gdbtk-bp.o,
gdbtk-hooks.o, mi-cmd-break.o, tui-hooks.o): Update.
* gdb-events.c: Remove.
* gdb-events.h: Remove.
* gdb-events.sh: Remove.
gdb/doc:
* observer.texi (GDB Observers): Document new observers:
breakpoint_created, breakpoint_deleted, breakpoint_modified,
tracepoint_created, tracepoint_deleted, tracepoint_modified,
architecture_changed.
gdb/gdbtk:
* generic/gdbtk-hooks.c: Include observer.h, not gdb-events.h.
(gdbtk_add_hooks): Use observers, not events.
(gdbtk_architecture_changed): Add argument, for observer.
* generic/gdbtk-bp.c: Include observer.h.
(gdb_set_bp): Notify observer.
(gdb_set_bp_addr): Likewise.
2008-07-26 00:12:03 +08:00
|
|
|
observer_notify_architecture_changed (new_gdbarch);
|
2008-08-22 21:35:00 +08:00
|
|
|
registers_changed ();
|
2003-11-10 12:39:17 +08:00
|
|
|
}
|
1999-08-31 09:14:27 +08:00
|
|
|
|
|
|
|
extern void _initialize_gdbarch (void);
|
2000-06-07 12:38:02 +08:00
|
|
|
|
1999-08-31 09:14:27 +08:00
|
|
|
void
|
2000-08-01 18:31:19 +08:00
|
|
|
_initialize_gdbarch (void)
|
1999-08-31 09:14:27 +08:00
|
|
|
{
|
2005-02-18 Andrew Cagney <cagney@gnu.org>
Use add_setshow_zinteger_cmd through out. Re-sync gdbarch.sh
and gdbarch.c.
* breakpoint.c, frame.c, gdb-events.sh, gdbarch.sh: Update.
* gdbtypes.c, infrun.c, linux-nat.c, maint.c, monitor.c: Update.
* pa64solib.c, parse.c, remote-mips.c, ser-go32.c: Update.
* serial.c, solib-frv.c, somsolib.c, target.c, top.c: Update.
* varobj.c, cli/cli-cmds.c: Update.
* gdbarch.c, gdb-events.c: Regenerate.
2005-02-19 02:58:56 +08:00
|
|
|
add_setshow_zinteger_cmd ("arch", class_maintenance, &gdbarch_debug, _("\\
|
|
|
|
Set architecture debugging."), _("\\
|
|
|
|
Show architecture debugging."), _("\\
|
|
|
|
When non-zero, architecture debugging is enabled."),
|
|
|
|
NULL,
|
2005-02-24 Andrew Cagney <cagney@gnu.org>
Add show_VARIABLE functions, update add_setshow call.
* varobj.c (_initialize_varobj, show_varobjdebug): Add and update.
* valprint.c (_initialize_valprint, show_print_max)
(show_stop_print_at_null, show_repeat_count_threshold)
(show_prettyprint_structs, show_unionprint)
(show_prettyprint_arrays, show_addressprint, show_input_radix)
(show_output_radix): Ditto.
* valops.c (_initialize_valops, show_overload_resolution): Ditto.
* utils.c (initialize_utils, show_chars_per_line)
(show_lines_per_page, show_demangle, show_pagination_enabled)
(show_sevenbit_strings, show_asm_demangle): Ditto
* tui/tui-win.c (_initialize_tui_win, show_tui_border_kind)
(show_tui_border_mode, show_tui_active_border_mode): Ditto.
* top.c (init_main, show_new_async_prompt)
(show_async_command_editing_p, show_write_history_p)
(show_history_size, show_history_filename, show_caution)
(show_annotation_level, init_main): Ditto.
* target.c (initialize_targets, show_targetdebug)
(show_trust_readonly): Ditto.
* symfile.c (_initialize_symfile, show_symbol_reloading)
(show_ext_args, show_download_write_size)
(show_debug_file_directory): Ditto.
* source.c (_initialize_source, show_lines_to_list): Ditto.
* solib.c (_initialize_solib, show_auto_solib_add)
(show_solib_search_path): Ditto.
* p-valprint.c (_initialize_pascal_valprint)
(show_pascal_static_field_print): Ditto.
* printcmd.c (_initialize_printcmd, show_max_symbolic_offset)
(show_print_symbol_filename): Add and update.
* parse.c (_initialize_parse, show_expressiondebug): Dito.
* observer.c (_initialize_observer, show_observer_debug): Dito.
* maint.c (_initialize_maint_cmds, show_watchdog)
(show_maintenance_profile_p): Dito.
* linux-nat.c (_initialize_linux_nat, show_debug_linux_nat): Dito.
* infrun.c (_initialize_infrun, show_debug_infrun)
(show_stop_on_solib_events, show_follow_fork_mode_string)
(show_scheduler_mode, show_step_stop_if_no_debug): Ditto.
* infcall.c (_initialize_infcall, show_coerce_float_to_double_p)
(show_unwind_on_signal_p): Ditto.
* gdbtypes.c (build_gdbtypes, show_opaque_type_resolution)
(_initialize_gdbtypes, show_overload_debug): Ditto.
* gdb-events.c, gdb-events.sh (_initialize_gdb_events)
(show_gdb_events_debug): Ditto.
* gdbarch.c, gdbarch.sh (show_gdbarch_debug)
(_initialize_gdbarch): Ditto.
* frame.c (_initialize_frame, show_backtrace_past_main)
(show_backtrace_past_entry, show_backtrace_limit)
(show_frame_debug): Ditto.
* exec.c (_initialize_exec, show_write_files): Ditto.
* dwarf2read.c (_initialize_dwarf2_read)
(show_dwarf2_max_cache_age): Ditto.
* demangle.c (_initialize_demangler)
(show_demangling_style_names): Ditto.
* dcache.c (_initialize_dcache, show_dcache_enabled_p): Ditto.
* cp-valprint.c (show_static_field_print)
(_initialize_cp_valprint, show_vtblprint, show_objectprint): Ditto.
* corefile.c (_initialize_core, show_gnutarget_string): Ditto.
* cli/cli-logging.c (_initialize_cli_logging)
(show_logging_overwrite, show_logging_redirect)
(show_logging_filename): Ditto.
* cli/cli-cmds.c (show_info_verbose, show_history_expansion_p)
(init_cli_cmds, show_baud_rate, show_remote_debug)
(show_remote_timeout, show_max_user_call_depth): Ditto.
* charset.c (show_host_charset_name, show_target_charset_name)
(initialize_charset): Ditto.
* breakpoint.c (show_can_use_hw_watchpoints)
(show_pending_break_support, _initialize_breakpoint): Ditto.
2005-02-24 21:51:36 +08:00
|
|
|
show_gdbarch_debug,
|
2005-02-18 Andrew Cagney <cagney@gnu.org>
Use add_setshow_zinteger_cmd through out. Re-sync gdbarch.sh
and gdbarch.c.
* breakpoint.c, frame.c, gdb-events.sh, gdbarch.sh: Update.
* gdbtypes.c, infrun.c, linux-nat.c, maint.c, monitor.c: Update.
* pa64solib.c, parse.c, remote-mips.c, ser-go32.c: Update.
* serial.c, solib-frv.c, somsolib.c, target.c, top.c: Update.
* varobj.c, cli/cli-cmds.c: Update.
* gdbarch.c, gdb-events.c: Regenerate.
2005-02-19 02:58:56 +08:00
|
|
|
&setdebuglist, &showdebuglist);
|
1999-08-31 09:14:27 +08:00
|
|
|
}
|
|
|
|
EOF
|
|
|
|
|
|
|
|
# close things off
|
|
|
|
exec 1>&2
|
|
|
|
#../move-if-change new-gdbarch.c gdbarch.c
|
2000-03-30 13:32:23 +08:00
|
|
|
compare_new gdbarch.c
|