qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel][PATCH]Get machine name from name of executable


From: Stefan Weil
Subject: [Qemu-devel][PATCH]Get machine name from name of executable
Date: Sun, 14 May 2006 12:42:15 +0200
User-agent: Mozilla Thunderbird 1.0.6 (X11/20050716)

Today, QEMU allows machine selection using command line option -M.
Without this option, it will always take the first machine
for the given target architecture.

With my patch, QEMU first parses the name of the executable.
The string after the last '-' is interpreted as machine name.
If this machine does not exist, the first machine is taken,
so the new QEMU remains compatible with the old behaviour.

With this patch, an installation might link e.g. qemu-system-arm
to qemu-system-arm-integratorcp926, and running qemu-system-arm-integratorcp926
will automatically select machine integratorcp926.

My goal is a MIPS emulation which supports big and little endian mode
in the same executable (like the real hardware). qemu-system-mipsel
would be a symbolic link to qemu-system-mips and enable little endian mode.

I propose another code modification: instead of registration of all machines
in vl.c, vl.c might call a target procedure which does this registration.
So if MIPS, ARM or other targets add machines, vl.c would not change.
Example: vl.c calls qemu_register_mips_machines() which calls
qemu_register_machine(&mips_machine).

Regards,
Stefan


--- vl.c    3 May 2006 22:02:44 -0000    1.185
+++ vl.c    12 May 2006 20:19:15 -0000
@@ -4252,7 +4254,7 @@
    return 0;
}

-QEMUMachine *find_machine(const char *name)
+static QEMUMachine *find_machine(const char *name)
{
    QEMUMachine *m;

@@ -5075,7 +5077,14 @@
    mallopt(M_MMAP_THRESHOLD, 4096 * 1024);
#endif
    register_machines();
+    machine = 0;
+    optarg = strrchr(argv[0], '-');
+    if (optarg != 0) {
+        machine = find_machine(optarg + 1);
+    }
+    if (!machine) {
    machine = first_machine;
+    }
    initrd_filename = NULL;
    for(i = 0; i < MAX_FD; i++)
        fd_filename[i] = NULL;





reply via email to

[Prev in Thread] Current Thread [Next in Thread]