aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dyngen.c13
-rw-r--r--vl.c24
-rw-r--r--vl.h5
3 files changed, 34 insertions, 8 deletions
diff --git a/dyngen.c b/dyngen.c
index b10909e78d..ff441caec0 100644
--- a/dyngen.c
+++ b/dyngen.c
@@ -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:
diff --git a/vl.c b/vl.c
index 72238efcdb..3af8a0ee70 100644
--- a/vl.c
+++ b/vl.c
@@ -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;
}
diff --git a/vl.h b/vl.h
index afec99f88b..65c8f08aee 100644
--- a/vl.h
+++ b/vl.h
@@ -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);