This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[PATCH] Fix erroneous backtrace on avrxmega architectures.
- From: Pierre Langlois <pierre dot langlois at embecosm dot com>
- To: gdb-patches at sourceware dot org
- Date: Tue, 08 Apr 2014 15:30:30 +0100
- Subject: [PATCH] Fix erroneous backtrace on avrxmega architectures.
- Authentication-results: sourceware.org; auth=none
Hi all,
This patch adds avrxmega architectures to GDB, as given by bfd_architecture,
when setting call_length. This is the length of an address pushed on the stack
by a call instruction.
It was incorrect on avrxmega devices with more than 128k of memory (tested on
the atxmega256a3bu), which would break stack-unwinding.
Best,
Pierre
2014-04-08 Pierre Langlois <pierre.langlois@embecosm.com>
* avr-tdep.c (struct gdbarch_tdep): Mention avrxmega in the comment.
(avr_gdbarch_init): Add xmega architectures given by bfd_architecture
when setting the size of call_length.
---
gdb/avr-tdep.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/gdb/avr-tdep.c b/gdb/avr-tdep.c
index 7fb16d1..9b0bfaf 100644
--- a/gdb/avr-tdep.c
+++ b/gdb/avr-tdep.c
@@ -180,7 +180,7 @@ struct avr_unwind_cache
struct gdbarch_tdep
{
/* Number of bytes stored to the stack by call instructions.
- 2 bytes for avr1-5, 3 bytes for avr6. */
+ 2 bytes for avr1-5 and avrxmega1-5, 3 bytes for avr6 and avrxmega6-7. */
int call_length;
/* Type for void. */
@@ -1356,14 +1356,21 @@ avr_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
switch (info.bfd_arch_info->mach)
{
case bfd_mach_avr1:
+ case bfd_mach_avrxmega1:
case bfd_mach_avr2:
+ case bfd_mach_avrxmega2:
case bfd_mach_avr3:
+ case bfd_mach_avrxmega3:
case bfd_mach_avr4:
+ case bfd_mach_avrxmega4:
case bfd_mach_avr5:
+ case bfd_mach_avrxmega5:
default:
call_length = 2;
break;
case bfd_mach_avr6:
+ case bfd_mach_avrxmega6:
+ case bfd_mach_avrxmega7:
call_length = 3;
break;
}
--
1.9.1