diff options
Diffstat (limited to 'emulators/qemu')
| -rw-r--r-- | emulators/qemu/Makefile | 33 | ||||
| -rw-r--r-- | emulators/qemu/distinfo | 2 | ||||
| -rw-r--r-- | emulators/qemu/files/patch-aa | 365 | ||||
| -rw-r--r-- | emulators/qemu/files/patch-ab | 16 | ||||
| -rw-r--r-- | emulators/qemu/files/patch-ac | 10 | ||||
| -rw-r--r-- | emulators/qemu/files/patch-ba | 9 | ||||
| -rw-r--r-- | emulators/qemu/files/patch-bb | 11 | ||||
| -rw-r--r-- | emulators/qemu/files/patch-bc | 12 | ||||
| -rw-r--r-- | emulators/qemu/files/patch-bd | 10 | ||||
| -rw-r--r-- | emulators/qemu/files/patch-be | 12 | ||||
| -rw-r--r-- | emulators/qemu/files/patch-bf | 55 | ||||
| -rw-r--r-- | emulators/qemu/files/patch-bt | 94 | ||||
| -rw-r--r-- | emulators/qemu/pkg-descr | 16 | ||||
| -rw-r--r-- | emulators/qemu/pkg-message | 13 | ||||
| -rw-r--r-- | emulators/qemu/pkg-plist | 10 | 
15 files changed, 668 insertions, 0 deletions
diff --git a/emulators/qemu/Makefile b/emulators/qemu/Makefile new file mode 100644 index 000000000000..5ceb6aed8bfc --- /dev/null +++ b/emulators/qemu/Makefile @@ -0,0 +1,33 @@ +# New ports collection makefile for:	qemu +# Date created:			2004/05/31 +# Whom:				Juergen Lock <nox@jelal.kn-bremen.de> +# +# $FreeBSD$ +# + +PORTNAME=	qemu +PORTVERSION=	0.5.5.s.20040530 +CATEGORIES=	emulators +MASTER_SITES=	http://dad-answers.com/qemu/ +DISTNAME=	${PORTNAME}-snapshot-2004-05-30_23-40 + +MAINTAINER=	nox@jelal.kn-bremen.de +COMMENT=	QEMU CPU Emulator + +BUILD_DEPENDS+=	texi2html:${PORTSDIR}/textproc/texi2html + +GNU_CONFIGURE=	yes +USE_BZIP2=	yes +USE_GMAKE=	yes +USE_SDL=	sdl +USE_GCC=	3.3 +USE_PERL5=	yes +WRKSRC=		${WRKDIR}/${DISTNAME} +PATCH_STRIP=	-p1 +CONFIGURE_ARGS+=	--cc=${CC}\ -fno-strict-aliasing\ -DDEBUG_IRQ_COUNT\ -I${PREFIX}/include --enable-slirp +MAN1=		qemu.1 qemu-mkcow.1 + +post-install: +	@${CAT} ${PKGMESSAGE} + +.include <bsd.port.mk> diff --git a/emulators/qemu/distinfo b/emulators/qemu/distinfo new file mode 100644 index 000000000000..99e63f9da5ad --- /dev/null +++ b/emulators/qemu/distinfo @@ -0,0 +1,2 @@ +MD5 (qemu-snapshot-2004-05-30_23-40.tar.bz2) = 4ce3834c66e4628e33a083db5e542287 +SIZE (qemu-snapshot-2004-05-30_23-40.tar.bz2) = 637024 diff --git a/emulators/qemu/files/patch-aa b/emulators/qemu/files/patch-aa new file mode 100644 index 000000000000..ad6a1ebaca49 --- /dev/null +++ b/emulators/qemu/files/patch-aa @@ -0,0 +1,365 @@ +diff -urd --exclude=CVS ../cvs/qemu/Makefile qemu-0.5.5/Makefile +--- ../cvs/qemu/Makefile	Mon May 17 21:06:42 2004 ++++ qemu-0.5.5/Makefile	Sun May 30 05:26:19 2004 +@@ -70,7 +70,7 @@ +  + # documentation + %.html: %.texi +-	texi2html -monolithic -number $< ++	-texi2html -monolithic -number $< +  + qemu.1: qemu-doc.texi + 	./texi2pod.pl $< qemu.pod +diff -urd --exclude=CVS ../cvs/qemu/block.c qemu-0.5.5/block.c +--- ../cvs/qemu/block.c	Sat May  8 16:27:20 2004 ++++ qemu-0.5.5/block.c	Sun May 30 16:36:53 2004 +@@ -27,6 +27,13 @@ + #include <sys/mman.h> + #endif +  ++#ifdef _BSD ++#include <sys/types.h> ++#include <sys/stat.h> ++#include <sys/ioctl.h> ++#include <sys/disk.h> ++#endif ++ + #include "cow.h" +  + struct BlockDriverState { +@@ -81,7 +88,10 @@ + { +     int fd; +     int64_t size; +-    struct cow_header_v2 cow_header; ++    union { ++      struct cow_header_v2 cow_header; ++      uint8_t cow_buffer[2048]; ++    } cow; + #ifndef _WIN32 +     char template[] = "/tmp/vl.XXXXXX"; +     int cow_fd; +@@ -117,15 +127,15 @@ +     bs->fd = fd; +  +     /* see if it is a cow image */ +-    if (read(fd, &cow_header, sizeof(cow_header)) != sizeof(cow_header)) { ++    if (read(fd, &cow.cow_header, sizeof(cow)) != sizeof(cow)) { +         fprintf(stderr, "%s: could not read header\n", filename); +         goto fail; +     } + #ifndef _WIN32 +-    if (be32_to_cpu(cow_header.magic) == COW_MAGIC && +-        be32_to_cpu(cow_header.version) == COW_VERSION) { ++    if (be32_to_cpu(cow.cow_header.magic) == COW_MAGIC && ++        be32_to_cpu(cow.cow_header.version) == COW_VERSION) { +         /* cow image found */ +-        size = cow_header.size; ++        size = cow.cow_header.size; + #ifndef WORDS_BIGENDIAN +         size = bswap64(size); + #endif     +@@ -133,34 +143,41 @@ +  +         bs->cow_fd = fd; +         bs->fd = -1; +-        if (cow_header.backing_file[0] != '\0') { +-            if (stat(cow_header.backing_file, &st) != 0) { +-                fprintf(stderr, "%s: could not find original disk image '%s'\n", filename, cow_header.backing_file); ++        if (cow.cow_header.backing_file[0] != '\0') { ++            if (stat(cow.cow_header.backing_file, &st) != 0) { ++                fprintf(stderr, "%s: could not find original disk image '%s'\n", filename, cow.cow_header.backing_file); +                 goto fail; +             } +-            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); ++            if (st.st_mtime != be32_to_cpu(cow.cow_header.mtime)) { ++                fprintf(stderr, "%s: original raw disk image '%s' does not match saved timestamp\n", filename, cow.cow_header.backing_file); +                 goto fail; +             } +-            fd = open(cow_header.backing_file, O_RDONLY | O_LARGEFILE); ++            fd = open(cow.cow_header.backing_file, O_RDONLY | O_LARGEFILE); +             if (fd < 0) +                 goto fail; +             bs->fd = fd; +         } +         /* mmap the bitmap */ +-        bs->cow_bitmap_size = ((bs->total_sectors + 7) >> 3) + sizeof(cow_header); ++        bs->cow_bitmap_size = ((bs->total_sectors + 7) >> 3) + sizeof(cow.cow_header); +         bs->cow_bitmap_addr = mmap(get_mmap_addr(bs->cow_bitmap_size),  +                                    bs->cow_bitmap_size,  +                                    PROT_READ | PROT_WRITE, +                                    MAP_SHARED, bs->cow_fd, 0); +         if (bs->cow_bitmap_addr == MAP_FAILED) +             goto fail; +-        bs->cow_bitmap = bs->cow_bitmap_addr + sizeof(cow_header); ++        bs->cow_bitmap = bs->cow_bitmap_addr + sizeof(cow.cow_header); +         bs->cow_sectors_offset = (bs->cow_bitmap_size + 511) & ~511; +         snapshot = 0; +     } else  + #endif +     { ++#ifdef _BSD ++        struct stat sb; ++        if (!fstat(fd,&sb) && (S_IFCHR & sb.st_mode)) { ++            if (ioctl(fd, DIOCGMEDIASIZE, (off_t *)&size)) ++                size = lseek(fd, 0LL, SEEK_END); ++        } else ++#endif                       +         /* standard raw image */ +         size = lseek64(fd, 0, SEEK_END); +         bs->total_sectors = size / 512; +Only in qemu-0.5.5: block.c.bck +diff -urd --exclude=CVS ../cvs/qemu/configure qemu-0.5.5/configure +--- ../cvs/qemu/configure	Thu May 20 14:23:39 2004 ++++ qemu-0.5.5/configure	Sun May 30 05:42:05 2004 +@@ -419,9 +419,11 @@ + if [ "$bsd" = "yes" ] ; then +   echo "#define O_LARGEFILE 0" >> $config_h +   echo "#define lseek64 lseek" >> $config_h ++  echo "#define mkstemp64 mkstemp" >> $config_h +   echo "#define ftruncate64 ftruncate" >> $config_h +   echo "#define MAP_ANONYMOUS MAP_ANON" >> $config_h +   echo "#define _BSD 1" >> $config_h ++  echo "#define off64_t off_t" >> $config_h + fi +  + for target in $target_list; do  +Only in qemu-0.5.5: qemu.1 +diff -urd --exclude=CVS ../cvs/qemu/target-i386/cpu.h qemu-0.5.5/target-i386/cpu.h +--- ../cvs/qemu/target-i386/cpu.h	Thu May 20 15:01:56 2004 ++++ qemu-0.5.5/target-i386/cpu.h	Sun May 30 05:16:10 2004 +@@ -259,7 +259,7 @@ +     CC_OP_NB, + }; +  +-#if (defined(__i386__) || defined(__x86_64__)) && !defined(_BSD) ++#if defined(__i386__) || defined(__x86_64__) + #define USE_X86LDOUBLE + #endif +  +diff -urd --exclude=CVS ../cvs/qemu/target-i386/exec.h qemu-0.5.5/target-i386/exec.h +--- ../cvs/qemu/target-i386/exec.h	Sat May 29 12:08:52 2004 ++++ qemu-0.5.5/target-i386/exec.h	Sun May 30 05:19:43 2004 +@@ -293,6 +293,22 @@ +  + #endif /* !defined(CONFIG_USER_ONLY) */ +  ++#if defined(_BSD) && defined(USE_X86LDOUBLE) ++#include <math.h> ++/*int rintl(long double __x); ++long int lrintl(long double __x); ++long long int llrintl(long double __x); ++long double powl(long double __x, long double __y); ++long double logl(long double __x); ++long double tanl(long double __x); ++long double atan2l(long double __y, long double __x); ++long double ceill(long double __x); ++long double floorl(long double __x); ++long double sqrtl(long double __x); ++long double sinl(long double __x); ++long double cosl(long double __x);*/ ++#endif ++ + #ifdef USE_X86LDOUBLE + /* use long double functions */ + #define lrint lrintl +@@ -310,7 +326,7 @@ + #define rint rintl + #endif +  +-#if !defined(_BSD) ++#if !defined(_BSD) || defined(USE_X86LDOUBLE) + extern int lrint(CPU86_LDouble x); + extern int64_t llrint(CPU86_LDouble x); + #else +diff -urd --exclude=CVS ../cvs/qemu/target-i386/op.c qemu-0.5.5/target-i386/op.c +--- ../cvs/qemu/target-i386/op.c	Sat May 29 12:08:52 2004 ++++ qemu-0.5.5/target-i386/op.c	Sun May 30 05:40:54 2004 +@@ -1304,6 +1304,149 @@ +    functions comes from the LGPL'ed x86 emulator found in the Willows +    TWIN windows emulator. */ +  ++#if defined(_BSD) && defined(USE_X86LDOUBLE) ++ ++CPU86_LDouble rintl(CPU86_LDouble __x) { ++  CPU86_LDouble __rintres; ++  __asm__ __volatile__ ++    ("fistp %0" ++     : "=m" (__rintres) : "t" (__x) : "st"); ++  return __rintres; ++} ++ ++int lrintl(CPU86_LDouble __x) { ++  int __lrintres; ++  __asm__ __volatile__ ++    ("fistpl %0" ++     : "=m" (__lrintres) : "t" (__x) : "st"); ++  return __lrintres; ++} ++ ++ ++int64_t llrintl(CPU86_LDouble __x) { ++  int64_t __llrintres; ++  __asm__ __volatile__ ++    ("fistpll %0" ++     : "=m" (__llrintres) : "t" (__x) : "st"); ++  return __llrintres; ++} ++ ++CPU86_LDouble powl(CPU86_LDouble __x, CPU86_LDouble __y) { ++  register CPU86_LDouble __value; ++  register long double __exponent; ++  __extension__ long long int __p = (long long int) __y; ++  if (__x == 0.0) ++    { ++       if (__y > 0.0) ++         return __y == (double) __p && (__p & 1) != 0 ? __x : 0.0; ++       else if (__y < 0.0) ++         return (__y == (double) __p && (-__p & 1) != 0 ++                 ? 1.0 / __x : 1.0 / fabs (__x)); ++    } ++  if (__y == (double) __p) ++    { ++      long double __r = 1.0; ++      if (__p == 0) ++        return 1.0; ++      if (__p < 0) ++        { ++          __p = -__p; ++          __x = 1.0 / __x; ++        } ++      while (1) ++        { ++          if (__p & 1) ++            __r *= __x; ++          __p >>= 1; ++          if (__p == 0) ++            return __r; ++          __x *= __x; ++        } ++      /* NOTREACHED */ ++    } ++  __asm __volatile__ ++    ("fyl2x" : "=t" (__value) : "0" (__x), "u" (1.0) : "st(1)"); ++  __asm __volatile__ ++    ("fmul      %%st(1)         # y * log2(x)\n\t" ++     "fst       %%st(1)\n\t" ++     "frndint                   # int(y * log2(x))\n\t" ++     "fxch\n\t" ++     "fsub      %%st(1)         # fract(y * log2(x))\n\t" ++     "f2xm1                     # 2^(fract(y * log2(x))) - 1\n\t" ++     : "=t" (__value), "=u" (__exponent) : "0" (__y), "1" (__value)); ++  __value += 1.0; ++  __asm __volatile__ ++    ("fscale" ++     : "=t" (__value) : "0" (__value), "u" (__exponent)); ++  return __value; ++} ++ ++CPU86_LDouble logl(CPU86_LDouble __x) { ++  register CPU86_LDouble __result; ++  __asm __volatile__ ("fldln2; fxch; fyl2x" : "=t" (__result) : "0" (__x) : "st(1)"); ++  return __result; ++} ++ ++CPU86_LDouble tanl(CPU86_LDouble __x) { ++  register CPU86_LDouble __value; ++  register CPU86_LDouble __value2 __attribute__ ((__unused__)); ++  __asm __volatile__ ++    ("fptan" ++     : "=t" (__value2), "=u" (__value) : "0" (__x)); ++  return __value; ++} ++ ++CPU86_LDouble atan2l(CPU86_LDouble __y, CPU86_LDouble __x) { ++  register CPU86_LDouble __value; ++  __asm __volatile__ ++    ("fpatan" ++     : "=t" (__value) : "0" (__x), "u" (__y) : "st(1)"); ++  return __value; ++} ++ ++CPU86_LDouble ceill(CPU86_LDouble __x) { ++  register CPU86_LDouble __value; ++  __volatile unsigned short int __cw; ++  __volatile unsigned short int __cwtmp; ++  __asm __volatile ("fnstcw %0" : "=m" (__cw)); ++  __cwtmp = (__cw & 0xf3ff) | 0x0800; /* rounding up */ ++  __asm __volatile ("fldcw %0" : : "m" (__cwtmp)); ++  __asm __volatile ("frndint" : "=t" (__value) : "0" (__x)); ++  __asm __volatile ("fldcw %0" : : "m" (__cw)); ++  return __value; ++} ++ ++CPU86_LDouble floorl(CPU86_LDouble __x) { ++  register CPU86_LDouble __value; ++  __volatile unsigned short int __cw; ++  __volatile unsigned short int __cwtmp; ++  __asm __volatile ("fnstcw %0" : "=m" (__cw)); ++  __cwtmp = (__cw & 0xf3ff) | 0x0400; /* rounding down */ ++  __asm __volatile ("fldcw %0" : : "m" (__cwtmp)); ++  __asm __volatile ("frndint" : "=t" (__value) : "0" (__x)); ++  __asm __volatile ("fldcw %0" : : "m" (__cw)); ++  return __value; ++} ++ ++CPU86_LDouble sqrtl(CPU86_LDouble __x) { ++  register CPU86_LDouble __result; ++  __asm __volatile__ ("fsqrt" : "=t" (__result) : "0" (__x)); ++  return __result; ++} ++ ++CPU86_LDouble sinl(CPU86_LDouble __x) { ++  register CPU86_LDouble __result; ++  __asm __volatile__ ("fsin" : "=t" (__result) : "0" (__x)); ++  return __result; ++} ++ ++CPU86_LDouble cosl(CPU86_LDouble __x) { ++  register CPU86_LDouble __result; ++  __asm __volatile__ ("fcos" : "=t" (__result) : "0" (__x)); ++  return __result; ++} ++#endif ++ + #if defined(__powerpc__) + extern CPU86_LDouble copysign(CPU86_LDouble, CPU86_LDouble); +  +diff -urd --exclude=CVS ../cvs/qemu/vl.c qemu-0.5.5/vl.c +--- ../cvs/qemu/vl.c	Wed May 26 23:12:06 2004 ++++ qemu-0.5.5/vl.c	Sun May 30 05:30:56 2004 +@@ -662,6 +662,14 @@ +     case QEMU_TIMER_REALTIME: + #ifdef _WIN32 +         return GetTickCount(); ++#elif defined(_BSD) ++        { ++            struct timeval r; ++            if (!gettimeofday(&r, NULL)) { ++                return ((CLK_TCK * 1000LL) * (int64_t)r.tv_sec  ++                      + ((int64_t)r.tv_usec * CLK_TCK) / 1000) / timer_freq; ++            } ++        }         + #else +         { +             struct tms tp; +@@ -828,6 +836,7 @@ +            the emulated kernel requested a too high timer frequency */ +         getitimer(ITIMER_REAL, &itv); +  ++#if defined(__linux__) +         if (itv.it_interval.tv_usec > 1000) { +             /* try to use /dev/rtc to have a faster timer */ +             if (start_rtc_timer() < 0) +@@ -843,7 +852,9 @@ +             sigaction(SIGIO, &act, NULL); +             fcntl(rtc_fd, F_SETFL, O_ASYNC); +             fcntl(rtc_fd, F_SETOWN, getpid()); +-        } else { ++        } else  ++#endif ++        { +         use_itimer: +             pit_min_timer_count = ((uint64_t)itv.it_interval.tv_usec *  +                                    PIT_FREQ) / 1000000; diff --git a/emulators/qemu/files/patch-ab b/emulators/qemu/files/patch-ab new file mode 100644 index 000000000000..79b428ba1091 --- /dev/null +++ b/emulators/qemu/files/patch-ab @@ -0,0 +1,16 @@ +Index: qemu-snapshot-2004-05-30_23-40/target-i386/op.c +@@ -1307,11 +1307,9 @@ + #if defined(_BSD) && defined(USE_X86LDOUBLE) +  + CPU86_LDouble rintl(CPU86_LDouble __x) { +-  CPU86_LDouble __rintres; +-  __asm__ __volatile__ +-    ("fistp %0" +-     : "=m" (__rintres) : "t" (__x) : "st"); +-  return __rintres; ++  register CPU86_LDouble __result; ++  __asm __volatile__ ("frndint" : "=t" (__result) : "0" (__x)); ++  return __result; + } +  + int lrintl(CPU86_LDouble __x) { diff --git a/emulators/qemu/files/patch-ac b/emulators/qemu/files/patch-ac new file mode 100644 index 000000000000..3c9a9db2b58b --- /dev/null +++ b/emulators/qemu/files/patch-ac @@ -0,0 +1,10 @@ +Index: qemu/configure +@@ -204,7 +204,7 @@ +  + if test -z "$sdl" ; then +  +-sdl_config="sdl-config" ++sdl_config="sdl11-config" + sdl=no + sdl_static=no +  diff --git a/emulators/qemu/files/patch-ba b/emulators/qemu/files/patch-ba new file mode 100644 index 000000000000..1d43df4b4bba --- /dev/null +++ b/emulators/qemu/files/patch-ba @@ -0,0 +1,9 @@ +Index: qemu/block.c +@@ -31,6 +31,7 @@ + #include <sys/types.h> + #include <sys/stat.h> + #include <sys/ioctl.h> ++#include <sys/queue.h> + #include <sys/disk.h> + #endif +  diff --git a/emulators/qemu/files/patch-bb b/emulators/qemu/files/patch-bb new file mode 100644 index 000000000000..02302a316df2 --- /dev/null +++ b/emulators/qemu/files/patch-bb @@ -0,0 +1,11 @@ +Index: qemu/block.c +@@ -175,7 +175,9 @@ + #ifdef _BSD +         struct stat sb; +         if (!fstat(fd,&sb) && (S_IFCHR & sb.st_mode)) { ++#ifdef DIOCGMEDIASIZE +             if (ioctl(fd, DIOCGMEDIASIZE, (off_t *)&size)) ++#endif +                 size = lseek(fd, 0LL, SEEK_END); +         } else + #endif                       diff --git a/emulators/qemu/files/patch-bc b/emulators/qemu/files/patch-bc new file mode 100644 index 000000000000..7ad83440d48b --- /dev/null +++ b/emulators/qemu/files/patch-bc @@ -0,0 +1,12 @@ +Index: qemu/i386-dis.c +@@ -2896,6 +2896,10 @@ +   OP_E (bytemode, sizeflag); + } +  ++#ifndef PRIx64 ++#define PRIx64 "llx" ++#endif ++ + static void + print_operand_value (buf, hex, disp) +   char *buf; diff --git a/emulators/qemu/files/patch-bd b/emulators/qemu/files/patch-bd new file mode 100644 index 000000000000..3f85d63c03a1 --- /dev/null +++ b/emulators/qemu/files/patch-bd @@ -0,0 +1,10 @@ +Index: qemu/configure +@@ -286,7 +286,7 @@ + if test -z "$prefix" ; then +     prefix="/usr/local" + fi +-mandir="$prefix/share/man" ++mandir="$prefix/man" + datadir="$prefix/share/qemu" + docdir="$prefix/share/doc/qemu" + bindir="$prefix/bin" diff --git a/emulators/qemu/files/patch-be b/emulators/qemu/files/patch-be new file mode 100644 index 000000000000..6c9a95892ade --- /dev/null +++ b/emulators/qemu/files/patch-be @@ -0,0 +1,12 @@ +Index: qemu/vl.c +@@ -666,8 +667,8 @@ +         { +             struct timeval r; +             if (!gettimeofday(&r, NULL)) { +-                return ((CLK_TCK * 1000LL) * (int64_t)r.tv_sec  +-                      + ((int64_t)r.tv_usec * CLK_TCK) / 1000) / timer_freq; ++                return ((timer_freq * 1000LL) * (int64_t)r.tv_sec  ++                      + ((int64_t)r.tv_usec * timer_freq) / 1000) / timer_freq; +             } +         }         + #else diff --git a/emulators/qemu/files/patch-bf b/emulators/qemu/files/patch-bf new file mode 100644 index 000000000000..c02063205965 --- /dev/null +++ b/emulators/qemu/files/patch-bf @@ -0,0 +1,55 @@ +Index: qemu/slirp/slirp_config.h +@@ -61,7 +61,7 @@ + #define HAVE_STDLIB_H +  + /* Define if you have sys/ioctl.h */ +-#undef HAVE_SYS_IOCTL_H ++#define HAVE_SYS_IOCTL_H +  + /* Define if you have sys/filio.h */ + #undef HAVE_SYS_FILIO_H +@@ -86,7 +86,7 @@ + #undef BAD_SPRINTF +  + /* Define if you have readv */ +-#undef HAVE_READV ++#define HAVE_READV +  + /* Define if iovec needs to be declared */ + #undef DECLARE_IOVEC +@@ -95,7 +95,7 @@ + #undef DECLARE_SPRINTF +  + /* Define if you have a POSIX.1 sys/wait.h */ +-#undef HAVE_SYS_WAIT_H ++#define HAVE_SYS_WAIT_H +  + /* Define if you have sys/select.h */ + #define HAVE_SYS_SELECT_H +@@ -107,7 +107,7 @@ + #define HAVE_ARPA_INET_H +  + /* Define if you have sys/signal.h */ +-#undef HAVE_SYS_SIGNAL_H ++#define HAVE_SYS_SIGNAL_H +  + /* Define if you have sys/stropts.h */ + #undef HAVE_SYS_STROPTS_H +@@ -162,7 +162,7 @@ + #define HAVE_MEMMOVE +  + /* Define if you have <termios.h> */ +-#undef HAVE_TERMIOS_H ++#define HAVE_TERMIOS_H +  + /* Define if you have gethostid */ + #undef HAVE_GETHOSTID +@@ -180,7 +180,7 @@ + #undef HAVE_GRANTPT +  + /* Define if you have fchmod */ +-#undef HAVE_FCHMOD ++#define HAVE_FCHMOD +  + /* Define if you have <sys/type32.h> */ + #undef HAVE_SYS_TYPES32_H diff --git a/emulators/qemu/files/patch-bt b/emulators/qemu/files/patch-bt new file mode 100644 index 000000000000..7ebddc06f332 --- /dev/null +++ b/emulators/qemu/files/patch-bt @@ -0,0 +1,94 @@ +Index: qemu/vl.c +@@ -41,6 +41,9 @@ + #ifdef _BSD + #include <sys/stat.h> + #include <libutil.h> ++#ifdef __FreeBSD__ ++#include <sys/module.h> ++#endif + #else + #include <linux/if.h> + #include <linux/if_tun.h> +@@ -1022,6 +1025,34 @@ +  + #endif /* CONFIG_SLIRP */ +  ++#ifdef __FreeBSD__ ++#define LOAD_QUIETLY	1 ++#define LOAD_VERBOSLY	2 ++ ++int ++loadmodules(int how, const char *module, ...) ++{ ++  int loaded = 0; ++  va_list ap; ++ ++  va_start(ap, module); ++#ifndef NO_MODULES ++  while (module != NULL) { ++    if (modfind(module) == -1) { ++      if (kldload(module) == -1) { ++        if (how == LOAD_VERBOSLY) ++          fprintf(stderr, "%s: Cannot load module\n", module); ++      } else ++        loaded++; ++    } ++    module = va_arg(ap, const char *); ++  } ++  va_end(ap); ++#endif ++  return loaded; ++} ++#endif ++ + #if !defined(_WIN32) + #ifdef _BSD + static int tun_open(char *ifname, int ifname_size) +@@ -1030,11 +1061,46 @@ +     char *dev; +     struct stat s; +  ++#ifdef __FreeBSD__ ++    int i, kldtried = 0, enoentcount = 0, err = 0; ++    char dname[100]; ++    for (i = -1; i < 10; i++) { ++        if (i == -1) ++	    strcpy(dname, "/dev/tap"); ++        else ++	    snprintf(dname, sizeof dname, "%s%d", ++		     "/dev/tap", i); ++        fd = open(dname, O_RDWR); ++        if (fd >= 0) ++            break; ++        else if (errno == ENXIO || errno == ENOENT) { ++            if (i == 0 && !kldtried++) { ++                /* ++                 * Attempt to load the tunnel interface KLD if it isn't loaded ++                 * already. ++                 */ ++                if (loadmodules(LOAD_VERBOSLY, "if_tap", NULL)) ++                    i = -1; ++                continue; ++            } ++            if (errno != ENOENT || ++enoentcount > 3) { ++                err = errno; ++	        break; ++            } ++        } else ++            err = errno; ++    } ++    if (fd < 0) { ++        fprintf(stderr, "warning: could not open %s (%s): no virtual network emulation\n", dname, strerror(err)); ++        return -1; ++    } ++#else +     fd = open("/dev/tap", O_RDWR); +     if (fd < 0) { +-        fprintf(stderr, "warning: could not open /dev/tap: no virtual network emulation\n"); ++        fprintf(stderr, "warning: could not open /dev/tap (%s): no virtual network emulation\n", strerror(errno)); +         return -1; +     } ++#endif +  +     fstat(fd, &s); +     dev = devname(s.st_rdev, S_IFCHR); diff --git a/emulators/qemu/pkg-descr b/emulators/qemu/pkg-descr new file mode 100644 index 000000000000..8b0cc55ed6e9 --- /dev/null +++ b/emulators/qemu/pkg-descr @@ -0,0 +1,16 @@ +QEMU is a FAST! processor emulator using dynamic translation to achieve +good emulation speed. +QEMU has two operating modes: + +    * Full system emulation. In this mode, QEMU emulates a full system +(for example a PC), including a processor and various peripherials. +It can be used to launch different Operating Systems without rebooting +the PC or to debug system code. +    * User mode emulation (Linux host only). In this mode, QEMU can launch +Linux processes compiled for one CPU on another CPU. It can be used to +launch the Wine Windows API emulator or to ease cross-compilation and +cross-debugging.  + +As QEMU requires no host kernel patches to run, it is very safe and easy to use. + +WWW: http://fabrice.bellard.free.fr/qemu/ diff --git a/emulators/qemu/pkg-message b/emulators/qemu/pkg-message new file mode 100644 index 000000000000..ad7118865aa3 --- /dev/null +++ b/emulators/qemu/pkg-message @@ -0,0 +1,13 @@ +==== +FreeBSD host notes: +- needs to run as root in order to use /dev/tap* networking (why?) +- slirp (usermode networking) compiles but doesn't seem to work for +me - seems to have a timer problem (time sleep 1 takes 49 seconds +and booting sleeps for minutes at the acd0 probe), but only on +_some_ guest systems (FreeSBIE, knoppix.)  An installed 5.2.1 guest +system works ok (this also doesn't happen with linux as host.)  And +enabling /dev/rtc doesn't help either... (not included since it +needs a patch to emulators/rtc.) +- using physical media doesn't work on 4.x hosts (missing DIOCGMEDIASIZE +ioctl) +==== diff --git a/emulators/qemu/pkg-plist b/emulators/qemu/pkg-plist new file mode 100644 index 000000000000..4c4c2056df0e --- /dev/null +++ b/emulators/qemu/pkg-plist @@ -0,0 +1,10 @@ +bin/qemu +bin/qemu-mkcow +bin/vmdk2raw +share/doc/qemu/qemu-doc.html +share/doc/qemu/qemu-tech.html +share/qemu/bios.bin +share/qemu/linux_boot.bin +share/qemu/vgabios.bin +@dirrm share/qemu +@dirrm share/doc/qemu  | 
