* x86-64-tdep.h (x86_64_init_abi): New prototype.

* x86-64-tdep.c (i386_fp_regnum_p): Remove function.
(x86_64_init_abi): Make non-static.  Set number of pseudo
registers to 0.
(x86_64_gdbarch_init): Remove function.
(_initialize_x86_64_tdep): Renove register_gdbarch_init call.
Remove code dealing with dissambly.
* x86-64-linux-tdep.c (x86_64_linux_init_abi): New function.
(_initialize_x86_64_linux_tdep): New function.
* config/i386/x86-64linux.mt (TDEPFILES): Add i386-tdep.o and
i386-tdep.o.
This commit is contained in:
Mark Kettenis 2002-12-21 21:09:58 +00:00
parent 05816f706e
commit 2213a65dbc
5 changed files with 36 additions and 96 deletions

View File

@ -1,3 +1,17 @@
2002-12-21 Mark Kettenis <kettenis@gnu.org>
* x86-64-tdep.h (x86_64_init_abi): New prototype.
* x86-64-tdep.c (i386_fp_regnum_p): Remove function.
(x86_64_init_abi): Make non-static. Set number of pseudo
registers to 0.
(x86_64_gdbarch_init): Remove function.
(_initialize_x86_64_tdep): Renove register_gdbarch_init call.
Remove code dealing with dissambly.
* x86-64-linux-tdep.c (x86_64_linux_init_abi): New function.
(_initialize_x86_64_linux_tdep): New function.
* config/i386/x86-64linux.mt (TDEPFILES): Add i386-tdep.o and
i386-tdep.o.
2002-12-14 Mark Kettenis <kettenis@gnu.org> 2002-12-14 Mark Kettenis <kettenis@gnu.org>
* osabi.c: Include "gdb_assert.h" and "gdb_string.h". * osabi.c: Include "gdb_assert.h" and "gdb_string.h".

View File

@ -1,5 +1,6 @@
# Target: AMD x86-64 running GNU/Linux # Target: AMD x86-64 running GNU/Linux
TDEPFILES= x86-64-tdep.o x86-64-linux-tdep.o dwarf2cfi.o \ TDEPFILES= x86-64-tdep.o x86-64-linux-tdep.o dwarf2cfi.o \
i386-tdep.o i387-tdep.o \
solib.o solib-svr4.o solib-legacy.o solib.o solib-svr4.o solib-legacy.o
GDB_MULTI_ARCH=GDB_MULTI_ARCH_TM GDB_MULTI_ARCH=GDB_MULTI_ARCH_TM

View File

@ -189,3 +189,20 @@ x86_64_init_frame_pc (int fromleaf, struct frame_info *fi)
else else
return cfi_init_frame_pc (fromleaf, fi); return cfi_init_frame_pc (fromleaf, fi);
} }
static void
x86_64_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
{
x86_64_init_abi (info, gdbarch);
}
/* Provide a prototype to silence -Wmissing-prototypes. */
extern void _initialize_x86_64_linux_tdep (void);
void
_initialize_x86_64_linux_tdep (void)
{
gdbarch_register_osabi (bfd_arch_i386, bfd_mach_x86_64, GDB_OSABI_LINUX,
x86_64_linux_init_abi);
}

View File

@ -175,15 +175,6 @@ x86_64_register_virtual_type (int regno)
return *x86_64_register_info_table[regno].type; return *x86_64_register_info_table[regno].type;
} }
/* FIXME: cagney/2002-11-11: Once the i386 and x86-64 targets are
merged, this function can go away. */
int
i386_fp_regnum_p (int regnum)
{
return (regnum < NUM_REGS
&& (FP0_REGNUM && FP0_REGNUM <= (regnum) && (regnum) < FPC_REGNUM));
}
/* x86_64_register_convertible is true if register N's virtual format is /* x86_64_register_convertible is true if register N's virtual format is
different from its raw format. Note that this definition assumes different from its raw format. Note that this definition assumes
that the host supports IEEE 32-bit floats, since it doesn't say that the host supports IEEE 32-bit floats, since it doesn't say
@ -921,7 +912,7 @@ x86_64_breakpoint_from_pc (CORE_ADDR *pc, int *lenptr)
return breakpoint; return breakpoint;
} }
static void void
x86_64_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) x86_64_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
{ {
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
@ -1025,6 +1016,8 @@ x86_64_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
/* FIXME: kettenis/20021026: This one is GNU/Linux-specific too. */ /* FIXME: kettenis/20021026: This one is GNU/Linux-specific too. */
set_gdbarch_pc_in_sigtramp (gdbarch, x86_64_linux_in_sigtramp); set_gdbarch_pc_in_sigtramp (gdbarch, x86_64_linux_in_sigtramp);
set_gdbarch_num_pseudo_regs (gdbarch, 0);
/* Build call frame information (CFI) from DWARF2 frame debug info. */ /* Build call frame information (CFI) from DWARF2 frame debug info. */
set_gdbarch_dwarf2_build_frame_info (gdbarch, dwarf2_build_frame_info); set_gdbarch_dwarf2_build_frame_info (gdbarch, dwarf2_build_frame_info);
@ -1043,81 +1036,9 @@ x86_64_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
set_gdbarch_in_solib_call_trampoline (gdbarch, in_plt_section); set_gdbarch_in_solib_call_trampoline (gdbarch, in_plt_section);
} }
static struct gdbarch *
x86_64_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
{
struct gdbarch_tdep *tdep;
struct gdbarch *gdbarch;
enum gdb_osabi osabi = GDB_OSABI_UNKNOWN;
/* Try to determine the OS ABI of the object we're loading. */
if (info.abfd != NULL)
osabi = gdbarch_lookup_osabi (info.abfd);
/* Find a candidate among extant architectures. */
for (arches = gdbarch_list_lookup_by_info (arches, &info);
arches != NULL;
arches = gdbarch_list_lookup_by_info (arches->next, &info))
{
/* Make sure the OS ABI selection matches. */
tdep = gdbarch_tdep (arches->gdbarch);
if (tdep && tdep->osabi == osabi)
return arches->gdbarch;
}
/* Allocate space for the new architecture. */
tdep = XMALLOC (struct gdbarch_tdep);
gdbarch = gdbarch_alloc (&info, tdep);
tdep->osabi = osabi;
/* FIXME: kettenis/20021025: The following calls are going to
disappear when we integrate the x86_64 target into the i386
target. */
set_gdbarch_long_double_format (gdbarch, &floatformat_i387_ext);
set_gdbarch_max_register_raw_size (gdbarch, 16);
set_gdbarch_max_register_virtual_size (gdbarch, 16);
set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
set_gdbarch_breakpoint_from_pc (gdbarch, x86_64_breakpoint_from_pc);
set_gdbarch_decr_pc_after_break (gdbarch, 1);
set_gdbarch_function_start_offset (gdbarch, 0);
set_gdbarch_frame_args_skip (gdbarch, 8);
set_gdbarch_call_dummy_address (gdbarch, entry_point_address);
set_gdbarch_call_dummy_start_offset (gdbarch, 0);
set_gdbarch_call_dummy_breakpoint_offset (gdbarch, 0);
set_gdbarch_call_dummy_breakpoint_offset_p (gdbarch, 1);
set_gdbarch_call_dummy_length (gdbarch, 0);
set_gdbarch_call_dummy_p (gdbarch, 1);
set_gdbarch_call_dummy_words (gdbarch, NULL);
set_gdbarch_sizeof_call_dummy_words (gdbarch, 0);
set_gdbarch_fix_call_dummy (gdbarch, generic_fix_call_dummy);
set_gdbarch_call_dummy_stack_adjust_p (gdbarch, 0);
set_gdbarch_deprecated_pc_in_call_dummy (gdbarch, deprecated_pc_in_call_dummy_at_entry_point);
set_gdbarch_push_dummy_frame (gdbarch, generic_push_dummy_frame);
/* FIXME: kettenis/20021025: These already are the default. */
set_gdbarch_register_virtual_size (gdbarch, generic_register_size);
set_gdbarch_deprecated_extract_struct_value_address (gdbarch, 0);
x86_64_init_abi (info, gdbarch);
return gdbarch;
}
void void
_initialize_x86_64_tdep (void) _initialize_x86_64_tdep (void)
{ {
register_gdbarch_init (bfd_arch_i386, x86_64_gdbarch_init);
/* Initialize the table saying where each register starts in the /* Initialize the table saying where each register starts in the
register file. */ register file. */
{ {
@ -1130,18 +1051,4 @@ _initialize_x86_64_tdep (void)
offset += x86_64_register_info_table[i].size; offset += x86_64_register_info_table[i].size;
} }
} }
tm_print_insn = gdb_print_insn_x86_64;
tm_print_insn_info.mach = bfd_mach_x86_64;
/* Add the variable that controls the disassembly flavour. */
{
struct cmd_list_element *new_cmd;
new_cmd = add_set_enum_cmd ("disassembly-flavour", no_class,
valid_flavours, &disassembly_flavour, "\
Set the disassembly flavour, the valid values are \"att\" and \"intel\", \
and the default value is \"att\".", &setlist);
add_show_from_set (new_cmd, &showlist);
}
} }

View File

@ -37,5 +37,6 @@ gdbarch_pc_in_sigtramp_ftype x86_64_linux_in_sigtramp;
CORE_ADDR x86_64_linux_frame_chain (struct frame_info *fi); CORE_ADDR x86_64_linux_frame_chain (struct frame_info *fi);
CORE_ADDR x86_64_init_frame_pc (int fromleaf, struct frame_info *fi); CORE_ADDR x86_64_init_frame_pc (int fromleaf, struct frame_info *fi);
void x86_64_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch);
#endif #endif