mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-23 01:53:38 +08:00
gdb/gdbserver: change shared set_tdesc_osabi to take gdb_osabi
There is a single declaration of set_tdesc_osabi that is shared between gdbserver/ and gdb/, this declaration takes a 'const char *' argument which is the string representing an osabi. Then in gdb/ we have an overload of set_tdesc_osabi which takes an 'enum gdb_osabi'. In this commit I change the shared set_tdesc_osabi to be the version which takes an 'enum gdb_osabi', and I remove the version which takes a 'const char *'. All users of set_tdesc_osabi are updated to pass an 'enum gdb_osabi'. The features/ code, which is generated from the xml files, requires a new function to be added to osabi.{c,h} which can return a string representation of an 'enum gdb_osabi'. With that new function in place the features/ code is regenerated. This change is being made to support the next commit. In the next commit gdbserver will be updated to call set_tdesc_osabi in more cases. The problem is that gdbserver stores the osabi as a string. The issue here is that a typo in the gdbserver/ code might go unnoticed and result in gdbserver sending back an invalid osabi string. To fix this we want gdbserver to pass an 'enum gdb_osabi' to the set_tdesc_osabi function. With that requirement in place it seems to make sense if all calls to set_tdesc_osabi pass an 'enum gdb_osabi'. There should be no user visible changes after this commit. Approved-By: Luis Machado <luis.machado@arm.com> Approved-By: Simon Marchi <simon.marchi@efficios.com>
This commit is contained in:
parent
67470b3532
commit
d2f8a107b7
@ -17,6 +17,7 @@
|
||||
|
||||
#include "amd64.h"
|
||||
#include "gdbsupport/x86-xstate.h"
|
||||
#include "gdbsupport/osabi.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "../features/i386/64bit-avx.c"
|
||||
@ -45,7 +46,7 @@ amd64_create_target_description (uint64_t xcr0, bool is_x32, bool is_linux,
|
||||
is_x32 ? "i386:x64-32" : "i386:x86-64");
|
||||
|
||||
if (is_linux)
|
||||
set_tdesc_osabi (tdesc.get (), "GNU/Linux");
|
||||
set_tdesc_osabi (tdesc.get (), GDB_OSABI_LINUX);
|
||||
#endif
|
||||
|
||||
long regnum = 0;
|
||||
|
@ -18,6 +18,7 @@
|
||||
#include "i386.h"
|
||||
#include "gdbsupport/tdesc.h"
|
||||
#include "gdbsupport/x86-xstate.h"
|
||||
#include "gdbsupport/osabi.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "../features/i386/32bit-core.c"
|
||||
@ -38,7 +39,7 @@ i386_create_target_description (uint64_t xcr0, bool is_linux, bool segments)
|
||||
#ifndef IN_PROCESS_AGENT
|
||||
set_tdesc_architecture (tdesc.get (), "i386");
|
||||
if (is_linux)
|
||||
set_tdesc_osabi (tdesc.get (), "GNU/Linux");
|
||||
set_tdesc_osabi (tdesc.get (), GDB_OSABI_LINUX);
|
||||
#endif
|
||||
|
||||
long regnum = 0;
|
||||
|
@ -16,6 +16,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include "gdbsupport/tdesc.h"
|
||||
#include "gdbsupport/osabi.h"
|
||||
#include "tic6x.h"
|
||||
|
||||
#include "../features/tic6x-core.c"
|
||||
@ -30,7 +31,7 @@ tic6x_create_target_description (enum c6x_feature feature)
|
||||
target_desc_up tdesc = allocate_target_description ();
|
||||
|
||||
set_tdesc_architecture (tdesc.get (), "tic6x");
|
||||
set_tdesc_osabi (tdesc.get (), "GNU/Linux");
|
||||
set_tdesc_osabi (tdesc.get (), GDB_OSABI_LINUX);
|
||||
|
||||
long regnum = 0;
|
||||
|
||||
|
@ -11,7 +11,7 @@ initialize_tdesc_mips_dsp_linux (void)
|
||||
target_desc_up result = allocate_target_description ();
|
||||
set_tdesc_architecture (result.get (), bfd_scan_arch ("mips"));
|
||||
|
||||
set_tdesc_osabi (result.get (), "GNU/Linux");
|
||||
set_tdesc_osabi (result.get (), GDB_OSABI_LINUX);
|
||||
|
||||
struct tdesc_feature *feature;
|
||||
|
||||
|
@ -11,7 +11,7 @@ initialize_tdesc_mips_linux (void)
|
||||
target_desc_up result = allocate_target_description ();
|
||||
set_tdesc_architecture (result.get (), bfd_scan_arch ("mips"));
|
||||
|
||||
set_tdesc_osabi (result.get (), "GNU/Linux");
|
||||
set_tdesc_osabi (result.get (), GDB_OSABI_LINUX);
|
||||
|
||||
struct tdesc_feature *feature;
|
||||
|
||||
|
@ -11,7 +11,7 @@ initialize_tdesc_or1k_linux (void)
|
||||
target_desc_up result = allocate_target_description ();
|
||||
set_tdesc_architecture (result.get (), bfd_scan_arch ("or1k"));
|
||||
|
||||
set_tdesc_osabi (result.get (), "GNU/Linux");
|
||||
set_tdesc_osabi (result.get (), GDB_OSABI_LINUX);
|
||||
|
||||
struct tdesc_feature *feature;
|
||||
|
||||
|
@ -11,7 +11,7 @@ initialize_tdesc_sparc32_solaris (void)
|
||||
target_desc_up result = allocate_target_description ();
|
||||
set_tdesc_architecture (result.get (), bfd_scan_arch ("sparc"));
|
||||
|
||||
set_tdesc_osabi (result.get (), "Solaris");
|
||||
set_tdesc_osabi (result.get (), GDB_OSABI_SOLARIS);
|
||||
|
||||
struct tdesc_feature *feature;
|
||||
|
||||
|
@ -11,7 +11,7 @@ initialize_tdesc_sparc64_solaris (void)
|
||||
target_desc_up result = allocate_target_description ();
|
||||
set_tdesc_architecture (result.get (), bfd_scan_arch ("sparc:v9"));
|
||||
|
||||
set_tdesc_osabi (result.get (), "Solaris");
|
||||
set_tdesc_osabi (result.get (), GDB_OSABI_SOLARIS);
|
||||
|
||||
struct tdesc_feature *feature;
|
||||
|
||||
|
29
gdb/osabi.c
29
gdb/osabi.c
@ -524,6 +524,35 @@ generic_elf_osabi_sniffer (bfd *abfd)
|
||||
|
||||
return osabi;
|
||||
}
|
||||
|
||||
/* See osabi.h. */
|
||||
|
||||
const char *
|
||||
gdbarch_osabi_enum_name (enum gdb_osabi osabi)
|
||||
{
|
||||
switch (osabi)
|
||||
{
|
||||
#define GDB_OSABI_DEF_FIRST(Enum, Name, Regex) \
|
||||
case GDB_OSABI_ ## Enum: \
|
||||
return "GDB_OSABI_" #Enum;
|
||||
|
||||
#define GDB_OSABI_DEF(Enum, Name, Regex) \
|
||||
case GDB_OSABI_ ## Enum: \
|
||||
return "GDB_OSABI_" #Enum;
|
||||
|
||||
#define GDB_OSABI_DEF_LAST(Enum, Name, Regex) \
|
||||
case GDB_OSABI_ ## Enum: \
|
||||
return "GDB_OSABI_" #Enum;
|
||||
|
||||
#include "gdbsupport/osabi.def"
|
||||
|
||||
#undef GDB_OSABI_DEF_LAST
|
||||
#undef GDB_OSABI_DEF
|
||||
#undef GDB_OSABI_DEF_FIRST
|
||||
}
|
||||
|
||||
gdb_assert_not_reached ();
|
||||
}
|
||||
|
||||
static void
|
||||
set_osabi (const char *args, int from_tty, struct cmd_list_element *c)
|
||||
|
@ -52,4 +52,8 @@ void gdbarch_init_osabi (struct gdbarch_info, struct gdbarch *);
|
||||
void generic_elf_osabi_sniff_abi_tag_sections (bfd *, asection *,
|
||||
enum gdb_osabi *);
|
||||
|
||||
/* Return a string version of OSABI. This is used when generating code
|
||||
which calls set_tdesc_osabi and an 'enum gdb_osabi' value is needed. */
|
||||
const char *gdbarch_osabi_enum_name (enum gdb_osabi osabi);
|
||||
|
||||
#endif /* OSABI_H */
|
||||
|
@ -1199,12 +1199,6 @@ set_tdesc_architecture (struct target_desc *target_desc,
|
||||
|
||||
/* See gdbsupport/tdesc.h. */
|
||||
|
||||
void
|
||||
set_tdesc_osabi (struct target_desc *target_desc, const char *name)
|
||||
{
|
||||
set_tdesc_osabi (target_desc, osabi_from_tdesc_string (name));
|
||||
}
|
||||
|
||||
void
|
||||
set_tdesc_osabi (struct target_desc *target_desc, enum gdb_osabi osabi)
|
||||
{
|
||||
@ -1317,9 +1311,8 @@ public:
|
||||
if (tdesc_osabi (e) > GDB_OSABI_UNKNOWN
|
||||
&& tdesc_osabi (e) < GDB_OSABI_INVALID)
|
||||
{
|
||||
gdb_printf
|
||||
(" set_tdesc_osabi (result.get (), \"%s\");\n",
|
||||
gdbarch_osabi_name (tdesc_osabi (e)));
|
||||
const char *enum_name = gdbarch_osabi_enum_name (tdesc_osabi (e));
|
||||
gdb_printf (" set_tdesc_osabi (result.get (), %s);\n", enum_name);
|
||||
gdb_printf ("\n");
|
||||
}
|
||||
|
||||
|
@ -219,7 +219,6 @@ int tdesc_register_in_reggroup_p (struct gdbarch *gdbarch, int regno,
|
||||
|
||||
void set_tdesc_architecture (struct target_desc *,
|
||||
const struct bfd_arch_info *);
|
||||
void set_tdesc_osabi (struct target_desc *, enum gdb_osabi osabi);
|
||||
void set_tdesc_property (struct target_desc *,
|
||||
const char *key, const char *value);
|
||||
void tdesc_add_compatible (struct target_desc *,
|
||||
|
@ -179,8 +179,9 @@ tdesc_osabi_name (const struct target_desc *target_desc)
|
||||
/* See gdbsupport/tdesc.h. */
|
||||
|
||||
void
|
||||
set_tdesc_osabi (struct target_desc *target_desc, const char *name)
|
||||
set_tdesc_osabi (struct target_desc *target_desc, enum gdb_osabi osabi)
|
||||
{
|
||||
const char *name = gdbarch_osabi_name (osabi);
|
||||
target_desc->osabi = make_unique_xstrdup (name);
|
||||
}
|
||||
|
||||
|
@ -18,6 +18,8 @@
|
||||
#ifndef COMMON_TDESC_H
|
||||
#define COMMON_TDESC_H
|
||||
|
||||
#include "gdbsupport/osabi.h"
|
||||
|
||||
struct tdesc_feature;
|
||||
struct tdesc_type;
|
||||
struct tdesc_type_builtin;
|
||||
@ -338,8 +340,8 @@ void set_tdesc_architecture (target_desc *target_desc,
|
||||
or NULL if no architecture was specified. */
|
||||
const char *tdesc_architecture_name (const struct target_desc *target_desc);
|
||||
|
||||
/* Set TARGET_DESC's osabi by NAME. */
|
||||
void set_tdesc_osabi (target_desc *target_desc, const char *name);
|
||||
/* Set TARGET_DESC's osabi to OSABI. */
|
||||
void set_tdesc_osabi (target_desc *target_desc, enum gdb_osabi osabi);
|
||||
|
||||
/* Return the osabi associated with this target description as a string,
|
||||
or NULL if no osabi was specified. */
|
||||
|
Loading…
Reference in New Issue
Block a user