/* OS ABI variant handling for GDB.
- Copyright (C) 2001-2016 Free Software Foundation, Inc.
+ Copyright (C) 2001-2019 Free Software Foundation, Inc.
This file is part of GDB.
them in sync. */
static const struct osabi_names gdb_osabi_names[] =
{
+ { "unknown", NULL },
{ "none", NULL },
{ "SVR4", NULL },
{ "GNU/Hurd", NULL },
{ "Solaris", NULL },
- { "GNU/Linux", "linux(-gnu)?" },
- { "FreeBSD/a.out", NULL },
- { "FreeBSD/ELF", NULL },
- { "NetBSD/a.out", NULL },
- { "NetBSD/ELF", NULL },
- { "OpenBSD/ELF", NULL },
+ { "GNU/Linux", "linux(-gnu[^-]*)?" },
+ { "FreeBSD", NULL },
+ { "NetBSD", NULL },
+ { "OpenBSD", NULL },
{ "WindowsCE", NULL },
{ "DJGPP", NULL },
- { "Irix", NULL },
- { "HP-UX/ELF", NULL },
- { "HP-UX/SOM", NULL },
{ "QNX-Neutrino", NULL },
{ "Cygwin", NULL },
{ "AIX", NULL },
{ "LynxOS178", NULL },
{ "Newlib", NULL },
{ "SDE", NULL },
+ { "PikeOS", NULL },
{ "<invalid>", NULL }
};
{
struct gdb_osabi_handler *handler;
- if (info.osabi == GDB_OSABI_UNKNOWN)
- {
- /* Don't complain about an unknown OSABI. Assume the user knows
- what they are doing. */
- return;
- }
+ gdb_assert (info.osabi != GDB_OSABI_UNKNOWN);
for (handler = gdb_osabi_handler_list; handler != NULL;
handler = handler->next)
}
}
+ if (info.osabi == GDB_OSABI_NONE)
+ {
+ /* Don't complain about no OSABI. Assume the user knows
+ what they are doing. */
+ return;
+ }
+
warning
("A handler for the OS ABI \"%s\" is not built into this configuration\n"
"of GDB. Attempting to continue with the default %s settings.\n",
break;
case GNU_ABI_TAG_FREEBSD:
- *osabi = GDB_OSABI_FREEBSD_ELF;
+ *osabi = GDB_OSABI_FREEBSD;
break;
case GNU_ABI_TAG_NETBSD:
- *osabi = GDB_OSABI_NETBSD_ELF;
+ *osabi = GDB_OSABI_NETBSD;
break;
default:
NT_FREEBSD_ABI_TAG))
{
/* There is no need to check the version yet. */
- *osabi = GDB_OSABI_FREEBSD_ELF;
+ *osabi = GDB_OSABI_FREEBSD;
return;
}
&& check_note (abfd, sect, note, §size, "NetBSD", 4, NT_NETBSD_IDENT))
{
/* There is no need to check the version yet. */
- *osabi = GDB_OSABI_NETBSD_ELF;
+ *osabi = GDB_OSABI_NETBSD;
return;
}
NT_OPENBSD_IDENT))
{
/* There is no need to check the version yet. */
- *osabi = GDB_OSABI_OPENBSD_ELF;
+ *osabi = GDB_OSABI_OPENBSD;
return;
}
/* .note.netbsdcore.procinfo notes, used by NetBSD. */
if (strcmp (name, ".note.netbsdcore.procinfo") == 0)
{
- *osabi = GDB_OSABI_NETBSD_ELF;
+ *osabi = GDB_OSABI_NETBSD;
return;
}
}
{
case ELFOSABI_NONE:
case ELFOSABI_GNU:
+ case ELFOSABI_HPUX:
/* 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
The same applies for ELFOSABI_GNU: this can mean GNU/Hurd,
GNU/Linux, and possibly more. */
+
+ /* And likewise 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). */
bfd_map_over_sections (abfd,
generic_elf_osabi_sniff_abi_tag_sections,
&osabi);
break;
case ELFOSABI_FREEBSD:
- osabi = GDB_OSABI_FREEBSD_ELF;
+ osabi = GDB_OSABI_FREEBSD;
break;
case ELFOSABI_NETBSD:
- osabi = GDB_OSABI_NETBSD_ELF;
+ osabi = GDB_OSABI_NETBSD;
break;
case ELFOSABI_SOLARIS:
osabi = GDB_OSABI_SOLARIS;
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;
-
case ELFOSABI_OPENVMS:
osabi = GDB_OSABI_OPENVMS;
break;
header to "brand" their ELF binaries in FreeBSD 3.x. */
if (memcmp (&elf_elfheader (abfd)->e_ident[8],
"FreeBSD", sizeof ("FreeBSD")) == 0)
- osabi = GDB_OSABI_FREEBSD_ELF;
+ osabi = GDB_OSABI_FREEBSD;
}
return osabi;
}
\f
static void
-set_osabi (char *args, int from_tty, struct cmd_list_element *c)
+set_osabi (const char *args, int from_tty, struct cmd_list_element *c)
{
struct gdbarch_info info;
user_selected_osabi = GDB_OSABI_DEFAULT;
user_osabi_state = osabi_user;
}
- else if (strcmp (set_osabi_string, "none") == 0)
- {
- user_selected_osabi = GDB_OSABI_UNKNOWN;
- user_osabi_state = osabi_user;
- }
else
{
int i;
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 */
void
_initialize_gdb_osabi (void)