[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Minios-devel] [UNIKRAFT/LIBUCONTEXT PATCH 2/2] Initial port of libucontext on Unikraft (x86)
--- Config.uk | 5 ++ Makefile.uk | 85 +++++++++++++++++++++ include/ucontext.h | 76 ++++++++++++++++++ patches/0001-Add-ucontext-header-file.patch | 29 +++++++ 4 files changed, 195 insertions(+) create mode 100644 Config.uk create mode 100644 Makefile.uk create mode 100644 include/ucontext.h create mode 100644 patches/0001-Add-ucontext-header-file.patch diff --git a/Config.uk b/Config.uk new file mode 100644 index 0000000..d0675aa --- /dev/null +++ b/Config.uk @@ -0,0 +1,5 @@ +menuconfig LIBUCONTEXT + bool "ucontext.h API" + default n + select LIBNEWLIBC + diff --git a/Makefile.uk b/Makefile.uk new file mode 100644 index 0000000..5be0492 --- /dev/null +++ b/Makefile.uk @@ -0,0 +1,85 @@ +# libmkl-dnn Makefile.uk +# +# Authors: Charalampos Mainas <Charalampos.Mainas@xxxxxxxxx> +# +# Copyright (c) 2019, NEC Europe Ltd., NEC Corporation. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +# THIS HEADER MAY NOT BE EXTRACTED OR MODIFIED IN ANY WAY. +# + + +################################################################################ +# Library registration +################################################################################ +$(eval $(call addlib_s,libucontext,$(CONFIG_LIBUCONTEXT))) + +################################################################################ +# Sources +################################################################################ +LIBUCONTEXT_VERSION=libucontext-master +LIBUCONTEXT_URL=https://github.com/AdelieLinux/libucontext/archive/master.zip +LIBUCONTEXT_DIR=$(LIBUCONTEXT_VERSION) + +LIBUCONTEXT_PATCHDIR=$(LIBUCONTEXT_BASE)/patches +$(eval $(call fetch,libucontext,$(LIBUCONTEXT_URL),master.zip)) +$(eval $(call patch,libucontext,$(LIBUCONTEXT_PATCHDIR),$(LIBUCONTEXT_DIR))) + +################################################################################ +# Helpers +################################################################################ +LIBUCONTEXT_SRC=$(LIBUCONTEXT_ORIGIN)/$(LIBUCONTEXT_DIR)/arch/x86_64/ + +################################################################################ +# Library includes +################################################################################ +CINCLUDES-$(CONFIG_LIBUCONTEXT) += -I$(LIBUCONTEXT_BASE)/include + +################################################################################ +# Global flags +################################################################################ +# Suppress some warnings to make the build process look neater +SUPPRESS_FLAGS += -Wno-unused-parameter -Wno-unused-variable -Wno-nonnull \ +-Wno-unused-but-set-variable -Wno-unused-label -Wno-char-subscripts \ +-Wno-unused-function -Wno-missing-field-initializers -Wno-uninitialized \ +-Wno-array-bounds -Wno-maybe-uninitialized -Wno-pointer-sign -Wno-unused-value \ +-Wno-unused-macros -Wno-parentheses -Wno-implicit-function-declaration \ +-Wno-missing-braces -Wno-endif-labels -Wno-unused-but-set-variable \ +-Wno-implicit-function-declaration -Wno-type-limits -Wno-sign-compare + +LIBUCONTEXT_CFLAGS-y += $(SUPPRESS_FLAGS) +LIBUCONTEXT_CXXFLAGS-y += $(SUPPRESS_FLAGS) + +################################################################################ +# Sources +################################################################################ +LIBUCONTEXT_SRCS-y += $(LIBUCONTEXT_SRC)/getcontext.S +LIBUCONTEXT_SRCS-y += $(LIBUCONTEXT_SRC)/makecontext.c +LIBUCONTEXT_SRCS-y += $(LIBUCONTEXT_SRC)/setcontext.S +LIBUCONTEXT_SRCS-y += $(LIBUCONTEXT_SRC)/startcontext.S +LIBUCONTEXT_SRCS-y += $(LIBUCONTEXT_SRC)/swapcontext.S + diff --git a/include/ucontext.h b/include/ucontext.h new file mode 100644 index 0000000..3d8ce4d --- /dev/null +++ b/include/ucontext.h @@ -0,0 +1,76 @@ +/* Taken from musl header files (ucontext.h and arch/x86_64/bits/signal.h) */ + +#include <signal.h> + +#ifdef _GNU_SOURCE +#define REG_R8 0 +#define REG_R9 1 +#define REG_R10 2 +#define REG_R11 3 +#define REG_R12 4 +#define REG_R13 5 +#define REG_R14 6 +#define REG_R15 7 +#define REG_RDI 8 +#define REG_RSI 9 +#define REG_RBP 10 +#define REG_RBX 11 +#define REG_RDX 12 +#define REG_RAX 13 +#define REG_RCX 14 +#define REG_RSP 15 +#define REG_RIP 16 +#define REG_EFL 17 +#define REG_CSGSFS 18 +#define REG_ERR 19 +#define REG_TRAPNO 20 +#define REG_OLDMASK 21 +#define REG_CR2 22 +#endif + +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +typedef long long greg_t, gregset_t[23]; +typedef struct _fpstate { + unsigned short cwd, swd, ftw, fop; + unsigned long long rip, rdp; + unsigned mxcsr, mxcr_mask; + struct { + unsigned short significand[4], exponent, padding[3]; + } _st[8]; + struct { + unsigned element[4]; + } _xmm[16]; + unsigned padding[24]; +} *fpregset_t; +struct sigcontext { + unsigned long r8, r9, r10, r11, r12, r13, r14, r15; + unsigned long rdi, rsi, rbp, rbx, rdx, rax, rcx, rsp, rip, eflags; + unsigned short cs, gs, fs, __pad0; + unsigned long err, trapno, oldmask, cr2; + struct _fpstate *fpstate; + unsigned long __reserved1[8]; +}; +typedef struct { + gregset_t gregs; + fpregset_t fpregs; + unsigned long long __reserved1[8]; +} mcontext_t; +#else +typedef struct { + unsigned long __space[32]; +} mcontext_t; +#endif + +typedef struct __ucontext { + unsigned long uc_flags; + struct __ucontext *uc_link; + stack_t uc_stack; + mcontext_t uc_mcontext; + sigset_t uc_sigmask; + unsigned long __fpregs_mem[64]; +} ucontext_t; + +int getcontext(ucontext_t *); +int setcontext(const ucontext_t *); +void makecontext(ucontext_t *, void (*__func) (void), int, ...); +int swapcontext(ucontext_t *, const ucontext_t *); diff --git a/patches/0001-Add-ucontext-header-file.patch b/patches/0001-Add-ucontext-header-file.patch new file mode 100644 index 0000000..b960972 --- /dev/null +++ b/patches/0001-Add-ucontext-header-file.patch @@ -0,0 +1,29 @@ +From bbcaae992f53d8648abab5254e81bdf30640911c Mon Sep 17 00:00:00 2001 +From: Charalampos Mainas <Charalampos.Mainas@xxxxxxxxx> +Date: Wed, 29 May 2019 11:34:03 +0200 +Subject: [PATCH] Add ucontext header file + +On musl ucontext.h header file is included by signal.h header file. + +Signed-off-by: Charalampos Mainas <Charalampos.Mainas@xxxxxxxxx> + +--- + arch/x86_64/makecontext.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/arch/x86_64/makecontext.c b/arch/x86_64/makecontext.c +index ba6ca59..e272008 100644 +--- a/arch/x86_64/makecontext.c ++++ b/arch/x86_64/makecontext.c +@@ -13,7 +13,7 @@ + #define _GNU_SOURCE + #include <stddef.h> + #include <stdarg.h> +-#include <signal.h> ++#include <ucontext.h> + #include <string.h> + #include <stdint.h> + +-- +2.17.1 + -- 2.17.1 _______________________________________________ Minios-devel mailing list Minios-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/minios-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |