projects
/
deliverable
/
binutils-gdb.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
gdb: add target_ops::supports_displaced_step
[deliverable/binutils-gdb.git]
/
gdb
/
osabi.c
diff --git
a/gdb/osabi.c
b/gdb/osabi.c
index 2c75567f9c2218919d984e8bee6e0e441f45ddf2..627b9d98151513d1af0126ae8474139c3a515350 100644
(file)
--- a/
gdb/osabi.c
+++ b/
gdb/osabi.c
@@
-1,6
+1,6
@@
/* OS ABI variant handling for GDB.
/* OS ABI variant handling for GDB.
- Copyright (C) 2001-20
15
Free Software Foundation, Inc.
+ Copyright (C) 2001-20
20
Free Software Foundation, Inc.
This file is part of GDB.
This file is part of GDB.
@@
-58,24
+58,21
@@
struct osabi_names
them in sync. */
static const struct osabi_names gdb_osabi_names[] =
{
them in sync. */
static const struct osabi_names gdb_osabi_names[] =
{
+ { "unknown", NULL },
{ "none", NULL },
{ "SVR4", NULL },
{ "GNU/Hurd", NULL },
{ "Solaris", 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 },
{ "DJGPP", NULL },
- { "Irix", NULL },
- { "HP/UX ELF", NULL },
- { "HP/UX SOM", NULL },
- { "QNX Neutrino", NULL },
+ { "QNX-Neutrino", NULL },
{ "Cygwin", NULL },
{ "Cygwin", NULL },
+ { "Windows", NULL },
{ "AIX", NULL },
{ "DICOS", NULL },
{ "Darwin", 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 },
{ "LynxOS178", NULL },
{ "Newlib", NULL },
{ "SDE", NULL },
+ { "PikeOS", NULL },
{ "<invalid>", NULL }
};
{ "<invalid>", 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;
(*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;
{
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;
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;
{
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)
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
continue;
/* If the architecture described by ARCH_INFO can run code for
- the architcture we registered the handler for, then the
+ the archit
e
cture 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
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",
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);
/* If this assertion triggers, increase MAX_NOTESZ. */
gdb_assert (notesz <= MAX_NOTESZ);
- /* Check whether SECT is big enough to co
m
tain the complete note. */
- if (notesz > bfd_section_size (
abfd,
sect))
+ /* Check whether SECT is big enough to co
n
tain the complete note. */
+ if (notesz > bfd_section_size (sect))
return 0;
/* Check the note name. */
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)
{
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;
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)
/* 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. */
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)
/* .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:
break;
case GNU_ABI_TAG_FREEBSD:
- *osabi = GDB_OSABI_FREEBSD
_ELF
;
+ *osabi = GDB_OSABI_FREEBSD;
break;
case GNU_ABI_TAG_NETBSD:
break;
case GNU_ABI_TAG_NETBSD:
- *osabi = GDB_OSABI_NETBSD
_ELF
;
+ *osabi = GDB_OSABI_NETBSD;
break;
default:
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. */
NT_FREEBSD_ABI_TAG))
{
/* There is no need to check the version yet. */
- *osabi = GDB_OSABI_FREEBSD
_ELF
;
+ *osabi = GDB_OSABI_FREEBSD;
return;
}
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. */
&& 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;
}
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. */
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)
{
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;
}
}
return;
}
}
@@
-550,6
+548,7
@@
generic_elf_osabi_sniffer (bfd *abfd)
{
case ELFOSABI_NONE:
case ELFOSABI_GNU:
{
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
/* 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. */
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:
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:
break;
case ELFOSABI_NETBSD:
- osabi = GDB_OSABI_NETBSD
_ELF
;
+ osabi = GDB_OSABI_NETBSD;
break;
case ELFOSABI_SOLARIS:
osabi = GDB_OSABI_SOLARIS;
break;
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;
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)
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
}
return osabi;
}
\f
static void
-set_osabi (char *args, int from_tty, struct cmd_list_element *c)
+set_osabi (c
onst c
har *args, int from_tty, struct cmd_list_element *c)
{
struct gdbarch_info info;
{
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;
}
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;
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));
}
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
void
-_initialize_gdb_osabi (
void
)
+_initialize_gdb_osabi ()
{
if (strcmp (gdb_osabi_names[GDB_OSABI_INVALID].pretty, "<invalid>") != 0)
internal_error
{
if (strcmp (gdb_osabi_names[GDB_OSABI_INVALID].pretty, "<invalid>") != 0)
internal_error
This page took
0.028218 seconds
and
4
git commands to generate.