2003-08-21 Andrew Cagney <cagney@redhat.com>

* sh3-rom.c (sh3_open, sh3e_open): Use gdbarch_update_p to select
	a specific architecture.
	* arch-utils.h (set_architecture_from_arch_mach): Delete
	declaration.
	(target_architecture_hook): Delete declaration.
	* arch-utils.c: Delete non GDB_MULTI_ARCH includes.
	(default_float_format): Assume GDB_MULTI_ARCH.
	(default_double_format): Assume GDB_MULTI_ARCH.
	(set_endian_from_file): Delete function.
	(arch_ok): Delete function.
	(set_arch): Delete function.
	(set_architecture_from_arch_mach): Delete function.
	(set_architecture_from_file): Delete function.
	(set_architecture): Assume GDB_MULTI_ARCH.
	(set_gdbarch_from_file): Assume GDB_MULTI_ARCH.
This commit is contained in:
Andrew Cagney 2003-08-21 20:43:10 +00:00
parent 8b39fe56a2
commit d90cf509bd
4 changed files with 52 additions and 219 deletions

View File

@ -1,3 +1,21 @@
2003-08-21 Andrew Cagney <cagney@redhat.com>
* sh3-rom.c (sh3_open, sh3e_open): Use gdbarch_update_p to select
a specific architecture.
* arch-utils.h (set_architecture_from_arch_mach): Delete
declaration.
(target_architecture_hook): Delete declaration.
* arch-utils.c: Delete non GDB_MULTI_ARCH includes.
(default_float_format): Assume GDB_MULTI_ARCH.
(default_double_format): Assume GDB_MULTI_ARCH.
(set_endian_from_file): Delete function.
(arch_ok): Delete function.
(set_arch): Delete function.
(set_architecture_from_arch_mach): Delete function.
(set_architecture_from_file): Delete function.
(set_architecture): Assume GDB_MULTI_ARCH.
(set_gdbarch_from_file): Assume GDB_MULTI_ARCH.
2003-08-21 Mark Kettenis <kettenis@gnu.org>
Rewrite FreeBSD/sparc64 native configuration.

View File

@ -22,23 +22,9 @@
#include "defs.h"
#if GDB_MULTI_ARCH
#include "arch-utils.h"
#include "gdbcmd.h"
#include "inferior.h" /* enum CALL_DUMMY_LOCATION et.al. */
#else
/* Just include everything in sight so that the every old definition
of macro is visible. */
#include "symtab.h"
#include "frame.h"
#include "inferior.h"
#include "breakpoint.h"
#include "gdb_wait.h"
#include "gdbcore.h"
#include "gdbcmd.h"
#include "target.h"
#include "annotate.h"
#endif
#include "gdb_string.h"
#include "regcache.h"
#include "gdb_assert.h"
@ -182,11 +168,7 @@ core_addr_greaterthan (CORE_ADDR lhs, CORE_ADDR rhs)
const struct floatformat *
default_float_format (struct gdbarch *gdbarch)
{
#if GDB_MULTI_ARCH
int byte_order = gdbarch_byte_order (gdbarch);
#else
int byte_order = TARGET_BYTE_ORDER;
#endif
switch (byte_order)
{
case BFD_ENDIAN_BIG:
@ -203,11 +185,7 @@ default_float_format (struct gdbarch *gdbarch)
const struct floatformat *
default_double_format (struct gdbarch *gdbarch)
{
#if GDB_MULTI_ARCH
int byte_order = gdbarch_byte_order (gdbarch);
#else
int byte_order = TARGET_BYTE_ORDER;
#endif
switch (byte_order)
{
case BFD_ENDIAN_BIG:
@ -436,39 +414,21 @@ set_endian (char *ignore_args, int from_tty, struct cmd_list_element *c)
}
else if (set_endian_string == endian_little)
{
struct gdbarch_info info;
target_byte_order_auto = 0;
if (GDB_MULTI_ARCH)
{
struct gdbarch_info info;
gdbarch_info_init (&info);
info.byte_order = BFD_ENDIAN_LITTLE;
if (! gdbarch_update_p (info))
{
printf_unfiltered ("Little endian target not supported by GDB\n");
}
}
else
{
target_byte_order = BFD_ENDIAN_LITTLE;
}
gdbarch_info_init (&info);
info.byte_order = BFD_ENDIAN_LITTLE;
if (! gdbarch_update_p (info))
printf_unfiltered ("Little endian target not supported by GDB\n");
}
else if (set_endian_string == endian_big)
{
struct gdbarch_info info;
target_byte_order_auto = 0;
if (GDB_MULTI_ARCH)
{
struct gdbarch_info info;
gdbarch_info_init (&info);
info.byte_order = BFD_ENDIAN_BIG;
if (! gdbarch_update_p (info))
{
printf_unfiltered ("Big endian target not supported by GDB\n");
}
}
else
{
target_byte_order = BFD_ENDIAN_BIG;
}
gdbarch_info_init (&info);
info.byte_order = BFD_ENDIAN_BIG;
if (! gdbarch_update_p (info))
printf_unfiltered ("Big endian target not supported by GDB\n");
}
else
internal_error (__FILE__, __LINE__,
@ -476,28 +436,6 @@ set_endian (char *ignore_args, int from_tty, struct cmd_list_element *c)
show_endian (NULL, from_tty);
}
/* Set the endianness from a BFD. */
static void
set_endian_from_file (bfd *abfd)
{
int want;
if (GDB_MULTI_ARCH)
internal_error (__FILE__, __LINE__,
"set_endian_from_file: not for multi-arch");
if (bfd_big_endian (abfd))
want = BFD_ENDIAN_BIG;
else
want = BFD_ENDIAN_LITTLE;
if (TARGET_BYTE_ORDER_AUTO)
target_byte_order = want;
else if (TARGET_BYTE_ORDER != want)
warning ("%s endian file does not match %s endian target.",
want == BFD_ENDIAN_BIG ? "big" : "little",
TARGET_BYTE_ORDER == BFD_ENDIAN_BIG ? "big" : "little");
}
/* Functions to manipulate the architecture of the target */
enum set_arch { set_arch_auto, set_arch_manual };
@ -506,96 +444,6 @@ int target_architecture_auto = 1;
const char *set_architecture_string;
/* Old way of changing the current architecture. */
extern const struct bfd_arch_info bfd_default_arch_struct;
const struct bfd_arch_info *target_architecture = &bfd_default_arch_struct;
int (*target_architecture_hook) (const struct bfd_arch_info *ap);
static int
arch_ok (const struct bfd_arch_info *arch)
{
if (GDB_MULTI_ARCH)
internal_error (__FILE__, __LINE__,
"arch_ok: not multi-arched");
/* Should be performing the more basic check that the binary is
compatible with GDB. */
/* Check with the target that the architecture is valid. */
return (target_architecture_hook == NULL
|| target_architecture_hook (arch));
}
static void
set_arch (const struct bfd_arch_info *arch,
enum set_arch type)
{
if (GDB_MULTI_ARCH)
internal_error (__FILE__, __LINE__,
"set_arch: not multi-arched");
switch (type)
{
case set_arch_auto:
if (!arch_ok (arch))
warning ("Target may not support %s architecture",
arch->printable_name);
target_architecture = arch;
break;
case set_arch_manual:
if (!arch_ok (arch))
{
printf_unfiltered ("Target does not support `%s' architecture.\n",
arch->printable_name);
}
else
{
target_architecture_auto = 0;
target_architecture = arch;
}
break;
}
if (gdbarch_debug)
gdbarch_dump (current_gdbarch, gdb_stdlog);
}
/* Set the architecture from arch/machine (deprecated) */
void
set_architecture_from_arch_mach (enum bfd_architecture arch,
unsigned long mach)
{
const struct bfd_arch_info *wanted = bfd_lookup_arch (arch, mach);
if (GDB_MULTI_ARCH)
internal_error (__FILE__, __LINE__,
"set_architecture_from_arch_mach: not multi-arched");
if (wanted != NULL)
set_arch (wanted, set_arch_manual);
else
internal_error (__FILE__, __LINE__,
"gdbarch: hardwired architecture/machine not recognized");
}
/* Set the architecture from a BFD (deprecated) */
static void
set_architecture_from_file (bfd *abfd)
{
const struct bfd_arch_info *wanted = bfd_get_arch_info (abfd);
if (GDB_MULTI_ARCH)
internal_error (__FILE__, __LINE__,
"set_architecture_from_file: not multi-arched");
if (target_architecture_auto)
{
set_arch (wanted, set_arch_auto);
}
else if (wanted != target_architecture)
{
warning ("%s architecture file may be incompatible with %s target.",
wanted->printable_name,
target_architecture->printable_name);
}
}
/* Called if the user enters ``show architecture'' without an
argument. */
@ -621,7 +469,7 @@ set_architecture (char *ignore_args, int from_tty, struct cmd_list_element *c)
{
target_architecture_auto = 1;
}
else if (GDB_MULTI_ARCH)
else
{
struct gdbarch_info info;
gdbarch_info_init (&info);
@ -635,15 +483,6 @@ set_architecture (char *ignore_args, int from_tty, struct cmd_list_element *c)
printf_unfiltered ("Architecture `%s' not recognized.\n",
set_architecture_string);
}
else
{
const struct bfd_arch_info *arch
= bfd_scan_arch (set_architecture_string);
if (arch == NULL)
internal_error (__FILE__, __LINE__,
"set_architecture: bfd_scan_arch failed");
set_arch (arch, set_arch_manual);
}
show_architecture (NULL, from_tty);
}
@ -653,19 +492,11 @@ set_architecture (char *ignore_args, int from_tty, struct cmd_list_element *c)
void
set_gdbarch_from_file (bfd *abfd)
{
if (GDB_MULTI_ARCH)
{
struct gdbarch_info info;
gdbarch_info_init (&info);
info.abfd = abfd;
if (! gdbarch_update_p (info))
error ("Architecture of file not recognized.\n");
}
else
{
set_architecture_from_file (abfd);
set_endian_from_file (abfd);
}
struct gdbarch_info info;
gdbarch_info_init (&info);
info.abfd = abfd;
if (! gdbarch_update_p (info))
error ("Architecture of file not recognized.\n");
}
/* Initialize the current architecture. Update the ``set
@ -752,22 +583,9 @@ initialize_current_architecture (void)
info.byte_order = BFD_ENDIAN_BIG;
}
if (GDB_MULTI_ARCH)
{
if (! gdbarch_update_p (info))
{
internal_error (__FILE__, __LINE__,
"initialize_current_architecture: Selection of initial architecture failed");
}
}
else
{
/* If the multi-arch logic comes up with a byte-order (from BFD)
use it for the non-multi-arch case. */
if (info.byte_order != BFD_ENDIAN_UNKNOWN)
target_byte_order = info.byte_order;
initialize_non_multiarch ();
}
if (! gdbarch_update_p (info))
internal_error (__FILE__, __LINE__,
"initialize_current_architecture: Selection of initial architecture failed");
/* Create the ``set architecture'' command appending ``auto'' to the
list of architectures. */

View File

@ -78,22 +78,6 @@ extern int core_addr_greaterthan (CORE_ADDR lhs, CORE_ADDR rhs);
extern const struct floatformat *default_float_format (struct gdbarch *gdbarch);
extern const struct floatformat *default_double_format (struct gdbarch *gdbarch);
/* The following DEPRECATED interfaces are for pre- multi-arch legacy
targets. */
/* DEPRECATED pre- multi-arch interface. Explicitly set the dynamic
target-system-dependent parameters based on bfd_architecture and
machine. This function is deprecated, use
set_gdbarch_from_arch_machine(). */
extern void set_architecture_from_arch_mach (enum bfd_architecture, unsigned long);
/* DEPRECATED pre- multi-arch interface. Notify the target dependent
backend of a change to the selected architecture. A zero return
status indicates that the target did not like the change. */
extern int (*target_architecture_hook) (const struct bfd_arch_info *);
/* Identity function on a CORE_ADDR. Just returns its parameter. */
extern CORE_ADDR core_addr_identity (CORE_ADDR addr);

View File

@ -281,8 +281,15 @@ sh3_open (char *args, int from_tty)
parallel_in_use = 1;
}
/* If we connected successfully, we know the processor is an SH3. */
set_architecture_from_arch_mach (bfd_arch_sh, bfd_mach_sh3);
{
struct gdbarch_info info;
gdbarch_info_init (&info);
info.bfd_arch_info = bfd_lookup_arch (bfd_arch_sh, bfd_mach_sh3);
if (!gdbarch_update_p (info))
error ("Target is not an SH3");
}
}
@ -329,7 +336,13 @@ sh3e_open (char *args, int from_tty)
}
/* If we connected successfully, we know the processor is an SH3E. */
set_architecture_from_arch_mach (bfd_arch_sh, bfd_mach_sh3);
{
struct gdbarch_info info;
gdbarch_info_init (&info);
info.bfd_arch_info = bfd_lookup_arch (bfd_arch_sh, bfd_mach_sh3);
if (!gdbarch_update_p (info))
error ("Target is not an SH3");
}
}
static void