[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Minios-devel] [UNIKRAFT/LIBUNWIND PATCH v3 2/2] Initial port of Libunwind to Unikraft
Hi Vlad, Patch looks good, thanks. -- Felipe Reviewed-by: Felipe Huici <felipe.huici@xxxxxxxxx> ============================================================ Dr. Felipe Huici Chief Researcher, Systems and Machine Learning Group NEC Laboratories Europe GmbH Kurfuerstenanlage 36, D-69115 Heidelberg Tel. +49 (0)6221 4342-241 Fax: +49 (0)6221 4342-155 e-mail: felipe.huici@xxxxxxxxx ============================================================ Registered at Amtsgericht Mannheim, Germany, HRB728558 On 07.04.19, 13:07, "Vlad-Andrei BĂDOIU (78692)" <vlad_andrei.badoiu@xxxxxxxxxxxxxxx> wrote: This is our initial port of libunwind to Unikraft as external library. Libc is required for it to work. In the dependency list it should stay as follows: ...:$(UK_LIBS)/libunwind:$(UK_LIBS)/compiler-rt: $(UK_LIBS)/libcxxabi:$(UK_LIBS)/libcxx:$(UK_LIBS)/newlib:... Signed-off-by: Vlad-Andrei Badoiu <vlad_andrei.badoiu@xxxxxxxxxxxxxxx> --- CODING_STYLE.md | 4 ++ CONTRIBUTING.md | 4 ++ Config.uk | 6 ++ MAINTAINERS.md | 11 ++++ Makefile.uk | 92 ++++++++++++++++++++++++++++++ README.md | 5 ++ exportsyms.uk | 33 +++++++++++ patches/0001-Updated-the-RIP.patch | 37 ++++++++++++ 8 files changed, 192 insertions(+) create mode 100644 CODING_STYLE.md create mode 100644 CONTRIBUTING.md create mode 100644 Config.uk create mode 100644 MAINTAINERS.md create mode 100644 Makefile.uk create mode 100644 README.md create mode 100644 exportsyms.uk create mode 100644 patches/0001-Updated-the-RIP.patch diff --git a/CODING_STYLE.md b/CODING_STYLE.md new file mode 100644 index 0000000..5730041 --- /dev/null +++ b/CODING_STYLE.md @@ -0,0 +1,4 @@ +Coding Style +============ + +Please refer to the `CODING_STYLE.md` file in the main Unikraft repository. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..5f55eca --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,4 @@ +Contributing to Unikraft +======================= + +Please refer to the `CONTRIBUTING.md` file in the main Unikraft repository. diff --git a/Config.uk b/Config.uk new file mode 100644 index 0000000..9f78aee --- /dev/null +++ b/Config.uk @@ -0,0 +1,6 @@ +menuconfig LIBUNWIND + bool "libunwind - unwinder" + select LIBNOLIBC if !HAVE_LIBC + select LIBCOMPILER_RT + depends on !PLAT_LINUXU + default n diff --git a/MAINTAINERS.md b/MAINTAINERS.md new file mode 100644 index 0000000..e2aa947 --- /dev/null +++ b/MAINTAINERS.md @@ -0,0 +1,11 @@ +Maintainers List +================ + +For notes on how to read this information, please refer to `MAINTAINERS.md` in +the main Unikraft repository. + + NEWLIB-UNIKRAFT + M: Felipe Huici <felipe.huici@xxxxxxxxx> + M: Vlad-Andrei Badoiu <vlad_andrei.badoiu@xxxxxxxxxxxxxxx> + L: minios-devel@xxxxxxxxxxxxx + F: * diff --git a/Makefile.uk b/Makefile.uk new file mode 100644 index 0000000..a80a4fe --- /dev/null +++ b/Makefile.uk @@ -0,0 +1,92 @@ +# libunwind Makefile.uk +# +# Authors: Vlad-Andrei Badoiu <vlad_andrei.badoiu@xxxxxxxxxxxxxxx> +# +# Copyright (c) 2019, Politehnica University of Bucharest. 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,libunwind,$(CONFIG_LIBUNWIND))) + +ifeq ($(CONFIG_LIBUNWIND),y) +ifneq ($(CONFIG_LIBCOMPILER_RT),y) +$(error Require libcompiler_rt) +endif +ifeq ($(CONFIG_PLAT_LINUXU), y) +$(error Libunwind not supported on Linuxu) +endif +endif + +################################################################################ +# Sources +################################################################################ +LIBUNWIND_VERSION=7.0.0 +LIBUNWIND_URL=http://releases.llvm.org/$(LIBUNWIND_VERSION)/libunwind-$(LIBUNWIND_VERSION).src.tar.xz +LIBUNWIND_PATCHDIR=$(LIBUNWIND_BASE)/patches +$(eval $(call fetch,libunwind,$(LIBUNWIND_URL))) +$(eval $(call patch,libunwind,$(LIBUNWIND_PATCHDIR),libunwind-$(LIBUNWIND_VERSION).src)) + +################################################################################ +# Helpers +################################################################################ +LIBUNWIND_SUBDIR=libunwind-$(LIBUNWIND_VERSION).src +LIBUNWIND_SRC=$(LIBUNWIND_ORIGIN)/$(LIBUNWIND_SUBDIR) + +################################################################################ +# Library includes +################################################################################ +CINCLUDES-$(CONFIG_LIBUNWIND) += -I$(LIBUNWIND_SRC)/src +CINCLUDES-$(CONFIG_LIBUNWIND) += -I$(LIBUNWIND_SRC)/include +CXXINCLUDES-$(CONFIG_LIBUNWIND) += -I$(LIBUNWIND_SRC)/src +CXXINCLUDES-$(CONFIG_LIBUNWIND) += -I$(LIBUNWIND_SRC)/include + +################################################################################ +# Global flags +################################################################################ +CONFIG_FLAGS += -D _LIBUNWIND_HAS_NO_THREADS -D __ELF__ -D _LIBUNWIND_IS_NATIVE_ONLY \ + -D _LIBUNWIND_SUPPORT_DWARF_UNWIND -D _LIBUNWIND_IS_BAREMETAL \ + -D _LIBUNWIND_BUILD_ZERO_COST_APIS -D _LIBUNWIND_TARGET_X86_64 -D __x86_64__ + +LIBUNWIND_CFLAGS-y += $(CONFIG_FLAGS) +LIBUNWIND_CXXFLAGS-y += $(CONFIG_FLAGS) + +################################################################################ +# Library sources +################################################################################ +LIBUNWIND_SRCS-y += $(LIBUNWIND_SRC)/src/UnwindLevel1.c +LIBUNWIND_SRCS-y += $(LIBUNWIND_SRC)/src/Unwind-sjlj.c +LIBUNWIND_SRCS-y += $(LIBUNWIND_SRC)/src/UnwindLevel1-gcc-ext.c +LIBUNWIND_SRCS-y += $(LIBUNWIND_SRC)/src/libunwind.cpp +LIBUNWIND_SRCS-y += $(LIBUNWIND_SRC)/src/Unwind-EHABI.cpp +LIBUNWIND_SRCS-y += $(LIBUNWIND_SRC)/src/UnwindRegistersRestore.S +LIBUNWIND_SRCS-y += $(LIBUNWIND_SRC)/src/UnwindRegistersSave.S diff --git a/README.md b/README.md new file mode 100644 index 0000000..ab369e6 --- /dev/null +++ b/README.md @@ -0,0 +1,5 @@ +libunwind for Unikraft +=================== + +Please refer to the `README.md` as well as the documentation in the `doc/` +subdirectory of the main unikraft repository. diff --git a/exportsyms.uk b/exportsyms.uk new file mode 100644 index 0000000..1b7cf1e --- /dev/null +++ b/exportsyms.uk @@ -0,0 +1,33 @@ +_Unwind_Backtrace +_Unwind_DeleteException +_Unwind_FindEnclosingFunction +_Unwind_Find_FDE +_Unwind_ForcedUnwind +_Unwind_GetCFA +_Unwind_GetDataRelBase +_Unwind_GetGR +_Unwind_GetIP +_Unwind_GetIPInfo +_Unwind_GetLanguageSpecificData +_Unwind_GetRegionStart +_Unwind_GetTextRelBase +_Unwind_RaiseException +_Unwind_Resume +_Unwind_Resume_or_Rethrow +_Unwind_SetGR +_Unwind_SetIP +unw_getcontext +unw_get_fpreg +unw_get_proc_info +unw_get_proc_name +unw_get_reg +unw_init_local +unw_is_fpreg +unw_is_signal_frame +unw_iterate_dwarf_unwind_cache +unw_local_addr_space +unw_regname +unw_resume +unw_set_fpreg +unw_set_reg +unw_step diff --git a/patches/0001-Updated-the-RIP.patch b/patches/0001-Updated-the-RIP.patch new file mode 100644 index 0000000..dcbdfcd --- /dev/null +++ b/patches/0001-Updated-the-RIP.patch @@ -0,0 +1,37 @@ +From 863cddb4f2f89b51b38785f49b6c7cf3fc9e3f2c Mon Sep 17 00:00:00 2001 +From: Vlad-Andrei Badoiu <vlad_andrei.badoiu@xxxxxxxxxxxxxxx> +Date: Mon, 3 Dec 2018 18:59:59 +0200 +Subject: [PATCH] Updated the RIP + +This patch changes the RIP that is saved +by the unw_getcontext function. Now the +RIP is pointing to the throw that has +triggered the exception. + +Signed-off-by: Vlad-Andrei Badoiu <vlad_andrei.badoiu@xxxxxxxxxxxxxxx> +--- + UnwindRegistersSave.S | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +diff --git a/UnwindRegistersSave.S b/UnwindRegistersSave.S +index 07db14b..8223ea1 100644 +--- a/src/UnwindRegistersSave.S ++++ b/src/UnwindRegistersSave.S +@@ -88,7 +88,13 @@ DEFINE_LIBUNWIND_FUNCTION(unw_getcontext) + movq %r13,104(PTR) + movq %r14,112(PTR) + movq %r15,120(PTR) +- movq (%rsp),TMP ++ push %rax ++ movq %rbp, (%rax) ++ movq (%rax), %rax ++ addq $8, %rax ++ movq (%rax), %rax ++ movq %rax, TMP ++ pop %rax + movq TMP,128(PTR) # store return address as rip + # skip rflags + # skip cs +-- +2.19.2 + -- 2.20.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 |