Le 07/11/2017 à 16:20, Aaron Sierra a écrit : > ----- Original Message ----- >> From: "Laurent Vivier" <laur...@vivier.eu> >> Sent: Tuesday, November 7, 2017 3:24:52 AM > >> Le 07/11/2017 à 03:50, Aaron Sierra a écrit : >>> Enable building PowerPC targets supporting a specific CPU, without >>> having to set QEMU_CPU via the environment. For example these build >>> targets (and many more) become available: >>> >>> qemu-ppc.e500mc qemu-ppc.e500v2 qemu-ppc.e5500 qemu-ppc.e600 >>> qemu-ppc.e6500 >>> >>> These (statically compiled) binaries have proven useful for >>> emulating PowerPC CPUs within Docker containers, where it's hard to >>> reliably define environment variables that are available for every >>> process. >>> >> >> An other idea would be to extract the default cpu from argv[0]. >> >> We don't change the default CPU at compile time, but we check the binary >> name: >> - if it's qemu-ppc, let's use the default cpu for qemu-ppc >> - if it's not qemu-ppc, but something like qemu-ppc.XXX, let's set the >> CPU to XXX. For instance "qemu-ppc.e600" will be a shortcut for >> "qemu-ppc -cpu e600". [1] >> >> I think it's easy to implement and don't change the default behavior of >> qemu. And you can use hardlink to define several binaries with different >> defaults (like busybox) > > Laurent, > > I had that thought, too, as being the cleanest and simplest to implement, > but it didn't work out as a practical solution. Having execution depend > on the name of the file would require a lot of tuning of magics, masks, > and interpreters in /proc/sys/fs/binfmt_misc to get the behavior that I > depend on. It would require one entry per binary. > > With the implementation that I've proposed, I only need two fairly generic > entries (ppc and ppc64) stock from Ubuntu's qemu-user-static package. > With Docker it's trivial to bind <any_path>/qemu-ppc.e500mc to > /usr/bin/qemu-ppc-static within the container. Which gives me complete > control over how the container is emulated.
So I (sadly) think the wrapper is the best solution... write a C statically linked program that call the qemu-user-static with the good "-cpu" value. Something like: https://github.com/parazyd/qemu-wrapper/blob/master/qemu-wrapper.c Laurent