* x86-64-tdep.c: Update copyright year.

(struct amd64_register_info): Rename from x86_64_register_info.
(amd64_register_info): Rename from x86_64_register_info.
(AMD64_NUM_REGS): Rename from X86_64_NUM_REGS.
(amd64_register_name): Rename from x86_64_register_name.
(amd64_register_type): Rename from x86_64_register_type.
(amd64_dwarf_regmap): Rename from x86_64_dwarf_regmap.
(amd64_dwarf_regmap_len): Rename from x86_64_dwarf_regmap_len.
(amd64_dwarf_reg_to_regnum): Rename from
x86_64_dwarf_reg_to_regnum.
(amd64_convert_register_p): Rename from x86_64_convert_register_p.
(amd64_push_dummy_call): Rename from x86_64_push_dummy_call.
(AMD64_NUM_SAVED_REGS): Rename from X86_64_NUM_SAVED_REGS.
(struct amd64_frame_cache): Renamed from x86_64_frame_cache.
(amd64_alloc_frame_cache): Renamed from x86_64_alloc_frame_cache.
(amd64_analyze_prologue): Rename from x86_64_analyze_prologue.
(amd64_skip_prologue): Rename from x86_64_skip_prologue.
(amd64_frame_cache): Rename from x86_64_frame_cache.
(amd64_frame_this_id): Rename from x86_64_frame_this_id.
(amd64_frame_prev_register): Rename from
x86_64_frame_prev_register.
(amd64_frame_unwind): Rename from x86_64_frame_unwind.
(amd64_frame_sniffer): Rename from x86_64_frame_sniffer.
(amd64_sigtramp_frame_cache): Rename from
x86_64_sigtramp_frame_cache.
(amd64_sigtramp_frame_prev_register): Rename from
x86_64_sigtramp_frame_prev_register.
(amd64_sigtramp_frame_unwind): Rename from
x86_64_sigtramp_frame_unwind.
(amd64_sigtramp_frame_sniffer): Rename from
x86_64_sigtramp_frame_sniffer.
(amd64_frame_base_address): Rename from x86_64_frame_base_address.
(amd64_frame_base): Rename from x86_64_frame_base.
(amd64_unwind_dummy_id): Rename from x86_64_unwind_dummy_id.
(amd64_frame_align): Rename from x86_64_frame_align.
(amd64_supply_fpregset): Rename from x86_64_supply_fpregset.
(amd64_regset_from_core_section): Rename from
x86_64_regset_from_core_section.
(x86_64_init_abi): Update comments.
This commit is contained in:
Mark Kettenis 2004-01-04 19:07:02 +00:00
parent c681880448
commit e53bef9fbd
2 changed files with 171 additions and 122 deletions

View file

@ -1,3 +1,45 @@
2004-01-04 Mark Kettenis <kettenis@gnu.org>
* x86-64-tdep.c: Update copyright year.
(struct amd64_register_info): Rename from x86_64_register_info.
(amd64_register_info): Rename from x86_64_register_info.
(AMD64_NUM_REGS): Rename from X86_64_NUM_REGS.
(amd64_register_name): Rename from x86_64_register_name.
(amd64_register_type): Rename from x86_64_register_type.
(amd64_dwarf_regmap): Rename from x86_64_dwarf_regmap.
(amd64_dwarf_regmap_len): Rename from x86_64_dwarf_regmap_len.
(amd64_dwarf_reg_to_regnum): Rename from
x86_64_dwarf_reg_to_regnum.
(amd64_convert_register_p): Rename from x86_64_convert_register_p.
(amd64_push_dummy_call): Rename from x86_64_push_dummy_call.
(AMD64_NUM_SAVED_REGS): Rename from X86_64_NUM_SAVED_REGS.
(struct amd64_frame_cache): Renamed from x86_64_frame_cache.
(amd64_alloc_frame_cache): Renamed from x86_64_alloc_frame_cache.
(amd64_analyze_prologue): Rename from x86_64_analyze_prologue.
(amd64_skip_prologue): Rename from x86_64_skip_prologue.
(amd64_frame_cache): Rename from x86_64_frame_cache.
(amd64_frame_this_id): Rename from x86_64_frame_this_id.
(amd64_frame_prev_register): Rename from
x86_64_frame_prev_register.
(amd64_frame_unwind): Rename from x86_64_frame_unwind.
(amd64_frame_sniffer): Rename from x86_64_frame_sniffer.
(amd64_sigtramp_frame_cache): Rename from
x86_64_sigtramp_frame_cache.
(amd64_sigtramp_frame_prev_register): Rename from
x86_64_sigtramp_frame_prev_register.
(amd64_sigtramp_frame_unwind): Rename from
x86_64_sigtramp_frame_unwind.
(amd64_sigtramp_frame_sniffer): Rename from
x86_64_sigtramp_frame_sniffer.
(amd64_frame_base_address): Rename from x86_64_frame_base_address.
(amd64_frame_base): Rename from x86_64_frame_base.
(amd64_unwind_dummy_id): Rename from x86_64_unwind_dummy_id.
(amd64_frame_align): Rename from x86_64_frame_align.
(amd64_supply_fpregset): Rename from x86_64_supply_fpregset.
(amd64_regset_from_core_section): Rename from
x86_64_regset_from_core_section.
(x86_64_init_abi): Update comments.
2004-01-04 Nick Roberts <nick@nick.uklinux.net> 2004-01-04 Nick Roberts <nick@nick.uklinux.net>
* MAINTAINERS (write after approval): Add myself. * MAINTAINERS (write after approval): Add myself.

View file

@ -1,6 +1,6 @@
/* Target-dependent code for the x86-64 for GDB, the GNU debugger. /* Target-dependent code for AMD64.
Copyright 2001, 2002, 2003 Free Software Foundation, Inc. Copyright 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
Contributed by Jiri Smid, SuSE Labs. Contributed by Jiri Smid, SuSE Labs.
This file is part of GDB. This file is part of GDB.
@ -40,15 +40,22 @@
#include "x86-64-tdep.h" #include "x86-64-tdep.h"
#include "i387-tdep.h" #include "i387-tdep.h"
/* Note that the AMD64 architecture was previously known as x86-64.
The latter is (forever) engraved into the canonical system name as
returned bu config.guess, and used as the name for the AMD64 port
of GNU/Linux. The BSD's have renamed their ports to amd64; they
don't like to shout. For GDB we prefer the amd64_-prefix over the
x86_64_-prefix since it's so much easier to type. */
/* Register information. */ /* Register information. */
struct x86_64_register_info struct amd64_register_info
{ {
char *name; char *name;
struct type **type; struct type **type;
}; };
static struct x86_64_register_info x86_64_register_info[] = static struct amd64_register_info amd64_register_info[] =
{ {
{ "rax", &builtin_type_int64 }, { "rax", &builtin_type_int64 },
{ "rbx", &builtin_type_int64 }, { "rbx", &builtin_type_int64 },
@ -114,16 +121,16 @@ static struct x86_64_register_info x86_64_register_info[] =
}; };
/* Total number of registers. */ /* Total number of registers. */
#define X86_64_NUM_REGS \ #define AMD64_NUM_REGS \
(sizeof (x86_64_register_info) / sizeof (x86_64_register_info[0])) (sizeof (amd64_register_info) / sizeof (amd64_register_info[0]))
/* Return the name of register REGNUM. */ /* Return the name of register REGNUM. */
static const char * static const char *
x86_64_register_name (int regnum) amd64_register_name (int regnum)
{ {
if (regnum >= 0 && regnum < X86_64_NUM_REGS) if (regnum >= 0 && regnum < AMD64_NUM_REGS)
return x86_64_register_info[regnum].name; return amd64_register_info[regnum].name;
return NULL; return NULL;
} }
@ -132,17 +139,17 @@ x86_64_register_name (int regnum)
register REGNUM. */ register REGNUM. */
static struct type * static struct type *
x86_64_register_type (struct gdbarch *gdbarch, int regnum) amd64_register_type (struct gdbarch *gdbarch, int regnum)
{ {
gdb_assert (regnum >= 0 && regnum < X86_64_NUM_REGS); gdb_assert (regnum >= 0 && regnum < AMD64_NUM_REGS);
return *x86_64_register_info[regnum].type; return *amd64_register_info[regnum].type;
} }
/* DWARF Register Number Mapping as defined in the System V psABI, /* DWARF Register Number Mapping as defined in the System V psABI,
section 3.6. */ section 3.6. */
static int x86_64_dwarf_regmap[] = static int amd64_dwarf_regmap[] =
{ {
/* General Purpose Registers RAX, RDX, RCX, RBX, RSI, RDI. */ /* General Purpose Registers RAX, RDX, RCX, RBX, RSI, RDI. */
X86_64_RAX_REGNUM, X86_64_RDX_REGNUM, 2, 1, X86_64_RAX_REGNUM, X86_64_RDX_REGNUM, 2, 1,
@ -179,19 +186,19 @@ static int x86_64_dwarf_regmap[] =
X86_64_ST0_REGNUM + 6, X86_64_ST0_REGNUM + 7 X86_64_ST0_REGNUM + 6, X86_64_ST0_REGNUM + 7
}; };
static const int x86_64_dwarf_regmap_len = static const int amd64_dwarf_regmap_len =
(sizeof (x86_64_dwarf_regmap) / sizeof (x86_64_dwarf_regmap[0])); (sizeof (amd64_dwarf_regmap) / sizeof (amd64_dwarf_regmap[0]));
/* Convert DWARF register number REG to the appropriate register /* Convert DWARF register number REG to the appropriate register
number used by GDB. */ number used by GDB. */
static int static int
x86_64_dwarf_reg_to_regnum (int reg) amd64_dwarf_reg_to_regnum (int reg)
{ {
int regnum = -1; int regnum = -1;
if (reg >= 0 || reg < x86_64_dwarf_regmap_len) if (reg >= 0 || reg < amd64_dwarf_regmap_len)
regnum = x86_64_dwarf_regmap[reg]; regnum = amd64_dwarf_regmap[reg];
if (regnum == -1) if (regnum == -1)
warning ("Unmapped DWARF Register #%d encountered\n", reg); warning ("Unmapped DWARF Register #%d encountered\n", reg);
@ -203,7 +210,7 @@ x86_64_dwarf_reg_to_regnum (int reg)
needs any special handling. */ needs any special handling. */
static int static int
x86_64_convert_register_p (int regnum, struct type *type) amd64_convert_register_p (int regnum, struct type *type)
{ {
return i386_fp_regnum_p (regnum); return i386_fp_regnum_p (regnum);
} }
@ -592,10 +599,10 @@ amd64_push_arguments (struct regcache *regcache, int nargs,
} }
static CORE_ADDR static CORE_ADDR
x86_64_push_dummy_call (struct gdbarch *gdbarch, CORE_ADDR func_addr, amd64_push_dummy_call (struct gdbarch *gdbarch, CORE_ADDR func_addr,
struct regcache *regcache, CORE_ADDR bp_addr, struct regcache *regcache, CORE_ADDR bp_addr,
int nargs, struct value **args, CORE_ADDR sp, int nargs, struct value **args, CORE_ADDR sp,
int struct_return, CORE_ADDR struct_addr) int struct_return, CORE_ADDR struct_addr)
{ {
char buf[8]; char buf[8];
@ -626,9 +633,9 @@ x86_64_push_dummy_call (struct gdbarch *gdbarch, CORE_ADDR func_addr,
/* The maximum number of saved registers. This should include %rip. */ /* The maximum number of saved registers. This should include %rip. */
#define X86_64_NUM_SAVED_REGS X86_64_NUM_GREGS #define AMD64_NUM_SAVED_REGS X86_64_NUM_GREGS
struct x86_64_frame_cache struct amd64_frame_cache
{ {
/* Base address. */ /* Base address. */
CORE_ADDR base; CORE_ADDR base;
@ -636,7 +643,7 @@ struct x86_64_frame_cache
CORE_ADDR pc; CORE_ADDR pc;
/* Saved registers. */ /* Saved registers. */
CORE_ADDR saved_regs[X86_64_NUM_SAVED_REGS]; CORE_ADDR saved_regs[AMD64_NUM_SAVED_REGS];
CORE_ADDR saved_sp; CORE_ADDR saved_sp;
/* Do we have a frame? */ /* Do we have a frame? */
@ -645,13 +652,13 @@ struct x86_64_frame_cache
/* Allocate and initialize a frame cache. */ /* Allocate and initialize a frame cache. */
static struct x86_64_frame_cache * static struct amd64_frame_cache *
x86_64_alloc_frame_cache (void) amd64_alloc_frame_cache (void)
{ {
struct x86_64_frame_cache *cache; struct amd64_frame_cache *cache;
int i; int i;
cache = FRAME_OBSTACK_ZALLOC (struct x86_64_frame_cache); cache = FRAME_OBSTACK_ZALLOC (struct amd64_frame_cache);
/* Base address. */ /* Base address. */
cache->base = 0; cache->base = 0;
@ -660,7 +667,7 @@ x86_64_alloc_frame_cache (void)
/* Saved registers. We initialize these to -1 since zero is a valid /* Saved registers. We initialize these to -1 since zero is a valid
offset (that's where %rbp is supposed to be stored). */ offset (that's where %rbp is supposed to be stored). */
for (i = 0; i < X86_64_NUM_SAVED_REGS; i++) for (i = 0; i < AMD64_NUM_SAVED_REGS; i++)
cache->saved_regs[i] = -1; cache->saved_regs[i] = -1;
cache->saved_sp = 0; cache->saved_sp = 0;
@ -683,8 +690,8 @@ x86_64_alloc_frame_cache (void)
to have no prologue and thus no valid frame pointer in %rbp. */ to have no prologue and thus no valid frame pointer in %rbp. */
static CORE_ADDR static CORE_ADDR
x86_64_analyze_prologue (CORE_ADDR pc, CORE_ADDR current_pc, amd64_analyze_prologue (CORE_ADDR pc, CORE_ADDR current_pc,
struct x86_64_frame_cache *cache) struct amd64_frame_cache *cache)
{ {
static unsigned char proto[3] = { 0x48, 0x89, 0xe5 }; static unsigned char proto[3] = { 0x48, 0x89, 0xe5 };
unsigned char buf[3]; unsigned char buf[3];
@ -722,12 +729,12 @@ x86_64_analyze_prologue (CORE_ADDR pc, CORE_ADDR current_pc,
/* Return PC of first real instruction. */ /* Return PC of first real instruction. */
static CORE_ADDR static CORE_ADDR
x86_64_skip_prologue (CORE_ADDR start_pc) amd64_skip_prologue (CORE_ADDR start_pc)
{ {
struct x86_64_frame_cache cache; struct amd64_frame_cache cache;
CORE_ADDR pc; CORE_ADDR pc;
pc = x86_64_analyze_prologue (start_pc, 0xffffffffffffffff, &cache); pc = amd64_analyze_prologue (start_pc, 0xffffffffffffffff, &cache);
if (cache.frameless_p) if (cache.frameless_p)
return start_pc; return start_pc;
@ -737,22 +744,22 @@ x86_64_skip_prologue (CORE_ADDR start_pc)
/* Normal frames. */ /* Normal frames. */
static struct x86_64_frame_cache * static struct amd64_frame_cache *
x86_64_frame_cache (struct frame_info *next_frame, void **this_cache) amd64_frame_cache (struct frame_info *next_frame, void **this_cache)
{ {
struct x86_64_frame_cache *cache; struct amd64_frame_cache *cache;
char buf[8]; char buf[8];
int i; int i;
if (*this_cache) if (*this_cache)
return *this_cache; return *this_cache;
cache = x86_64_alloc_frame_cache (); cache = amd64_alloc_frame_cache ();
*this_cache = cache; *this_cache = cache;
cache->pc = frame_func_unwind (next_frame); cache->pc = frame_func_unwind (next_frame);
if (cache->pc != 0) if (cache->pc != 0)
x86_64_analyze_prologue (cache->pc, frame_pc_unwind (next_frame), cache); amd64_analyze_prologue (cache->pc, frame_pc_unwind (next_frame), cache);
if (cache->frameless_p) if (cache->frameless_p)
{ {
@ -784,7 +791,7 @@ x86_64_frame_cache (struct frame_info *next_frame, void **this_cache)
/* Adjust all the saved registers such that they contain addresses /* Adjust all the saved registers such that they contain addresses
instead of offsets. */ instead of offsets. */
for (i = 0; i < X86_64_NUM_SAVED_REGS; i++) for (i = 0; i < AMD64_NUM_SAVED_REGS; i++)
if (cache->saved_regs[i] != -1) if (cache->saved_regs[i] != -1)
cache->saved_regs[i] += cache->base; cache->saved_regs[i] += cache->base;
@ -792,11 +799,11 @@ x86_64_frame_cache (struct frame_info *next_frame, void **this_cache)
} }
static void static void
x86_64_frame_this_id (struct frame_info *next_frame, void **this_cache, amd64_frame_this_id (struct frame_info *next_frame, void **this_cache,
struct frame_id *this_id) struct frame_id *this_id)
{ {
struct x86_64_frame_cache *cache = struct amd64_frame_cache *cache =
x86_64_frame_cache (next_frame, this_cache); amd64_frame_cache (next_frame, this_cache);
/* This marks the outermost frame. */ /* This marks the outermost frame. */
if (cache->base == 0) if (cache->base == 0)
@ -806,13 +813,13 @@ x86_64_frame_this_id (struct frame_info *next_frame, void **this_cache,
} }
static void static void
x86_64_frame_prev_register (struct frame_info *next_frame, void **this_cache, amd64_frame_prev_register (struct frame_info *next_frame, void **this_cache,
int regnum, int *optimizedp, int regnum, int *optimizedp,
enum lval_type *lvalp, CORE_ADDR *addrp, enum lval_type *lvalp, CORE_ADDR *addrp,
int *realnump, void *valuep) int *realnump, void *valuep)
{ {
struct x86_64_frame_cache *cache = struct amd64_frame_cache *cache =
x86_64_frame_cache (next_frame, this_cache); amd64_frame_cache (next_frame, this_cache);
gdb_assert (regnum >= 0); gdb_assert (regnum >= 0);
@ -830,7 +837,7 @@ x86_64_frame_prev_register (struct frame_info *next_frame, void **this_cache,
return; return;
} }
if (regnum < X86_64_NUM_SAVED_REGS && cache->saved_regs[regnum] != -1) if (regnum < AMD64_NUM_SAVED_REGS && cache->saved_regs[regnum] != -1)
{ {
*optimizedp = 0; *optimizedp = 0;
*lvalp = lval_memory; *lvalp = lval_memory;
@ -849,17 +856,17 @@ x86_64_frame_prev_register (struct frame_info *next_frame, void **this_cache,
optimizedp, lvalp, addrp, realnump, valuep); optimizedp, lvalp, addrp, realnump, valuep);
} }
static const struct frame_unwind x86_64_frame_unwind = static const struct frame_unwind amd64_frame_unwind =
{ {
NORMAL_FRAME, NORMAL_FRAME,
x86_64_frame_this_id, amd64_frame_this_id,
x86_64_frame_prev_register amd64_frame_prev_register
}; };
static const struct frame_unwind * static const struct frame_unwind *
x86_64_frame_sniffer (struct frame_info *next_frame) amd64_frame_sniffer (struct frame_info *next_frame)
{ {
return &x86_64_frame_unwind; return &amd64_frame_unwind;
} }
@ -869,10 +876,10 @@ x86_64_frame_sniffer (struct frame_info *next_frame)
64-bit variants. This would require using identical frame caches 64-bit variants. This would require using identical frame caches
on both platforms. */ on both platforms. */
static struct x86_64_frame_cache * static struct amd64_frame_cache *
x86_64_sigtramp_frame_cache (struct frame_info *next_frame, void **this_cache) amd64_sigtramp_frame_cache (struct frame_info *next_frame, void **this_cache)
{ {
struct x86_64_frame_cache *cache; struct amd64_frame_cache *cache;
struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch); struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
CORE_ADDR addr; CORE_ADDR addr;
char buf[8]; char buf[8];
@ -881,14 +888,14 @@ x86_64_sigtramp_frame_cache (struct frame_info *next_frame, void **this_cache)
if (*this_cache) if (*this_cache)
return *this_cache; return *this_cache;
cache = x86_64_alloc_frame_cache (); cache = amd64_alloc_frame_cache ();
frame_unwind_register (next_frame, X86_64_RSP_REGNUM, buf); frame_unwind_register (next_frame, X86_64_RSP_REGNUM, buf);
cache->base = extract_unsigned_integer (buf, 8) - 8; cache->base = extract_unsigned_integer (buf, 8) - 8;
addr = tdep->sigcontext_addr (next_frame); addr = tdep->sigcontext_addr (next_frame);
gdb_assert (tdep->sc_reg_offset); gdb_assert (tdep->sc_reg_offset);
gdb_assert (tdep->sc_num_regs <= X86_64_NUM_SAVED_REGS); gdb_assert (tdep->sc_num_regs <= AMD64_NUM_SAVED_REGS);
for (i = 0; i < tdep->sc_num_regs; i++) for (i = 0; i < tdep->sc_num_regs; i++)
if (tdep->sc_reg_offset[i] != -1) if (tdep->sc_reg_offset[i] != -1)
cache->saved_regs[i] = addr + tdep->sc_reg_offset[i]; cache->saved_regs[i] = addr + tdep->sc_reg_offset[i];
@ -898,38 +905,38 @@ x86_64_sigtramp_frame_cache (struct frame_info *next_frame, void **this_cache)
} }
static void static void
x86_64_sigtramp_frame_this_id (struct frame_info *next_frame, amd64_sigtramp_frame_this_id (struct frame_info *next_frame,
void **this_cache, struct frame_id *this_id) void **this_cache, struct frame_id *this_id)
{ {
struct x86_64_frame_cache *cache = struct amd64_frame_cache *cache =
x86_64_sigtramp_frame_cache (next_frame, this_cache); amd64_sigtramp_frame_cache (next_frame, this_cache);
(*this_id) = frame_id_build (cache->base + 16, frame_pc_unwind (next_frame)); (*this_id) = frame_id_build (cache->base + 16, frame_pc_unwind (next_frame));
} }
static void static void
x86_64_sigtramp_frame_prev_register (struct frame_info *next_frame, amd64_sigtramp_frame_prev_register (struct frame_info *next_frame,
void **this_cache, void **this_cache,
int regnum, int *optimizedp, int regnum, int *optimizedp,
enum lval_type *lvalp, CORE_ADDR *addrp, enum lval_type *lvalp, CORE_ADDR *addrp,
int *realnump, void *valuep) int *realnump, void *valuep)
{ {
/* Make sure we've initialized the cache. */ /* Make sure we've initialized the cache. */
x86_64_sigtramp_frame_cache (next_frame, this_cache); amd64_sigtramp_frame_cache (next_frame, this_cache);
x86_64_frame_prev_register (next_frame, this_cache, regnum, amd64_frame_prev_register (next_frame, this_cache, regnum,
optimizedp, lvalp, addrp, realnump, valuep); optimizedp, lvalp, addrp, realnump, valuep);
} }
static const struct frame_unwind x86_64_sigtramp_frame_unwind = static const struct frame_unwind amd64_sigtramp_frame_unwind =
{ {
SIGTRAMP_FRAME, SIGTRAMP_FRAME,
x86_64_sigtramp_frame_this_id, amd64_sigtramp_frame_this_id,
x86_64_sigtramp_frame_prev_register amd64_sigtramp_frame_prev_register
}; };
static const struct frame_unwind * static const struct frame_unwind *
x86_64_sigtramp_frame_sniffer (struct frame_info *next_frame) amd64_sigtramp_frame_sniffer (struct frame_info *next_frame)
{ {
CORE_ADDR pc = frame_pc_unwind (next_frame); CORE_ADDR pc = frame_pc_unwind (next_frame);
char *name; char *name;
@ -939,7 +946,7 @@ x86_64_sigtramp_frame_sniffer (struct frame_info *next_frame)
{ {
gdb_assert (gdbarch_tdep (current_gdbarch)->sigcontext_addr); gdb_assert (gdbarch_tdep (current_gdbarch)->sigcontext_addr);
return &x86_64_sigtramp_frame_unwind; return &amd64_sigtramp_frame_unwind;
} }
return NULL; return NULL;
@ -947,24 +954,24 @@ x86_64_sigtramp_frame_sniffer (struct frame_info *next_frame)
static CORE_ADDR static CORE_ADDR
x86_64_frame_base_address (struct frame_info *next_frame, void **this_cache) amd64_frame_base_address (struct frame_info *next_frame, void **this_cache)
{ {
struct x86_64_frame_cache *cache = struct amd64_frame_cache *cache =
x86_64_frame_cache (next_frame, this_cache); amd64_frame_cache (next_frame, this_cache);
return cache->base; return cache->base;
} }
static const struct frame_base x86_64_frame_base = static const struct frame_base amd64_frame_base =
{ {
&x86_64_frame_unwind, &amd64_frame_unwind,
x86_64_frame_base_address, amd64_frame_base_address,
x86_64_frame_base_address, amd64_frame_base_address,
x86_64_frame_base_address amd64_frame_base_address
}; };
static struct frame_id static struct frame_id
x86_64_unwind_dummy_id (struct gdbarch *gdbarch, struct frame_info *next_frame) amd64_unwind_dummy_id (struct gdbarch *gdbarch, struct frame_info *next_frame)
{ {
char buf[8]; char buf[8];
CORE_ADDR fp; CORE_ADDR fp;
@ -978,7 +985,7 @@ x86_64_unwind_dummy_id (struct gdbarch *gdbarch, struct frame_info *next_frame)
/* 16 byte align the SP per frame requirements. */ /* 16 byte align the SP per frame requirements. */
static CORE_ADDR static CORE_ADDR
x86_64_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp) amd64_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
{ {
return sp & -(CORE_ADDR)16; return sp & -(CORE_ADDR)16;
} }
@ -989,8 +996,8 @@ x86_64_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
registers in REGSET. */ registers in REGSET. */
static void static void
x86_64_supply_fpregset (const struct regset *regset, struct regcache *regcache, amd64_supply_fpregset (const struct regset *regset, struct regcache *regcache,
int regnum, const void *fpregs, size_t len) int regnum, const void *fpregs, size_t len)
{ {
const struct gdbarch_tdep *tdep = regset->descr; const struct gdbarch_tdep *tdep = regset->descr;
@ -1002,8 +1009,8 @@ x86_64_supply_fpregset (const struct regset *regset, struct regcache *regcache,
by SECT_NAME and SECT_SIZE. */ by SECT_NAME and SECT_SIZE. */
static const struct regset * static const struct regset *
x86_64_regset_from_core_section (struct gdbarch *gdbarch, amd64_regset_from_core_section (struct gdbarch *gdbarch,
const char *sect_name, size_t sect_size) const char *sect_name, size_t sect_size)
{ {
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
@ -1013,7 +1020,7 @@ x86_64_regset_from_core_section (struct gdbarch *gdbarch,
{ {
tdep->fpregset = XMALLOC (struct regset); tdep->fpregset = XMALLOC (struct regset);
tdep->fpregset->descr = tdep; tdep->fpregset->descr = tdep;
tdep->fpregset->supply_regset = x86_64_supply_fpregset; tdep->fpregset->supply_regset = amd64_supply_fpregset;
} }
return tdep->fpregset; return tdep->fpregset;
@ -1041,14 +1048,14 @@ x86_64_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
set_gdbarch_long_long_bit (gdbarch, 64); set_gdbarch_long_long_bit (gdbarch, 64);
set_gdbarch_ptr_bit (gdbarch, 64); set_gdbarch_ptr_bit (gdbarch, 64);
/* In contrast to the i386, on the x86-64 a `long double' actually /* In contrast to the i386, on AMD64 a `long double' actually takes
takes up 128 bits, even though it's still based on the i387 up 128 bits, even though it's still based on the i387 extended
extended floating-point format which has only 80 significant bits. */ floating-point format which has only 80 significant bits. */
set_gdbarch_long_double_bit (gdbarch, 128); set_gdbarch_long_double_bit (gdbarch, 128);
set_gdbarch_num_regs (gdbarch, X86_64_NUM_REGS); set_gdbarch_num_regs (gdbarch, AMD64_NUM_REGS);
set_gdbarch_register_name (gdbarch, x86_64_register_name); set_gdbarch_register_name (gdbarch, amd64_register_name);
set_gdbarch_register_type (gdbarch, x86_64_register_type); set_gdbarch_register_type (gdbarch, amd64_register_type);
/* Register numbers of various important registers. */ /* Register numbers of various important registers. */
set_gdbarch_sp_regnum (gdbarch, X86_64_RSP_REGNUM); /* %rsp */ set_gdbarch_sp_regnum (gdbarch, X86_64_RSP_REGNUM); /* %rsp */
@ -1056,53 +1063,53 @@ x86_64_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
set_gdbarch_ps_regnum (gdbarch, X86_64_EFLAGS_REGNUM); /* %eflags */ set_gdbarch_ps_regnum (gdbarch, X86_64_EFLAGS_REGNUM); /* %eflags */
set_gdbarch_fp0_regnum (gdbarch, X86_64_ST0_REGNUM); /* %st(0) */ set_gdbarch_fp0_regnum (gdbarch, X86_64_ST0_REGNUM); /* %st(0) */
/* The "default" register numbering scheme for the x86-64 is /* The "default" register numbering scheme for AMD64 is referred to
referred to as the "DWARF Register Number Mapping" in the System as the "DWARF Register Number Mapping" in the System V psABI.
V psABI. The preferred debugging format for all known x86-64 The preferred debugging format for all known AMD64 targets is
targets is actually DWARF2, and GCC doesn't seem to support DWARF actually DWARF2, and GCC doesn't seem to support DWARF (that is
(that is DWARF-1), but we provide the same mapping just in case. DWARF-1), but we provide the same mapping just in case. This
This mapping is also used for stabs, which GCC does support. */ mapping is also used for stabs, which GCC does support. */
set_gdbarch_stab_reg_to_regnum (gdbarch, x86_64_dwarf_reg_to_regnum); set_gdbarch_stab_reg_to_regnum (gdbarch, amd64_dwarf_reg_to_regnum);
set_gdbarch_dwarf_reg_to_regnum (gdbarch, x86_64_dwarf_reg_to_regnum); set_gdbarch_dwarf_reg_to_regnum (gdbarch, amd64_dwarf_reg_to_regnum);
set_gdbarch_dwarf2_reg_to_regnum (gdbarch, x86_64_dwarf_reg_to_regnum); set_gdbarch_dwarf2_reg_to_regnum (gdbarch, amd64_dwarf_reg_to_regnum);
/* We don't override SDB_REG_RO_REGNUM, since COFF doesn't seem to /* We don't override SDB_REG_RO_REGNUM, since COFF doesn't seem to
be in use on any of the supported x86-64 targets. */ be in use on any of the supported AMD64 targets. */
/* Call dummy code. */ /* Call dummy code. */
set_gdbarch_push_dummy_call (gdbarch, x86_64_push_dummy_call); set_gdbarch_push_dummy_call (gdbarch, amd64_push_dummy_call);
set_gdbarch_frame_align (gdbarch, x86_64_frame_align); set_gdbarch_frame_align (gdbarch, amd64_frame_align);
set_gdbarch_frame_red_zone_size (gdbarch, 128); set_gdbarch_frame_red_zone_size (gdbarch, 128);
set_gdbarch_convert_register_p (gdbarch, x86_64_convert_register_p); set_gdbarch_convert_register_p (gdbarch, amd64_convert_register_p);
set_gdbarch_register_to_value (gdbarch, i387_register_to_value); set_gdbarch_register_to_value (gdbarch, i387_register_to_value);
set_gdbarch_value_to_register (gdbarch, i387_value_to_register); set_gdbarch_value_to_register (gdbarch, i387_value_to_register);
set_gdbarch_return_value (gdbarch, amd64_return_value); set_gdbarch_return_value (gdbarch, amd64_return_value);
/* Override, since this is handled by x86_64_extract_return_value. */ /* Override, since this is handled by amd64_extract_return_value. */
set_gdbarch_extract_struct_value_address (gdbarch, NULL); set_gdbarch_extract_struct_value_address (gdbarch, NULL);
set_gdbarch_skip_prologue (gdbarch, x86_64_skip_prologue); set_gdbarch_skip_prologue (gdbarch, amd64_skip_prologue);
/* Avoid wiring in the MMX registers for now. */ /* Avoid wiring in the MMX registers for now. */
set_gdbarch_num_pseudo_regs (gdbarch, 0); set_gdbarch_num_pseudo_regs (gdbarch, 0);
tdep->mm0_regnum = -1; tdep->mm0_regnum = -1;
set_gdbarch_unwind_dummy_id (gdbarch, x86_64_unwind_dummy_id); set_gdbarch_unwind_dummy_id (gdbarch, amd64_unwind_dummy_id);
/* FIXME: kettenis/20021026: This is ELF-specific. Fine for now, /* FIXME: kettenis/20021026: This is ELF-specific. Fine for now,
since all supported x86-64 targets are ELF, but that might change since all supported AMD64 targets are ELF, but that might change
in the future. */ in the future. */
set_gdbarch_in_solib_call_trampoline (gdbarch, in_plt_section); set_gdbarch_in_solib_call_trampoline (gdbarch, in_plt_section);
frame_unwind_append_sniffer (gdbarch, x86_64_sigtramp_frame_sniffer); frame_unwind_append_sniffer (gdbarch, amd64_sigtramp_frame_sniffer);
frame_unwind_append_sniffer (gdbarch, x86_64_frame_sniffer); frame_unwind_append_sniffer (gdbarch, amd64_frame_sniffer);
frame_base_set_default (gdbarch, &x86_64_frame_base); frame_base_set_default (gdbarch, &amd64_frame_base);
/* If we have a register mapping, enable the generic core file support. */ /* If we have a register mapping, enable the generic core file support. */
if (tdep->gregset_reg_offset) if (tdep->gregset_reg_offset)
set_gdbarch_regset_from_core_section (gdbarch, set_gdbarch_regset_from_core_section (gdbarch,
x86_64_regset_from_core_section); amd64_regset_from_core_section);
} }