* i386-dicos-tdep.c: Include "inferior.h".
authorPedro Alves <palves@redhat.com>
Mon, 7 Jul 2008 22:05:45 +0000 (22:05 +0000)
committerPedro Alves <palves@redhat.com>
Mon, 7 Jul 2008 22:05:45 +0000 (22:05 +0000)
(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/ChangeLog
gdb/Makefile.in
gdb/i386-dicos-tdep.c

index ba05c7b..0942165 100644 (file)
@@ -1,3 +1,11 @@
+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).
+
 2008-07-07  Joel Brobecker  <brobecker@adacore.com>
 
        * gstdint.h: New file.
index 36186a9..055a759 100644 (file)
@@ -2236,7 +2236,7 @@ i386-cygwin-tdep.o: i386-cygwin-tdep.c $(defs_h) $(osabi_h) $(gdb_string_h) \
        $(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 e92313a..5fdaaba 100644 (file)
 #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 info, struct gdbarch *gdbarch)
   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.