X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fosabi.c;h=627b9d98151513d1af0126ae8474139c3a515350;hb=refs%2Fheads%2Fconcurrent-displaced-stepping-2020-04-01;hp=2c75567f9c2218919d984e8bee6e0e441f45ddf2;hpb=aead7601eb0ddc3fa51d43747bdad0e02abda342;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/osabi.c b/gdb/osabi.c index 2c75567f9c..627b9d9815 100644 --- a/gdb/osabi.c +++ b/gdb/osabi.c @@ -1,6 +1,6 @@ /* OS ABI variant handling for GDB. - Copyright (C) 2001-2015 Free Software Foundation, Inc. + Copyright (C) 2001-2020 Free Software Foundation, Inc. This file is part of GDB. @@ -58,24 +58,21 @@ struct osabi_names 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 }, - { "Windows CE", 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 }, + { "QNX-Neutrino", NULL }, { "Cygwin", NULL }, + { "Windows", NULL }, { "AIX", NULL }, { "DICOS", NULL }, { "Darwin", NULL }, @@ -84,6 +81,7 @@ static const struct osabi_names gdb_osabi_names[] = { "LynxOS178", NULL }, { "Newlib", NULL }, { "SDE", NULL }, + { "PikeOS", NULL }, { "", NULL } }; @@ -187,8 +185,7 @@ gdbarch_register_osabi (enum bfd_architecture arch, unsigned long machine, } } - (*handler_p) - = (struct gdb_osabi_handler *) xmalloc (sizeof (struct gdb_osabi_handler)); + (*handler_p) = XNEW (struct gdb_osabi_handler); (*handler_p)->next = NULL; (*handler_p)->arch_info = arch_info; (*handler_p)->osabi = osabi; @@ -228,8 +225,7 @@ gdbarch_register_osabi_sniffer (enum bfd_architecture arch, { struct gdb_osabi_sniffer *sniffer; - sniffer = - (struct gdb_osabi_sniffer *) xmalloc (sizeof (struct gdb_osabi_sniffer)); + sniffer = XNEW (struct gdb_osabi_sniffer); sniffer->arch = arch; sniffer->flavour = flavour; sniffer->sniffer = sniffer_fn; @@ -342,12 +338,7 @@ gdbarch_init_osabi (struct gdbarch_info info, struct gdbarch *gdbarch) { 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) @@ -356,7 +347,7 @@ gdbarch_init_osabi (struct gdbarch_info info, struct gdbarch *gdbarch) continue; /* If the architecture described by ARCH_INFO can run code for - the architcture we registered the handler for, then the + the architecture we registered the handler for, then the handler is applicable. Note, though, that if the handler is for an architecture that is a superset of ARCH_INFO, we can't use that --- it would be perfectly correct for it to install @@ -382,6 +373,13 @@ gdbarch_init_osabi (struct gdbarch_info info, struct gdbarch *gdbarch) } } + 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", @@ -418,8 +416,8 @@ check_note (bfd *abfd, asection *sect, char *note, unsigned int *sectsize, /* If this assertion triggers, increase MAX_NOTESZ. */ gdb_assert (notesz <= MAX_NOTESZ); - /* Check whether SECT is big enough to comtain the complete note. */ - if (notesz > bfd_section_size (abfd, sect)) + /* Check whether SECT is big enough to contain the complete note. */ + if (notesz > bfd_section_size (sect)) return 0; /* Check the note name. */ @@ -443,13 +441,13 @@ check_note (bfd *abfd, asection *sect, char *note, unsigned int *sectsize, void generic_elf_osabi_sniff_abi_tag_sections (bfd *abfd, asection *sect, void *obj) { - enum gdb_osabi *osabi = obj; + enum gdb_osabi *osabi = (enum gdb_osabi *) obj; const char *name; unsigned int sectsize; char *note; - name = bfd_get_section_name (abfd, sect); - sectsize = bfd_section_size (abfd, sect); + name = bfd_section_name (sect); + sectsize = bfd_section_size (sect); /* Limit the amount of data to read. */ if (sectsize > MAX_NOTESZ) @@ -460,7 +458,7 @@ generic_elf_osabi_sniff_abi_tag_sections (bfd *abfd, asection *sect, void *obj) compressed section. But, since note sections are not compressed, deferring the reading until we recognize the section avoids any error. */ - note = alloca (sectsize); + note = (char *) alloca (sectsize); /* .note.ABI-tag notes, used by GNU/Linux and FreeBSD. */ if (strcmp (name, ".note.ABI-tag") == 0) @@ -485,11 +483,11 @@ generic_elf_osabi_sniff_abi_tag_sections (bfd *abfd, asection *sect, void *obj) 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: @@ -504,7 +502,7 @@ generic_elf_osabi_sniff_abi_tag_sections (bfd *abfd, asection *sect, void *obj) NT_FREEBSD_ABI_TAG)) { /* There is no need to check the version yet. */ - *osabi = GDB_OSABI_FREEBSD_ELF; + *osabi = GDB_OSABI_FREEBSD; return; } @@ -516,7 +514,7 @@ generic_elf_osabi_sniff_abi_tag_sections (bfd *abfd, asection *sect, void *obj) && 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; } @@ -526,14 +524,14 @@ generic_elf_osabi_sniff_abi_tag_sections (bfd *abfd, asection *sect, void *obj) 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; } } @@ -550,6 +548,7 @@ generic_elf_osabi_sniffer (bfd *abfd) { 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 @@ -558,34 +557,27 @@ generic_elf_osabi_sniffer (bfd *abfd) 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; @@ -598,14 +590,14 @@ generic_elf_osabi_sniffer (bfd *abfd) 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; } 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; @@ -616,11 +608,6 @@ set_osabi (char *args, int from_tty, struct cmd_list_element *c) 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; @@ -666,11 +653,10 @@ show_osabi (struct ui_file *file, int from_tty, struct cmd_list_element *c, fprintf_filtered (file, _("The default OS ABI is \"%s\".\n"), gdbarch_osabi_name (GDB_OSABI_DEFAULT)); } - -extern initialize_file_ftype _initialize_gdb_osabi; /* -Wmissing-prototype */ +void _initialize_gdb_osabi (); void -_initialize_gdb_osabi (void) +_initialize_gdb_osabi () { if (strcmp (gdb_osabi_names[GDB_OSABI_INVALID].pretty, "") != 0) internal_error