On 2017-06-15 15:10, David Hildenbrand wrote: > > >> A "sane" guest (e.g. Linux) will only use an instruction if the > >> corresponding stfl(e) bit is set. So in my opinion, this should be just > >> fine. If the bit is not set currently, the guest will not use it == dead > >> code. > > > > Not necessarily. Depending on the distribution, gcc and hence binaries > > default to a different ISA. Over the time people have added the > > corresponding instructions to QEMU so that these binaries work. Now > > given that GCC does not necessarily use all the instructions from a > > given facility, we end up with missing instructions. > > That's true, glibc sometimes assumes a certain architecture level > without checking. So you're right, maybe we should defer this "big > hammer" change until we have all facilities as part of the qemu CPU
Well the GNU libc itself correctly probe the facilities with stfl/stfle. What happens is that newer instructions might be generated directly by GCC if told to do so (with -march=xxx or the default architecture). > model. Then, e.g. runnning -cpu qemu will not break such stuff, however > e.g. -cpu z900 could correctly simulate that architecture level. > > One option would be: > > /* for now, we don't fake absence of features for the qemu model */ > if (!object_dynamic_cast(cpu, "qemu-s390x-cpu") { > dc.features = cpu->model->features; > } > > > ... > > if (s->features && !test_bit(insn->fac, s->features)) { > gen_program_exception(s, PGM_OPERATION); > return EXIT_NORETURN; > } I don't know that part of the code enough to tell if it is the good way to do that, but certainly having a "qemu" CPU that supports all instructions look like the way to go, especially for the linux-user emulation. Aurelien -- Aurelien Jarno GPG: 4096R/1DDD8C9B aurel...@aurel32.net http://www.aurel32.net