This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Fix Ericsson DICOS inferior function calls
- From: Pedro Alves <pedro at codesourcery dot com>
- To: gdb-patches at sourceware dot org
- Date: Mon, 7 Jul 2008 23:09:55 +0100
- Subject: Fix Ericsson DICOS inferior function calls
Hi,
This patch fixes inferior function calls on DICOS, by putting
the call dummy breakpoint location on the stack. The comments
in the patch describe why.
Daniel approved this offline, so I checked it in.
Thanks,
--
Pedro Alves
2008-07-07 Pedro Alves <pedro@codesourcery.com>
* i386-dicos-tdep.c: Include "inferior.h".
(i386_dicos_frame_align): New.
(i386_dicos_init_abi): Register i386_dicos_frame_align. Set call
dummy location ON_STACK.
* Makefile.in (i386-dicos-tdep.o): Depend on $(inferior_h).
---
gdb/Makefile.in | 2 +-
gdb/i386-dicos-tdep.c | 18 ++++++++++++++++++
2 files changed, 19 insertions(+), 1 deletion(-)
Index: src/gdb/Makefile.in
===================================================================
--- src.orig/gdb/Makefile.in 2008-07-07 22:59:22.000000000 +0100
+++ src/gdb/Makefile.in 2008-07-07 23:00:53.000000000 +0100
@@ -2236,7 +2236,7 @@ i386-cygwin-tdep.o: i386-cygwin-tdep.c $
$(i386_tdep_h) $(regset_h) $(gdb_obstack_h) $(xml_support_h) \
$(gdbcore_h) $(solib_h) $(solib_target_h) $(i386_cygwin_tdep_h)
i386-dicos-tdep.o: i386-dicos-tdep.c $(defs_h) $(osabi_h) $(gdb_string_h) \
- $(solib_h) $(solib_target_h)
+ $(solib_h) $(solib_target_h) $(inferior_h)
i386fbsd-nat.o: i386fbsd-nat.c $(defs_h) $(inferior_h) $(regcache_h) \
$(target_h) $(fbsd_nat_h) $(i386_tdep_h) $(i386bsd_nat_h) \
$(bsd_kvm_h)
Index: src/gdb/i386-dicos-tdep.c
===================================================================
--- src.orig/gdb/i386-dicos-tdep.c 2008-05-15 23:35:10.000000000 +0100
+++ src/gdb/i386-dicos-tdep.c 2008-07-07 23:00:53.000000000 +0100
@@ -22,6 +22,18 @@
#include "gdb_string.h"
#include "solib.h"
#include "solib-target.h"
+#include "inferior.h"
+
+static CORE_ADDR
+i386_dicos_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
+{
+ /* Having a call dummy on the stack requires a gdbarch_frame_align
+ method to align the breakpoint instruction in the stack.
+ Strictly speaking, we could just return SP pristine on x86. But,
+ as long as we're providing a frame align method, might as well
+ align for efficiency. */
+ return sp & -(CORE_ADDR)16;
+}
static void
i386_dicos_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
@@ -29,6 +41,12 @@ i386_dicos_init_abi (struct gdbarch_info
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
set_solib_ops (gdbarch, &solib_target_so_ops);
+
+ /* There's no (standard definition of) entry point or a guaranteed
+ text location we could find with a symbol where to place the call
+ dummy, so we put it on the stack. */
+ set_gdbarch_call_dummy_location (gdbarch, ON_STACK);
+ set_gdbarch_frame_align (gdbarch, i386_dicos_frame_align);
}
/* Look in the elf symbol table of ABFD for a symbol named WANTED.