Skip to content

Commit

Permalink
win32 port (initial patch by kazu)
Browse files Browse the repository at this point in the history
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@692 c046a42c-6fe2-441c-8c8c-71466251a162
  • Loading branch information
bellard committed Mar 31, 2004
1 parent bb27c19 commit 67b915a
Show file tree
Hide file tree
Showing 33 changed files with 1,154 additions and 757 deletions.
1 change: 1 addition & 0 deletions Changelog
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ version 0.5.3:
- VM save/restore commands
- new timer API
- more precise RTC emulation (periodic timers + time updates)
- Win32 port (initial patch by Kazu)

version 0.5.2:

Expand Down
11 changes: 8 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,20 +1,25 @@
include config-host.mak

CFLAGS=-Wall -O2 -g
ifdef CONFIG_WIN32
CFLAGS+=-fpack-struct
endif
LDFLAGS=-g
LIBS=
DEFINES+=-D_GNU_SOURCE
ifndef CONFIG_WIN32
TOOLS=qemu-mkcow
endif

all: dyngen $(TOOLS) qemu-doc.html qemu.1
all: dyngen$(EXESUF) $(TOOLS) qemu-doc.html qemu.1
for d in $(TARGET_DIRS); do \
make -C $$d $@ || exit 1 ; \
done

qemu-mkcow: qemu-mkcow.o
$(HOST_CC) -o $@ $^ $(LIBS)

dyngen: dyngen.o
dyngen$(EXESUF): dyngen.o
$(HOST_CC) -o $@ $^ $(LIBS)

%.o: %.c
Expand All @@ -23,7 +28,7 @@ dyngen: dyngen.o
clean:
# avoid old build problems by removing potentially incorrect old files
rm -f config.mak config.h op-i386.h opc-i386.h gen-op-i386.h op-arm.h opc-arm.h gen-op-arm.h
rm -f *.o *.a $(TOOLS) dyngen TAGS qemu.pod
rm -f *.o *.a $(TOOLS) dyngen$(EXESUF) TAGS qemu.pod
make -C tests clean
for d in $(TARGET_DIRS); do \
make -C $$d $@ || exit 1 ; \
Expand Down
12 changes: 9 additions & 3 deletions Makefile.target
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,12 @@ CFLAGS=-Wall -O2 -g
LDFLAGS=-g
LIBS=
HELPER_CFLAGS=$(CFLAGS)
DYNGEN=../dyngen
DYNGEN=../dyngen$(EXESUF)
# user emulator name
QEMU_USER=qemu-$(TARGET_ARCH)
# system emulator name
ifdef CONFIG_SOFTMMU
QEMU_SYSTEM=qemu
QEMU_SYSTEM=qemu$(EXESUF)
else
QEMU_SYSTEM=qemu-fast
endif
Expand Down Expand Up @@ -146,6 +146,9 @@ endif

DEFINES+=-D_GNU_SOURCE
LIBS+=-lm
ifdef CONFIG_WIN32
LIBS+=-lwinmm
endif

# profiling code
ifdef TARGET_GPROF
Expand Down Expand Up @@ -219,9 +222,12 @@ ifeq ($(ARCH),alpha)
endif

# must use static linking to avoid leaving stuff in virtual address space
VL_OBJS=vl.o osdep.o block.o monitor.o gdbstub.o \
VL_OBJS=vl.o osdep.o block.o monitor.o \
ide.o ne2000.o pckbd.o vga.o sb16.o dma.o oss.o \
fdc.o mc146818rtc.o serial.o i8259.o i8254.o pc.o
ifdef CONFIG_GDBSTUB
VL_OBJS+=gdbstub.o
endif
ifeq ($(TARGET_ARCH), ppc)
VL_OBJS+= hw.o
endif
Expand Down
5 changes: 4 additions & 1 deletion TODO
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
short term:
----------
- handle fast timers + add explicit clocks
- OS/2 install bug
- win 95 install bug
- handle Self Modifying Code even if modifying current TB (BE OS 5 install)
- physical memory cache (reduce qemu-fast address space size to about 32 MB)
- better code fetch
- XP security bug
- handle Self Modifying Code even if modifying current TB (BE OS 5 install)
- cycle counter for all archs
- TLB code protection support for PPC
- add sysenter/sysexit and fxsr for L4 pistachio 686
Expand Down
54 changes: 27 additions & 27 deletions block.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,29 +21,11 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include <stdlib.h>
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
#include <getopt.h>
#include <inttypes.h>
#include <unistd.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <signal.h>
#include <time.h>
#include <sys/time.h>
#include <malloc.h>
#include <termios.h>
#include <sys/poll.h>
#include <errno.h>
#include <sys/wait.h>
#include <netinet/in.h>

#include "vl.h"

#define NO_THUNK_TYPE_SIZE
#include "thunk.h"
#ifndef _WIN32
#include <sys/mman.h>
#endif

#include "cow.h"

Expand Down Expand Up @@ -97,11 +79,14 @@ BlockDriverState *bdrv_new(const char *device_name)

int bdrv_open(BlockDriverState *bs, const char *filename, int snapshot)
{
int fd, cow_fd;
int fd;
int64_t size;
char template[] = "/tmp/vl.XXXXXX";
struct cow_header_v2 cow_header;
#ifndef _WIN32
char template[] = "/tmp/vl.XXXXXX";
int cow_fd;
struct stat st;
#endif

bs->read_only = 0;
bs->fd = -1;
Expand All @@ -110,10 +95,18 @@ int bdrv_open(BlockDriverState *bs, const char *filename, int snapshot)
strcpy(bs->filename, filename);

/* open standard HD image */
#ifdef _WIN32
fd = open(filename, O_RDWR | O_BINARY);
#else
fd = open(filename, O_RDWR | O_LARGEFILE);
#endif
if (fd < 0) {
/* read only image on disk */
#ifdef _WIN32
fd = open(filename, O_RDONLY | O_BINARY);
#else
fd = open(filename, O_RDONLY | O_LARGEFILE);
#endif
if (fd < 0) {
perror(filename);
goto fail;
Expand All @@ -128,8 +121,9 @@ int bdrv_open(BlockDriverState *bs, const char *filename, int snapshot)
fprintf(stderr, "%s: could not read header\n", filename);
goto fail;
}
if (cow_header.magic == htonl(COW_MAGIC) &&
cow_header.version == htonl(COW_VERSION)) {
#ifndef _WIN32
if (be32_to_cpu(cow_header.magic) == COW_MAGIC &&
be32_to_cpu(cow_header.version) == COW_VERSION) {
/* cow image found */
size = cow_header.size;
#ifndef WORDS_BIGENDIAN
Expand All @@ -144,7 +138,7 @@ int bdrv_open(BlockDriverState *bs, const char *filename, int snapshot)
fprintf(stderr, "%s: could not find original disk image '%s'\n", filename, cow_header.backing_file);
goto fail;
}
if (st.st_mtime != htonl(cow_header.mtime)) {
if (st.st_mtime != be32_to_cpu(cow_header.mtime)) {
fprintf(stderr, "%s: original raw disk image '%s' does not match saved timestamp\n", filename, cow_header.backing_file);
goto fail;
}
Expand All @@ -164,13 +158,16 @@ int bdrv_open(BlockDriverState *bs, const char *filename, int snapshot)
bs->cow_bitmap = bs->cow_bitmap_addr + sizeof(cow_header);
bs->cow_sectors_offset = (bs->cow_bitmap_size + 511) & ~511;
snapshot = 0;
} else {
} else
#endif
{
/* standard raw image */
size = lseek64(fd, 0, SEEK_END);
bs->total_sectors = size / 512;
bs->fd = fd;
}

#ifndef _WIN32
if (snapshot) {
/* create a temporary COW file */
cow_fd = mkstemp(template);
Expand All @@ -190,6 +187,7 @@ int bdrv_open(BlockDriverState *bs, const char *filename, int snapshot)
bs->cow_bitmap = bs->cow_bitmap_addr;
bs->cow_sectors_offset = 0;
}
#endif

bs->inserted = 1;

Expand All @@ -206,9 +204,11 @@ int bdrv_open(BlockDriverState *bs, const char *filename, int snapshot)
void bdrv_close(BlockDriverState *bs)
{
if (bs->inserted) {
#ifndef _WIN32
/* we unmap the mapping so that it is written to the COW file */
if (bs->cow_bitmap_addr)
munmap(bs->cow_bitmap_addr, bs->cow_bitmap_size);
#endif
if (bs->cow_fd >= 0)
close(bs->cow_fd);
if (bs->fd >= 0)
Expand Down
30 changes: 29 additions & 1 deletion configure
Original file line number Diff line number Diff line change
Expand Up @@ -68,10 +68,16 @@ case "$cpu" in
esac
gprof="no"
bigendian="no"
mingw32="no"
EXESUF=""
gdbstub="yes"

# OS specific
targetos=`uname -s`
case $targetos in
MINGW32*)
mingw32="yes"
;;
*) ;;
esac

Expand Down Expand Up @@ -136,6 +142,8 @@ for opt do
;;
--disable-sdl) sdl="no"
;;
--enable-mingw32) mingw32="yes" ; cross_prefix="i386-mingw32-"
;;
esac
done

Expand All @@ -148,6 +156,14 @@ cc="${cross_prefix}${cc}"
ar="${cross_prefix}${ar}"
strip="${cross_prefix}${strip}"

if test "$mingw32" = "yes" ; then
host_cc="$cc"
target_list="i386-softmmu"
prefix="/c/Program Files/Qemu"
EXESUF=".exe"
gdbstub="no"
fi

if test -z "$cross_prefix" ; then

# ---
Expand Down Expand Up @@ -206,6 +222,7 @@ echo " --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]"
echo " --cc=CC use C compiler CC [$cc]"
echo " --make=MAKE use specified make [$make]"
echo " --static enable static build [$static]"
echo " --enable-mingw32 enable Win32 cross compilation with mingw32"
echo ""
echo "NOTE: The object files are build at the place where configure is launched"
exit 1
Expand All @@ -227,6 +244,8 @@ echo "target list $target_list"
echo "gprof enabled $gprof"
echo "static build $static"
echo "SDL support $sdl"
echo "mingw32 support $mingw32"

if test $sdl_too_old = "yes"; then
echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support"
fi
Expand All @@ -253,6 +272,7 @@ echo "AR=$ar" >> $config_mak
echo "STRIP=$strip -s -R .comment -R .note" >> $config_mak
echo "CFLAGS=$CFLAGS" >> $config_mak
echo "LDFLAGS=$LDFLAGS" >> $config_mak
echo "EXESUF=$EXESUF" >> $config_mak
if test "$cpu" = "i386" ; then
echo "ARCH=i386" >> $config_mak
echo "#define HOST_I386 1" >> $config_h
Expand Down Expand Up @@ -294,7 +314,15 @@ if test "$bigendian" = "yes" ; then
echo "WORDS_BIGENDIAN=yes" >> $config_mak
echo "#define WORDS_BIGENDIAN 1" >> $config_h
fi
echo "#define HAVE_BYTESWAP_H 1" >> $config_h
if test "$mingw32" = "yes" ; then
echo "CONFIG_WIN32=yes" >> $config_mak
else
echo "#define HAVE_BYTESWAP_H 1" >> $config_h
fi
if test "$gdbstub" = "yes" ; then
echo "CONFIG_GDBSTUB=yes" >> $config_mak
echo "#define CONFIG_GDBSTUB 1" >> $config_h
fi
if test "$gprof" = "yes" ; then
echo "TARGET_GPROF=yes" >> $config_mak
echo "#define HAVE_GPROF 1" >> $config_h
Expand Down
4 changes: 4 additions & 0 deletions cpu-exec.c
Original file line number Diff line number Diff line change
Expand Up @@ -592,6 +592,8 @@ void cpu_x86_frstor(CPUX86State *s, uint8_t *ptr, int data32)

#endif /* TARGET_I386 */

#if !defined(CONFIG_SOFTMMU)

#undef EAX
#undef ECX
#undef EDX
Expand Down Expand Up @@ -925,3 +927,5 @@ int cpu_signal_handler(int host_signum, struct siginfo *info,
#error host CPU specific signal handler needed

#endif

#endif /* !defined(CONFIG_SOFTMMU) */
Loading

0 comments on commit 67b915a

Please sign in to comment.