kvm.o: CFLAGS+=$(KVM_CFLAGS)
kvm-all.o: CFLAGS+=$(KVM_CFLAGS)
-all: $(PROGS)
-
#########################################################
# cpu emulator library
LIBOBJS=exec.o kqemu.o translate-all.o cpu-exec.o\
#include "qemu-char.h"
#include "block_int.h"
#include <assert.h>
+
+#ifndef CONFIG_STUBDOM
+
#ifdef CONFIG_AIO
#include "posix-aio-compat.h"
#endif
/* generic scsi device */
.bdrv_ioctl = raw_ioctl,
};
+
+#endif CONFIG_STUBDOM
return -ENOTSUP;
}
-BlockDriver bdrv_vbd = {
+BlockDriver bdrv_raw = {
"vbd",
sizeof(BDRVVbdState),
vbd_probe,
void bdrv_init(void)
{
bdrv_register(&bdrv_raw);
+#ifndef CONFIG_STUBDOM
bdrv_register(&bdrv_host_device);
-#ifdef CONFIG_STUBDOM
- bdrv_register(&bdrv_vbd);
#endif
#ifndef _WIN32
bdrv_register(&bdrv_cow);
void qemu_register_coalesced_mmio(target_phys_addr_t addr, ram_addr_t size) { }
void qemu_unregister_coalesced_mmio(target_phys_addr_t addr, ram_addr_t size) { }
-#if DIRECT_MMAP
+#ifdef DIRECT_MMAP
void *cpu_physical_memory_map(target_phys_addr_t addr,
target_phys_addr_t *plen,
int is_write) {
FdMigrationState *s;
FILE *f;
+#ifdef CONFIG_STUBDOM
+ dprintf("stubdom migration? no popen!");
+ return 0;
+#else
+
s = qemu_mallocz(sizeof(*s));
if (s == NULL) {
dprintf("Unable to allocate FdMigrationState\n");
qemu_free(s);
err:
return NULL;
+#endif /*!CONFIG_STUBDOM*/
}
int exec_start_incoming_migration(const char *command)
return send(s->fd, buf, size, 0);
}
-static int tcp_close(FdMigrationState *s)
+static int tcp_close_qemu(FdMigrationState *s)
{
dprintf("tcp_close\n");
if (s->fd != -1) {
s->get_error = socket_errno;
s->write = socket_write;
- s->close = tcp_close;
+ s->close = tcp_close_qemu;
s->mig_state.cancel = migrate_fd_cancel;
s->mig_state.get_status = migrate_fd_get_status;
s->mig_state.release = migrate_fd_release;
char script_arg[1024];
} TAPState;
+#ifndef CONFIG_STUBDOM
#ifdef HAVE_IOVEC
static ssize_t tap_receive_iov(void *opaque, const struct iovec *iov,
int iovcnt)
return len;
}
#endif
+#endif /*!CONFIG_STUBDOM*/
static void tap_receive(void *opaque, const uint8_t *buf, int size)
{
s->vc = qemu_new_vlan_client(vlan, model, name, tap_receive, NULL, s);
s->next = head_net_tap;
head_net_tap = s;
+#ifndef CONFIG_STUBDOM
#ifdef HAVE_IOVEC
s->vc->fd_readv = tap_receive_iov;
+#endif
#endif
qemu_set_fd_handler(s->fd, tap_send, NULL, s);
snprintf(s->vc->info_str, sizeof(s->vc->info_str), "fd=%d", fd);
const char *setup_script, const char *down_script,
const char *script_arg)
{
+#ifdef CONFIG_STUBDOM
+ errno = ENOSYS;
+ return -1;
+#else
TAPState *s;
int fd;
char ifname[128];
else
s->script_arg[0] = '\0';
return 0;
+#endif
}
#endif /* !_WIN32 */
#include <sys/time.h>
#include "osdep.h"
+#include "qemu-common.h"
+
+#ifndef CONFIG_STUBDOM
+
#include "posix-aio-compat.h"
static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
return ret;
}
+
+#endif CONFIG_STUBDOM
#include "qemu_socket.h"
#include "qemu-common.h" /* for qemu_isdigit */
+#ifndef CONFIG_STUBDOM
+
#ifndef AI_ADDRCONFIG
# define AI_ADDRCONFIG 0
#endif
return -1;
}
+#else /*!CONFIG_STUBDOM*/
+
+int inet_listen(const char *str, char *ostr, int olen,
+ int socktype, int port_offset)
+{
+ fprintf(stderr, "ip sockets are not available on stubdom\n");
+ return -1;
+}
+
+int inet_connect(const char *str, int socktype)
+{
+ fprintf(stderr, "ip sockets are not available on stubdom\n");
+ return -1;
+}
+
+#endif /*!CONFIG_STUBDOM*/
+
#ifndef NO_UNIX_SOCKETS
int unix_listen(const char *str, char *ostr, int olen)
#ifndef QEMU_SOCKET_H
#define QEMU_SOCKET_H
+#include "config-host.h"
+
#ifdef _WIN32
#define WIN32_LEAN_AND_MEAN
#define WINVER 0x0501 /* needed for ipv6 bits */
{
QEMUFilePopen *s;
+#ifdef CONFIG_STUBDOM
+ errno = ENOSYS;
+ return NULL;
+#else
+
if (popen_file == NULL || mode == NULL || (mode[0] != 'r' && mode[0] != 'w') || mode[1] != 0) {
fprintf(stderr, "qemu_popen: Argument validity check failed\n");
return NULL;
}
fprintf(stderr, "qemu_popen: returning result of qemu_fopen_ops\n");
return s->file;
+
+#endif /*!CONFIG_STUBDOM*/
}
QEMUFile *qemu_popen_cmd(const char *command, const char *mode)
{
FILE *popen_file;
+#ifdef CONFIG_STUBDOM
+ errno = ENOSYS;
+ return NULL;
+#else
+
popen_file = popen(command, mode);
if(popen_file == NULL) {
return NULL;
}
return qemu_popen(popen_file, mode);
+#endif /*!CONFIG_STUBDOM*/
}
QEMUFile *qemu_fopen_socket(int fd)
#ifndef XEN_CONFIG_HOST_H
#define XEN_CONFIG_HOST_H
-#ifdef __MINIOS__
-#define CONFIG_STUBDOM
+#ifdef CONFIG_STUBDOM
#undef CONFIG_AIO
#define NO_UNIX_SOCKETS 1
#define NO_BLUETOOTH_PASSTHROUGH 1
#define DEFAULT_NETWORK_DOWN_SCRIPT "/etc/xen/qemu-ifdown"
#ifdef CONFIG_STUBDOM
-extern struct BlockDriver bdrv_vbd;
+#define bdrv_host_device bdrv_raw
#endif
struct CharDriverState;
void xenstore_store_serial_port_info(int i, struct CharDriverState *chr,
extern unsigned long *logdirty_bitmap;
extern unsigned long logdirty_bitmap_size;
+#ifdef CONFIG_STUBDOM
+#undef HAVE_IOVEC
+#endif
+
#endif /*XEN_CONFIG_HOST_H*/
./configure --disable-gfx-check --disable-curses --disable-slirp "$@" --prefix=/usr
-if [ -n "$CONFIG_STUBDOM" ]
-then
- target=i386-stubdom
- ln -sf ../i386-dm/hookslib.mak $target/
- (cd $target ; ln -sf ../i386-dm/*.[ch] .)
-else
- target=i386-dm
-fi
+target=i386-dm
if [ "x$XEN_ROOT" != x ]; then
echo "XEN_ROOT=$XEN_ROOT" >>config-host.mak
--- /dev/null
+#!/bin/sh
+set -e
+
+qemu_version=`head VERSION`
+
+ln -sf ../Makefile.target i386-stubdom/Makefile
+
+target=i386-stubdom
+
+#----------
+cat <<END >$target/config.mak.new
+QEMU_ROOT ?= ..
+XEN_ROOT ?= \$(QEMU_ROOT)/../xen-unstable.hg
+
+include ../config-host.mak
+
+TARGET_ARCH=i386
+CONFIG_SOFTMMU=yes
+
+TARGET_CPPFLAGS += $TARGET_CPPFLAGS -DCONFIG_STUBDOM -D__XEN_TOOLS__
+TARGET_CFLAGS= $TARGET_CFLAGS
+TARGET_LDFLAGS= $TARGET_LDFLAGS
+
+bindir = \${prefix}/\${LIBLEAFDIR}/xen/bin
+END
+mv -f $target/config.mak.new $target/config.mak
+#----------
+
+ln -sf ../i386-dm/hookslib.mak $target/
+(cd $target ; ln -sf ../i386-dm/*.[ch] .)
+
+#----------
+cat <<END >config-host.h.new
+#define CONFIG_QEMU_SHAREDIR "/usr/share/xen/qemu"
+#define HOST_I386 1
+#define HOST_LONG_BITS 32
+#define HAVE_BYTESWAP_H 1
+#define AUDIO_DRIVERS /* none */
+#define QEMU_VERSION "$qemu_version"
+#define CONFIG_UNAME_RELEASE ""
+#include "xen-config-host.h"
+END
+mv -f config-host.h.new config-host.h
+#----------
+
+#----------
+cat <<END >config-host.mak.new
+CONFIG_STUBDOM=yes
+prefix=/usr
+bindir=\${prefix}/bin
+mandir=\${prefix}/share/man
+datadir=\${prefix}/share/qemu
+docdir=\${prefix}/share/doc/qemu
+MAKE=make
+INSTALL=install
+CC=gcc
+HOST_CC=gcc
+AR=ar
+STRIP=strip -s -R .comment -R .note
+OS_CFLAGS=
+OS_LDFLAGS=
+ARCH_CFLAGS=-m32
+ARCH_LDFLAGS=-m32
+EXESUF=
+AIOLIBS=
+ARCH=i386
+CONFIG_GDBSTUB=no
+CONFIG_OSS=no
+CONFIG_OSS_LIB=
+VERSION=$qemu_version
+SRC_PATH=`pwd`
+TARGET_DIRS=$target
+BUILD_DOCS=no
+CONFIG_AIO=no
+TOOLS=
+XEN_ROOT=/volatile/iwj/builds/work/2/build/xen-unstable.hg/
+QEMU_ROOT ?= `pwd`
+XEN_ROOT ?= \$(QEMU_ROOT)/../xen-unstable.hg
+include \$(XEN_ROOT)/tools/Rules.mk
+SUBDIR_RULES=subdir-\$(TARGET_DIRS)
+subdir-\$(TARGET_DIRS): libqemu_common.a
+-include \$(QEMU_ROOT)/xen-hooks.mak
+HOST_USB=stub
+
+HOST_LDFLAGS= \$(LDFLAGS) -g -Wl,--warn-common
+HOST_CFLAGS= \$(CFLAGS)
+CPPFLAGS += $TARGET_CPPFLAGS -DCONFIG_STUBDOM
+CFLAGS= $TARGET_CFLAGS
+LDFLAGS= $TARGET_LDFLAGS
+
+SUBDIR_RULES=subdir-$(TARGET_DIRS)
+subdir-\$(TARGET_DIRS): libqemu_common.a
+-include \$(QEMU_ROOT)/xen-hooks.mak
+
+END
+mv -f config-host.mak.new config-host.mak
+#----------
#ifdef CONFIG_STUBDOM
if (pasprintf(&danger_buf, "%s/device/vbd/%s", danger_path, e_danger[i]) == -1)
continue;
- if (bdrv_open2(bs, danger_buf, BDRV_O_CACHE_WB /* snapshot and write-back */, &bdrv_vbd) == 0) {
+ if (bdrv_open2(bs, danger_buf, BDRV_O_CACHE_WB /* snapshot and write-back */, &bdrv_raw) == 0) {
pstrcpy(bs->filename, sizeof(bs->filename), params);
} else
#endif