Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
* PATCH ARM support a multi-arch compatible way of doing call dummys
@ 2002-02-18  8:47 Richard Earnshaw
  2002-02-18  9:53 ` Andrew Cagney
  0 siblings, 1 reply; 2+ messages in thread
From: Richard Earnshaw @ 2002-02-18  8:47 UTC (permalink / raw)
  To: gdb-patches; +Cc: Richard.Earnshaw

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

Using the Sparc port as precedent, this patch fixes the use of 
CALL_DUMMY_BREAKPOINT_OFFSET to be multi-arch compatible.  It's a bit of a 
hack, so I may well come back to it at a later date.

2002-02-18  Richard Earnshaw  <rearnsha@arm.com>

	* arm-tdep.c (arm_set_call_dummy_breakpoint_offset): New function.
	(arm_fix_call_dummy): Call it.
	(arm_call_dummy_breakpoint_offset): Delete.
	(arm_gdbarch_init): Initialize call_dummy_breakpoint_offset.
	* config/arm/tm-arm.h (CALL_DUMMY_BREAKPOINT_OFFSET): Delete.



[-- Attachment #2: gdb-macdbo.patch --]
[-- Type: text/x-patch , Size: 3574 bytes --]

Index: arm-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/arm-tdep.c,v
retrieving revision 1.45
diff -p -r1.45 arm-tdep.c
*** arm-tdep.c	2002/02/18 15:04:17	1.45
--- arm-tdep.c	2002/02/18 16:38:44
*************** static LONGEST arm_call_dummy_words[] =
*** 1263,1268 ****
--- 1263,1287 ----
    0xe1a0e00f, 0xe1a0f004, 0xe7ffdefe
  };
  
+ /* Adjust the call_dummy_breakpoint_offset for the bp_call_dummy
+    breakpoint to the proper address in the call dummy, so that
+    `finish' after a stop in a call dummy works.
+ 
+    XXX Tweeking current_gdbarch is not an optimal solution, but the
+    call to arm_fix_call_dummy is immediately followed by a call to
+    run_stack_dummy, which is the only function where
+    call_dummy_breakpoint_offset is actually used.  */
+ 
+ 
+ static void
+ arm_set_call_dummy_breakpoint_offset (void)
+ {
+   if (caller_is_thumb)
+     set_gdbarch_call_dummy_breakpoint_offset (current_gdbarch, 4);
+   else
+     set_gdbarch_call_dummy_breakpoint_offset (current_gdbarch, 8);
+ }
+ 
  /* Fix up the call dummy, based on whether the processor is currently
     in Thumb or ARM mode, and whether the target function is Thumb or
     ARM.  There are three different situations requiring three
*************** arm_fix_call_dummy (char *dummy, CORE_AD
*** 1292,1297 ****
--- 1311,1317 ----
  
    /* Set flag indicating whether the current PC is in a Thumb function. */
    caller_is_thumb = arm_pc_is_thumb (read_pc ());
+   arm_set_call_dummy_breakpoint_offset ();
  
    /* If the target function is Thumb, set the low bit of the function
       address.  And if the CPU is currently in ARM mode, patch the
*************** arm_fix_call_dummy (char *dummy, CORE_AD
*** 1326,1347 ****
    write_register (4, fun);
  }
  
- /* Return the offset in the call dummy of the instruction that needs
-    to have a breakpoint placed on it.  This is the offset of the 'swi
-    24' instruction, which is no longer actually used, but simply acts
-    as a place-holder now.
- 
-    This implements the CALL_DUMMY_BREAK_OFFSET macro.  */
- 
- int
- arm_call_dummy_breakpoint_offset (void)
- {
-   if (caller_is_thumb)
-     return 4;
-   else
-     return 8;
- }
- 
  /* Note: ScottB
  
     This function does not support passing parameters using the FPA
--- 1346,1351 ----
*************** arm_gdbarch_init (struct gdbarch_info in
*** 2801,2806 ****
--- 2805,2813 ----
    /* Call dummy code.  */
    set_gdbarch_call_dummy_location (gdbarch, ON_STACK);
    set_gdbarch_call_dummy_breakpoint_offset_p (gdbarch, 1);
+   /* We have to give this a value now, even though we will re-set it 
+      during each call to arm_fix_call_dummy.  */
+   set_gdbarch_call_dummy_breakpoint_offset (gdbarch, 8);
    set_gdbarch_call_dummy_p (gdbarch, 1);
    set_gdbarch_call_dummy_stack_adjust_p (gdbarch, 0);
  
Index: config/arm/tm-arm.h
===================================================================
RCS file: /cvs/src/src/gdb/config/arm/tm-arm.h,v
retrieving revision 1.31
diff -p -r1.31 tm-arm.h
*** tm-arm.h	2002/02/18 15:04:19	1.31
--- tm-arm.h	2002/02/18 16:38:46
***************
*** 30,38 ****
     lexical context are listed after the beginning LBRAC instead of
     before in the executables list of symbols.  */
  #define VARIABLES_INSIDE_BLOCK(desc, gcc_p) (!(gcc_p))
- \f
- /* XXX This is NOT multi-arch compatible.  */
- #define CALL_DUMMY_BREAKPOINT_OFFSET arm_call_dummy_breakpoint_offset()
- extern int arm_call_dummy_breakpoint_offset (void);
  
  #endif /* TM_ARM_H */
--- 30,34 ----

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: PATCH ARM support a multi-arch compatible way of doing call dummys
  2002-02-18  8:47 PATCH ARM support a multi-arch compatible way of doing call dummys Richard Earnshaw
@ 2002-02-18  9:53 ` Andrew Cagney
  0 siblings, 0 replies; 2+ messages in thread
From: Andrew Cagney @ 2002-02-18  9:53 UTC (permalink / raw)
  To: Richard.Earnshaw; +Cc: gdb-patches

> +    XXX Tweeking current_gdbarch is not an optimal solution, but the
> +    call to arm_fix_call_dummy is immediately followed by a call to
> +    run_stack_dummy, which is the only function where
> +    call_dummy_breakpoint_offset is actually used.  */
> 

Just an aside, a fairly standard GDB convention is:

	FIXME: cagney/2002-02-18: ..
or 
NOTE: cagney/2002-02-18: ...

so that N years down the track people have a rough idea as to the age 
and origins of a comment are.  (The fixme isn't an indication of who 
intends fixing it :-)

enjoy,
Andrew



^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2002-02-18 17:53 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-02-18  8:47 PATCH ARM support a multi-arch compatible way of doing call dummys Richard Earnshaw
2002-02-18  9:53 ` Andrew Cagney

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox