aboutsummaryrefslogtreecommitdiff
path: root/bootloaders/optiboot/optiboot_pro_20mhz.lst
diff options
context:
space:
mode:
authorWestfW <westfw@gmail.com>2011-06-10 17:47:47 -0700
committerWestfW <westfw@gmail.com>2011-06-10 17:47:47 -0700
commit2a83ee55b38c81df04d7d3b83d6bf68ed72936e4 (patch)
tree053e124f7d6352bd29c115d245be75a2270a5d3a /bootloaders/optiboot/optiboot_pro_20mhz.lst
parent64be388f3eb3ce662000d7c14e44047458f55875 (diff)
Add a version number to the optiboot source and binary.
http://code.google.com/p/arduino/issues/detail?id=554 end of flash memory where they can be read (at least in theory) by device programmers, hex-file examination, or application programs. This is done by putting the version number in a separate section (".version"), and using linker/objcopy magic to locate that section as appropriate for the target chip. (See http://lists.gnu.org/archive/html/avr-gcc-list/2011-02/msg00016.html for some discussion on the details.) Start the version at 4.1 (the last "packaged" version of optiboot was called version 3, so the "top of source" would be 4.0, and adding the version number makes 4.1) Refactor LDSECTION in the Makefile to LDSECTIONS so that multiple section start addresses can be defined. Change the _isp makefile definitions to make the bootloader section readable (but not writable) by the application section. (This would need to be done elsewhere as well to handle all bootloader programming techniques. Notably Arduino's boards.txt Note that this change does not change the "code" portion of optiboot at all. The only diffs in the .hex files are the added version word at the end of flash memory.
Diffstat (limited to 'bootloaders/optiboot/optiboot_pro_20mhz.lst')
-rw-r--r--bootloaders/optiboot/optiboot_pro_20mhz.lst28
1 files changed, 15 insertions, 13 deletions
diff --git a/bootloaders/optiboot/optiboot_pro_20mhz.lst b/bootloaders/optiboot/optiboot_pro_20mhz.lst
index 1868d16..ba7b6b6 100644
--- a/bootloaders/optiboot/optiboot_pro_20mhz.lst
+++ b/bootloaders/optiboot/optiboot_pro_20mhz.lst
@@ -5,23 +5,25 @@ Sections:
Idx Name Size VMA LMA File off Algn
0 .text 000001fc 00003e00 00003e00 00000054 2**1
CONTENTS, ALLOC, LOAD, READONLY, CODE
- 1 .debug_aranges 00000028 00000000 00000000 00000250 2**0
+ 1 .version 00000002 00003ffe 00003ffe 00000250 2**0
+ CONTENTS, READONLY
+ 2 .debug_aranges 00000028 00000000 00000000 00000252 2**0
CONTENTS, READONLY, DEBUGGING
- 2 .debug_pubnames 0000006a 00000000 00000000 00000278 2**0
+ 3 .debug_pubnames 0000006a 00000000 00000000 0000027a 2**0
CONTENTS, READONLY, DEBUGGING
- 3 .debug_info 00000284 00000000 00000000 000002e2 2**0
+ 4 .debug_info 00000285 00000000 00000000 000002e4 2**0
CONTENTS, READONLY, DEBUGGING
- 4 .debug_abbrev 000001ae 00000000 00000000 00000566 2**0
+ 5 .debug_abbrev 0000019f 00000000 00000000 00000569 2**0
CONTENTS, READONLY, DEBUGGING
- 5 .debug_line 00000450 00000000 00000000 00000714 2**0
+ 6 .debug_line 00000453 00000000 00000000 00000708 2**0
CONTENTS, READONLY, DEBUGGING
- 6 .debug_frame 00000090 00000000 00000000 00000b64 2**2
+ 7 .debug_frame 00000090 00000000 00000000 00000b5c 2**2
CONTENTS, READONLY, DEBUGGING
- 7 .debug_str 00000141 00000000 00000000 00000bf4 2**0
+ 8 .debug_str 00000141 00000000 00000000 00000bec 2**0
CONTENTS, READONLY, DEBUGGING
- 8 .debug_loc 000001e1 00000000 00000000 00000d35 2**0
+ 9 .debug_loc 000001e1 00000000 00000000 00000d2d 2**0
CONTENTS, READONLY, DEBUGGING
- 9 .debug_ranges 00000068 00000000 00000000 00000f16 2**0
+ 10 .debug_ranges 00000068 00000000 00000000 00000f0e 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
@@ -135,7 +137,7 @@ void watchdogReset() {
__boot_page_fill_short((uint16_t)(void*)addrPtr,a);
addrPtr += 2;
} while (--ch);
-
+
// Write from programming buffer
__boot_page_write_short((uint16_t)(void*)address);
3e50: a5 e0 ldi r26, 0x05 ; 5
@@ -249,7 +251,7 @@ void watchdogReset() {
3ec6: e8 95 spm
3ec8: c0 e0 ldi r28, 0x00 ; 0
3eca: d1 e0 ldi r29, 0x01 ; 1
-
+
// While that is going on, read in page contents
bufPtr = buff;
do *bufPtr++ = getch();
@@ -278,7 +280,7 @@ void watchdogReset() {
// Read command terminator, start reply
verifySpace();
3ef4: 75 d0 rcall .+234 ; 0x3fe0 <verifySpace>
-
+
// If only a partial page is to be programmed, the erase might not be complete.
// So check that here
boot_spm_busy_wait();
@@ -336,7 +338,7 @@ int main(void) {
3f2e: a0 38 cpi r26, 0x80 ; 128
3f30: bf 07 cpc r27, r31
3f32: 51 f7 brne .-44 ; 0x3f08 <main+0x108>
-
+
// Write from programming buffer
__boot_page_write_short((uint16_t)(void*)address);
3f34: e0 91 00 02 lds r30, 0x0200