[COMMITTED PATCH] Erroneous backtrace on AVR/avrxmega backported

Pierre Langlois pierre.langlois@embecosm.com
Fri Apr 11 09:34:00 GMT 2014


Hello,

I have just backported this patch for 7.7.1

https://sourceware.org/ml/gdb-patches/2014-04/msg00097.html
https://sourceware.org/ml/gdb-patches/2014-03/msg00425.html


Best,

Pierre

2014-04-11  Pierre Langlois  <pierre.langlois@embecosm.com>

	PR backtrace/16721
	PR backtrace/16832
	* 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.
	(avr_scan_prologue): Accept push r1 instruction for
	small stack allocation.
	* MAINTAINERS (Write After Approval): Add "Pierre Langlois".
---
 gdb/MAINTAINERS |  1 +
 gdb/avr-tdep.c  | 11 +++++++++--
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/gdb/MAINTAINERS b/gdb/MAINTAINERS
index ffd310b..c0297c1 100644
--- a/gdb/MAINTAINERS
+++ b/gdb/MAINTAINERS
@@ -546,6 +546,7 @@ Jim Kingdon					kingdon@panix.com
 Paul Koning					paul_koning@dell.com
 Jan Kratochvil					jan.kratochvil@redhat.com
 Maxim Kuvyrkov					maxim@kugelworks.com
+Pierre Langlois 				pierre.langlois@embecosm.com
 Jonathan Larmour				jifl@ecoscentric.com
 Jeff Law					law@redhat.com
 Justin Lebar					justin.lebar@gmail.com
diff --git a/gdb/avr-tdep.c b/gdb/avr-tdep.c
index cb330ea..1be9e7d 100644
--- a/gdb/avr-tdep.c
+++ b/gdb/avr-tdep.c
@@ -179,7 +179,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.  */
@@ -719,7 +719,7 @@ avr_scan_prologue (struct gdbarch *gdbarch, CORE_ADDR pc_beg, CORE_ADDR pc_end,
           info->size += gdbarch_tdep (gdbarch)->call_length;
           vpc += 2;
         }
-      else if (insn == 0x920f)  /* push r0 */
+      else if (insn == 0x920f || insn == 0x921f)  /* push r0 or push r1 */
         {
           info->size += 1;
           vpc += 2;
@@ -1355,14 +1355,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.8.3.1




More information about the Gdb-patches mailing list