This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
[patch/multi-arch] Add function class ``m'' and ``M''
- To: GDB Patches <gdb-patches at sourceware dot cygnus dot com>
- Subject: [patch/multi-arch] Add function class ``m'' and ``M''
- From: Andrew Cagney <ac131313 at cygnus dot com>
- Date: Fri, 16 Mar 2001 19:29:47 -0500
Hello,
The attatched patch modifies gdbarch.sh so that it can generate code for
two new method classes - ``m'' and ``M''. Methods of this class:
o take a gdbarch parameter
(other methods don't)
o do not define wrapper macros
These classes are intended for new multi-arch methods.
(Regenerating gdbarch.[hc] with this change has no affect)
enjoy,
Andrew
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.
Index: gdbarch.sh
===================================================================
RCS file: /cvs/src/src/gdb/gdbarch.sh,v
retrieving revision 1.54
diff -p -r1.54 gdbarch.sh
*** gdbarch.sh 2001/02/08 06:03:53 1.54
--- gdbarch.sh 2001/03/17 00:24:54
*************** fallback_default_p ()
*** 137,158 ****
class_is_variable_p ()
{
! [ "${class}" = "v" -o "${class}" = "V" ]
}
class_is_function_p ()
{
! [ "${class}" = "f" -o "${class}" = "F" ]
}
class_is_predicate_p ()
{
! [ "${class}" = "F" -o "${class}" = "V" ]
}
class_is_info_p ()
{
! [ "${class}" = "i" ]
}
--- 137,178 ----
class_is_variable_p ()
{
! case "${class}" in
! *v* | *V* ) true ;;
! * ) false ;;
! esac
}
class_is_function_p ()
{
! 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 ()
{
! case "${class}" in
! *F* | *V* | *M* ) true ;;
! * ) false ;;
! esac
}
class_is_info_p ()
{
! case "${class}" in
! *i* ) true ;;
! * ) false ;;
! esac
}
*************** do
*** 174,179 ****
--- 194,203 ----
# 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 ) : ;;
*************** do
*** 630,641 ****
-e '3,$ s,#, ,' \
-e '$ s,$, */,'
fi
! if class_is_predicate_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 "#define ${macro}_P() (1)\n"
printf "#endif\n"
printf "\n"
--- 654,665 ----
-e '3,$ s,#, ,' \
-e '$ s,$, */,'
fi
! 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 "#define ${macro}_P() (1)\n"
printf "#endif\n"
printf "\n"
*************** do
*** 649,654 ****
--- 673,683 ----
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
*************** do
*** 671,677 ****
fi
if class_is_function_p
then
! if fallback_default_p || class_is_predicate_p
then
printf "\n"
printf "/* Default (function) for non- multi-arch platforms. */\n"
--- 700,706 ----
fi
if class_is_function_p
then
! if ( fallback_default_p || class_is_predicate_p ) && ! class_is_multiarch_p
then
printf "\n"
printf "/* Default (function) for non- multi-arch platforms. */\n"
*************** do
*** 687,693 ****
printf "#endif\n"
fi
printf "\n"
! printf "typedef ${returntype} (gdbarch_${function}_ftype) (${formal});\n"
if [ "${formal}" = "void" ]
then
printf "extern ${returntype} gdbarch_${function} (struct gdbarch *gdbarch);\n"
--- 716,730 ----
printf "#endif\n"
fi
printf "\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"
*************** do
*** 695,713 ****
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}" = "" ]
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
done
--- 732,753 ----
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"
! if ! class_is_multiarch_p
then
! 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
fi
done
*************** gdbarch_dump (struct gdbarch *gdbarch, s
*** 1345,1350 ****
--- 1385,1392 ----
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"
*************** do
*** 1367,1382 ****
done
function_list | while do_read
do
printf "#ifdef ${macro}\n"
if [ "${print_p}" = "()" ]
then
! printf " gdbarch_dump_${function} (current_gdbarch);\n"
elif [ "${print_p}" = "0" ]
then
! printf " /* skip print of ${macro}, print_p == 0. */\n"
elif [ "${print_p}" ]
then
! printf " if (${print_p})\n"
printf " fprintf_unfiltered (file,\n"
printf " \"gdbarch_dump: ${macro} = %s\\\\n\",\n" "${fmt}"
printf " ${print});\n"
--- 1409,1432 ----
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"
elif [ "${print_p}" = "0" ]
then
! printf " /* skip print of ${macro}, print_p == 0. */\n"
elif [ "${print_p}" ]
then
! printf " if (${print_p})\n"
printf " fprintf_unfiltered (file,\n"
printf " \"gdbarch_dump: ${macro} = %s\\\\n\",\n" "${fmt}"
printf " ${print});\n"
*************** do
*** 1445,1456 ****
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 [ "${returntype}" = "void" ]
then
! printf " gdbarch->${function} (${actual});\n"
else
! printf " return gdbarch->${function} (${actual});\n"
fi
printf "}\n"
printf "\n"
--- 1495,1521 ----
printf " \"gdbarch: gdbarch_${function} invalid\");\n"
printf " if (gdbarch_debug >= 2)\n"
printf " fprintf_unfiltered (gdb_stdlog, \"gdbarch_${function} called\\\\n\");\n"
! 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} (${params});\n"
else
! printf " return gdbarch->${function} (${params});\n"
fi
printf "}\n"
printf "\n"