diff options
author | Koen Kooi <koen@openembedded.org> | 2005-09-22 20:08:44 +0000 |
---|---|---|
committer | OpenEmbedded Project <openembedded-devel@lists.openembedded.org> | 2005-09-22 20:08:44 +0000 |
commit | a2e5511b5d1eb3faffb47e92fa11136df715aaff (patch) | |
tree | 83af1de1bc097949bff7e565897f3158c11fe54c /packages/gdb/gdb-6.3/thumb-breakpoint.patch | |
parent | 621435e9d05ed716c1261bc3851fc85d60586b0f (diff) | |
parent | 153ada05e0051228c641736634c255bc18962e81 (diff) |
merge of 3918e04d271278074bcf12fe4c07ea259cbc92b0
and ba30bfad08ba6c051b42fb8b245a2323db4719d9
Diffstat (limited to 'packages/gdb/gdb-6.3/thumb-breakpoint.patch')
-rw-r--r-- | packages/gdb/gdb-6.3/thumb-breakpoint.patch | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/packages/gdb/gdb-6.3/thumb-breakpoint.patch b/packages/gdb/gdb-6.3/thumb-breakpoint.patch new file mode 100644 index 0000000000..cd678b0b93 --- /dev/null +++ b/packages/gdb/gdb-6.3/thumb-breakpoint.patch @@ -0,0 +1,41 @@ +# This patch causes gdb to use thumb swi(1) on linux for a thumb breakpoint +# rather than the default, swi(254). To stand any chance of making this +# work a linux kernel patch is required to read the swi number on a thumb +# swi. In the absence of this patch gdb will effectively insert a random +# swi because the kernel reads the swi number from r7... +# +--- gdb-6.3/gdb/arm-linux-tdep.c.orig 2005-09-19 13:55:16.486702426 -0700 ++++ gdb-6.3/gdb/arm-linux-tdep.c 2005-09-19 13:57:44.127992906 -0700 +@@ -44,6 +44,12 @@ + + static const char arm_linux_arm_be_breakpoint[] = { 0xef, 0x9f, 0x00, 0x01 }; + ++/* The following requires the corresponding patch to the kernel to recognise ++ * this SWI as a breakpoint. ++ */ ++static const char arm_linux_thumb_le_breakpoint[] = {0x01, 0xdf}; ++static const char arm_linux_thumb_be_breakpoint[] = {0xdf, 0x01}; ++ + /* Description of the longjmp buffer. */ + #define ARM_LINUX_JB_ELEMENT_SIZE INT_REGISTER_SIZE + #define ARM_LINUX_JB_PC 21 +@@ -463,10 +469,17 @@ + + tdep->lowest_pc = 0x8000; + if (info.byte_order == BFD_ENDIAN_BIG) +- tdep->arm_breakpoint = arm_linux_arm_be_breakpoint; ++ { ++ tdep->arm_breakpoint = arm_linux_arm_be_breakpoint; ++ tdep->thumb_breakpoint = arm_linux_thumb_be_breakpoint; ++ } + else +- tdep->arm_breakpoint = arm_linux_arm_le_breakpoint; ++ { ++ tdep->arm_breakpoint = arm_linux_arm_le_breakpoint; ++ tdep->thumb_breakpoint = arm_linux_thumb_le_breakpoint; ++ } + tdep->arm_breakpoint_size = sizeof (arm_linux_arm_le_breakpoint); ++ tdep->thumb_breakpoint_size = sizeof (arm_linux_thumb_le_breakpoint); + + tdep->fp_model = ARM_FLOAT_FPA; + |