2000-05-04 Elena Zannoni <ezannoni@kwikemart.cygnus.com>
[deliverable/binutils-gdb.git] / gdb / gdbarch.sh
index 8a907cc37dbc582f8e2ba82b28023c72f358a883..892d61f86ac0cf1aa17ac77e1129f8fc4af33fd0 100755 (executable)
@@ -39,13 +39,32 @@ compare_new ()
 default_is_fallback_p ()
 {
     [ "${default}" != "" -a "${invalid_p}" = "0" ]
-    # FIXME: cagney - not until after 5.0
-    false
 }
 
 # 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
@@ -53,7 +72,19 @@ do_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
@@ -71,8 +102,12 @@ do
        # # -> 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
 
@@ -138,7 +173,7 @@ do
        # 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 ) : ;;
@@ -193,6 +228,7 @@ v:1:TARGET_LONG_LONG_BIT:int:long_long_bit::::8 * sizeof (LONGEST):0
 v:1:TARGET_FLOAT_BIT:int:float_bit::::8 * sizeof (float):0
 v:1:TARGET_DOUBLE_BIT:int:double_bit::::8 * sizeof (double):0
 v:1:TARGET_LONG_DOUBLE_BIT:int:long_double_bit::::8 * sizeof (long double):0
+v:1:IEEE_FLOAT:int:ieee_float::::0:0:0:::
 #
 f:1:TARGET_READ_PC:CORE_ADDR:read_pc:int pid:pid::0:0
 f:1:TARGET_WRITE_PC:void:write_pc:CORE_ADDR val, int pid:val, pid::0:0
@@ -205,6 +241,8 @@ v:2:NUM_REGS:int:num_regs::::0:-1
 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
@@ -239,6 +277,10 @@ f:1:REGISTER_CONVERTIBLE:int:register_convertible:int nr:nr:::generic_register_c
 f:2:REGISTER_CONVERT_TO_VIRTUAL:void:register_convert_to_virtual:int regnum, struct type *type, char *from, char *to:regnum, type, from, to:::0:0
 f:2:REGISTER_CONVERT_TO_RAW:void:register_convert_to_raw:struct type *type, int regnum, char *from, char *to:type, regnum, from, to:::0:0
 #
+f:2:POINTER_TO_ADDRESS:CORE_ADDR:pointer_to_address:struct type *type, char *buf:type, buf:::generic_pointer_to_address:0
+f:2:ADDRESS_TO_POINTER:void:address_to_pointer:struct type *type, char *buf, CORE_ADDR addr:type, buf, addr:::generic_address_to_pointer:0
+#
+f:2:RETURN_VALUE_ON_STACK:int:return_value_on_stack:struct type *type:type:::generic_return_value_on_stack_not:0
 f:2:EXTRACT_RETURN_VALUE:void:extract_return_value:struct type *type, char *regbuf, char *valbuf:type, regbuf, valbuf::0:0
 f:1:PUSH_ARGUMENTS:CORE_ADDR:push_arguments:int nargs, struct value **args, CORE_ADDR sp, int struct_return, CORE_ADDR struct_addr:nargs, args, sp, struct_return, struct_addr::0:0
 f:2:PUSH_DUMMY_FRAME:void:push_dummy_frame:void:-:::0
@@ -248,10 +290,10 @@ f:2:POP_FRAME:void:pop_frame:void:-:::0
 # 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
@@ -262,6 +304,7 @@ f:2:FRAME_INIT_SAVED_REGS:void:frame_init_saved_regs:struct frame_info *frame:fr
 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
@@ -281,6 +324,8 @@ f:2:FRAME_LOCALS_ADDRESS:CORE_ADDR:frame_locals_address:struct frame_info *fi:fi
 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 '^#'
 }
@@ -289,23 +334,30 @@ EOF
 # 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 ()
@@ -376,18 +428,6 @@ extern struct gdbarch *current_gdbarch;
 /* If any of the following are defined, the target wasn't correctly
    converted. */
 
-#if GDB_MULTI_ARCH
-#if defined (CALL_DUMMY)
-#error "CALL_DUMMY: replaced by CALL_DUMMY_WORDS/SIZEOF_CALL_DUMMY_WORDS"
-#endif
-#endif
-
-#if GDB_MULTI_ARCH
-#if defined (REGISTER_NAMES)
-#error "REGISTER_NAMES: replaced by REGISTER_NAME"
-#endif
-#endif
-
 #if GDB_MULTI_ARCH
 #if defined (EXTRA_FRAME_INFO)
 #error "EXTRA_FRAME_INFO: replaced by struct frame_extra_info"
@@ -407,8 +447,8 @@ echo ""
 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. */"
@@ -417,8 +457,7 @@ do
        echo "#define ${macro} (gdbarch_${function} (current_gdbarch))"
        echo "#endif"
        echo "#endif"
-       ;;
-  esac
+    fi
 done
 
 # function typedef's
@@ -427,8 +466,35 @@ echo ""
 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 "#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 ""
+           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});"
@@ -437,8 +503,22 @@ do
        echo "#define ${macro} (gdbarch_${function} (current_gdbarch))"
        echo "#endif"
        echo "#endif"
-       ;;
-    "f" )
+    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
        echo ""
        echo "typedef ${returntype} (gdbarch_${function}_ftype) (${formal});"
        if [ "${formal}" = "void" ]
@@ -448,10 +528,7 @@ do
          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
@@ -463,12 +540,8 @@ do
          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
@@ -722,31 +795,6 @@ extern disassemble_info tm_print_insn_info;
    USE of these macro's is *STRONGLY* discouraged. */
 
 #define GDB_TARGET_IS_D10V (TARGET_ARCHITECTURE->arch == bfd_arch_d10v)
-#ifndef D10V_MAKE_DADDR
-#define D10V_MAKE_DADDR(X) (internal_error ("gdbarch: D10V_MAKE_DADDR"), 0)
-#endif
-#ifndef D10V_MAKE_IADDR
-#define D10V_MAKE_IADDR(X) (internal_error ("gdbarch: D10V_MAKE_IADDR"), 0)
-#endif
-
-
-/* Fallback definition of FRAMELESS_FUNCTION_INVOCATION */
-#ifndef FRAMELESS_FUNCTION_INVOCATION
-#define FRAMELESS_FUNCTION_INVOCATION(FI) (0)
-#endif
-
-
-/* Fallback definition of REGISTER_CONVERTIBLE etc */
-extern int generic_register_convertible_not (int reg_nr);
-#ifndef REGISTER_CONVERTIBLE
-#define REGISTER_CONVERTIBLE(x) (0)
-#endif
-#ifndef REGISTER_CONVERT_TO_VIRTUAL
-#define REGISTER_CONVERT_TO_VIRTUAL(x, y, z, a)
-#endif
-#ifndef REGISTER_CONVERT_TO_RAW
-#define REGISTER_CONVERT_TO_RAW(x, y, z, a)
-#endif
 
 
 /* Fallback definition for EXTRACT_STRUCT_VALUE_ADDRESS */
@@ -760,14 +808,6 @@ extern int generic_register_convertible_not (int reg_nr);
 #endif
 
 
-/* Fallback definition for REGISTER_NAME for systems still defining
-   REGISTER_NAMES. */
-#ifndef REGISTER_NAME
-extern char *gdb_register_names[];
-#define REGISTER_NAME(i) gdb_register_names[i]
-#endif
-
-
 /* Set the dynamic target-system-dependant parameters (architecture,
    byte-order, ...) using information found in the BFD */
 
@@ -812,7 +852,7 @@ copyright
 cat <<EOF
 
 #include "defs.h"
-#include "gdbarch-utils.h"
+#include "arch-utils.h"
 
 #if GDB_MULTI_ARCH
 #include "gdbcmd.h"
@@ -870,9 +910,10 @@ echo "{"
 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. */"
@@ -915,10 +956,13 @@ cat <<EOF
 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 "};"
 
@@ -936,11 +980,10 @@ echo "struct gdbarch startup_gdbarch = {"
 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 */
@@ -951,11 +994,10 @@ cat <<EOF
 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() */
@@ -984,22 +1026,22 @@ EOF
 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() */
@@ -1046,11 +1088,14 @@ verify_gdbarch (struct gdbarch *gdbarch)
 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})"
@@ -1062,8 +1107,7 @@ do
            echo "      && (gdbarch->${function} == ${default}))"
            echo "    internal_error (\"gdbarch: verify_gdbarch: ${function} invalid\");"
        fi
-       ;;
-  esac
+    fi
 done
 cat <<EOF
 }
@@ -1081,14 +1125,13 @@ gdbarch_dump (void)
 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}"
@@ -1107,8 +1150,7 @@ do
          echo "                      \"gdbarch_update: ${macro} = ${fmt}\\n\","
          echo "                      ${print});"
        fi
-       ;;
-  esac
+    fi
 done
 echo "}"
 
@@ -1127,8 +1169,22 @@ EOF
 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" ]
@@ -1138,19 +1194,6 @@ do
          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)"
@@ -1170,8 +1213,8 @@ do
        echo "{"
        echo "  gdbarch->${function} = ${function};"
        echo "}"
-       ;;
-    "v" )
+    elif class_is_variable_p
+    then
        echo ""
        echo "${returntype}"
        echo "gdbarch_${function} (struct gdbarch *gdbarch)"
@@ -1199,8 +1242,8 @@ do
        echo "{"
        echo "  gdbarch->${function} = ${function};"
        echo "}"
-       ;;
-    "i" )
+    elif class_is_info_p
+    then
        echo ""
        echo "${returntype}"
        echo "gdbarch_${function} (struct gdbarch *gdbarch)"
@@ -1209,8 +1252,7 @@ do
        echo "    fprintf_unfiltered (gdb_stdlog, \"gdbarch_${function} called\n\");"
        echo "  return gdbarch->${function};"
        echo "}"
-       ;;
-  esac
+    fi
 done
 
 # All the trailing guff
@@ -1953,6 +1995,7 @@ generic_register_convertible_not (num)
   return 0;
 }
   
+
 /* Disassembler */
 
 /* Pointer to the target-dependent disassembly function.  */
@@ -1981,13 +2024,6 @@ set_gdbarch_from_file (abfd)
 }
 
 
-#if defined (CALL_DUMMY)
-/* FIXME - this should go away */
-LONGEST call_dummy_words[] = CALL_DUMMY;
-int sizeof_call_dummy_words = sizeof (call_dummy_words);
-#endif
-
-
 /* Initialize the current architecture.  */
 void
 initialize_current_architecture ()
This page took 0.063792 seconds and 4 git commands to generate.