From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 1612 invoked by alias); 7 Jul 2008 22:10:29 -0000 Received: (qmail 1604 invoked by uid 22791); 7 Jul 2008 22:10:28 -0000 X-Spam-Check-By: sourceware.org Received: from mail.codesourcery.com (HELO mail.codesourcery.com) (65.74.133.4) by sourceware.org (qpsmtpd/0.31) with ESMTP; Mon, 07 Jul 2008 22:10:04 +0000 Received: (qmail 24782 invoked from network); 7 Jul 2008 22:10:02 -0000 Received: from unknown (HELO orlando.local) (pedro@127.0.0.2) by mail.codesourcery.com with ESMTPA; 7 Jul 2008 22:10:02 -0000 From: Pedro Alves To: gdb-patches@sourceware.org Subject: Fix Ericsson DICOS inferior function calls Date: Mon, 07 Jul 2008 22:10:00 -0000 User-Agent: KMail/1.9.9 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_0QpcIewDV12W//P" Message-Id: <200807072309.56077.pedro@codesourcery.com> X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2008-07/txt/msg00098.txt.bz2 --Boundary-00=_0QpcIewDV12W//P Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Content-Disposition: inline Content-length: 234 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 --Boundary-00=_0QpcIewDV12W//P Content-Type: text/x-diff; charset="utf-8"; name="dicos_call_dummy_on_stack.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="dicos_call_dummy_on_stack.diff" Content-length: 2548 2008-07-07 Pedro Alves * 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. --Boundary-00=_0QpcIewDV12W//P--