On Wed, Jun 12, 2024 at 5:09 PM Daniel P. Berrangé <[email protected]> wrote:
> This might suggest we could put a runtime feature check in main(),
> print a warning and then exit(1), however, QEMU has alot of code
> that is triggered from ELF constructors. If we're building the
> entire of QEMU codebase with extra features enabled, I worry that
> the constructors could potentially cause a illegal instruction
> crash before main() runs ?
And I learnt that one can simply add -mneeded to the compiler command
line to achieve that, at least on glibc systems:
$ gcc f.c -mneeded -mpopcnt
$ qemu-x86_64 -cpu core2duo ./a.out
./a.out: CPU ISA level is lower than required
$ qemu-x86_64 ./a.out
1234
$ gcc f.c -mneeded
$ qemu-x86_64 -cpu core2duo ./a.out
1234
Using "readelf -n" on the executable unveils the magic:
Displaying notes found in: .note.gnu.property
Owner Data size Description
GNU 0x00000030 NT_GNU_PROPERTY_TYPE_0
Properties: x86 ISA needed: x86-64-baseline, x86-64-v2
x86 feature used: x86
x86 ISA used:
I'm actually amazed. :)
Paolo