[72053] trunk/dports/cross/avr-gdb

jmr at macports.org jmr at macports.org
Fri Oct 1 08:26:31 PDT 2010


Revision: 72053
          http://trac.macports.org/changeset/72053
Author:   jmr at macports.org
Date:     2010-10-01 08:26:28 -0700 (Fri, 01 Oct 2010)
Log Message:
-----------
avr-gdb: commit patches (#26683)

Added Paths:
-----------
    trunk/dports/cross/avr-gdb/files/
    trunk/dports/cross/avr-gdb/files/patch-atmega256x-gdb
    trunk/dports/cross/avr-gdb/files/patch-gdb::remote.c

Added: trunk/dports/cross/avr-gdb/files/patch-atmega256x-gdb
===================================================================
--- trunk/dports/cross/avr-gdb/files/patch-atmega256x-gdb	                        (rev 0)
+++ trunk/dports/cross/avr-gdb/files/patch-atmega256x-gdb	2010-10-01 15:26:28 UTC (rev 72053)
@@ -0,0 +1,66 @@
+--- gdb/avr-tdep.c.orig	2008-01-11 14:19:59.000000000 +0100
++++ gdb/avr-tdep.c	2010-01-19 11:19:47.000000000 +0100
+@@ -181,8 +181,10 @@
+ 
+ struct gdbarch_tdep
+ {
+-  /* FIXME: TRoth: is there anything to put here? */
+-  int foo;
++  /* Size of the PC on the current AVR target.  This is equal 2 for
++     most AVRs except for the ATmega256x devices that have a 3-byte
++     PC. */
++  int pcsize;
+ };
+ 
+ /* Lookup the name of a register given it's number. */
+@@ -1030,22 +1032,29 @@
+                  on the stack is in big endian byte order, even though most
+                  everything else about the avr is little endian. Ick!  */
+ 
+-              /* FIXME: number of bytes read here will need updated for the
+-                 mega256 when it is available.  */
+-
++	      struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
+               ULONGEST pc;
+               unsigned char tmp;
+-              unsigned char buf[2];
++              unsigned char buf[3];
+ 
+-              read_memory (info->saved_regs[regnum].addr, buf, 2);
++              read_memory (info->saved_regs[regnum].addr, buf, tdep->pcsize);
+ 
+               /* Convert the PC read from memory as a big-endian to
+                  little-endian order. */
+-              tmp = buf[0];
+-              buf[0] = buf[1];
+-              buf[1] = tmp;
++	      if (tdep->pcsize == 2)
++		{
++		  tmp = buf[0];
++		  buf[0] = buf[1];
++		  buf[1] = tmp;
++		}
++	      else
++		{
++		  tmp = buf[0];
++		  buf[0] = buf[2];
++		  buf[2] = tmp;
++		}
+ 
+-              pc = (extract_unsigned_integer (buf, 2) * 2);
++              pc = (extract_unsigned_integer (buf, tdep->pcsize) * 2);
+               store_unsigned_integer
+ 		(bufferp, register_size (get_frame_arch (next_frame), regnum),
+ 		 pc);
+@@ -1280,6 +1289,11 @@
+     case bfd_mach_avr3:
+     case bfd_mach_avr4:
+     case bfd_mach_avr5:
++      tdep->pcsize = 2;
++      break;
++
++    case bfd_mach_avr6:
++      tdep->pcsize = 3;
+       break;
+     }
+ 

Added: trunk/dports/cross/avr-gdb/files/patch-gdb::remote.c
===================================================================
--- trunk/dports/cross/avr-gdb/files/patch-gdb::remote.c	                        (rev 0)
+++ trunk/dports/cross/avr-gdb/files/patch-gdb::remote.c	2010-10-01 15:26:28 UTC (rev 72053)
@@ -0,0 +1,14 @@
+--- gdb/remote.c~	2008-02-25 10:59:06.000000000 +0100
++++ gdb/remote.c	2010-01-19 11:30:19.000000000 +0100
+@@ -6102,8 +6102,9 @@
+ 				     [PACKET_qXfer_spu_write]);
+     }
+ 
+-  /* Only handle flash writes.  */
+-  if (writebuf != NULL)
++  /* Only handle flash writes.  Zero OFFSET and LENGTH is just a size
++   * query only, so proceed anyway. */
++  if (writebuf != NULL && !(offset == 0 && len == 0))
+     {
+       LONGEST xfered;
+ 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macports-changes/attachments/20101001/0139f7fc/attachment.html>


More information about the macports-changes mailing list