* arch-utils.c (selected_byte_order): Return target_byte_order_user.
[binutils-gdb.git] / gdb / osabi.c
index 3c4cff00d7a3ab1d6e5bb0d7a33b09292ccda5c1..778dedcf4b6f502ba911cc5ea5b51926c02f3826 100644 (file)
@@ -1,23 +1,22 @@
 /* OS ABI variant handling for GDB.
 
-   Copyright 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+   Copyright (C) 2001, 2002, 2003, 2004, 2007, 2008, 2009
+   Free Software Foundation, Inc.
 
    This file is part of GDB.
 
    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,  
+   This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    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., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include "defs.h"
 
@@ -64,19 +63,17 @@ static const char * const gdb_osabi_names[] =
   "OpenBSD ELF",
   "Windows CE",
   "DJGPP",
-  "NetWare",
   "Irix",
-  "LynxOS",
   "Interix",
   "HP/UX ELF",
   "HP/UX SOM",
 
-  "ARM EABI v1",
-  "ARM EABI v2",
-  "ARM APCS",
   "QNX Neutrino",
 
   "Cygwin",
+  "AIX",
+  "DICOS",
+  "Darwin",
 
   "<invalid>"
 };
@@ -209,14 +206,9 @@ gdbarch_lookup_osabi (bfd *abfd)
     return user_selected_osabi;
 
   /* If we don't have a binary, return the default OS ABI (if set) or
-     an inconclusive result (otherwise).  */
+     unknown (otherwise).  */
   if (abfd == NULL) 
-    {
-      if (GDB_OSABI_DEFAULT != GDB_OSABI_UNKNOWN)
-       return GDB_OSABI_DEFAULT;
-      else
-       return GDB_OSABI_UNINITIALIZED;
-    }
+    return GDB_OSABI_DEFAULT;
 
   match = GDB_OSABI_UNKNOWN;
   match_specific = 0;
@@ -549,7 +541,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;
     }
 
@@ -597,18 +590,20 @@ set_osabi (char *args, int from_tty, struct cmd_list_element *c)
 }
 
 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 (get_current_arch ())));
   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 */
@@ -629,11 +624,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;
 }