]> git.proxmox.com Git - mirror_qemu.git/commitdiff
win32 port (Kazu)
authorbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>
Sun, 4 Apr 2004 12:56:28 +0000 (12:56 +0000)
committerbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>
Sun, 4 Apr 2004 12:56:28 +0000 (12:56 +0000)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@702 c046a42c-6fe2-441c-8c8c-71466251a162

dyngen.c
vl.c
vl.h

index b10909e78d1a26cde79ea8cc750c0fd8272c5366..ff441caec0f83bb59d664521c8f94fc2a6385aba 100644 (file)
--- 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 72238efcdbb855988b68e07b2189c2e394d0706a..3af8a0ee70b35781013bfc39cdeec34fb267d1d9 100644 (file)
--- 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 afec99f88b2ef714fa7ccce3ac3dfdfdbb77ae6c..65c8f08aee485031a73d6f52953ce7d6083e195f 100644 (file)
--- 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);