mingw: make simavr compilable with MinGW
[simavr] / simavr / sim / sim_elf.c
index fee7cb8..90afccf 100644 (file)
 #include "sim_vcd_file.h"
 #include "avr_eeprom.h"
 
+#ifndef O_BINARY
+#define O_BINARY 0
+#endif
+
 void avr_load_firmware(avr_t * avr, elf_firmware_t * firmware)
 {
        if (firmware->frequency)
@@ -175,7 +179,7 @@ int elf_read_firmware(const char * file, elf_firmware_t * firmware)
        Elf *elf = NULL;                       /* Our Elf pointer for libelf */
        int fd; // File Descriptor
 
-       if ((fd = open(file, O_RDONLY)) == -1 ||
+       if ((fd = open(file, O_RDONLY | O_BINARY)) == -1 ||
                        (read(fd, &elf_header, sizeof(elf_header))) < sizeof(elf_header)) {
                printf("could not read %s\n", file);
                perror(file);
@@ -280,16 +284,18 @@ int elf_read_firmware(const char * file, elf_firmware_t * firmware)
                        (data_text ? data_text->d_size : 0) +
                        (data_data ? data_data->d_size : 0);
        firmware->flash = malloc(firmware->flashsize);
+       
+       // using unsigned int for output, since there is no AVR with 4GB
        if (data_text) {
        //      hdump("code", data_text->d_buf, data_text->d_size);
                memcpy(firmware->flash + offset, data_text->d_buf, data_text->d_size);
                offset += data_text->d_size;
-               printf("Loaded %zu .text\n", data_text->d_size);
+               printf("Loaded %u .text\n", (unsigned int)data_text->d_size);
        }
        if (data_data) {
        //      hdump("data", data_data->d_buf, data_data->d_size);
                memcpy(firmware->flash + offset, data_data->d_buf, data_data->d_size);
-               printf("Loaded %zu .data\n", data_data->d_size);
+               printf("Loaded %u .data\n", (unsigned int)data_data->d_size);
                offset += data_data->d_size;
                firmware->datasize = data_data->d_size;
        }
@@ -297,7 +303,7 @@ int elf_read_firmware(const char * file, elf_firmware_t * firmware)
        //      hdump("eeprom", data_ee->d_buf, data_ee->d_size);
                firmware->eeprom = malloc(data_ee->d_size);
                memcpy(firmware->eeprom, data_ee->d_buf, data_ee->d_size);
-               printf("Loaded %zu .eeprom\n", data_ee->d_size);
+               printf("Loaded %u .eeprom\n", (unsigned int)data_ee->d_size);
                firmware->eesize = data_ee->d_size;
        }
 //     hdump("flash", avr->flash, offset);