Index: osdep.h =================================================================== RCS file: /sources/qemu/qemu/osdep.h,v retrieving revision 1.10 diff -u -r1.10 osdep.h --- osdep.h 7 Jun 2007 23:09:47 -0000 1.10 +++ osdep.h 19 Aug 2007 01:31:30 -0000 @@ -28,4 +28,14 @@ #define qemu_gettimeofday(tp) gettimeofday(tp, NULL); #endif /* !_WIN32 */ +#ifdef _WIN32 +#define qemu_dlopen(name, flags) LoadLibrary(name) +#define qemu_dlsym(handle, name) ((void*)GetProcAddress(handle, name)) +#define qemu_dlerror() "DLL load error" +#else +#define qemu_dlopen(name, flags) dlopen(name, flags) +#define qemu_dlsym(handle, name) dlsym(handle, name) +#define qemu_dlerror() dlerror() +#endif /* !_WIN32 */ + #endif Index: vl.c =================================================================== RCS file: /sources/qemu/qemu/vl.c,v retrieving revision 1.323 diff -u -r1.323 vl.c --- vl.c 29 Jul 2007 17:57:25 -0000 1.323 +++ vl.c 19 Aug 2007 01:31:31 -0000 @@ -42,6 +42,7 @@ #include #include #include +#include #ifdef _BSD #include #ifndef __APPLE__ @@ -6712,6 +6713,7 @@ #ifdef TARGET_SPARC "-prom-env variable=value set OpenBIOS nvram variables\n" #endif + "-mplugin machine.so load machine plugin\n" "\n" "During emulation, the following keys are useful:\n" "ctrl-alt-f toggle full screen\n" @@ -6810,6 +6812,7 @@ QEMU_OPTION_prom_env, QEMU_OPTION_old_param, QEMU_OPTION_mtype, + QEMU_OPTION_machine_plugin, }; typedef struct QEMUOption { @@ -6915,6 +6918,7 @@ #if defined(TARGET_ARM) { "old-param", 0, QEMU_OPTION_old_param }, #endif + { "mplugin", HAS_ARG, QEMU_OPTION_machine_plugin }, { NULL }, }; @@ -7690,6 +7694,27 @@ nb_prom_envs++; break; #endif + case QEMU_OPTION_machine_plugin: + { + void *handle; + QEMUMachine *machine; + + handle = qemu_dlopen(optarg, RTLD_NOW | RTLD_GLOBAL); + if (!handle) { + fprintf(stderr, "Cannot load plugin: %s\n", qemu_dlerror()); + exit(1); + } + machine = qemu_dlsym(handle, "machine"); + if (!machine) { + fprintf(stderr, "Cannot find machine in plugin\n"); + exit(1); + } + if (qemu_register_machine(machine)) { + fprintf(stderr, "Cannot register machine\n"); + exit(1); + } + } + break; case QEMU_OPTION_mtype: { const char *p = optarg;