[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Minios-devel] [UNIKRAFT PATCH 05/10] lib/syscall_shim: generate base headers
On 04.06.19 18:28, Yuri Volchkov wrote: The following headers are generated by the code in this patch: - syscall_nrs.h - just definitions of all the syscalls with their numbers - syscall_map.h - provides maps from syscall number to a concrete function in the Unikarft - syscall_stubs.h - if no library is providing a syscall, it will be resolved to a stub, defined in this file Signed-off-by: Yuri Volchkov <yuri.volchkov@xxxxxxxxx> --- lib/Config.uk | 1 + lib/Makefile.uk | 1 + lib/syscall_shim/Config.uk | 3 +++ lib/syscall_shim/Makefile.uk | 40 ++++++++++++++++++++++++++++++++++ lib/syscall_shim/gen_stubs.awk | 8 +++++++ 5 files changed, 53 insertions(+) create mode 100644 lib/syscall_shim/Config.uk create mode 100644 lib/syscall_shim/Makefile.uk create mode 100644 lib/syscall_shim/gen_stubs.awk diff --git a/lib/Config.uk b/lib/Config.uk index 822c624f..b517abd8 100644 --- a/lib/Config.uk +++ b/lib/Config.uk @@ -47,3 +47,4 @@ source "lib/ukswrand/Config.uk" source "lib/ukbus/Config.uk" source "lib/uksglist/Config.uk" source "lib/uknetdev/Config.uk" +source "lib/syscall_shim/Config.uk" diff --git a/lib/Makefile.uk b/lib/Makefile.uk index d06837f1..e6664952 100644 --- a/lib/Makefile.uk +++ b/lib/Makefile.uk @@ -24,3 +24,4 @@ $(eval $(call _import_lib,$(CONFIG_UK_BASE)/lib/ukmpi)) $(eval $(call _import_lib,$(CONFIG_UK_BASE)/lib/ukbus)) $(eval $(call _import_lib,$(CONFIG_UK_BASE)/lib/uksglist)) $(eval $(call _import_lib,$(CONFIG_UK_BASE)/lib/uknetdev)) +$(eval $(call _import_lib,$(CONFIG_UK_BASE)/lib/syscall_shim)) diff --git a/lib/syscall_shim/Config.uk b/lib/syscall_shim/Config.uk new file mode 100644 index 00000000..f88cf970 --- /dev/null +++ b/lib/syscall_shim/Config.uk @@ -0,0 +1,3 @@ +config LIBSYSCALL_SHIM + bool "Syscall shim layer" + default n diff --git a/lib/syscall_shim/Makefile.uk b/lib/syscall_shim/Makefile.uk new file mode 100644 index 00000000..52a12f18 --- /dev/null +++ b/lib/syscall_shim/Makefile.uk @@ -0,0 +1,40 @@ +$(eval $(call addlib_s,libsyscall_shim,$(CONFIG_LIBSYSCALL_SHIM))) + +__GEN_INCLUDES_PATH := $(LIBSYSCALL_SHIM_BUILD)/include/uk/bits One comment to the `__` prefixed variables: I prefer all of them to be namespaced with `LIBSYSCALL_SHIM_` instead. We have just this as namespacing scheme so far and it also makes `make print-vars` more understandable. + +__PHONY_GEN_SRC := syscall_map.h syscall_stubs.h syscall_nrs.h +__PHONY_GEN_SRC := $(addprefix $(__GEN_INCLUDES_PATH)/, $(__PHONY_GEN_SRC)) +__PHONY_GEN_SRC_NEW := $(addsuffix .new, $(__PHONY_GEN_SRC)) + +UK_PREPARE-$(CONFIG_LIBSYSCALL_SHIM) += $(__PHONY_GEN_SRC) + + +__SYSCALL_SHIM_TEMPL := $(LIBSYSCALL_SHIM_BASE)/arch/$(CONFIG_UK_ARCH)/syscall.h.in + +$(call uk_mk_dir, $(__GEN_INCLUDES_PATH)) Hum, now I understand what you want to do. In this case you are lucky and create a directory under the build directory. Maybe a `mk_lib_sub_dir` would make more sense than a general `uk_mk_dir`. I could imagine the following syntax within this file: $(call mk_lib_sub_dir,libsyscall_shim,include/uk/bits) Or maybe even: __GEN_INCLUDES_PATH := $(call lib_sub_dir,libsyscall_shim,include/uk/bits) + +.PHONY: $(__PHONY_GEN_SRC_NEW) + +$(__PHONY_GEN_SRC): %: %.new + @cmp -s $^ $@; if [ $$? -ne 0 ]; then cp $^ $@; fi + +$(__GEN_INCLUDES_PATH)/syscall_nrs.h.new: + $(Q) awk 'BEGIN {print "/* Automatically generated file; DO NOT EDIT */"} \ + {printf "\n#define SYS_%s\t\t%s", \ + substr($$2,6),$$3}' \ + $(__SYSCALL_SHIM_TEMPL) > $@ + +$(__GEN_INCLUDES_PATH)/syscall_map.h.new: + $(Q) awk 'BEGIN \ + {print "/* Automatically generated file; DO NOT EDIT */\n"} \ + /#define __NR_/{\ + printf "#define uk_syscall_fn_%s(...) uk_syscall_%s(__VA_ARGS__)\n", \ + $$3,substr($$2,6)\ + }' \ + $(__SYSCALL_SHIM_TEMPL) > $@ You used `$(AWK)` instead of `awk` in the following rule. Could you use `$(AWK)` everywhere instead? Instead of making all these rules quiet, could you make them as a pretty-printed build command (`build_cmd`)? Also, wouldn't be `.gen` be a nicer extension than `.new`? + +$(__GEN_INCLUDES_PATH)/syscall_stubs.h.new: + $(Q) $(AWK) -f $(LIBSYSCALL_SHIM_BASE)/gen_stubs.awk \ + $(__SYSCALL_SHIM_TEMPL) > $@ + I think all of those generated files should become part of the prepare step, right?: UK_PREPARE-$(CONFIG_LIBSYSCALL_SHIM) += $(__PHONY_GEN_SRC_NEW) +LIBSYSCALL_SHIM_CLEAN = $(__PHONY_GEN_SRC) $(__PHONY_GEN_SRC_NEW) diff --git a/lib/syscall_shim/gen_stubs.awk b/lib/syscall_shim/gen_stubs.awk new file mode 100644 index 00000000..9e0ad6c6 --- /dev/null +++ b/lib/syscall_shim/gen_stubs.awk @@ -0,0 +1,8 @@ +BEGIN { print "/* Auto generated file. Do not edit */" } +{ + name = substr($2,6); + uk_name = "uk_syscall_" name + printf "\n#ifndef HAVE_%s", uk_name; + printf "\n#define %s(...) uk_syscall_stub(\"%s\")", uk_name, name; + printf "\n#endif /* HAVE_%s */\n", uk_name; +} _______________________________________________ Minios-devel mailing list Minios-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/minios-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |