* defs.h (gdb_osabi): New enum value GDB_OSABI_AIX.
[deliverable/binutils-gdb.git] / gdb / osabi.c
index 3acfc703648e8611c91f136e8312fd89a2b6c024..e8c5ed844f3906de1fad03f85255bd2ffb489431 100644 (file)
@@ -1,5 +1,6 @@
 /* OS ABI variant handling for GDB.
-   Copyright 2001, 2002, 2003 Free Software Foundation, Inc.
+
+   Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -15,8 +16,8 @@
   
    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., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.  */
+   Foundation, Inc., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
 
 #include "defs.h"
 
@@ -70,12 +71,10 @@ static const char * const gdb_osabi_names[] =
   "HP/UX ELF",
   "HP/UX SOM",
 
-  "ARM EABI v1",
-  "ARM EABI v2",
-  "ARM APCS",
   "QNX Neutrino",
 
   "Cygwin",
+  "AIX",
 
   "<invalid>"
 };
@@ -116,9 +115,9 @@ gdbarch_register_osabi (enum bfd_architecture arch, unsigned long machine,
     {
       internal_error
        (__FILE__, __LINE__,
-        "gdbarch_register_osabi: An attempt to register a handler for "
+        _("gdbarch_register_osabi: An attempt to register a handler for "
          "OS ABI \"%s\" for architecture %s was made.  The handler will "
-        "not be registered",
+        "not be registered"),
         gdbarch_osabi_name (osabi),
         bfd_printable_arch_mach (arch, machine));
       return;
@@ -134,8 +133,8 @@ gdbarch_register_osabi (enum bfd_architecture arch, unsigned long machine,
        {
          internal_error
            (__FILE__, __LINE__,
-            "gdbarch_register_osabi: A handler for OS ABI \"%s\" "
-            "has already been registered for architecture %s",
+            _("gdbarch_register_osabi: A handler for OS ABI \"%s\" "
+            "has already been registered for architecture %s"),
             gdbarch_osabi_name (osabi),
             arch_info->printable_name);
          /* If user wants to continue, override previous definition.  */
@@ -232,8 +231,8 @@ gdbarch_lookup_osabi (bfd *abfd)
            {
              internal_error
                (__FILE__, __LINE__,
-                "gdbarch_lookup_osabi: invalid OS ABI (%d) from sniffer "
-                "for architecture %s flavour %d",
+                _("gdbarch_lookup_osabi: invalid OS ABI (%d) from sniffer "
+                "for architecture %s flavour %d"),
                 (int) osabi,
                 bfd_printable_arch_mach (bfd_get_arch (abfd), 0),
                 (int) bfd_get_flavour (abfd));
@@ -251,9 +250,9 @@ gdbarch_lookup_osabi (bfd *abfd)
                    {
                      internal_error
                        (__FILE__, __LINE__,
-                        "gdbarch_lookup_osabi: multiple %sspecific OS ABI "
+                        _("gdbarch_lookup_osabi: multiple %sspecific OS ABI "
                         "match for architecture %s flavour %d: first "
-                        "match \"%s\", second match \"%s\"",
+                        "match \"%s\", second match \"%s\""),
                         match_specific ? "" : "non-",
                         bfd_printable_arch_mach (bfd_get_arch (abfd), 0),
                         (int) bfd_get_flavour (abfd),
@@ -446,8 +445,8 @@ generic_elf_osabi_sniff_abi_tag_sections (bfd *abfd, asection *sect, void *obj)
              break;
 
            default:
-             internal_error (__FILE__, __LINE__, "\
-generic_elf_osabi_sniff_abi_tag_sections: unknown OS number %d",
+             internal_error (__FILE__, __LINE__, _("\
+generic_elf_osabi_sniff_abi_tag_sections: unknown OS number %d"),
                              abi_tag);
            }
          return;
@@ -501,10 +500,11 @@ generic_elf_osabi_sniffer (bfd *abfd)
   switch (elfosabi)
     {
     case ELFOSABI_NONE:
-      /* When elfosabi is ELFOSABI_NONE (0), then the ELF structures in the
-         file are conforming to the base specification for that machine
-        (there are no OS-specific extensions).  In order to determine the
-        real OS in use we must look for OS notes that have been added.  */
+      /* When the EI_OSABI field in the ELF header is ELFOSABI_NONE
+         (0), then the ELF structures in the file are conforming to
+         the base specification for that machine (there are no
+         OS-specific extensions).  In order to determine the real OS
+         in use we must look for OS-specific notes.  */
       bfd_map_over_sections (abfd,
                             generic_elf_osabi_sniff_abi_tag_sections,
                             &osabi);
@@ -531,7 +531,14 @@ generic_elf_osabi_sniffer (bfd *abfd)
       break;
 
     case ELFOSABI_HPUX:
+      /* For some reason the default value for the EI_OSABI field is
+         ELFOSABI_HPUX for all PA-RISC targets (with the exception of
+         GNU/Linux).  We use HP-UX ELF as the default, but let any
+         OS-specific notes override this.  */
       osabi = GDB_OSABI_HPUX_ELF;
+      bfd_map_over_sections (abfd,
+                            generic_elf_osabi_sniff_abi_tag_sections,
+                            &osabi);
       break;
     }
 
@@ -540,7 +547,8 @@ generic_elf_osabi_sniffer (bfd *abfd)
       /* The FreeBSD folks have been naughty; they stored the string
          "FreeBSD" in the padding of the e_ident field of the ELF
          header to "brand" their ELF binaries in FreeBSD 3.x.  */
-      if (strcmp (&elf_elfheader (abfd)->e_ident[8], "FreeBSD") == 0)
+      if (memcmp (&elf_elfheader (abfd)->e_ident[8],
+                 "FreeBSD", sizeof ("FreeBSD")) == 0)
        osabi = GDB_OSABI_FREEBSD_ELF;
     }
 
@@ -576,7 +584,7 @@ set_osabi (char *args, int from_tty, struct cmd_list_element *c)
          }
       if (i == GDB_OSABI_INVALID)
        internal_error (__FILE__, __LINE__,
-                       "Invalid OS ABI \"%s\" passed to command handler.",
+                       _("Invalid OS ABI \"%s\" passed to command handler."),
                        set_osabi_string);
     }
 
@@ -584,22 +592,24 @@ set_osabi (char *args, int from_tty, struct cmd_list_element *c)
      graceful here.  */
   gdbarch_info_init (&info);
   if (! gdbarch_update_p (info))
-    internal_error (__FILE__, __LINE__, "Updating OS ABI failed.");
+    internal_error (__FILE__, __LINE__, _("Updating OS ABI failed."));
 }
 
 static void
-show_osabi (char *args, int from_tty)
+show_osabi (struct ui_file *file, int from_tty, struct cmd_list_element *c,
+           const char *value)
 {
   if (user_osabi_state == osabi_auto)
-    printf_filtered ("The current OS ABI is \"auto\" (currently \"%s\").\n",
-                    gdbarch_osabi_name (gdbarch_osabi (current_gdbarch)));
+    fprintf_filtered (file,
+                     _("The current OS ABI is \"auto\" (currently \"%s\").\n"),
+                     gdbarch_osabi_name (gdbarch_osabi (current_gdbarch)));
   else
-    printf_filtered ("The current OS ABI is \"%s\".\n",
-                    gdbarch_osabi_name (user_selected_osabi));
+    fprintf_filtered (file, _("The current OS ABI is \"%s\".\n"),
+                     gdbarch_osabi_name (user_selected_osabi));
 
   if (GDB_OSABI_DEFAULT != GDB_OSABI_UNKNOWN)
-    printf_filtered ("The default OS ABI is \"%s\".\n",
-                    gdbarch_osabi_name (GDB_OSABI_DEFAULT));
+    fprintf_filtered (file, _("The default OS ABI is \"%s\".\n"),
+                     gdbarch_osabi_name (GDB_OSABI_DEFAULT));
 }
 \f
 extern initialize_file_ftype _initialize_gdb_osabi; /* -Wmissing-prototype */
@@ -612,7 +622,7 @@ _initialize_gdb_osabi (void)
   if (strcmp (gdb_osabi_names[GDB_OSABI_INVALID], "<invalid>") != 0)
     internal_error
       (__FILE__, __LINE__,
-       "_initialize_gdb_osabi: gdb_osabi_names[] is inconsistent");
+       _("_initialize_gdb_osabi: gdb_osabi_names[] is inconsistent"));
 
   /* Register a generic sniffer for ELF flavoured files.  */
   gdbarch_register_osabi_sniffer (bfd_arch_unknown,
@@ -620,11 +630,12 @@ _initialize_gdb_osabi (void)
                                  generic_elf_osabi_sniffer);
 
   /* Register the "set osabi" command.  */
-  c = add_set_enum_cmd ("osabi", class_support, gdb_osabi_available_names,
-                       &set_osabi_string, "Set OS ABI of target.", &setlist);
-
-  set_cmd_sfunc (c, set_osabi);
-  add_cmd ("osabi", class_support, show_osabi, "Show OS/ABI of target.",
-          &showlist);
+  add_setshow_enum_cmd ("osabi", class_support, gdb_osabi_available_names,
+                       &set_osabi_string, _("\
+Set OS ABI of target."), _("\
+Show OS ABI of target."), NULL,
+                       set_osabi,
+                       show_osabi,
+                       &setlist, &showlist);
   user_osabi_state = osabi_auto;
 }
This page took 0.027108 seconds and 4 git commands to generate.