2007-11-09 Markus Deuling <deuling@de.ibm.com>
[platform/upstream/binutils.git] / gdb / arch-utils.c
index 50768e9..52f4e74 100644 (file)
@@ -7,7 +7,7 @@
 
    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
-   the Free Software Foundation; either version 2 of the License, or
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -16,9 +16,7 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include "defs.h"
 
 
 #include "floatformat.h"
 
-int
-always_use_struct_convention (int gcc_p, struct type *value_type)
-{
-  return 1;
-}
-
-enum return_value_convention
-legacy_return_value (struct gdbarch *gdbarch, struct type *valtype,
-                    struct regcache *regcache, gdb_byte *readbuf,
-                    const gdb_byte *writebuf)
-{
-  /* NOTE: cagney/2004-06-13: The gcc_p parameter to
-     USE_STRUCT_CONVENTION isn't used.  */
-  int struct_return = ((TYPE_CODE (valtype) == TYPE_CODE_STRUCT
-                       || TYPE_CODE (valtype) == TYPE_CODE_UNION
-                       || TYPE_CODE (valtype) == TYPE_CODE_ARRAY)
-                      && DEPRECATED_USE_STRUCT_CONVENTION (0, valtype));
-
-  if (writebuf != NULL)
-    {
-      gdb_assert (!struct_return);
-      /* NOTE: cagney/2004-06-13: See stack.c:return_command.  Old
-        architectures don't expect STORE_RETURN_VALUE to handle small
-        structures.  Should not be called with such types.  */
-      gdb_assert (TYPE_CODE (valtype) != TYPE_CODE_STRUCT
-                 && TYPE_CODE (valtype) != TYPE_CODE_UNION);
-      STORE_RETURN_VALUE (valtype, regcache, writebuf);
-    }
-
-  if (readbuf != NULL)
-    {
-      gdb_assert (!struct_return);
-      EXTRACT_RETURN_VALUE (valtype, regcache, readbuf);
-    }
-
-  if (struct_return)
-    return RETURN_VALUE_STRUCT_CONVENTION;
-  else
-    return RETURN_VALUE_REGISTER_CONVENTION;
-}
 
 int
 legacy_register_sim_regno (int regnum)
@@ -173,11 +131,12 @@ cannot_register_not (int regnum)
 }
 
 /* Legacy version of target_virtual_frame_pointer().  Assumes that
-   there is an DEPRECATED_FP_REGNUM and that it is the same, cooked or
+   there is an gdbarch_deprecated_fp_regnum and that it is the same, cooked or
    raw.  */
 
 void
-legacy_virtual_frame_pointer (CORE_ADDR pc,
+legacy_virtual_frame_pointer (struct gdbarch *gdbarch, 
+                             CORE_ADDR pc,
                              int *frame_regnum,
                              LONGEST *frame_offset)
 {
@@ -186,11 +145,14 @@ legacy_virtual_frame_pointer (CORE_ADDR pc,
      register and an offset can determine this.  I think it should
      instead generate a byte code expression as that would work better
      with things like Dwarf2's CFI.  */
-  if (DEPRECATED_FP_REGNUM >= 0
-      && DEPRECATED_FP_REGNUM < gdbarch_num_regs (current_gdbarch))
-    *frame_regnum = DEPRECATED_FP_REGNUM;
-  else if (SP_REGNUM >= 0 && SP_REGNUM < gdbarch_num_regs (current_gdbarch))
-    *frame_regnum = SP_REGNUM;
+  if (gdbarch_deprecated_fp_regnum (gdbarch) >= 0
+      && gdbarch_deprecated_fp_regnum (gdbarch)
+          < gdbarch_num_regs (gdbarch))
+    *frame_regnum = gdbarch_deprecated_fp_regnum (gdbarch);
+  else if (gdbarch_sp_regnum (gdbarch) >= 0
+          && gdbarch_sp_regnum (gdbarch)
+               < gdbarch_num_regs (gdbarch))
+    *frame_regnum = gdbarch_sp_regnum (gdbarch);
   else
     /* Should this be an internal error?  I guess so, it is reflecting
        an architectural limitation in the current design.  */
@@ -200,7 +162,8 @@ legacy_virtual_frame_pointer (CORE_ADDR pc,
 
 \f
 int
-generic_convert_register_p (int regnum, struct type *type)
+generic_convert_register_p (struct gdbarch *gdbarch, int regnum,
+                           struct type *type)
 {
   return 0;
 }
@@ -658,6 +621,8 @@ gdbarch_info_fill (struct gdbarch_info *info)
   /* Check for the current file.  */
   if (info->abfd == NULL)
     info->abfd = exec_bfd;
+  if (info->abfd == NULL)
+    info->abfd = core_bfd;
 
   /* Check for the current target description.  */
   if (info->target_desc == NULL)