Set some better defaults for OSABI_UNKNOWN, and add NetBSD kcore support.
This commit is contained in:
parent
14cdf7ae6d
commit
22cd769ea5
11
gnu/dist/gdb/gdb/x86-64-tdep.c
vendored
11
gnu/dist/gdb/gdb/x86-64-tdep.c
vendored
@ -902,6 +902,12 @@ x86_64_skip_prologue (CORE_ADDR pc)
|
||||
return pc;
|
||||
}
|
||||
|
||||
CORE_ADDR
|
||||
x86_64_saved_pc_after_call (struct frame_info *frame)
|
||||
{
|
||||
return read_memory_integer (read_register (SP_REGNUM), 8);
|
||||
}
|
||||
|
||||
/* Sequence of bytes for breakpoint instruction. */
|
||||
static unsigned char *
|
||||
x86_64_breakpoint_from_pc (CORE_ADDR * pc, int *lenptr)
|
||||
@ -1122,6 +1128,11 @@ x86_64_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
|
||||
set_gdbarch_dwarf2_build_frame_info (gdbarch, dwarf2_build_frame_info);
|
||||
set_gdbarch_dwarf2_reg_to_regnum (gdbarch, x86_64_dwarf2_reg_to_regnum);
|
||||
|
||||
set_gdbarch_frame_chain (gdbarch, cfi_frame_chain);
|
||||
set_gdbarch_frame_chain_valid (gdbarch, func_frame_chain_valid);
|
||||
set_gdbarch_frame_saved_pc (gdbarch, cfi_get_ra);
|
||||
set_gdbarch_saved_pc_after_call (gdbarch, x86_64_saved_pc_after_call);
|
||||
|
||||
gdbarch_init_osabi (info, gdbarch, osabi);
|
||||
|
||||
return gdbarch;
|
||||
|
1
gnu/dist/gdb/gdb/x86-64-tdep.h
vendored
1
gnu/dist/gdb/gdb/x86-64-tdep.h
vendored
@ -34,5 +34,6 @@ const char *x86_64_register_name (int reg_nr);
|
||||
|
||||
gdbarch_frame_saved_pc_ftype x86_64_nbsd_frame_saved_pc;
|
||||
gdbarch_saved_pc_after_call_ftype x86_64_nbsd_saved_pc_after_call;
|
||||
gdbarch_saved_pc_after_call_ftype x86_64_saved_pc_after_call;
|
||||
|
||||
#endif
|
||||
|
57
gnu/dist/gdb/gdb/x86-64nbsd-nat.c
vendored
57
gnu/dist/gdb/gdb/x86-64nbsd-nat.c
vendored
@ -34,6 +34,7 @@
|
||||
#include <sys/syscall.h>
|
||||
#include <machine/reg.h>
|
||||
#include <machine/frame.h>
|
||||
#include <machine/pcb.h>
|
||||
|
||||
/* Mapping between the general-purpose registers in `struct user'
|
||||
format and GDB's register array layout. */
|
||||
@ -312,6 +313,47 @@ fetch_core_registers (char *core_reg_sect, unsigned core_reg_size,
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
fetch_kcore_registers (pcb)
|
||||
struct pcb *pcb;
|
||||
{
|
||||
int regno;
|
||||
uint64_t zero;
|
||||
struct switchframe sf;
|
||||
|
||||
/*
|
||||
* get the register values out of the sys pcb and
|
||||
* store them where `read_register' will find them.
|
||||
*/
|
||||
if (target_read_memory(pcb->pcb_rsp, (char *)&sf, sizeof(sf)))
|
||||
error("Cannot switch frame.");
|
||||
|
||||
zero = 0;
|
||||
|
||||
supply_register(0, (char *)&zero);
|
||||
supply_register(1, (char *)&sf.sf_rbx);
|
||||
supply_register(2, (char *)&zero);
|
||||
supply_register(3, (char *)&zero);
|
||||
supply_register(4, (char *)&zero);
|
||||
supply_register(5, (char *)&zero);
|
||||
supply_register(6, (char *)&sf.sf_rbp);
|
||||
supply_register(7, (char *)&pcb->pcb_rsp);
|
||||
supply_register(8, (char *)&zero);
|
||||
supply_register(9, (char *)&zero);
|
||||
supply_register(10, (char *)&zero);
|
||||
supply_register(11, (char *)&zero);
|
||||
supply_register(12, (char *)&sf.sf_r12);
|
||||
supply_register(13, (char *)&sf.sf_r13);
|
||||
supply_register(14, (char *)&sf.sf_r14);
|
||||
supply_register(15, (char *)&sf.sf_r15);
|
||||
supply_register(16, (char *)&sf.sf_rip);
|
||||
supply_register(17, (char *)&zero);
|
||||
supply_register(18, (char *)&zero);
|
||||
supply_register(19, (char *)&zero);
|
||||
supply_register(20, (char *)&zero);
|
||||
supply_register(21, (char *)&zero);
|
||||
}
|
||||
|
||||
void
|
||||
nbsd_reg_to_internal(regs)
|
||||
char *regs;
|
||||
@ -348,22 +390,7 @@ static struct core_fns nbsd_elf_core_fns = {
|
||||
fetch_core_registers, /* core_read_registers */
|
||||
NULL /* next */
|
||||
};
|
||||
|
||||
|
||||
#if !defined (offsetof)
|
||||
#define offsetof(TYPE, MEMBER) ((unsigned long) &((TYPE *)0)->MEMBER)
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
/* Return the address of register REGNUM. BLOCKEND is the value of
|
||||
u.u_ar0, which should point to the registers. */
|
||||
CORE_ADDR
|
||||
x86_64_register_u_addr (CORE_ADDR blockend, int regnum)
|
||||
{
|
||||
/* XXX implement */
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
void
|
||||
_initialize_x86_64nbsd_nat (void)
|
||||
|
Loading…
x
Reference in New Issue
Block a user