gdb/
Switch i386 and derived targets to ON_STACK. * amd64-dicos-tdep.c (amd64_dicos_push_dummy_code): Remove. (amd64_dicos_init_abi): Remove its installment. * dicos-tdep.c (dicos_init_abi): Remove the set_gdbarch_call_dummy_location call. Update the comment here. * i386-dicos-tdep.c (i386_dicos_push_dummy_code): Remove. (i386_dicos_init_abi): Remove its installment. * i386-tdep.c (i386_push_dummy_code): New function. (i386_gdbarch_init): Call set_gdbarch_call_dummy_location, install i386_push_dummy_code.
This commit is contained in:
parent
e2e4d78b22
commit
a9b8d892d6
|
@ -1,3 +1,17 @@
|
||||||
|
2012-06-18 Mark Kettenis <kettenis@gnu.org>
|
||||||
|
Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||||
|
|
||||||
|
Switch i386 and derived targets to ON_STACK.
|
||||||
|
* amd64-dicos-tdep.c (amd64_dicos_push_dummy_code): Remove.
|
||||||
|
(amd64_dicos_init_abi): Remove its installment.
|
||||||
|
* dicos-tdep.c (dicos_init_abi): Remove the
|
||||||
|
set_gdbarch_call_dummy_location call. Update the comment here.
|
||||||
|
* i386-dicos-tdep.c (i386_dicos_push_dummy_code): Remove.
|
||||||
|
(i386_dicos_init_abi): Remove its installment.
|
||||||
|
* i386-tdep.c (i386_push_dummy_code): New function.
|
||||||
|
(i386_gdbarch_init): Call set_gdbarch_call_dummy_location, install
|
||||||
|
i386_push_dummy_code.
|
||||||
|
|
||||||
2012-06-18 Jan Kratochvil <jan.kratochvil@redhat.com>
|
2012-06-18 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||||
|
|
||||||
Remove stale dummy frames.
|
Remove stale dummy frames.
|
||||||
|
|
|
@ -23,24 +23,6 @@
|
||||||
#include "amd64-tdep.h"
|
#include "amd64-tdep.h"
|
||||||
#include "dicos-tdep.h"
|
#include "dicos-tdep.h"
|
||||||
|
|
||||||
static CORE_ADDR
|
|
||||||
amd64_dicos_push_dummy_code (struct gdbarch *gdbarch,
|
|
||||||
CORE_ADDR sp, CORE_ADDR funaddr,
|
|
||||||
struct value **args, int nargs,
|
|
||||||
struct type *value_type,
|
|
||||||
CORE_ADDR *real_pc, CORE_ADDR *bp_addr,
|
|
||||||
struct regcache *regcache)
|
|
||||||
{
|
|
||||||
int bplen;
|
|
||||||
CORE_ADDR bppc = sp;
|
|
||||||
|
|
||||||
gdbarch_breakpoint_from_pc (gdbarch, &bppc, &bplen);
|
|
||||||
*bp_addr = sp - bplen;
|
|
||||||
*real_pc = funaddr;
|
|
||||||
|
|
||||||
return *bp_addr;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
amd64_dicos_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
|
amd64_dicos_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
|
||||||
{
|
{
|
||||||
|
@ -49,8 +31,6 @@ amd64_dicos_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
|
||||||
amd64_init_abi (info, gdbarch);
|
amd64_init_abi (info, gdbarch);
|
||||||
|
|
||||||
dicos_init_abi (gdbarch);
|
dicos_init_abi (gdbarch);
|
||||||
|
|
||||||
set_gdbarch_push_dummy_code (gdbarch, amd64_dicos_push_dummy_code);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static enum gdb_osabi
|
static enum gdb_osabi
|
||||||
|
|
|
@ -43,8 +43,8 @@ dicos_init_abi (struct gdbarch *gdbarch)
|
||||||
|
|
||||||
/* There's no (standard definition of) entry point or a guaranteed
|
/* There's no (standard definition of) entry point or a guaranteed
|
||||||
text location with a symbol where to place the call dummy, so we
|
text location with a symbol where to place the call dummy, so we
|
||||||
put it on the stack. */
|
need it on the stack. Rely on i386_gdbarch_init used also for
|
||||||
set_gdbarch_call_dummy_location (gdbarch, ON_STACK);
|
amd64 to set up ON_STACK inferior calls. */
|
||||||
|
|
||||||
/* DICOS rewinds the PC itself. */
|
/* DICOS rewinds the PC itself. */
|
||||||
set_gdbarch_decr_pc_after_break (gdbarch, 0);
|
set_gdbarch_decr_pc_after_break (gdbarch, 0);
|
||||||
|
|
|
@ -22,32 +22,12 @@
|
||||||
#include "gdb_string.h"
|
#include "gdb_string.h"
|
||||||
#include "dicos-tdep.h"
|
#include "dicos-tdep.h"
|
||||||
|
|
||||||
static CORE_ADDR
|
|
||||||
i386_dicos_push_dummy_code (struct gdbarch *gdbarch,
|
|
||||||
CORE_ADDR sp, CORE_ADDR funaddr,
|
|
||||||
struct value **args, int nargs,
|
|
||||||
struct type *value_type,
|
|
||||||
CORE_ADDR *real_pc, CORE_ADDR *bp_addr,
|
|
||||||
struct regcache *regcache)
|
|
||||||
{
|
|
||||||
int bplen;
|
|
||||||
CORE_ADDR bppc = sp;
|
|
||||||
|
|
||||||
gdbarch_breakpoint_from_pc (gdbarch, &bppc, &bplen);
|
|
||||||
*bp_addr = sp - bplen;
|
|
||||||
*real_pc = funaddr;
|
|
||||||
|
|
||||||
return *bp_addr;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
i386_dicos_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
|
i386_dicos_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
|
||||||
{
|
{
|
||||||
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
|
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
|
||||||
|
|
||||||
dicos_init_abi (gdbarch);
|
dicos_init_abi (gdbarch);
|
||||||
|
|
||||||
set_gdbarch_push_dummy_code (gdbarch, i386_dicos_push_dummy_code);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static enum gdb_osabi
|
static enum gdb_osabi
|
||||||
|
|
|
@ -2332,6 +2332,22 @@ i386_16_byte_align_p (struct type *type)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Implementation for set_gdbarch_push_dummy_code. */
|
||||||
|
|
||||||
|
static CORE_ADDR
|
||||||
|
i386_push_dummy_code (struct gdbarch *gdbarch, CORE_ADDR sp, CORE_ADDR funaddr,
|
||||||
|
struct value **args, int nargs, struct type *value_type,
|
||||||
|
CORE_ADDR *real_pc, CORE_ADDR *bp_addr,
|
||||||
|
struct regcache *regcache)
|
||||||
|
{
|
||||||
|
/* Use 0xcc breakpoint - 1 byte. */
|
||||||
|
*bp_addr = sp - 1;
|
||||||
|
*real_pc = funaddr;
|
||||||
|
|
||||||
|
/* Keep the stack aligned. */
|
||||||
|
return sp - 16;
|
||||||
|
}
|
||||||
|
|
||||||
static CORE_ADDR
|
static CORE_ADDR
|
||||||
i386_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
|
i386_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
|
||||||
struct regcache *regcache, CORE_ADDR bp_addr, int nargs,
|
struct regcache *regcache, CORE_ADDR bp_addr, int nargs,
|
||||||
|
@ -7705,6 +7721,8 @@ i386_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
|
||||||
set_gdbarch_get_longjmp_target (gdbarch, i386_get_longjmp_target);
|
set_gdbarch_get_longjmp_target (gdbarch, i386_get_longjmp_target);
|
||||||
|
|
||||||
/* Call dummy code. */
|
/* Call dummy code. */
|
||||||
|
set_gdbarch_call_dummy_location (gdbarch, ON_STACK);
|
||||||
|
set_gdbarch_push_dummy_code (gdbarch, i386_push_dummy_code);
|
||||||
set_gdbarch_push_dummy_call (gdbarch, i386_push_dummy_call);
|
set_gdbarch_push_dummy_call (gdbarch, i386_push_dummy_call);
|
||||||
set_gdbarch_frame_align (gdbarch, i386_frame_align);
|
set_gdbarch_frame_align (gdbarch, i386_frame_align);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue