# Format of the input table
read="class level macro returntype function formal actual attrib startup default invalid_p fmt print print_p description"
+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" ]
+}
+
+
do_read ()
{
if eval read $read
test "${startup}" || startup=0
test "${fmt}" || fmt="%ld"
test "${print}" || print="(long) ${macro}"
- #test "${default}" || default=0
+ #FIXME:
+ #Should set DEFAULT to zero and force the user to provide
+ #an invalid_p=0
+ #test "${default}" || default=0 - NO
+ case "${invalid_p}" in
+ 0 ) valid_p=1 ;;
+ "" ) test "${default}" && valid_p="gdbarch->${function} != ${default}"
+ #NOT_YET
+ #test "${default}" && invalid_p="gdbarch->${function} == ${default}"
+ ;;
+ * ) valid_p="!(${invalid_p})"
+ esac
+ #NOT YET:
:
else
false
# # -> line disable
# f -> function
# hiding a function
+ # F -> function + predicate
+ # hiding a function + predicate to test function validity
# v -> variable
# hiding a variable
+ # V -> variable + predicate
+ # hiding a variable + predicate to test variables validity
# i -> set from info
# hiding something from the ``struct info'' object
# returned if the code creating the new architecture failed to
# initialize the MEMBER or initialized the member to something
# invalid. By default, a check that the value is no longer
- # equal to DEFAULT ips performed. The equation ``0'' disables
+ # equal to DEFAULT is performed. The equation ``0'' disables
# the invalid_p check.
fmt ) : ;;
v:2:SP_REGNUM:int:sp_regnum::::0:-1
v:2:FP_REGNUM:int:fp_regnum::::0:-1
v:2:PC_REGNUM:int:pc_regnum::::0:-1
+v:2:NPC_REGNUM:int:npc_regnum::::0:-1:0
+v:2:NNPC_REGNUM:int:nnpc_regnum::::0:-1:0
f:2:REGISTER_NAME:char *:register_name:int regnr:regnr:::legacy_register_name:0
v:2:REGISTER_SIZE:int:register_size::::0:-1
v:2:REGISTER_BYTES:int:register_bytes::::0:-1
# I wish that these would just go away....
f:2:D10V_MAKE_DADDR:CORE_ADDR:d10v_make_daddr:CORE_ADDR x:x:::0:0
f:2:D10V_MAKE_IADDR:CORE_ADDR:d10v_make_iaddr:CORE_ADDR x:x:::0:0
-f:2:D10V_DADDR_P:int:d10v_daddr_p:CORE_ADDR x:x:::0
-f:2:D10V_IADDR_P:int:d10v_iaddr_p:CORE_ADDR x:x:::0
-f:2:D10V_CONVERT_DADDR_TO_RAW:CORE_ADDR:d10v_convert_daddr_to_raw:CORE_ADDR x:x:::0
-f:2:D10V_CONVERT_IADDR_TO_RAW:CORE_ADDR:d10v_convert_iaddr_to_raw:CORE_ADDR x:x:::0
+f:2:D10V_DADDR_P:int:d10v_daddr_p:CORE_ADDR x:x:::0:0
+f:2:D10V_IADDR_P:int:d10v_iaddr_p:CORE_ADDR x:x:::0:0
+f:2:D10V_CONVERT_DADDR_TO_RAW:CORE_ADDR:d10v_convert_daddr_to_raw:CORE_ADDR x:x:::0:0
+f:2:D10V_CONVERT_IADDR_TO_RAW:CORE_ADDR:d10v_convert_iaddr_to_raw:CORE_ADDR x:x:::0:0
#
f:2:STORE_STRUCT_RETURN:void:store_struct_return:CORE_ADDR addr, CORE_ADDR sp:addr, sp:::0
f:2:STORE_RETURN_VALUE:void:store_return_value:struct type *type, char *valbuf:type, valbuf:::0
f:2:INIT_EXTRA_FRAME_INFO:void:init_extra_frame_info:int fromleaf, struct frame_info *frame:fromleaf, frame:::0
#
f:2:SKIP_PROLOGUE:CORE_ADDR:skip_prologue:CORE_ADDR ip:ip::0:0
+f:2:PROLOGUE_FRAMELESS_P:int:prologue_frameless_p:CORE_ADDR ip:ip::0:generic_prologue_frameless_p:0
f:2:INNER_THAN:int:inner_than:CORE_ADDR lhs, CORE_ADDR rhs:lhs, rhs::0:0
f:2:BREAKPOINT_FROM_PC:unsigned char *:breakpoint_from_pc:CORE_ADDR *pcptr, int *lenptr:pcptr, lenptr:::legacy_breakpoint_from_pc:0
f:2:MEMORY_INSERT_BREAKPOINT:int:memory_insert_breakpoint:CORE_ADDR addr, char *contents_cache:addr, contents_cache::0:default_memory_insert_breakpoint:0
f:2:SAVED_PC_AFTER_CALL:CORE_ADDR:saved_pc_after_call:struct frame_info *frame:frame::0:0
f:2:FRAME_NUM_ARGS:int:frame_num_args:struct frame_info *frame:frame::0:0
#
+F:2:STACK_ALIGN:CORE_ADDR:stack_align:CORE_ADDR sp:sp::0:0
+F:2:REG_STRUCT_HAS_ADDR:int:reg_struct_has_addr:int gcc_p, struct type *type:gcc_p, type::0:0
EOF
grep -v '^#'
}
# dump it out
if true
then
- exec > new-gdbarch
- function_list | while do_read # eval read $read
- do
- cat <<EOF
+ exec > new-gdbarch
+ function_list | while do_read # eval read $read
+ do
+ cat <<EOF
${class} ${macro}(${actual})
${returntype} ${function} ($formal)${attrib}
level=${level}
startup=${startup}
default=${default}
invalid_p=${invalid_p}
+ valid_p=${valid_p}
fmt=${fmt}
print=${print}
print_p=${print_p}
description=${description}
EOF
- done
- exec 1>&2
+ if class_is_predicate_p && default_is_fallback_p
+ then
+ echo "Error: predicate function can not have a non- multi-arch default" 1>&2
+ kill $$
+ exit 1
+ fi
+ done
+ exec 1>&2
fi
copyright ()
echo "/* The following are pre-initialized by GDBARCH. */"
function_list | while do_read # eval read $read
do
- case "${class}" in
- "i" )
+ if class_is_info_p
+ then
echo ""
echo "extern ${returntype} gdbarch_${function} (struct gdbarch *gdbarch);"
echo "/* set_gdbarch_${function}() - not applicable - pre-initialized. */"
echo "#define ${macro} (gdbarch_${function} (current_gdbarch))"
echo "#endif"
echo "#endif"
- ;;
- esac
+ fi
done
# function typedef's
echo "/* The following are initialized by the target dependant code. */"
function_list | while do_read # eval read $read
do
- case "${class}" in
- "v" )
+ if class_is_predicate_p
+ then
echo ""
- echo "extern ${returntype} gdbarch_${function} (struct gdbarch *gdbarch);"
- echo "extern void set_gdbarch_${function} (struct gdbarch *gdbarch, ${returntype} ${function});"
- if ! default_is_fallback_p
+ echo "#if defined (${macro})"
+ echo "/* Legacy for systems yet to multi-arch ${macro} */"
+# echo "#if (GDB_MULTI_ARCH <= 2) && defined (${macro})"
+ echo "#define ${macro}_P() (1)"
+ echo "#endif"
+ echo ""
+ echo "/* Default predicate for non- multi-arch targets. */"
+ echo "#if (GDB_MULTI_ARCH == 0) && !defined (${macro}_P)"
+ echo "#define ${macro}_P() (0)"
+ echo "#endif"
+ echo ""
+ echo "extern int gdbarch_${function}_p (struct gdbarch *gdbarch);"
+ echo "#if (GDB_MULTI_ARCH > 1) || !defined (${macro}_P)"
+ echo "#define ${macro}_P() (gdbarch_${function}_p (current_gdbarch))"
+ echo "#endif"
+ fi
+ if class_is_variable_p
+ then
+ if default_is_fallback_p || class_is_predicate_p
then
- echo "#if GDB_MULTI_ARCH"
+ echo ""
+ echo "/* Default (value) for non- multi-arch platforms. */"
+ echo "#if (GDB_MULTI_ARCH == 0) && !defined (${macro})"
+ echo "#define ${macro} (${default})"
+ echo "#endif"
fi
+ echo ""
+ echo "extern ${returntype} gdbarch_${function} (struct gdbarch *gdbarch);"
+ echo "extern void set_gdbarch_${function} (struct gdbarch *gdbarch, ${returntype} ${function});"
+ echo "#if GDB_MULTI_ARCH"
echo "#if (GDB_MULTI_ARCH > 1) || !defined (${macro})"
echo "#define ${macro} (gdbarch_${function} (current_gdbarch))"
echo "#endif"
- if ! default_is_fallback_p
+ echo "#endif"
+ fi
+ if class_is_function_p
+ then
+ if default_is_fallback_p || class_is_predicate_p
then
+ echo ""
+ echo "/* Default (function) for non- multi-arch platforms. */"
+ echo "#if (GDB_MULTI_ARCH == 0) && !defined (${macro})"
+ if [ "${default}" = "0" ]
+ then
+ echo "#define ${macro}(${actual}) (internal_error (\"${macro}\"), 0)"
+ else
+ echo "#define ${macro}(${actual}) (${default} (${actual}))"
+ fi
echo "#endif"
fi
- ;;
- "f" )
echo ""
echo "typedef ${returntype} (gdbarch_${function}_ftype) (${formal});"
if [ "${formal}" = "void" ]
echo "extern ${returntype} gdbarch_${function} (struct gdbarch *gdbarch, ${formal});"
fi
echo "extern void set_gdbarch_${function} (struct gdbarch *gdbarch, gdbarch_${function}_ftype *${function});"
- if ! default_is_fallback_p
- then
- echo "#if GDB_MULTI_ARCH"
- fi
+ echo "#if GDB_MULTI_ARCH"
echo "#if (GDB_MULTI_ARCH > 1) || !defined (${macro})"
if [ "${actual}" = "" ]
then
echo "#define ${macro}(${actual}) (gdbarch_${function} (current_gdbarch, ${actual}))"
fi
echo "#endif"
- if ! default_is_fallback_p
- then
- echo "#endif"
- fi
- ;;
- esac
+ echo "#endif"
+ fi
done
# close it off
echo " /* basic architectural information */"
function_list | while do_read # eval read $read
do
- case "${class}" in
- "i" ) echo " ${returntype} ${function};" ;;
- esac
+ if class_is_info_p
+ then
+ echo " ${returntype} ${function};"
+ fi
done
echo ""
echo " /* target specific vector. */"
EOF
function_list | while do_read # eval read $read
do
- case "${class}" in
- "v" ) echo " ${returntype} ${function};" ;;
- "f" ) echo " gdbarch_${function}_ftype *${function}${attrib};" ;;
- esac
+ if class_is_variable_p
+ then
+ echo " ${returntype} ${function};"
+ elif class_is_function_p
+ then
+ echo " gdbarch_${function}_ftype *${function}${attrib};"
+ fi
done
echo "};"
echo " /* basic architecture information */"
function_list | while do_read # eval read $read
do
- case "${class}" in
- "i" )
- echo " ${startup},"
- ;;
- esac
+ if class_is_info_p
+ then
+ echo " ${startup},"
+ fi
done
cat <<EOF
/* target specific vector */
EOF
function_list | while do_read # eval read $read
do
- case "${class}" in
- "f" | "v" )
- echo " ${startup},"
- ;;
- esac
+ if class_is_function_p || class_is_variable_p
+ then
+ echo " ${startup},"
+ fi
done
cat <<EOF
/* startup_gdbarch() */
echo ""
function_list | while do_read # eval read $read
do
- case "${class}" in
- "i" ) echo " gdbarch->${function} = info->${function};"
- esac
+ if class_is_info_p
+ then
+ echo " gdbarch->${function} = info->${function};"
+ fi
done
echo ""
echo " /* Force the explicit initialization of these. */"
function_list | while do_read # eval read $read
do
- case "${class}" in
- "f" | "v" )
+ if class_is_function_p || class_is_variable_p
+ then
if [ "${default}" != "" -a "${default}" != "0" ]
then
echo " gdbarch->${function} = ${default};"
fi
- ;;
- esac
+ fi
done
cat <<EOF
/* gdbarch_alloc() */
EOF
function_list | while do_read # eval read $read
do
- case "${class}" in
- "f" | "v" )
+ if class_is_function_p || class_is_variable_p
+ then
if [ "${invalid_p}" = "0" ]
then
echo " /* Skip verify of ${function}, invalid_p == 0 */"
+ elif class_is_predicate_p
+ then
+ echo " /* Skip verify of ${function}, has predicate */"
elif [ "${invalid_p}" ]
then
echo " if ((GDB_MULTI_ARCH >= ${level})"
echo " && (gdbarch->${function} == ${default}))"
echo " internal_error (\"gdbarch: verify_gdbarch: ${function} invalid\");"
fi
- ;;
- esac
+ fi
done
cat <<EOF
}
EOF
function_list | while do_read # eval read $read
do
- case "${class}" in
- "f" )
+ if class_is_function_p
+ then
echo " fprintf_unfiltered (gdb_stdlog,"
echo " \"gdbarch_update: ${macro} = 0x%08lx\\n\","
echo " (long) current_gdbarch->${function}"
echo " /*${macro} ()*/);"
- ;;
- * )
+ else
if [ "${print_p}" = "#" ]
then
echo "#ifdef ${macro}"
echo " \"gdbarch_update: ${macro} = ${fmt}\\n\","
echo " ${print});"
fi
- ;;
- esac
+ fi
done
echo "}"
echo ""
function_list | while do_read # eval read $read
do
- case "${class}" in
- "f" )
+ if class_is_predicate_p
+ then
+ echo ""
+ echo "int"
+ echo "gdbarch_${function}_p (struct gdbarch *gdbarch)"
+ echo "{"
+ if [ "${valid_p}" ]
+ then
+ echo " return ${valid_p};"
+ else
+ echo "#error \"gdbarch_${function}_p: not defined\""
+ fi
+ echo "}"
+ fi
+ if class_is_function_p
+ then
echo ""
echo "${returntype}"
if [ "${formal}" = "void" ]
echo "gdbarch_${function} (struct gdbarch *gdbarch, ${formal})"
fi
echo "{"
- if default_is_fallback_p && [ "${default}" != "0" ]
- then
- echo " if (GDB_MULTI_ARCH == 0)"
- if [ "${returntype}" = "void" ]
- then
- echo " {"
- echo " ${default} (${actual});"
- echo " return;"
- echo " }"
- else
- echo " return ${default} (${actual});"
- fi
- fi
echo " if (gdbarch->${function} == 0)"
echo " internal_error (\"gdbarch: gdbarch_${function} invalid\");"
echo " if (gdbarch_debug >= 2)"
echo "{"
echo " gdbarch->${function} = ${function};"
echo "}"
- ;;
- "v" )
+ elif class_is_variable_p
+ then
echo ""
echo "${returntype}"
echo "gdbarch_${function} (struct gdbarch *gdbarch)"
echo "{"
- if default_is_fallback_p && [ "${default}" != "0" ]
- then
- echo " if (GDB_MULTI_ARCH == 0)"
- echo " return ${default};"
- fi
if [ "${invalid_p}" = "0" ]
then
echo " /* Skip verify of ${function}, invalid_p == 0 */"
echo "{"
echo " gdbarch->${function} = ${function};"
echo "}"
- ;;
- "i" )
+ elif class_is_info_p
+ then
echo ""
echo "${returntype}"
echo "gdbarch_${function} (struct gdbarch *gdbarch)"
echo " fprintf_unfiltered (gdb_stdlog, \"gdbarch_${function} called\n\");"
echo " return gdbarch->${function};"
echo "}"
- ;;
- esac
+ fi
done
# All the trailing guff