mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-10-20 06:15:09 +08:00
gdb/
* Makefile.in (amd64_linux_tdep_h): New. (amd64-linux-nat.o, amd64-linux-tdep.o): Update. * amd64-linux-nat.c (amd64_linux_gregset64_reg_offset): Add ORIG_RAX. (_initialize_amd64_linux_nat): Set amd64_native_gregset64_num_regs. * amd64-linux-tdep.c (amd64_linux_register_name) (amd64_linux_register_type, amd64_linux_register_reggroup_p) (amd64_linux_write_pc): New. (amd64_linux_init_abi): Use them, and update num_regs. * amd64-linux-tdep.h: New file. * amd64-tdep.c (amd64_register_name, amd64_register_type): Make public. * amd64-tdep.h (amd64_register_name, amd64_register_type): New prototypes. * regformats/reg-x86-64-linux.dat: New file. gdb/testsuite/ * Makefile.in (clean): Clean reg-x86-64-linux.c. (reg-x86-64-linux.o, reg-x86-64-linux.c): New. * configure.srv (x86_64-*-linux*): Use reg-x86-64-linux.o. * linux-x86-64-low.c (x86_64_regmap): Include ORIG_RAX. (x86_64_fill_gregset, x86_64_store_gregset): Skip floating point registers.
This commit is contained in:
@ -1,3 +1,22 @@
|
|||||||
|
2006-08-19 Daniel Jacobowitz <dan@codesourcery.com>
|
||||||
|
|
||||||
|
* Makefile.in (amd64_linux_tdep_h): New.
|
||||||
|
(amd64-linux-nat.o, amd64-linux-tdep.o): Update.
|
||||||
|
* amd64-linux-nat.c (amd64_linux_gregset64_reg_offset): Add
|
||||||
|
ORIG_RAX.
|
||||||
|
(_initialize_amd64_linux_nat): Set amd64_native_gregset64_num_regs.
|
||||||
|
* amd64-linux-tdep.c (amd64_linux_register_name)
|
||||||
|
(amd64_linux_register_type, amd64_linux_register_reggroup_p)
|
||||||
|
(amd64_linux_write_pc): New.
|
||||||
|
(amd64_linux_init_abi): Use them, and update num_regs.
|
||||||
|
* amd64-linux-tdep.h: New file.
|
||||||
|
* amd64-tdep.c (amd64_register_name, amd64_register_type): Make
|
||||||
|
public.
|
||||||
|
* amd64-tdep.h (amd64_register_name, amd64_register_type): New
|
||||||
|
prototypes.
|
||||||
|
|
||||||
|
* regformats/reg-x86-64-linux.dat: New file.
|
||||||
|
|
||||||
2006-08-18 Daniel Jacobowitz <dan@codesourcery.com>
|
2006-08-18 Daniel Jacobowitz <dan@codesourcery.com>
|
||||||
|
|
||||||
* infrun.c (handle_inferior_event): Check the current frame ID
|
* infrun.c (handle_inferior_event): Check the current frame ID
|
||||||
|
@ -638,6 +638,7 @@ ada_lang_h = ada-lang.h $(value_h) $(gdbtypes_h) $(breakpoint_h)
|
|||||||
ada_lex_c = ada-lex.c $(gdb_string_h)
|
ada_lex_c = ada-lex.c $(gdb_string_h)
|
||||||
alphabsd_tdep_h = alphabsd-tdep.h
|
alphabsd_tdep_h = alphabsd-tdep.h
|
||||||
alpha_tdep_h = alpha-tdep.h
|
alpha_tdep_h = alpha-tdep.h
|
||||||
|
amd64_linux_tdep_h = amd64-linux-tdep.h
|
||||||
amd64_nat_h = amd64-nat.h
|
amd64_nat_h = amd64-nat.h
|
||||||
amd64_tdep_h = amd64-tdep.h $(i386_tdep_h)
|
amd64_tdep_h = amd64-tdep.h $(i386_tdep_h)
|
||||||
annotate_h = annotate.h $(symtab_h) $(gdbtypes_h)
|
annotate_h = annotate.h $(symtab_h) $(gdbtypes_h)
|
||||||
@ -1738,10 +1739,10 @@ amd64fbsd-tdep.o: amd64fbsd-tdep.c $(defs_h) $(arch_utils_h) $(frame_h) \
|
|||||||
amd64-linux-nat.o: amd64-linux-nat.c $(defs_h) $(inferior_h) $(gdbcore_h) \
|
amd64-linux-nat.o: amd64-linux-nat.c $(defs_h) $(inferior_h) $(gdbcore_h) \
|
||||||
$(regcache_h) $(linux_nat_h) $(gdb_assert_h) $(gdb_string_h) \
|
$(regcache_h) $(linux_nat_h) $(gdb_assert_h) $(gdb_string_h) \
|
||||||
$(gdb_proc_service_h) $(gregset_h) $(amd64_tdep_h) \
|
$(gdb_proc_service_h) $(gregset_h) $(amd64_tdep_h) \
|
||||||
$(i386_linux_tdep_h) $(amd64_nat_h) $(target_h)
|
$(i386_linux_tdep_h) $(amd64_nat_h) $(target_h) $(amd64_linux_tdep_h)
|
||||||
amd64-linux-tdep.o: amd64-linux-tdep.c $(defs_h) $(frame_h) $(gdbcore_h) \
|
amd64-linux-tdep.o: amd64-linux-tdep.c $(defs_h) $(frame_h) $(gdbcore_h) \
|
||||||
$(regcache_h) $(osabi_h) $(symtab_h) $(gdb_string_h) $(amd64_tdep_h) \
|
$(regcache_h) $(osabi_h) $(symtab_h) $(gdb_string_h) $(amd64_tdep_h) \
|
||||||
$(solib_svr4_h)
|
$(solib_svr4_h) $(gdbtypes_h) $(reggroups_h) $(amd64_linux_tdep_h)
|
||||||
amd64-nat.o: amd64-nat.c $(defs_h) $(gdbarch_h) $(regcache_h) \
|
amd64-nat.o: amd64-nat.c $(defs_h) $(gdbarch_h) $(regcache_h) \
|
||||||
$(gdb_assert_h) $(gdb_string_h) $(i386_tdep_h) $(amd64_tdep_h)
|
$(gdb_assert_h) $(gdb_string_h) $(i386_tdep_h) $(amd64_tdep_h)
|
||||||
amd64nbsd-nat.o: amd64nbsd-nat.c $(defs_h) $(target_h) $(gdb_assert_h) \
|
amd64nbsd-nat.o: amd64nbsd-nat.c $(defs_h) $(target_h) $(gdb_assert_h) \
|
||||||
|
@ -26,6 +26,7 @@
|
|||||||
#include "gdbcore.h"
|
#include "gdbcore.h"
|
||||||
#include "regcache.h"
|
#include "regcache.h"
|
||||||
#include "linux-nat.h"
|
#include "linux-nat.h"
|
||||||
|
#include "amd64-linux-tdep.h"
|
||||||
|
|
||||||
#include "gdb_assert.h"
|
#include "gdb_assert.h"
|
||||||
#include "gdb_string.h"
|
#include "gdb_string.h"
|
||||||
@ -68,7 +69,12 @@ static int amd64_linux_gregset64_reg_offset[] =
|
|||||||
RIP * 8, EFLAGS * 8, /* %rip, %eflags */
|
RIP * 8, EFLAGS * 8, /* %rip, %eflags */
|
||||||
CS * 8, SS * 8, /* %cs, %ss */
|
CS * 8, SS * 8, /* %cs, %ss */
|
||||||
DS * 8, ES * 8, /* %ds, %es */
|
DS * 8, ES * 8, /* %ds, %es */
|
||||||
FS * 8, GS * 8 /* %fs, %gs */
|
FS * 8, GS * 8, /* %fs, %gs */
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
ORIG_RAX * 8
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -382,6 +388,7 @@ _initialize_amd64_linux_nat (void)
|
|||||||
amd64_native_gregset32_reg_offset = amd64_linux_gregset32_reg_offset;
|
amd64_native_gregset32_reg_offset = amd64_linux_gregset32_reg_offset;
|
||||||
amd64_native_gregset32_num_regs = I386_LINUX_NUM_REGS;
|
amd64_native_gregset32_num_regs = I386_LINUX_NUM_REGS;
|
||||||
amd64_native_gregset64_reg_offset = amd64_linux_gregset64_reg_offset;
|
amd64_native_gregset64_reg_offset = amd64_linux_gregset64_reg_offset;
|
||||||
|
amd64_native_gregset64_num_regs = AMD64_LINUX_NUM_REGS;
|
||||||
|
|
||||||
gdb_assert (ARRAY_SIZE (amd64_linux_gregset32_reg_offset)
|
gdb_assert (ARRAY_SIZE (amd64_linux_gregset32_reg_offset)
|
||||||
== amd64_native_gregset32_num_regs);
|
== amd64_native_gregset32_num_regs);
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/* Target-dependent code for GNU/Linux x86-64.
|
/* Target-dependent code for GNU/Linux x86-64.
|
||||||
|
|
||||||
Copyright (C) 2001, 2003, 2004, 2005 Free Software Foundation, Inc.
|
Copyright (C) 2001, 2003, 2004, 2005, 2006 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.
|
||||||
@ -26,6 +26,9 @@
|
|||||||
#include "regcache.h"
|
#include "regcache.h"
|
||||||
#include "osabi.h"
|
#include "osabi.h"
|
||||||
#include "symtab.h"
|
#include "symtab.h"
|
||||||
|
#include "gdbtypes.h"
|
||||||
|
#include "reggroups.h"
|
||||||
|
#include "amd64-linux-tdep.h"
|
||||||
|
|
||||||
#include "gdb_string.h"
|
#include "gdb_string.h"
|
||||||
|
|
||||||
@ -199,6 +202,61 @@ static int amd64_linux_sc_reg_offset[] =
|
|||||||
-1 /* %gs */
|
-1 /* %gs */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Replacement register functions which know about %orig_rax. */
|
||||||
|
|
||||||
|
static const char *
|
||||||
|
amd64_linux_register_name (int reg)
|
||||||
|
{
|
||||||
|
if (reg == AMD64_LINUX_ORIG_RAX_REGNUM)
|
||||||
|
return "orig_rax";
|
||||||
|
|
||||||
|
return amd64_register_name (reg);
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct type *
|
||||||
|
amd64_linux_register_type (struct gdbarch *gdbarch, int reg)
|
||||||
|
{
|
||||||
|
if (reg == AMD64_LINUX_ORIG_RAX_REGNUM)
|
||||||
|
return builtin_type_int64;
|
||||||
|
|
||||||
|
return amd64_register_type (gdbarch, reg);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
amd64_linux_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
|
||||||
|
struct reggroup *group)
|
||||||
|
{
|
||||||
|
if (regnum == AMD64_LINUX_ORIG_RAX_REGNUM)
|
||||||
|
return (group == system_reggroup
|
||||||
|
|| group == save_reggroup
|
||||||
|
|| group == restore_reggroup);
|
||||||
|
return default_register_reggroup_p (gdbarch, regnum, group);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set the program counter for process PTID to PC. */
|
||||||
|
|
||||||
|
static void
|
||||||
|
amd64_linux_write_pc (CORE_ADDR pc, ptid_t ptid)
|
||||||
|
{
|
||||||
|
write_register_pid (AMD64_RIP_REGNUM, pc, ptid);
|
||||||
|
|
||||||
|
/* We must be careful with modifying the program counter. If we
|
||||||
|
just interrupted a system call, the kernel might try to restart
|
||||||
|
it when we resume the inferior. On restarting the system call,
|
||||||
|
the kernel will try backing up the program counter even though it
|
||||||
|
no longer points at the system call. This typically results in a
|
||||||
|
SIGSEGV or SIGILL. We can prevent this by writing `-1' in the
|
||||||
|
"orig_rax" pseudo-register.
|
||||||
|
|
||||||
|
Note that "orig_rax" is saved when setting up a dummy call frame.
|
||||||
|
This means that it is properly restored when that frame is
|
||||||
|
popped, and that the interrupted system call will be restarted
|
||||||
|
when we resume the inferior on return from a function call from
|
||||||
|
within GDB. In all other cases the system call will not be
|
||||||
|
restarted. */
|
||||||
|
write_register_pid (AMD64_LINUX_ORIG_RAX_REGNUM, -1, ptid);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
amd64_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
|
amd64_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
|
||||||
{
|
{
|
||||||
@ -219,6 +277,13 @@ amd64_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
|
|||||||
set_solib_svr4_fetch_link_map_offsets
|
set_solib_svr4_fetch_link_map_offsets
|
||||||
(gdbarch, svr4_lp64_fetch_link_map_offsets);
|
(gdbarch, svr4_lp64_fetch_link_map_offsets);
|
||||||
|
|
||||||
|
/* Add the %orig_rax register used for syscall restarting. */
|
||||||
|
set_gdbarch_write_pc (gdbarch, amd64_linux_write_pc);
|
||||||
|
set_gdbarch_num_regs (gdbarch, AMD64_LINUX_NUM_REGS);
|
||||||
|
set_gdbarch_register_name (gdbarch, amd64_linux_register_name);
|
||||||
|
set_gdbarch_register_type (gdbarch, amd64_linux_register_type);
|
||||||
|
set_gdbarch_register_reggroup_p (gdbarch, amd64_linux_register_reggroup_p);
|
||||||
|
|
||||||
/* Enable TLS support. */
|
/* Enable TLS support. */
|
||||||
set_gdbarch_fetch_tls_load_module_address (gdbarch,
|
set_gdbarch_fetch_tls_load_module_address (gdbarch,
|
||||||
svr4_fetch_objfile_link_map);
|
svr4_fetch_objfile_link_map);
|
||||||
|
36
gdb/amd64-linux-tdep.h
Normal file
36
gdb/amd64-linux-tdep.h
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
/* Target-dependent code for GNU/Linux AMD64.
|
||||||
|
|
||||||
|
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GDB.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||||
|
Boston, MA 02110-1301, USA. */
|
||||||
|
|
||||||
|
#ifndef AMD64_LINUX_TDEP_H
|
||||||
|
#define AMD64_LINUX_TDEP_H
|
||||||
|
|
||||||
|
/* Like for i386 GNU/Linux, there is an extra "register"
|
||||||
|
used to control syscall restarting. */
|
||||||
|
|
||||||
|
/* Register number for the "orig_rax" register. If this register
|
||||||
|
contains a value >= 0 it is interpreted as the system call number
|
||||||
|
that the kernel is supposed to restart. */
|
||||||
|
#define AMD64_LINUX_ORIG_RAX_REGNUM (AMD64_MXCSR_REGNUM + 1)
|
||||||
|
|
||||||
|
/* Total number of registers for GNU/Linux. */
|
||||||
|
#define AMD64_LINUX_NUM_REGS (AMD64_LINUX_ORIG_RAX_REGNUM + 1)
|
||||||
|
|
||||||
|
#endif /* amd64-linux-tdep.h */
|
@ -129,7 +129,7 @@ static struct amd64_register_info const amd64_register_info[] =
|
|||||||
|
|
||||||
/* Return the name of register REGNUM. */
|
/* Return the name of register REGNUM. */
|
||||||
|
|
||||||
static const char *
|
const char *
|
||||||
amd64_register_name (int regnum)
|
amd64_register_name (int regnum)
|
||||||
{
|
{
|
||||||
if (regnum >= 0 && regnum < AMD64_NUM_REGS)
|
if (regnum >= 0 && regnum < AMD64_NUM_REGS)
|
||||||
@ -141,7 +141,7 @@ amd64_register_name (int regnum)
|
|||||||
/* Return the GDB type object for the "standard" data type of data in
|
/* Return the GDB type object for the "standard" data type of data in
|
||||||
register REGNUM. */
|
register REGNUM. */
|
||||||
|
|
||||||
static struct type *
|
struct type *
|
||||||
amd64_register_type (struct gdbarch *gdbarch, int regnum)
|
amd64_register_type (struct gdbarch *gdbarch, int regnum)
|
||||||
{
|
{
|
||||||
gdb_assert (regnum >= 0 && regnum < AMD64_NUM_REGS);
|
gdb_assert (regnum >= 0 && regnum < AMD64_NUM_REGS);
|
||||||
|
@ -64,6 +64,12 @@ enum amd64_regnum
|
|||||||
|
|
||||||
extern void amd64_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch);
|
extern void amd64_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch);
|
||||||
|
|
||||||
|
/* Functions from amd64-tdep.c which may be needed on architectures
|
||||||
|
with extra registers. */
|
||||||
|
|
||||||
|
extern const char *amd64_register_name (int regnum);
|
||||||
|
extern struct type *amd64_register_type (struct gdbarch *gdbarch, int regnum);
|
||||||
|
|
||||||
/* Fill register REGNUM in REGCACHE with the appropriate
|
/* Fill register REGNUM in REGCACHE with the appropriate
|
||||||
floating-point or SSE register value from *FXSAVE. If REGNUM is
|
floating-point or SSE register value from *FXSAVE. If REGNUM is
|
||||||
-1, do this for all registers. This function masks off any of the
|
-1, do this for all registers. This function masks off any of the
|
||||||
|
@ -1,3 +1,12 @@
|
|||||||
|
2006-08-19 Daniel Jacobowitz <dan@codesourcery.com>
|
||||||
|
|
||||||
|
* Makefile.in (clean): Clean reg-x86-64-linux.c.
|
||||||
|
(reg-x86-64-linux.o, reg-x86-64-linux.c): New.
|
||||||
|
* configure.srv (x86_64-*-linux*): Use reg-x86-64-linux.o.
|
||||||
|
* linux-x86-64-low.c (x86_64_regmap): Include ORIG_RAX.
|
||||||
|
(x86_64_fill_gregset, x86_64_store_gregset): Skip floating
|
||||||
|
point registers.
|
||||||
|
|
||||||
2006-08-08 Richard Sandiford <richard@codesourcery.com>
|
2006-08-08 Richard Sandiford <richard@codesourcery.com>
|
||||||
|
|
||||||
* server.c (terminal_fd): New variable.
|
* server.c (terminal_fd): New variable.
|
||||||
|
@ -206,7 +206,7 @@ clean:
|
|||||||
rm -f gdbserver gdbreplay core make.log
|
rm -f gdbserver gdbreplay core make.log
|
||||||
rm -f reg-arm.c reg-i386.c reg-ia64.c reg-m32r.c reg-m68k.c reg-mips.c
|
rm -f reg-arm.c reg-i386.c reg-ia64.c reg-m32r.c reg-m68k.c reg-mips.c
|
||||||
rm -f reg-ppc.c reg-sh.c reg-x86-64.c reg-i386-linux.c
|
rm -f reg-ppc.c reg-sh.c reg-x86-64.c reg-i386-linux.c
|
||||||
rm -f reg-cris.c reg-crisv32.c
|
rm -f reg-cris.c reg-crisv32.c reg-x86-64-linux.c
|
||||||
|
|
||||||
maintainer-clean realclean distclean: clean
|
maintainer-clean realclean distclean: clean
|
||||||
rm -f nm.h tm.h xm.h config.status config.h stamp-h config.log
|
rm -f nm.h tm.h xm.h config.status config.h stamp-h config.log
|
||||||
@ -334,5 +334,8 @@ reg-sh.c : $(srcdir)/../regformats/reg-sh.dat $(regdat_sh)
|
|||||||
reg-x86-64.o : reg-x86-64.c $(regdef_h)
|
reg-x86-64.o : reg-x86-64.c $(regdef_h)
|
||||||
reg-x86-64.c : $(srcdir)/../regformats/reg-x86-64.dat $(regdat_sh)
|
reg-x86-64.c : $(srcdir)/../regformats/reg-x86-64.dat $(regdat_sh)
|
||||||
sh $(regdat_sh) $(srcdir)/../regformats/reg-x86-64.dat reg-x86-64.c
|
sh $(regdat_sh) $(srcdir)/../regformats/reg-x86-64.dat reg-x86-64.c
|
||||||
|
reg-x86-64-linux.o : reg-x86-64-linux.c $(regdef_h)
|
||||||
|
reg-x86-64-linux.c : $(srcdir)/../regformats/reg-x86-64-linux.dat $(regdat_sh)
|
||||||
|
sh $(regdat_sh) $(srcdir)/../regformats/reg-x86-64-linux.dat reg-x86-64-linux.c
|
||||||
|
|
||||||
# This is the end of "Makefile.in".
|
# This is the end of "Makefile.in".
|
||||||
|
@ -97,7 +97,7 @@ case "${target}" in
|
|||||||
srv_linux_usrregs=yes
|
srv_linux_usrregs=yes
|
||||||
srv_linux_thread_db=yes
|
srv_linux_thread_db=yes
|
||||||
;;
|
;;
|
||||||
x86_64-*-linux*) srv_regobj=reg-x86-64.o
|
x86_64-*-linux*) srv_regobj=reg-x86-64-linux.o
|
||||||
srv_tgtobj="linux-low.o linux-x86-64-low.o i387-fp.o"
|
srv_tgtobj="linux-low.o linux-x86-64-low.o i387-fp.o"
|
||||||
srv_linux_regsets=yes
|
srv_linux_regsets=yes
|
||||||
srv_linux_thread_db=yes
|
srv_linux_thread_db=yes
|
||||||
|
@ -50,7 +50,12 @@ static int x86_64_regmap[] = {
|
|||||||
R8 * 8, R9 * 8, R10 * 8, R11 * 8,
|
R8 * 8, R9 * 8, R10 * 8, R11 * 8,
|
||||||
R12 * 8, R13 * 8, R14 * 8, R15 * 8,
|
R12 * 8, R13 * 8, R14 * 8, R15 * 8,
|
||||||
RIP * 8, EFLAGS * 8, CS * 8, SS * 8,
|
RIP * 8, EFLAGS * 8, CS * 8, SS * 8,
|
||||||
DS * 8, ES * 8, FS * 8, GS * 8
|
DS * 8, ES * 8, FS * 8, GS * 8,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
ORIG_RAX * 8
|
||||||
};
|
};
|
||||||
|
|
||||||
#define X86_64_NUM_GREGS (sizeof(x86_64_regmap)/sizeof(int))
|
#define X86_64_NUM_GREGS (sizeof(x86_64_regmap)/sizeof(int))
|
||||||
@ -83,7 +88,8 @@ x86_64_fill_gregset (void *buf)
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < X86_64_NUM_GREGS; i++)
|
for (i = 0; i < X86_64_NUM_GREGS; i++)
|
||||||
collect_register (i, ((char *) buf) + x86_64_regmap[i]);
|
if (x86_64_regmap[i] != -1)
|
||||||
|
collect_register (i, ((char *) buf) + x86_64_regmap[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -92,7 +98,8 @@ x86_64_store_gregset (const void *buf)
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < X86_64_NUM_GREGS; i++)
|
for (i = 0; i < X86_64_NUM_GREGS; i++)
|
||||||
supply_register (i, ((char *) buf) + x86_64_regmap[i]);
|
if (x86_64_regmap[i] != -1)
|
||||||
|
supply_register (i, ((char *) buf) + x86_64_regmap[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
60
gdb/regformats/reg-x86-64-linux.dat
Normal file
60
gdb/regformats/reg-x86-64-linux.dat
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
name:x86_64_linux
|
||||||
|
expedite:rbp,rsp,rip
|
||||||
|
64:rax
|
||||||
|
64:rbx
|
||||||
|
64:rcx
|
||||||
|
64:rdx
|
||||||
|
64:rsi
|
||||||
|
64:rdi
|
||||||
|
64:rbp
|
||||||
|
64:rsp
|
||||||
|
64:r8
|
||||||
|
64:r9
|
||||||
|
64:r10
|
||||||
|
64:r11
|
||||||
|
64:r12
|
||||||
|
64:r13
|
||||||
|
64:r14
|
||||||
|
64:r15
|
||||||
|
64:rip
|
||||||
|
32:eflags
|
||||||
|
32:cs
|
||||||
|
32:ss
|
||||||
|
32:ds
|
||||||
|
32:es
|
||||||
|
32:fs
|
||||||
|
32:gs
|
||||||
|
80:st0
|
||||||
|
80:st1
|
||||||
|
80:st2
|
||||||
|
80:st3
|
||||||
|
80:st4
|
||||||
|
80:st5
|
||||||
|
80:st6
|
||||||
|
80:st7
|
||||||
|
32:fctrl
|
||||||
|
32:fstat
|
||||||
|
32:ftag
|
||||||
|
32:fiseg
|
||||||
|
32:fioff
|
||||||
|
32:foseg
|
||||||
|
32:fooff
|
||||||
|
32:fop
|
||||||
|
128:xmm0
|
||||||
|
128:xmm1
|
||||||
|
128:xmm2
|
||||||
|
128:xmm3
|
||||||
|
128:xmm4
|
||||||
|
128:xmm5
|
||||||
|
128:xmm6
|
||||||
|
128:xmm7
|
||||||
|
128:xmm8
|
||||||
|
128:xmm9
|
||||||
|
128:xmm10
|
||||||
|
128:xmm11
|
||||||
|
128:xmm12
|
||||||
|
128:xmm13
|
||||||
|
128:xmm14
|
||||||
|
128:xmm15
|
||||||
|
32:mxcsr
|
||||||
|
64:orig_rax
|
Reference in New Issue
Block a user