It's time for another round on implementing the VDSO for linux-user. We are now seeing applications built that absolutely require it, and have no fallback for the VDSO to be absent.
For instance, https://gitlab.com/qemu-project/qemu/-/issues/1267 uses musl and will currently branch to NULL executing the mmap syscall, because the __kernel_vsyscall symbol is not found. This is just a rebase of v2 from 2021: https://lists.nongnu.org/archive/html/qemu-devel/2021-07/msg01311.html and does nothing to address the cross-compilation issues. I am more hopful that cross-compilation can be solved now, due to the work on Native Library Calls: https://patchew.org/QEMU/20230808141739.3110740-1-fufuyqqq...@gmail.com/ But frankly, even with cross-compilation enabled there will be hosts which do not have the cross-compilers and I believe we will still have to check the binaries into the repository. As they are all on the order of 5 to 6k, I really do not see this as a problem. r~ PS: This patch set is now 13 years old: https://lists.nongnu.org/archive/html/qemu-devel/2010-04/msg00187.html https://lists.gnu.org/archive/html/qemu-devel/2013-07/msg04036.html Let's see if we can get this resolved before it can vote. Richard Henderson (15): linux-user: Introduce imgsrc_read, imgsrc_read_alloc linux-user: Tidy loader_exec linux-user: Do not clobber bprm_buf swapping ehdr linux-user: Use ImageSource in load_elf_image linux-user: Use ImageSource in load_symbols linux-user: Replace bprm->fd with bprm->src.fd linux-user: Load vdso image if available linux-user: Add gen-vdso tool linux-user/aarch64: Add vdso and use it for rt_sigreturn target/arm: Add isar_feature_aa32_a32 linux-user/arm: Add vdso and use it for rt_sigreturn linux-user/hppa: Add vdso and use it for rt_sigreturn linux-user/i386: Add vdso and use it for sigreturn linux-user/x86_64: Add vdso linux-user/riscv: Add vdso and use it for sigreturn linux-user/loader.h | 60 ++++- target/arm/cpu.h | 5 + linux-user/arm/signal.c | 30 ++- linux-user/elfload.c | 365 ++++++++++++++++++++----------- linux-user/flatload.c | 8 +- linux-user/gen-vdso.c | 223 +++++++++++++++++++ linux-user/hppa/signal.c | 1 - linux-user/linuxload.c | 137 ++++++++++-- target/arm/tcg/cpu32.c | 7 + linux-user/gen-vdso-elfn.c.inc | 306 ++++++++++++++++++++++++++ linux-user/aarch64/Makefile.vdso | 11 + linux-user/aarch64/meson.build | 11 + linux-user/aarch64/vdso-be.so | Bin 0 -> 6000 bytes linux-user/aarch64/vdso-le.so | Bin 0 -> 6000 bytes linux-user/aarch64/vdso.S | 77 +++++++ linux-user/aarch64/vdso.ld | 74 +++++++ linux-user/arm/Makefile.vdso | 17 ++ linux-user/arm/meson.build | 18 ++ linux-user/arm/vdso-arm-be.so | Bin 0 -> 5648 bytes linux-user/arm/vdso-arm-le.so | Bin 0 -> 5648 bytes linux-user/arm/vdso-thm-be.so | Bin 0 -> 5620 bytes linux-user/arm/vdso-thm-le.so | Bin 0 -> 5620 bytes linux-user/arm/vdso.S | 209 ++++++++++++++++++ linux-user/arm/vdso.ld | 74 +++++++ linux-user/hppa/Makefile.vdso | 6 + linux-user/hppa/meson.build | 6 + linux-user/hppa/vdso.S | 149 +++++++++++++ linux-user/hppa/vdso.ld | 75 +++++++ linux-user/hppa/vdso.so | Bin 0 -> 5196 bytes linux-user/i386/Makefile.vdso | 5 + linux-user/i386/meson.build | 7 + linux-user/i386/vdso.S | 181 +++++++++++++++ linux-user/i386/vdso.ld | 76 +++++++ linux-user/i386/vdso.so | Bin 0 -> 5528 bytes linux-user/meson.build | 8 +- linux-user/riscv/Makefile.vdso | 11 + linux-user/riscv/meson.build | 9 + linux-user/riscv/vdso-32.so | Bin 0 -> 5624 bytes linux-user/riscv/vdso-64.so | Bin 0 -> 6120 bytes linux-user/riscv/vdso.S | 207 ++++++++++++++++++ linux-user/riscv/vdso.ld | 76 +++++++ linux-user/x86_64/Makefile.vdso | 5 + linux-user/x86_64/meson.build | 6 + linux-user/x86_64/vdso.S | 122 +++++++++++ linux-user/x86_64/vdso.ld | 74 +++++++ linux-user/x86_64/vdso.so | Bin 0 -> 6008 bytes 46 files changed, 2467 insertions(+), 189 deletions(-) create mode 100644 linux-user/gen-vdso.c create mode 100644 linux-user/gen-vdso-elfn.c.inc create mode 100644 linux-user/aarch64/Makefile.vdso create mode 100644 linux-user/aarch64/meson.build create mode 100755 linux-user/aarch64/vdso-be.so create mode 100755 linux-user/aarch64/vdso-le.so create mode 100644 linux-user/aarch64/vdso.S create mode 100644 linux-user/aarch64/vdso.ld create mode 100644 linux-user/arm/Makefile.vdso create mode 100755 linux-user/arm/vdso-arm-be.so create mode 100755 linux-user/arm/vdso-arm-le.so create mode 100755 linux-user/arm/vdso-thm-be.so create mode 100755 linux-user/arm/vdso-thm-le.so create mode 100644 linux-user/arm/vdso.S create mode 100644 linux-user/arm/vdso.ld create mode 100644 linux-user/hppa/Makefile.vdso create mode 100644 linux-user/hppa/vdso.S create mode 100644 linux-user/hppa/vdso.ld create mode 100755 linux-user/hppa/vdso.so create mode 100644 linux-user/i386/Makefile.vdso create mode 100644 linux-user/i386/vdso.S create mode 100644 linux-user/i386/vdso.ld create mode 100755 linux-user/i386/vdso.so create mode 100644 linux-user/riscv/Makefile.vdso create mode 100644 linux-user/riscv/meson.build create mode 100755 linux-user/riscv/vdso-32.so create mode 100755 linux-user/riscv/vdso-64.so create mode 100644 linux-user/riscv/vdso.S create mode 100644 linux-user/riscv/vdso.ld create mode 100644 linux-user/x86_64/Makefile.vdso create mode 100644 linux-user/x86_64/vdso.S create mode 100644 linux-user/x86_64/vdso.ld create mode 100755 linux-user/x86_64/vdso.so -- 2.34.1