Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Matthew Gretton-Dann <matthew.gretton-dann@arm.com>
To: gdb-patches@sourceware.org
Subject: [PATCH/ARM] Fix support of longjmp for ARM Linux.
Date: Thu, 29 Apr 2010 13:31:00 -0000	[thread overview]
Message-ID: <1272547868.19716.13.camel@e102111-lin.cambridge.arm.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 821 bytes --]

Hi,

Can someone please review and comment on the attached patch?

The patch fixes support for longjmp on ARM Linux.  Dependent on the FP
model in use the location of the PC to use as the long jump return value
is stored in different locations in the long jump buffer.  Currently gdb
uses a hard-coded value which works for only one FP model, this patch
corrects this.

A suggested ChangeLog is:

2010-04-29  Matthew Gretton-Dann  <matthew.gretton-dann@arm.com>

	* arm-linux-tdep.c (ARM_LINUX_JB_PC): Remove.
	(ARM_LINUX_JB_PC_FPA): Add, offset of PC in longjmp buffer for 
	FPA.
	(ARM_LINUX_JP_PC_EABI): Add, offset of PC in longjmp buffer for 
	EABI.
	(arm_linux_init_abi): Set up JB_PC field dependent on FP model 
	in use.

Thanks,

Matt

-- 
Matthew Gretton-Dann
Principal Engineer - Tools, PD Software
ARM Limited

[-- Attachment #2: 1004-gdb-longjmp.patch --]
[-- Type: text/x-patch, Size: 1991 bytes --]

Index: gdb/arm-linux-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/arm-linux-tdep.c,v
retrieving revision 1.74
diff -u -p -u -p -r1.74 arm-linux-tdep.c
--- gdb/arm-linux-tdep.c	1 Feb 2010 16:13:15 -0000	1.74
+++ gdb/arm-linux-tdep.c	29 Apr 2010 12:49:15 -0000
@@ -82,9 +82,20 @@ static const char arm_linux_thumb2_be_br
 
 static const char arm_linux_thumb2_le_breakpoint[] = { 0xf0, 0xf7, 0x00, 0xa0 };
 
-/* Description of the longjmp buffer.  */
+/* Description of the longjmp buffer.  The buffer is treated as an array of 
+   elements of size ARM_LINUX_JB_ELEMENT_SIZE.
+
+   The location of saved registers in this buffer (in particular the PC
+   to use after longjmp is called) varies depending on the ABI (in 
+   particular the FP model) and also (possibly) the C Library.
+
+   For glibc, eglibc, and uclibc the following holds:  If the FP model is 
+   SoftVFP or VFP (which implies EABI) then the PC is at offset 9 in the 
+   buffer.  This is also true for the SoftFPA model.  However, for the FPA 
+   model the PC is at offset 21 in the buffer.  */
 #define ARM_LINUX_JB_ELEMENT_SIZE	INT_REGISTER_SIZE
-#define ARM_LINUX_JB_PC			21
+#define ARM_LINUX_JB_PC_FPA		21
+#define ARM_LINUX_JB_PC_EABI		9
 
 /*
    Dynamic Linking on ARM GNU/Linux
@@ -877,7 +888,22 @@ arm_linux_init_abi (struct gdbarch_info 
   if (tdep->fp_model == ARM_FLOAT_AUTO)
     tdep->fp_model = ARM_FLOAT_FPA;
 
-  tdep->jb_pc = ARM_LINUX_JB_PC;
+  switch (tdep->fp_model)
+    {
+    case ARM_FLOAT_FPA:
+      tdep->jb_pc = ARM_LINUX_JB_PC_FPA;
+      break;
+    case ARM_FLOAT_SOFT_FPA:
+    case ARM_FLOAT_SOFT_VFP:
+    case ARM_FLOAT_VFP:
+      tdep->jb_pc = ARM_LINUX_JB_PC_EABI;
+      break;
+    default:
+      internal_error
+	(__FILE__, __LINE__,
+         _("arm_linux_init_abi: Floating point model not supported"));
+      break;
+    }
   tdep->jb_elt_size = ARM_LINUX_JB_ELEMENT_SIZE;
 
   set_solib_svr4_fetch_link_map_offsets

             reply	other threads:[~2010-04-29 13:31 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-04-29 13:31 Matthew Gretton-Dann [this message]
2010-04-29 13:49 ` Richard Earnshaw
2010-04-29 14:36   ` Joel Brobecker
2010-04-29 16:36     ` Matthew Gretton-Dann
2010-05-03 22:57   ` Daniel Jacobowitz

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1272547868.19716.13.camel@e102111-lin.cambridge.arm.com \
    --to=matthew.gretton-dann@arm.com \
    --cc=gdb-patches@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox