Add support for m/M methods - pure multi-arch. These do not have

macros and take a gdbarch parameter.
This commit is contained in:
Andrew Cagney 2001-03-17 00:31:22 +00:00
parent 7256e1a5bb
commit 4a5c6a1dd9
2 changed files with 99 additions and 25 deletions

View File

@ -1,3 +1,12 @@
2001-03-16 Andrew Cagney <ac131313@redhat.com>
* gdbarch.sh: Add classes ``m'' and ``M'' for pure multi-arch. Do
not generate macro wrappers for multi-arch functions or
predicates.
(class_is_info_p, class_is_predicate_p): Update.
(class_is_function_p, class_is_variable_p): Ditto.
(class_is_multiarch_p): New class function.
2001-03-16 J.T. Conklin <jtc@redback.com>
* config/h8300/tm-h8300.h (FRAME_ARGS_ADDRESS): Changed to use

View File

@ -137,22 +137,42 @@ fallback_default_p ()
class_is_variable_p ()
{
[ "${class}" = "v" -o "${class}" = "V" ]
case "${class}" in
*v* | *V* ) true ;;
* ) false ;;
esac
}
class_is_function_p ()
{
[ "${class}" = "f" -o "${class}" = "F" ]
case "${class}" in
*f* | *F* | *m* | *M* ) true ;;
* ) false ;;
esac
}
class_is_multiarch_p ()
{
case "${class}" in
*m* | *M* ) true ;;
* ) false ;;
esac
}
class_is_predicate_p ()
{
[ "${class}" = "F" -o "${class}" = "V" ]
case "${class}" in
*F* | *V* | *M* ) true ;;
* ) false ;;
esac
}
class_is_info_p ()
{
[ "${class}" = "i" ]
case "${class}" in
*i* ) true ;;
* ) false ;;
esac
}
@ -174,6 +194,10 @@ do
# hiding a variable + predicate to test variables validity
# i -> set from info
# hiding something from the ``struct info'' object
# 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
level ) : ;;
@ -630,12 +654,12 @@ do
-e '3,$ s,#, ,' \
-e '$ s,$, */,'
fi
if class_is_predicate_p
if class_is_predicate_p && ! class_is_multiarch_p
then
printf "\n"
printf "#if defined (${macro})\n"
printf "/* Legacy for systems yet to multi-arch ${macro} */\n"
# printf "#if (GDB_MULTI_ARCH <= GDB_MULTI_ARCH_PARTIAL) && defined (${macro})\n"
#printf "#if (GDB_MULTI_ARCH <= GDB_MULTI_ARCH_PARTIAL) && defined (${macro})\n"
printf "#define ${macro}_P() (1)\n"
printf "#endif\n"
printf "\n"
@ -649,6 +673,11 @@ do
printf "#define ${macro}_P() (gdbarch_${function}_p (current_gdbarch))\n"
printf "#endif\n"
fi
if class_is_predicate_p && class_is_multiarch_p
then
printf "\n"
printf "extern int gdbarch_${function}_p (struct gdbarch *gdbarch);\n"
fi
if class_is_variable_p
then
if fallback_default_p || class_is_predicate_p
@ -671,7 +700,7 @@ do
fi
if class_is_function_p
then
if fallback_default_p || class_is_predicate_p
if ( fallback_default_p || class_is_predicate_p ) && ! class_is_multiarch_p
then
printf "\n"
printf "/* Default (function) for non- multi-arch platforms. */\n"
@ -687,7 +716,15 @@ do
printf "#endif\n"
fi
printf "\n"
printf "typedef ${returntype} (gdbarch_${function}_ftype) (${formal});\n"
if [ "${formal}" = "void" ] && class_is_multiarch_p
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
if [ "${formal}" = "void" ]
then
printf "extern ${returntype} gdbarch_${function} (struct gdbarch *gdbarch);\n"
@ -695,19 +732,22 @@ do
printf "extern ${returntype} gdbarch_${function} (struct gdbarch *gdbarch, ${formal});\n"
fi
printf "extern void set_gdbarch_${function} (struct gdbarch *gdbarch, gdbarch_${function}_ftype *${function});\n"
printf "#if GDB_MULTI_ARCH\n"
printf "#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (${macro})\n"
if [ "${actual}" = "" ]
if ! class_is_multiarch_p
then
printf "#define ${macro}() (gdbarch_${function} (current_gdbarch))\n"
elif [ "${actual}" = "-" ]
then
printf "#define ${macro} (gdbarch_${function} (current_gdbarch))\n"
else
printf "#define ${macro}(${actual}) (gdbarch_${function} (current_gdbarch, ${actual}))\n"
printf "#if GDB_MULTI_ARCH\n"
printf "#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (${macro})\n"
if [ "${actual}" = "" ]
then
printf "#define ${macro}() (gdbarch_${function} (current_gdbarch))\n"
elif [ "${actual}" = "-" ]
then
printf "#define ${macro} (gdbarch_${function} (current_gdbarch))\n"
else
printf "#define ${macro}(${actual}) (gdbarch_${function} (current_gdbarch, ${actual}))\n"
fi
printf "#endif\n"
printf "#endif\n"
fi
printf "#endif\n"
printf "#endif\n"
fi
done
@ -1345,6 +1385,8 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file)
EOF
function_list | while do_read
do
# multiarch functions don't have macros.
class_is_multiarch_p && continue
if [ "${returntype}" = "void" ]
then
printf "#if defined (${macro}) && GDB_MULTI_ARCH\n"
@ -1367,16 +1409,24 @@ do
done
function_list | while do_read
do
if class_is_multiarch_p
then
printf " if (GDB_MULTI_ARCH)\n"
printf " fprintf_unfiltered (file,\n"
printf " \"gdbarch_dump: ${function} = 0x%%08lx\\\\n\",\n"
printf " (long) current_gdbarch->${function});\n"
continue
fi
printf "#ifdef ${macro}\n"
if [ "${print_p}" = "()" ]
then
printf " gdbarch_dump_${function} (current_gdbarch);\n"
printf " gdbarch_dump_${function} (current_gdbarch);\n"
elif [ "${print_p}" = "0" ]
then
printf " /* skip print of ${macro}, print_p == 0. */\n"
printf " /* skip print of ${macro}, print_p == 0. */\n"
elif [ "${print_p}" ]
then
printf " if (${print_p})\n"
printf " if (${print_p})\n"
printf " fprintf_unfiltered (file,\n"
printf " \"gdbarch_dump: ${macro} = %s\\\\n\",\n" "${fmt}"
printf " ${print});\n"
@ -1445,12 +1495,27 @@ do
printf " \"gdbarch: gdbarch_${function} invalid\");\n"
printf " if (gdbarch_debug >= 2)\n"
printf " fprintf_unfiltered (gdb_stdlog, \"gdbarch_${function} called\\\\n\");\n"
test "${actual}" = "-" && actual=""
if [ "${actual}" = "-" -o "${actual}" = "" ]
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
if [ "${returntype}" = "void" ]
then
printf " gdbarch->${function} (${actual});\n"
printf " gdbarch->${function} (${params});\n"
else
printf " return gdbarch->${function} (${actual});\n"
printf " return gdbarch->${function} (${params});\n"
fi
printf "}\n"
printf "\n"