Remove redundant test in BFD_ASSERT
[deliverable/binutils-gdb.git] / gdb / arm-tdep.c
index a86e09af086d56cda5ecd57cdf119b528e56d42a..8352bf330bf06e40d5ae97fa33f2592943c8328e 100644 (file)
@@ -1,6 +1,7 @@
 /* Common target dependent code for GDB on ARM systems.
-   Copyright 1988, 1989, 1991, 1992, 1993, 1995, 1996, 1998, 1999, 2000,
-   2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+
+   Copyright 1988, 1989, 1991, 1992, 1993, 1995, 1996, 1998, 1999,
+   2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -269,39 +270,6 @@ arm_saved_pc_after_call (struct frame_info *frame)
   return ADDR_BITS_REMOVE (read_register (ARM_LR_REGNUM));
 }
 
-/* Determine whether the function invocation represented by FI has a
-   frame on the stack associated with it.  If it does return zero,
-   otherwise return 1.  */
-
-static int
-arm_frameless_function_invocation (struct frame_info *fi)
-{
-  CORE_ADDR func_start, after_prologue;
-  int frameless;
-
-  /* Sometimes we have functions that do a little setup (like saving the
-     vN registers with the stmdb instruction, but DO NOT set up a frame.
-     The symbol table will report this as a prologue.  However, it is
-     important not to try to parse these partial frames as frames, or we
-     will get really confused.
-
-     So I will demand 3 instructions between the start & end of the
-     prologue before I call it a real prologue, i.e. at least
-       mov ip, sp,
-       stmdb sp!, {}
-       sub sp, ip, #4.  */
-
-  func_start = (get_frame_func (fi) + DEPRECATED_FUNCTION_START_OFFSET);
-  after_prologue = SKIP_PROLOGUE (func_start);
-
-  /* There are some frameless functions whose first two instructions
-     follow the standard APCS form, in which case after_prologue will
-     be func_start + 8.  */
-
-  frameless = (after_prologue < func_start + 12);
-  return frameless;
-}
-
 /* A typical Thumb prologue looks like this:
    push    {r7, lr}
    add     sp, sp, #-28
@@ -1029,8 +997,8 @@ arm_prologue_prev_register (struct frame_info *next_frame,
       return;
     }
 
-  trad_frame_prev_register (next_frame, cache->saved_regs, prev_regnum,
-                           optimized, lvalp, addrp, realnump, valuep);
+  trad_frame_get_prev_register (next_frame, cache->saved_regs, prev_regnum,
+                               optimized, lvalp, addrp, realnump, valuep);
 }
 
 struct frame_unwind arm_prologue_unwind = {
@@ -1122,8 +1090,8 @@ arm_sigtramp_prev_register (struct frame_info *next_frame,
     *this_cache = arm_make_sigtramp_cache (next_frame);
   cache = *this_cache;
 
-  trad_frame_prev_register (next_frame, cache->saved_regs, prev_regnum,
-                           optimized, lvalp, addrp, realnump, valuep);
+  trad_frame_get_prev_register (next_frame, cache->saved_regs, prev_regnum,
+                               optimized, lvalp, addrp, realnump, valuep);
 }
 
 struct frame_unwind arm_sigtramp_unwind = {
@@ -1255,13 +1223,13 @@ arm_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
       struct type *arg_type;
       struct type *target_type;
       enum type_code typecode;
-      char *val;
+      bfd_byte *val;
 
-      arg_type = check_typedef (VALUE_TYPE (args[argnum]));
+      arg_type = check_typedef (value_type (args[argnum]));
       len = TYPE_LENGTH (arg_type);
       target_type = TYPE_TARGET_TYPE (arg_type);
       typecode = TYPE_CODE (arg_type);
-      val = VALUE_CONTENTS (args[argnum]);
+      val = value_contents_writeable (args[argnum]);
 
       /* If the argument is a pointer to a function, and it is a
         Thumb function, create a LOCAL copy of the value and set
@@ -1355,12 +1323,15 @@ arm_print_float_info (struct gdbarch *gdbarch, struct ui_file *file,
   int type;
 
   type = (status >> 24) & 127;
-  printf ("%s FPU type %d\n",
-         (status & (1 << 31)) ? "Hardware" : "Software",
-         type);
-  fputs ("mask: ", stdout);
+  if (status & (1 << 31))
+    printf (_("Hardware FPU type %d\n"), type);
+  else
+    printf (_("Software FPU type %d\n"), type);
+  /* i18n: [floating point unit] mask */
+  fputs (_("mask: "), stdout);
   print_fpu_flags (status >> 16);
-  fputs ("flags: ", stdout);
+  /* i18n: [floating point unit] flags */
+  fputs (_("flags: "), stdout);
   print_fpu_flags (status);
 }
 
@@ -1417,7 +1388,7 @@ arm_register_sim_regno (int regnum)
     return SIM_ARM_FPS_REGNUM + reg;
   reg -= NUM_SREGS;
 
-  internal_error (__FILE__, __LINE__, "Bad REGNUM %d", regnum);
+  internal_error (__FILE__, __LINE__, _("Bad REGNUM %d"), regnum);
 }
 
 /* NOTE: cagney/2001-08-20: Both convert_from_extended() and
@@ -1582,7 +1553,7 @@ thumb_get_next_pc (CORE_ADDR pc)
       nextpc = (CORE_ADDR) read_memory_integer (sp + offset, 4);
       nextpc = ADDR_BITS_REMOVE (nextpc);
       if (nextpc == pc)
-       error ("Infinite loop detected");
+       error (_("Infinite loop detected"));
     }
   else if ((inst1 & 0xf000) == 0xd000) /* conditional branch */
     {
@@ -1613,7 +1584,7 @@ thumb_get_next_pc (CORE_ADDR pc)
 
       nextpc = ADDR_BITS_REMOVE (nextpc);
       if (nextpc == pc)
-       error ("Infinite loop detected");
+       error (_("Infinite loop detected"));
     }
 
   return nextpc;
@@ -1653,7 +1624,7 @@ arm_get_next_pc (CORE_ADDR pc)
 
            if (bits (this_instr, 22, 25) == 0
                && bits (this_instr, 4, 7) == 9)        /* multiply */
-             error ("Illegal update to pc in instruction");
+             error (_("Invalid update to pc in instruction"));
 
            /* BX <reg>, BLX <reg> */
            if (bits (this_instr, 4, 28) == 0x12fff1
@@ -1664,7 +1635,7 @@ arm_get_next_pc (CORE_ADDR pc)
                nextpc = (CORE_ADDR) ADDR_BITS_REMOVE (result);
 
                if (nextpc == pc)
-                 error ("Infinite loop detected");
+                 error (_("Infinite loop detected"));
 
                return nextpc;
              }
@@ -1745,7 +1716,7 @@ arm_get_next_pc (CORE_ADDR pc)
            nextpc = (CORE_ADDR) ADDR_BITS_REMOVE (result);
 
            if (nextpc == pc)
-             error ("Infinite loop detected");
+             error (_("Infinite loop detected"));
            break;
          }
 
@@ -1763,7 +1734,7 @@ arm_get_next_pc (CORE_ADDR pc)
                  unsigned long base;
 
                  if (bit (this_instr, 22))
-                   error ("Illegal update to pc in instruction");
+                   error (_("Invalid update to pc in instruction"));
 
                  /* byte write to PC */
                  rn = bits (this_instr, 16, 19);
@@ -1788,7 +1759,7 @@ arm_get_next_pc (CORE_ADDR pc)
                  nextpc = ADDR_BITS_REMOVE (nextpc);
 
                  if (nextpc == pc)
-                   error ("Infinite loop detected");
+                   error (_("Infinite loop detected"));
                }
            }
          break;
@@ -1824,7 +1795,7 @@ arm_get_next_pc (CORE_ADDR pc)
                  }
                  nextpc = ADDR_BITS_REMOVE (nextpc);
                  if (nextpc == pc)
-                   error ("Infinite loop detected");
+                   error (_("Infinite loop detected"));
                }
            }
          break;
@@ -1840,7 +1811,7 @@ arm_get_next_pc (CORE_ADDR pc)
 
            nextpc = ADDR_BITS_REMOVE (nextpc);
            if (nextpc == pc)
-             error ("Infinite loop detected");
+             error (_("Infinite loop detected"));
            break;
          }
 
@@ -1851,7 +1822,7 @@ arm_get_next_pc (CORE_ADDR pc)
          break;
 
        default:
-         fprintf_filtered (gdb_stderr, "Bad bit-field extraction\n");
+         fprintf_filtered (gdb_stderr, _("Bad bit-field extraction\n"));
          return (pc);
        }
     }
@@ -2045,7 +2016,7 @@ arm_extract_return_value (struct type *type,
        default:
          internal_error
            (__FILE__, __LINE__,
-            "arm_extract_return_value: Floating point model not supported");
+            _("arm_extract_return_value: Floating point model not supported"));
          break;
        }
     }
@@ -2235,7 +2206,7 @@ arm_store_return_value (struct type *type, struct regcache *regs,
        default:
          internal_error
            (__FILE__, __LINE__,
-            "arm_store_return_value: Floating point model not supported");
+            _("arm_store_return_value: Floating point model not supported"));
          break;
        }
     }
@@ -2362,7 +2333,8 @@ arm_skip_stub (CORE_ADDR pc)
 static void
 set_arm_command (char *args, int from_tty)
 {
-  printf_unfiltered ("\"set arm\" must be followed by an apporpriate subcommand.\n");
+  printf_unfiltered (_("\
+\"set arm\" must be followed by an apporpriate subcommand.\n"));
   help_list (setarmcmdlist, "set arm ", all_commands, gdb_stdout);
 }
 
@@ -2416,7 +2388,7 @@ set_fp_model_sfunc (char *args, int from_tty,
       }
 
   if (fp_model == ARM_FLOAT_LAST)
-    internal_error (__FILE__, __LINE__, "Invalid fp model accepted: %s.",
+    internal_error (__FILE__, __LINE__, _("Invalid fp model accepted: %s."),
                    current_fp_model);
 
   if (gdbarch_bfd_arch_info (current_gdbarch)->arch == bfd_arch_arm)
@@ -2431,7 +2403,8 @@ show_fp_model (char *args, int from_tty,
 
   if (arm_fp_model == ARM_FLOAT_AUTO 
       && gdbarch_bfd_arch_info (current_gdbarch)->arch == bfd_arch_arm)
-    printf_filtered ("  - the default for the current ABI is \"%s\".\n",
+    /* i18n: "the default [floating point model] for the current ABI..." */
+    printf_filtered (_("  - the default for the current ABI is \"%s\".\n"),
                     fp_model_strings[tdep->fp_model]);
 }
 
@@ -2488,19 +2461,6 @@ set_disassembly_style (void)
   set_arm_regname_option (current);
 }
 
-/* arm_othernames implements the "othernames" command.  This is deprecated
-   by the "set arm disassembly" command.  */
-
-static void
-arm_othernames (char *names, int n)
-{
-  /* Circle through the various flavors.  */
-  current_option = (current_option + 1) % num_disassembly_options;
-
-  disassembly_style = valid_disassembly_styles[current_option];
-  set_disassembly_style ();
-}
-
 /* Test whether the coff symbol specific value corresponds to a Thumb
    function.  */
 
@@ -2594,8 +2554,9 @@ arm_elf_osabi_sniffer (bfd *abfd)
 
            default:
              internal_error (__FILE__, __LINE__,
-                             "arm_elf_osabi_sniffer: Unknown ARM EABI "
-                             "version 0x%x", eflags);
+                             _("\
+arm_elf_osabi_sniffer: Unknown ARM EABI version 0x%x"),
+                             eflags);
            }
        }
       break;
@@ -2700,7 +2661,7 @@ arm_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
 
     default:
       internal_error (__FILE__, __LINE__,
-                     "arm_gdbarch_init: bad byte order for float format");
+                     _("arm_gdbarch_init: bad byte order for float format"));
     }
 
   /* On ARM targets char defaults to unsigned.  */
@@ -2719,8 +2680,6 @@ arm_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   set_gdbarch_unwind_pc (gdbarch, arm_unwind_pc);
   set_gdbarch_unwind_sp (gdbarch, arm_unwind_sp);
 
-  set_gdbarch_deprecated_frameless_function_invocation (gdbarch, arm_frameless_function_invocation);
-
   frame_base_set_default (gdbarch, &arm_normal_base);
 
   /* Address manipulation.  */
@@ -2745,10 +2704,6 @@ arm_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   set_gdbarch_sp_regnum (gdbarch, ARM_SP_REGNUM);
   set_gdbarch_pc_regnum (gdbarch, ARM_PC_REGNUM);
   set_gdbarch_deprecated_register_byte (gdbarch, arm_register_byte);
-  set_gdbarch_deprecated_register_bytes (gdbarch,
-                                        (NUM_GREGS * INT_REGISTER_SIZE
-                                         + NUM_FREGS * FP_REGISTER_SIZE
-                                         + NUM_SREGS * STATUS_REGISTER_SIZE));
   set_gdbarch_num_regs (gdbarch, NUM_GREGS + NUM_FREGS + NUM_SREGS);
   set_gdbarch_register_type (gdbarch, arm_register_type);
 
@@ -2807,7 +2762,7 @@ arm_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
 
     default:
       internal_error (__FILE__, __LINE__,
-                     "arm_gdbarch_init: bad byte order for float format");
+                     _("arm_gdbarch_init: bad byte order for float format"));
     }
 
   return gdbarch;
@@ -2821,7 +2776,7 @@ arm_dump_tdep (struct gdbarch *current_gdbarch, struct ui_file *file)
   if (tdep == NULL)
     return;
 
-  fprintf_unfiltered (file, "arm_dump_tdep: Lowest pc = 0x%lx",
+  fprintf_unfiltered (file, _("arm_dump_tdep: Lowest pc = 0x%lx"),
                      (unsigned long) tdep->lowest_pc);
 }
 
@@ -2859,6 +2814,8 @@ _initialize_arm_tdep (void)
   const char **regnames;
   int numregs, i, j;
   static char *helptext;
+  char regdesc[1024], *rdptr = regdesc;
+  size_t rest = sizeof (regdesc);
 
   gdbarch_register (bfd_arch_arm, arm_gdbarch_init, arm_dump_tdep);
 
@@ -2880,21 +2837,16 @@ _initialize_arm_tdep (void)
 
   /* Add root prefix command for all "set arm"/"show arm" commands.  */
   add_prefix_cmd ("arm", no_class, set_arm_command,
-                 "Various ARM-specific commands.",
+                 _("Various ARM-specific commands."),
                  &setarmcmdlist, "set arm ", 0, &setlist);
 
   add_prefix_cmd ("arm", no_class, show_arm_command,
-                 "Various ARM-specific commands.",
+                 _("Various ARM-specific commands."),
                  &showarmcmdlist, "show arm ", 0, &showlist);
 
   /* Sync the opcode insn printer with our register viewer.  */
   parse_arm_disassembler_option ("reg-names-std");
 
-  /* Begin creating the help text.  */
-  stb = mem_fileopen ();
-  fprintf_unfiltered (stb, "Set the disassembly style.\n"
-                     "The valid values are:\n");
-
   /* Initialize the array that will be passed to add_set_enum_cmd().  */
   valid_disassembly_styles
     = xmalloc ((num_disassembly_options + 1) * sizeof (char *));
@@ -2902,8 +2854,9 @@ _initialize_arm_tdep (void)
     {
       numregs = get_arm_regnames (i, &setname, &setdesc, &regnames);
       valid_disassembly_styles[i] = setname;
-      fprintf_unfiltered (stb, "%s - %s\n", setname,
-                         setdesc);
+      length = snprintf (rdptr, rest, "%s - %s\n", setname, setdesc);
+      rdptr += length;
+      rest -= length;
       /* Copy the default names (if found) and synchronize disassembler.  */
       if (!strcmp (setname, "std"))
        {
@@ -2917,75 +2870,51 @@ _initialize_arm_tdep (void)
   /* Mark the end of valid options.  */
   valid_disassembly_styles[num_disassembly_options] = NULL;
 
-  /* Finish the creation of the help text.  */
-  fprintf_unfiltered (stb, "The default is \"std\".");
+  /* Create the help text.  */
+  stb = mem_fileopen ();
+  fprintf_unfiltered (stb, "%s%s%s",
+                     _("The valid values are:\n"),
+                     regdesc,
+                     _("The default is \"std\"."));
   helptext = ui_file_xstrdup (stb, &length);
   ui_file_delete (stb);
 
-  /* Add the deprecated disassembly-flavor command.  */
-  new_set = add_set_enum_cmd ("disassembly-flavor", no_class,
-                             valid_disassembly_styles,
-                             &disassembly_style,
-                             helptext,
-                             &setlist);
-  set_cmd_sfunc (new_set, set_disassembly_style_sfunc);
-  deprecate_cmd (new_set, "set arm disassembly");
-  deprecate_cmd (deprecated_add_show_from_set (new_set, &showlist),
-                "show arm disassembly");
-
-  /* And now add the new interface.  */
-  new_set = add_set_enum_cmd ("disassembler", no_class,
-                             valid_disassembly_styles, &disassembly_style,
-                             helptext, &setarmcmdlist);
-
-  set_cmd_sfunc (new_set, set_disassembly_style_sfunc);
-  deprecated_add_show_from_set (new_set, &showarmcmdlist);
-
-  add_setshow_cmd_full ("apcs32", no_class,
-                       var_boolean, (char *) &arm_apcs_32, "\
-Set usage of ARM 32-bit mode.", "\
-Show usage of ARM 32-bit mode.", "\
-Determine the usage of ARM 32-bit mode.", "\
-Usage of ARM 32-bit mode is %s.",
-                       NULL, NULL,
-                       &setlist, &showlist, &new_set, &new_show);
-  deprecate_cmd (new_set, "set arm apcs32");
-  deprecate_cmd (new_show, "show arm apcs32");
-
-  add_setshow_boolean_cmd ("apcs32", no_class, &arm_apcs_32, "\
-Set usage of ARM 32-bit mode.", "\
-Show usage of ARM 32-bit mode.", "\
-When off, a 26-bit PC will be used.\n\
-When off, a 26-bit PC will be used.", "\
-Usage of ARM 32-bit mode is %s.",
+  add_setshow_enum_cmd("disassembler", no_class,
+                      valid_disassembly_styles, &disassembly_style,
+                      _("Set the disassembly style."),
+                      _("Show the disassembly style."),
+                      helptext,
+                      NULL, /* PRINT: The disassembly style is \"%s\".  */
+                      set_disassembly_style_sfunc, NULL,
+                      &setarmcmdlist, &showarmcmdlist);
+
+  add_setshow_boolean_cmd ("apcs32", no_class, &arm_apcs_32,
+                          _("Set usage of ARM 32-bit mode."),
+                          _("Show usage of ARM 32-bit mode."),
+                          _("When off, a 26-bit PC will be used."),
+                          NULL, /* PRINT: "Usage of ARM 32-bit mode is %s.  */
                           NULL, NULL,
                           &setarmcmdlist, &showarmcmdlist);
 
   /* Add a command to allow the user to force the FPU model.  */
-  new_set = add_set_enum_cmd
-    ("fpu", no_class, fp_model_strings, &current_fp_model,
-     "Set the floating point type.\n"
-     "auto - Determine the FP typefrom the OS-ABI.\n"
-     "softfpa - Software FP, mixed-endian doubles on little-endian ARMs.\n"
-     "fpa - FPA co-processor (GCC compiled).\n"
-     "softvfp - Software FP with pure-endian doubles.\n"
-     "vfp - VFP co-processor.",
-     &setarmcmdlist);
-  set_cmd_sfunc (new_set, set_fp_model_sfunc);
-  set_cmd_sfunc (deprecated_add_show_from_set (new_set, &showarmcmdlist),
-                show_fp_model);
-
-  /* Add the deprecated "othernames" command.  */
-  deprecate_cmd (add_com ("othernames", class_obscure, arm_othernames,
-                         "Switch to the next set of register names."),
-                "set arm disassembly");
+  add_setshow_enum_cmd ("fpu", no_class, fp_model_strings, &current_fp_model,
+                       _("Set the floating point type."),
+                       _("Show the floating point type."),
+                       _("auto - Determine the FP typefrom the OS-ABI.\n\
+softfpa - Software FP, mixed-endian doubles on little-endian ARMs.\n\
+fpa - FPA co-processor (GCC compiled).\n\
+softvfp - Software FP with pure-endian doubles.\n\
+vfp - VFP co-processor."),
+                       NULL, /* PRINT: "The floating point type is \"%s\".  */
+                       set_fp_model_sfunc, show_fp_model,
+                       &setarmcmdlist, &showarmcmdlist);
 
   /* Debugging flag.  */
-  add_setshow_boolean_cmd ("arm", class_maintenance, &arm_debug, "\
-Set ARM debugging.", "\
-Show ARM debugging.", "\
-When on, arm-specific debugging is enabled.", "\
-ARM debugging is %s.",
+  add_setshow_boolean_cmd ("arm", class_maintenance, &arm_debug,
+                          _("Set ARM debugging."),
+                          _("Show ARM debugging."),
+                          _("When on, arm-specific debugging is enabled."),
+                          NULL, /* PRINT: "ARM debugging is %s.  */
                           NULL, NULL,
                           &setdebuglist, &showdebuglist);
 }
This page took 0.030699 seconds and 4 git commands to generate.