[Top][All Lists]

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

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

From: Fabrice Bellard
Subject: Re: [Qemu-devel][PATCH]Get machine name from name of executable
Date: Sun, 14 May 2006 13:48:04 +0200
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.3) Gecko/20040913


The long term plan for qemu is to have a single executable for all machines. If you make a single executable for mips and mipsel, it is better to select the endianness in the code of the machine itself when initializing the CPU.



Stefan Weil wrote:
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


--- 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);
+    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;

Qemu-devel mailing list

reply via email to

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