diff options
-rw-r--r-- | dyngen.c | 13 | ||||
-rw-r--r-- | vl.c | 24 | ||||
-rw-r--r-- | vl.h | 5 |
3 files changed, 34 insertions, 8 deletions
@@ -1215,6 +1215,19 @@ void gen_code(const char *name, host_ulong offset, host_ulong size, error("unsupported i386 relocation (%d)", type); } #elif defined(CONFIG_FORMAT_COFF) + { + char *temp_name; + int j; + EXE_SYM *sym; + temp_name = get_sym_name(symtab + *(uint32_t *)(rel->r_reloc->r_symndx)); + if (!strcmp(temp_name, ".data")) { + for (j = 0, sym = symtab; j < nb_syms; j++, sym++) { + if (strstart(sym->st_name, sym_name, NULL)) { + addend -= sym->st_value; + } + } + } + } type = rel->r_type; switch(type) { case DIR32: @@ -238,7 +238,7 @@ char *pstrcat(char *buf, int buf_size, const char *s) int load_image(const char *filename, uint8_t *addr) { int fd, size; - fd = open(filename, O_RDONLY); + fd = open(filename, O_RDONLY | O_BINARY); if (fd < 0) return -1; size = lseek(fd, 0, SEEK_END); @@ -453,7 +453,9 @@ QEMUClock *rt_clock; QEMUClock *vm_clock; static QEMUTimer *active_timers[2]; -#ifndef _WIN32 +#ifdef _WIN32 +static MMRESULT timerID; +#else /* frequency of the times() clock tick */ static int timer_freq; #endif @@ -653,11 +655,11 @@ static void init_timers(void) #ifdef _WIN32 { int count=0; - MMRESULT timerID = timeSetEvent(10, // interval (ms) - 0, // resolution - host_alarm_handler, // function - (DWORD)&count, // user parameter - TIME_PERIODIC | TIME_CALLBACK_FUNCTION); + timerID = timeSetEvent(10, // interval (ms) + 0, // resolution + host_alarm_handler, // function + (DWORD)&count, // user parameter + TIME_PERIODIC | TIME_CALLBACK_FUNCTION); if( !timerID ) { perror("failed timer alarm"); exit(1); @@ -695,6 +697,13 @@ static void init_timers(void) #endif } +void quit_timers(void) +{ +#ifdef _WIN32 + timeKillEvent(timerID); +#endif +} + /***********************************************************/ /* serial device */ @@ -2136,5 +2145,6 @@ int main(int argc, char **argv) } term_init(); main_loop(); + quit_timers(); return 0; } @@ -39,6 +39,9 @@ #ifndef O_LARGEFILE #define O_LARGEFILE 0 #endif +#ifndef O_BINARY +#define O_BINARY 0 +#endif #ifdef _WIN32 #define lseek64 lseek @@ -447,7 +450,7 @@ void pc_init(int ram_size, int vga_ram_size, int boot_device, /* monitor.c */ void monitor_init(void); -void term_printf(const char *fmt, ...); +void term_printf(const char *fmt, ...) __attribute__ ((__format__ (__printf__, 1, 2))); void term_flush(void); void term_print_help(void); |