feat: Provide VDSO image and __kernel_vsyscall interface #23
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This patch provides the capability to automatically generate a VDSO (Virtual Dynamic Shared Object) image and pass it to the application. The VDSO contains only symbols, while its actual implementation is retained in the kernel, with their mapping relationship recorded in
vdso_mapping.conf
.Additionally, this introduces the
__kernel_vsyscall
interface, which allows libc to access system calls without relying on slow binary syscalls. The difference between__kernel_vsyscall
anduk_syscall6_r
lies in considering TLS (Thread Local Storage) switching, enabling both the kernel and user applications to use thread-local storage seamlessly. To utilize this feature, the libc needs to be modified accordingly, please refer tofork-musl
[1] andfork-glibc
[2] for further information.To use the VDSO, please select
Application Options -> Provide VDSO Image
.[1] https://github.com/unikraft/fork-musl
[2] https://github.com/unikraft/fork-glibc