Skip to content

Commit 4f5a7fa

Browse files
committed
eeprom: honour offset
Use the real offset for the EEPROM data as specified in the hex or ELF rather than assume it always starts from zero. Signed-off-by: Paul Fertser <[email protected]>
1 parent 4fc6932 commit 4f5a7fa

File tree

3 files changed

+5
-1
lines changed

3 files changed

+5
-1
lines changed

simavr/sim/sim_elf.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ avr_load_firmware(
174174
if (firmware->eeprom && firmware->eesize) {
175175
avr_eeprom_desc_t d = {
176176
.ee = firmware->eeprom,
177-
.offset = 0,
177+
.offset = firmware->eeprombase,
178178
.size = firmware->eesize
179179
};
180180
avr_ioctl(avr, AVR_IOCTL_EEPROM_SET, &d);
@@ -502,6 +502,7 @@ elf_read_firmware(
502502
if (elf_handle_segment(fd, php, &firmware->eeprom, "EEPROM"))
503503
continue;
504504
firmware->eesize = php->p_filesz;
505+
firmware->eeprombase = php->p_vaddr - 0x820000;
505506
} else if (php->p_vaddr < 0x830000) {
506507
/* Fuses. */
507508

simavr/sim/sim_elf.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ typedef struct elf_firmware_t {
7171
uint32_t datasize;
7272
uint32_t bsssize;
7373
// read the .eeprom section of the elf, too
74+
uint32_t eeprombase;
7475
uint8_t * eeprom;
7576
uint32_t eesize;
7677
uint8_t * fuse;

simavr/sim/sim_hex.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,8 @@ sim_setup_firmware(const char * filename, uint32_t loadBase,
251251
}
252252
fp->eeprom = chunk[ci].data;
253253
fp->eesize = chunk[ci].size;
254+
fp->eeprombase = chunk[ci].baseaddr + loadBase -
255+
AVR_SEGMENT_OFFSET_EEPROM;
254256
printf("Load HEX eeprom %08x, %d\n",
255257
chunk[ci].baseaddr, fp->eesize);
256258
}

0 commit comments

Comments
 (0)