[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Minios-devel] [UNIKRAFT PATCH v2 5/5] lib/syscall_shim: Option to generate libc-style stubs



Reviewed-by: Gaulthier Gain <gaulthier.gain@xxxxxxxxx>

> On 3 Apr 2020, at 18:29, Simon Kuenzer <simon.kuenzer@xxxxxxxxx> wrote:
> 
> Introduces the option to automatically generate libc-style system call
> stubs for unavailable system calls. With this function, it is possible
> to provide all libc-style system call symbols although just a subset
> of the full API is implemented. The symbols are defined as `weak` and
> can be replaced by non-weak symbol definitions.
> 
> Signed-off-by: Simon Kuenzer <simon.kuenzer@xxxxxxxxx>
> ---
> lib/syscall_shim/Config.uk          | 15 +++++++++++++++
> lib/syscall_shim/Makefile.uk        |  8 ++++++++
> lib/syscall_shim/gen_libc_stubs.awk | 16 ++++++++++++++++
> 3 files changed, 39 insertions(+)
> create mode 100644 lib/syscall_shim/gen_libc_stubs.awk
> 
> diff --git a/lib/syscall_shim/Config.uk b/lib/syscall_shim/Config.uk
> index c3369463..9c39ed2f 100644
> --- a/lib/syscall_shim/Config.uk
> +++ b/lib/syscall_shim/Config.uk
> @@ -9,6 +9,21 @@ if LIBSYSCALL_SHIM
>       bool
>       default n
> 
> +     config LIBSYSCALL_SHIM_LIBCSTUBS
> +     depends on !LIBSYSCALL_SHIM_NOWRAPPER
> +     bool "Provide libc-style stubs"
> +     default n
> +     help
> +             Automatically generate libc-style stubs for unavailable
> +             system calls. The aim is to provide all libc-style system
> +             call symbols although just a subset of the full API may be
> +             implemtented. The symbols are defined as `weak`.
> +             Please note that depending on the used compiler and optimization
> +             options, this functionality may sometimes cause linking failures
> +             because of double definitions of symbols. This is the case when
> +             another library is providing some libc-style system calls
> +             without registering them to libsyscall_shim.
> +
>       config LIBSYSCALL_SHIM_HANDLER
>               bool "Binary system call handler (Linux ABI)"
>               default n
> diff --git a/lib/syscall_shim/Makefile.uk b/lib/syscall_shim/Makefile.uk
> index c01ee494..d3bfe4f8 100644
> --- a/lib/syscall_shim/Makefile.uk
> +++ b/lib/syscall_shim/Makefile.uk
> @@ -12,6 +12,7 @@ LIBSYSCALL_SHIM_GEN_SRC += 
> $(LIBSYSCALL_SHIM_BUILD)/uk_syscall.c
> LIBSYSCALL_SHIM_GEN_SRC += $(LIBSYSCALL_SHIM_BUILD)/uk_syscall_r.c
> LIBSYSCALL_SHIM_GEN_SRC += $(LIBSYSCALL_SHIM_BUILD)/uk_syscall_name.c
> LIBSYSCALL_SHIM_GEN_SRC += $(LIBSYSCALL_SHIM_BUILD)/uk_syscall_name_p.c
> +LIBSYSCALL_SHIM_GEN_SRC += $(LIBSYSCALL_SHIM_BUILD)/libc_stubs.c
> 
> UK_PREPARE-$(CONFIG_LIBSYSCALL_SHIM) += $(LIBSYSCALL_SHIM_PHONY_SRC) 
> $(LIBSYSCALL_SHIM_GEN_SRC)
> 
> @@ -65,6 +66,11 @@ $(LIBSYSCALL_SHIM_BUILD)/uk_syscall_name_p.c: 
> $(LIBSYSCALL_SHIM_BUILD)/provided_
>       $(call build_cmd,GEN,libsyscall_shim,$(notdir $@), \
>               $(AWK) -F '-' -f 
> $(LIBSYSCALL_SHIM_BASE)/gen_uk_syscall_name_p.awk $< > $@)
> 
> +$(LIBSYSCALL_SHIM_BUILD)/libc_stubs.c: 
> $(LIBSYSCALL_SHIM_BASE)/gen_libc_stubs.awk $(LIBSYSCALL_SHIM_TEMPL)
> +     $(call build_cmd,GEN,libsyscall_shim,$(notdir $@), \
> +             $(AWK) -f $(LIBSYSCALL_SHIM_BASE)/gen_libc_stubs.awk \
> +             $(LIBSYSCALL_SHIM_TEMPL) > $@)
> +
> $(LIBSYSCALL_SHIM_BUILD)/provided_syscalls.h.in.new:
>       $(call build_cmd,GEN,libsyscall_shim,$(notdir $@), \
>               echo $(UK_PROVIDED_SYSCALLS-y) | tr ' ' '\n' > $@)
> @@ -85,5 +91,7 @@ LIBSYSCALL_SHIM_SRCS-y += 
> $(LIBSYSCALL_SHIM_BUILD)/uk_syscall.c
> LIBSYSCALL_SHIM_SRCS-y += $(LIBSYSCALL_SHIM_BUILD)/uk_syscall_r.c
> LIBSYSCALL_SHIM_SRCS-y += $(LIBSYSCALL_SHIM_BUILD)/uk_syscall_name.c
> LIBSYSCALL_SHIM_SRCS-y += $(LIBSYSCALL_SHIM_BUILD)/uk_syscall_name_p.c
> +LIBSYSCALL_SHIM_SRCS-$(CONFIG_LIBSYSCALL_SHIM_LIBCSTUBS) += 
> $(LIBSYSCALL_SHIM_BUILD)/libc_stubs.c
> +LIBSYSCALL_SHIM_LIBC_STUBS_FLAGS+=-fno-builtin 
> -Wno-builtin-declaration-mismatch
> 
> LIBSYSCALL_SHIM_CLEAN = $(LIBSYSCALL_SHIM_PHONY_SRC) 
> $(LIBSYSCALL_SHIM_PHONY_SRC_NEW) $(LIBSYSCALL_SHIM_GEN_SRC) 
> $(LIBSYSCALL_SHIM_GEN_SRC)
> diff --git a/lib/syscall_shim/gen_libc_stubs.awk 
> b/lib/syscall_shim/gen_libc_stubs.awk
> new file mode 100644
> index 00000000..265c8fa9
> --- /dev/null
> +++ b/lib/syscall_shim/gen_libc_stubs.awk
> @@ -0,0 +1,16 @@
> +BEGIN {
> +     print "/* Auto generated file. Do not edit */"
> +     print "\n#include <errno.h>"
> +     print "\n#include <uk/syscall.h>"
> +     print "\n#include <uk/print.h>"
> +     print "\n#include <uk/essentials.h>"
> +}
> +/#define __NR_/ {
> +     name = substr($2,6);
> +     printf "\n#ifndef HAVE_uk_syscall_%s", name;
> +     printf "\nlong __weak %s(void)", name;
> +     printf "\n{";
> +     printf "\n\treturn uk_syscall_e_stub(\"%s\");", name;
> +     printf "\n}";
> +     printf "\n#endif /* !HAVE_uk_syscall_%s */\n", name;
> +}
> -- 
> 2.20.1
> 
> 
> _______________________________________________
> Minios-devel mailing list
> Minios-devel@xxxxxxxxxxxxxxxxxxxx
> https://lists.xenproject.org/mailman/listinfo/minios-devel


_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.