Revision: 72053 http://trac.macports.org/changeset/72053 Author: jmr@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; +