Root/avrdude/patches/low-addr.patch

1Index: avrdude-5.11.1/avrpart.h
2===================================================================
3--- avrdude-5.11.1.orig/avrpart.h 2012-07-22 10:29:39.275651769 -0300
4+++ avrdude-5.11.1/avrpart.h 2012-07-22 10:29:41.387721159 -0300
5@@ -186,6 +186,8 @@
6 
7   unsigned char * buf; /* pointer to memory buffer */
8   OPCODE * op[AVR_OP_MAX]; /* opcodes */
9+
10+ int low_addr; /* lowest address used, in bytes */
11 } AVRMEM;
12 
13 #ifdef __cplusplus
14Index: avrdude-5.11.1/config_gram.y
15===================================================================
16--- avrdude-5.11.1.orig/config_gram.y 2012-07-22 10:29:39.287652163 -0300
17+++ avrdude-5.11.1/config_gram.y 2012-07-22 10:29:41.391721290 -0300
18@@ -1297,6 +1297,7 @@
19     }
20     mem_specs
21     {
22+ current_mem->low_addr = current_mem->size;
23       ladd(current_part->mem, current_mem);
24       current_mem = NULL;
25     } |
26Index: avrdude-5.11.1/fileio.c
27===================================================================
28--- avrdude-5.11.1.orig/fileio.c 2012-07-22 10:29:39.263651374 -0300
29+++ avrdude-5.11.1/fileio.c 2012-07-22 10:29:41.391721290 -0300
30@@ -52,7 +52,7 @@
31              char * outfile, FILE * outf);
32 
33 static int ihex2b(char * infile, FILE * inf,
34- unsigned char * outbuf, int bufsize);
35+ unsigned char * outbuf, int bufsize, int *low_addr);
36 
37 static int b2srec(unsigned char * inbuf, int bufsize,
38            int recsize, int startaddr,
39@@ -69,7 +69,8 @@
40                   char * filename, FILE * f, unsigned char * buf, int size);
41 
42 static int fileio_ihex(struct fioparms * fio,
43- char * filename, FILE * f, unsigned char * buf, int size);
44+ char * filename, FILE * f, unsigned char * buf, int size,
45+ int *low_addr);
46 
47 static int fileio_srec(struct fioparms * fio,
48                   char * filename, FILE * f, unsigned char * buf, int size);
49@@ -262,7 +263,7 @@
50  *
51  * */
52 static int ihex2b(char * infile, FILE * inf,
53- unsigned char * outbuf, int bufsize)
54+ unsigned char * outbuf, int bufsize, int *low_addr)
55 {
56   char buffer [ MAX_LINE_LEN ];
57   unsigned char * buf;
58@@ -271,7 +272,7 @@
59   int lineno;
60   int len;
61   struct ihexrec ihex;
62- int rc;
63+ int rc, lowest;
64 
65   lineno = 0;
66   buf = outbuf;
67@@ -279,6 +280,7 @@
68   maxaddr = 0;
69   offsetaddr = 0;
70   nextaddr = 0;
71+ lowest = bufsize;
72 
73   while (fgets((char *)buffer,MAX_LINE_LEN,inf)!=NULL) {
74     lineno++;
75@@ -313,11 +315,14 @@
76         for (i=0; i<ihex.reclen; i++) {
77           buf[nextaddr+i-offsetaddr] = ihex.data[i];
78         }
79+ if (nextaddr-offsetaddr < lowest)
80+ lowest = nextaddr-offsetaddr;
81         if (nextaddr+ihex.reclen > maxaddr)
82           maxaddr = nextaddr+ihex.reclen;
83         break;
84 
85       case 1: /* end of file record */
86+ *low_addr = lowest;
87         return maxaddr-offsetaddr;
88         break;
89 
90@@ -354,6 +359,7 @@
91           "file \"%s\"\n",
92           progname, infile);
93 
94+ *low_addr = lowest;
95   return maxaddr-offsetaddr;
96 }
97 
98@@ -777,7 +783,8 @@
99 
100 
101 static int fileio_ihex(struct fioparms * fio,
102- char * filename, FILE * f, unsigned char * buf, int size)
103+ char * filename, FILE * f, unsigned char * buf, int size,
104+ int *low_addr)
105 {
106   int rc;
107 
108@@ -790,7 +797,7 @@
109       break;
110 
111     case FIO_READ:
112- rc = ihex2b(filename, f, buf, size);
113+ rc = ihex2b(filename, f, buf, size, low_addr);
114       if (rc < 0)
115         return -1;
116       break;
117@@ -1021,6 +1028,7 @@
118   struct fioparms fio;
119   AVRMEM * mem;
120   int using_stdio;
121+ int low_addr = 0;
122 
123   mem = avr_locate_mem(p, memtype);
124   if (mem == NULL) {
125@@ -1113,7 +1121,7 @@
126 
127   switch (format) {
128     case FMT_IHEX:
129- rc = fileio_ihex(&fio, fname, f, buf, size);
130+ rc = fileio_ihex(&fio, fname, f, buf, size, &low_addr);
131       break;
132 
133     case FMT_SREC:
134@@ -1149,6 +1157,8 @@
135        */
136       rc = avr_mem_hiaddr(mem);
137     }
138+ if (op == FIO_READ && low_addr < mem->low_addr)
139+ mem->low_addr = low_addr;
140   }
141   if (format != FMT_IMM && !using_stdio) {
142     fclose(f);
143

Archive Download this file

Branches:
master



interactive