aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Earnshaw <richard.earnshaw@arm.com>2002-01-30 16:35:51 +0000
committerRichard Earnshaw <richard.earnshaw@arm.com>2002-01-30 16:35:51 +0000
commit6eb69eab2909778dc96bdb5dbb83d7756bee4601 (patch)
treeb4c7f14bb0afa196cafda483cab452d2b0378f24
parentca09e32bb218843d120213458d387c84c185a187 (diff)
downloadbinutils-6eb69eab2909778dc96bdb5dbb83d7756bee4601.zip
binutils-6eb69eab2909778dc96bdb5dbb83d7756bee4601.tar.gz
binutils-6eb69eab2909778dc96bdb5dbb83d7756bee4601.tar.bz2
* arm-tdep.c (arm_call_dummy_words): Define.
* arm-linux-tdep.c (arm_linux_call_dummy_words): Define. * config/arm/tm-arm.h (CALL_DUMMY_P): Define. (CALL_DUMMY_WORDS): Define. (arm_call_dummy_words): Declare. * config/arm/tm-linux.h (CALL_DUMMY_WORDS): Define. (arm_linux_call_dummy_words): Declare.
-rw-r--r--gdb/ChangeLog10
-rw-r--r--gdb/arm-linux-tdep.c14
-rw-r--r--gdb/arm-tdep.c14
-rw-r--r--gdb/config/arm/tm-arm.h10
-rw-r--r--gdb/config/arm/tm-linux.h14
5 files changed, 45 insertions, 17 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 83b3900..fadb65d 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,13 @@
+2002-01-30 Richard Earnshaw <rearnsha@arm.com>
+
+ * arm-tdep.c (arm_call_dummy_words): Define.
+ * arm-linux-tdep.c (arm_linux_call_dummy_words): Define.
+ * config/arm/tm-arm.h (CALL_DUMMY_P): Define.
+ (CALL_DUMMY_WORDS): Define.
+ (arm_call_dummy_words): Declare.
+ * config/arm/tm-linux.h (CALL_DUMMY_WORDS): Define.
+ (arm_linux_call_dummy_words): Declare.
+
2002-01-30 Andreas Schwab <schwab@suse.de>
* m68klinux-nat.c: Fix last change to use regcache_collect
diff --git a/gdb/arm-linux-tdep.c b/gdb/arm-linux-tdep.c
index 6522730..ff896d9 100644
--- a/gdb/arm-linux-tdep.c
+++ b/gdb/arm-linux-tdep.c
@@ -33,6 +33,20 @@
#include "symfile.h"
#include "objfiles.h"
+/* CALL_DUMMY_WORDS:
+ This sequence of words is the instructions
+
+ mov lr, pc
+ mov pc, r4
+ swi bkpt_swi
+
+ Note this is 12 bytes. */
+
+LONGEST arm_linux_call_dummy_words[] =
+{
+ 0xe1a0e00f, 0xe1a0f004, 0xef9f001
+};
+
#ifdef GET_LONGJMP_TARGET
/* Figure out where the longjmp will land. We expect that we have
diff --git a/gdb/arm-tdep.c b/gdb/arm-tdep.c
index 15ae2d3..8fdb1e5 100644
--- a/gdb/arm-tdep.c
+++ b/gdb/arm-tdep.c
@@ -1249,6 +1249,20 @@ arm_push_dummy_frame (void)
write_register (SP_REGNUM, sp);
}
+/* CALL_DUMMY_WORDS:
+ This sequence of words is the instructions
+
+ mov lr,pc
+ mov pc,r4
+ illegal
+
+ Note this is 12 bytes. */
+
+LONGEST arm_call_dummy_words[] =
+{
+ 0xe1a0e00f, 0xe1a0f004, 0xe7ffdefe
+};
+
/* 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
diff --git a/gdb/config/arm/tm-arm.h b/gdb/config/arm/tm-arm.h
index 7316f92..941af91 100644
--- a/gdb/config/arm/tm-arm.h
+++ b/gdb/config/arm/tm-arm.h
@@ -406,15 +406,13 @@ void arm_pop_frame (void);
#define POP_FRAME arm_pop_frame ()
-/* This sequence of words is the instructions
+#define CALL_DUMMY_P (1)
- mov lr,pc
- mov pc,r4
- illegal
+#define CALL_DUMMY_WORDS arm_call_dummy_words
+extern LONGEST arm_call_dummy_words[];
- Note this is 12 bytes. */
+#define SIZEOF_CALL_DUMMY_WORDS (3 * sizeof (LONGEST))
-#define CALL_DUMMY {0xe1a0e00f, 0xe1a0f004, 0xe7ffdefe}
#define CALL_DUMMY_START_OFFSET 0 /* Start execution at beginning of dummy */
#define CALL_DUMMY_BREAKPOINT_OFFSET arm_call_dummy_breakpoint_offset()
diff --git a/gdb/config/arm/tm-linux.h b/gdb/config/arm/tm-linux.h
index 51036b6..c815c48 100644
--- a/gdb/config/arm/tm-linux.h
+++ b/gdb/config/arm/tm-linux.h
@@ -44,17 +44,9 @@ extern struct link_map_offsets *arm_linux_svr4_fetch_link_map_offsets (void);
#undef ARM_LE_BREAKPOINT
#define ARM_LE_BREAKPOINT {0x01,0x00,0x9f,0xef}
-/* This sequence of words used in the CALL_DUMMY are the following
- instructions:
-
- mov lr, pc
- mov pc, r4
- swi bkpt_swi
-
- Note this is 12 bytes. */
-
-#undef CALL_DUMMY
-#define CALL_DUMMY {0xe1a0e00f, 0xe1a0f004, 0xef9f001}
+#undef CALL_DUMMY_WORDS
+#define CALL_DUMMY_WORDS arm_linux_call_dummy_words
+extern LONGEST arm_linux_call_dummy_words[];
/* Extract from an array REGBUF containing the (raw) register state
a function return value of type TYPE, and copy that, in virtual format,