From 1e41c6daa4c78d9840628d32aadc7c9faf33f0ea Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Tue, 8 Feb 2022 16:04:47 +0100 Subject: [PATCH] lx_kit: move setjmp/longjmp away from legacy We use the architecture-specific setjmp/longjmp implementation without modification in the newer lx_kit implementation as well. There is no need for a duplication. Ref genodelabs/genode#4411 --- .../lib/mk/spec/arm/lx_kit_setjmp.mk | 2 +- .../lib/mk/spec/arm_64/lx_kit_setjmp.mk | 2 +- .../lib/mk/spec/x86_32/lx_kit_setjmp.mk | 2 +- .../lib/mk/spec/x86_64/lx_kit_setjmp.mk | 2 +- .../recipes/src/fec_nic_drv/content.mk | 3 +- .../recipes/src/intel_fb_drv/content.mk | 3 +- .../recipes/src/usb_hid_drv/content.mk | 3 +- .../recipes/src/usb_host_drv/content.mk | 3 +- .../recipes/src/usb_modem_drv/content.mk | 3 +- .../recipes/src/usb_net_drv/content.mk | 3 +- .../dde_linux/recipes/src/vfs_lxip/content.mk | 3 +- .../dde_linux/recipes/src/wifi_drv/content.mk | 3 +- .../src/include/legacy/lx_kit/internal/task.h | 2 +- .../lx_kit/internal => lx_kit}/arch_execute.h | 0 .../legacy/lx_kit/internal/arch_execute.h | 43 ------- .../lx_kit/internal => lx_kit}/arch_execute.h | 0 .../lx_kit/internal => lx_kit}/arch_execute.h | 0 .../lib/legacy/lx_kit/spec/arm_64/setjmp.S | 108 ------------------ .../lib/{legacy => }/lx_kit/spec/arm/setjmp.S | 0 .../{legacy => }/lx_kit/spec/x86_32/setjmp.S | 0 .../{legacy => }/lx_kit/spec/x86_64/setjmp.S | 0 21 files changed, 21 insertions(+), 164 deletions(-) rename repos/dde_linux/src/include/spec/arm/{legacy/lx_kit/internal => lx_kit}/arch_execute.h (100%) delete mode 100644 repos/dde_linux/src/include/spec/arm_64/legacy/lx_kit/internal/arch_execute.h rename repos/dde_linux/src/include/spec/x86_32/{legacy/lx_kit/internal => lx_kit}/arch_execute.h (100%) rename repos/dde_linux/src/include/spec/x86_64/{legacy/lx_kit/internal => lx_kit}/arch_execute.h (100%) delete mode 100644 repos/dde_linux/src/lib/legacy/lx_kit/spec/arm_64/setjmp.S rename repos/dde_linux/src/lib/{legacy => }/lx_kit/spec/arm/setjmp.S (100%) rename repos/dde_linux/src/lib/{legacy => }/lx_kit/spec/x86_32/setjmp.S (100%) rename repos/dde_linux/src/lib/{legacy => }/lx_kit/spec/x86_64/setjmp.S (100%) diff --git a/repos/dde_linux/lib/mk/spec/arm/lx_kit_setjmp.mk b/repos/dde_linux/lib/mk/spec/arm/lx_kit_setjmp.mk index 1d6a0ec7de..1c8dce9967 100644 --- a/repos/dde_linux/lib/mk/spec/arm/lx_kit_setjmp.mk +++ b/repos/dde_linux/lib/mk/spec/arm/lx_kit_setjmp.mk @@ -1,5 +1,5 @@ SRC_S += setjmp.S -vpath %.S $(REP_DIR)/src/lib/legacy/lx_kit/spec/arm +vpath %.S $(REP_DIR)/src/lib/lx_kit/spec/arm CC_CXX_WARN_STRICT = diff --git a/repos/dde_linux/lib/mk/spec/arm_64/lx_kit_setjmp.mk b/repos/dde_linux/lib/mk/spec/arm_64/lx_kit_setjmp.mk index 6ff2446e41..3513f82729 100644 --- a/repos/dde_linux/lib/mk/spec/arm_64/lx_kit_setjmp.mk +++ b/repos/dde_linux/lib/mk/spec/arm_64/lx_kit_setjmp.mk @@ -1,5 +1,5 @@ SRC_S += setjmp.S -vpath %.S $(REP_DIR)/src/lib/legacy/lx_kit/spec/arm_64 +vpath %.S $(REP_DIR)/src/lib/lx_kit/spec/arm_64 CC_CXX_WARN_STRICT = diff --git a/repos/dde_linux/lib/mk/spec/x86_32/lx_kit_setjmp.mk b/repos/dde_linux/lib/mk/spec/x86_32/lx_kit_setjmp.mk index 68e47db968..26b5647d7b 100644 --- a/repos/dde_linux/lib/mk/spec/x86_32/lx_kit_setjmp.mk +++ b/repos/dde_linux/lib/mk/spec/x86_32/lx_kit_setjmp.mk @@ -1,5 +1,5 @@ SRC_S += setjmp.S -vpath %.S $(REP_DIR)/src/lib/legacy/lx_kit/spec/x86_32 +vpath %.S $(REP_DIR)/src/lib/lx_kit/spec/x86_32 CC_CXX_WARN_STRICT = diff --git a/repos/dde_linux/lib/mk/spec/x86_64/lx_kit_setjmp.mk b/repos/dde_linux/lib/mk/spec/x86_64/lx_kit_setjmp.mk index 7ef1893e68..58966d2834 100644 --- a/repos/dde_linux/lib/mk/spec/x86_64/lx_kit_setjmp.mk +++ b/repos/dde_linux/lib/mk/spec/x86_64/lx_kit_setjmp.mk @@ -1,5 +1,5 @@ SRC_S += setjmp.S -vpath %.S $(REP_DIR)/src/lib/legacy/lx_kit/spec/x86_64 +vpath %.S $(REP_DIR)/src/lib/lx_kit/spec/x86_64 CC_CXX_WARN_STRICT = diff --git a/repos/dde_linux/recipes/src/fec_nic_drv/content.mk b/repos/dde_linux/recipes/src/fec_nic_drv/content.mk index 0844a27927..c2ff6e1c41 100644 --- a/repos/dde_linux/recipes/src/fec_nic_drv/content.mk +++ b/repos/dde_linux/recipes/src/fec_nic_drv/content.mk @@ -8,7 +8,8 @@ MIRROR_FROM_REP_DIR := $(LIB_MK) \ src/drivers/nic/linux_network_session_base.h \ lib/import/import-fec_nic_include.mk \ src/include/legacy src/lib/legacy/lx_kit \ - $(foreach SPEC,arm arm_64 arm_v7,src/include/spec/$(SPEC)/legacy) \ + src/lib/lx_kit/spec \ + $(foreach SPEC,arm arm_64 arm_v7,src/include/spec/$(SPEC)) \ $(shell cd $(REP_DIR); find src/drivers/nic/fec -type f) MIRROR_FROM_PORT_DIR := $(shell cd $(PORT_DIR); find src/drivers/nic/fec -type f | grep -v ".git") diff --git a/repos/dde_linux/recipes/src/intel_fb_drv/content.mk b/repos/dde_linux/recipes/src/intel_fb_drv/content.mk index a9389e1fb2..8b26cf799a 100644 --- a/repos/dde_linux/recipes/src/intel_fb_drv/content.mk +++ b/repos/dde_linux/recipes/src/intel_fb_drv/content.mk @@ -7,7 +7,8 @@ PORT_DIR := $(call port_dir,$(REP_DIR)/ports/dde_linux) MIRROR_FROM_REP_DIR := $(LIB_MK) \ lib/import/import-intel_fb_include.mk \ src/include src/lib/legacy/lx_kit \ - $(foreach SPEC,x86 x86_32 x86_64,src/include/spec/$(SPEC)/legacy) \ + src/lib/lx_kit/spec \ + $(foreach SPEC,x86 x86_32 x86_64,src/include/spec/$(SPEC)) \ $(shell cd $(REP_DIR); find src/drivers/framebuffer/intel -type f) MIRROR_FROM_PORT_DIR := $(shell cd $(PORT_DIR); find src/drivers/framebuffer/intel -type f | grep -v ".git") diff --git a/repos/dde_linux/recipes/src/usb_hid_drv/content.mk b/repos/dde_linux/recipes/src/usb_hid_drv/content.mk index 60b1e5d77a..d26544232c 100644 --- a/repos/dde_linux/recipes/src/usb_hid_drv/content.mk +++ b/repos/dde_linux/recipes/src/usb_hid_drv/content.mk @@ -7,7 +7,8 @@ MIRROR_FROM_REP_DIR := $(LIB_MK) \ lib/import/import-usb_hid_include.mk \ lib/import/import-usb_arch_include.mk \ src/include/legacy src/lib/legacy/lx_kit \ - $(foreach SPEC,arm arm_64 arm_v6 arm_v7 x86 x86_32 x86_64,src/include/spec/$(SPEC)/legacy) \ + src/lib/lx_kit/spec \ + $(foreach SPEC,arm arm_64 arm_v6 arm_v7 x86 x86_32 x86_64,src/include/spec/$(SPEC)) \ $(shell cd $(REP_DIR); find src/drivers/usb_hid -type f) MIRROR_FROM_PORT_DIR := $(shell cd $(PORT_DIR); find src/drivers/usb_hid -type f | grep -v ".git") diff --git a/repos/dde_linux/recipes/src/usb_host_drv/content.mk b/repos/dde_linux/recipes/src/usb_host_drv/content.mk index b5aa036006..04b8a91fe7 100644 --- a/repos/dde_linux/recipes/src/usb_host_drv/content.mk +++ b/repos/dde_linux/recipes/src/usb_host_drv/content.mk @@ -6,7 +6,8 @@ PORT_DIR := $(call port_dir,$(REP_DIR)/ports/dde_linux) MIRROR_FROM_REP_DIR := $(LIB_MK) \ lib/import/import-usb_host_include.mk \ src/include/legacy src/lib/legacy/lx_kit \ - $(foreach SPEC,arm arm_64 arm_v6 arm_v7 x86 x86_32 x86_64,src/include/spec/$(SPEC)/legacy) \ + src/lib/lx_kit/spec \ + $(foreach SPEC,arm arm_64 arm_v6 arm_v7 x86 x86_32 x86_64,src/include/spec/$(SPEC)) \ $(shell cd $(REP_DIR); find src/drivers/usb_host -type f) MIRROR_FROM_PORT_DIR := $(shell cd $(PORT_DIR); find src/drivers/usb_host -type f | grep -v ".git") diff --git a/repos/dde_linux/recipes/src/usb_modem_drv/content.mk b/repos/dde_linux/recipes/src/usb_modem_drv/content.mk index abc69c4c5e..afdefc925a 100644 --- a/repos/dde_linux/recipes/src/usb_modem_drv/content.mk +++ b/repos/dde_linux/recipes/src/usb_modem_drv/content.mk @@ -2,13 +2,14 @@ PORT_DIR := $(call port_dir,$(REP_DIR)/ports/dde_linux) MIRROR_FROM_REP_DIR := src/drivers/usb_modem \ src/lib/legacy/lx_kit \ + src/lib/lx_kit/spec \ src/include/legacy \ lib/import/import-usb_modem_include.mk \ lib/import/import-usb_arch_include.mk \ lib/mk/usb_modem_include.mk \ $(foreach SPEC, \ arm arm_64 arm_v6 arm_v7 x86 x86_32 x86_64, \ - src/include/spec/$(SPEC)/legacy) \ + src/include/spec/$(SPEC)) \ $(foreach SPEC, \ arm arm_64 x86_32 x86_64, \ lib/mk/spec/$(SPEC)/lx_kit_setjmp.mk) diff --git a/repos/dde_linux/recipes/src/usb_net_drv/content.mk b/repos/dde_linux/recipes/src/usb_net_drv/content.mk index dabba561f4..c6355a027d 100644 --- a/repos/dde_linux/recipes/src/usb_net_drv/content.mk +++ b/repos/dde_linux/recipes/src/usb_net_drv/content.mk @@ -4,13 +4,14 @@ MIRROR_FROM_REP_DIR := src/drivers/usb_net \ src/drivers/nic/linux_network_session_base.cc \ src/drivers/nic/linux_network_session_base.h \ src/lib/legacy/lx_kit \ + src/lib/lx_kit/spec \ src/include/legacy \ lib/import/import-usb_net_include.mk \ lib/import/import-usb_arch_include.mk \ lib/mk/usb_net_include.mk \ $(foreach SPEC, \ arm arm_64 arm_v6 arm_v7 x86 x86_32 x86_64, \ - src/include/spec/$(SPEC)/legacy) \ + src/include/spec/$(SPEC)) \ $(foreach SPEC, \ arm arm_64 x86_32 x86_64, \ lib/mk/spec/$(SPEC)/lx_kit_setjmp.mk) diff --git a/repos/dde_linux/recipes/src/vfs_lxip/content.mk b/repos/dde_linux/recipes/src/vfs_lxip/content.mk index ccdc0e0565..dba1b73d44 100644 --- a/repos/dde_linux/recipes/src/vfs_lxip/content.mk +++ b/repos/dde_linux/recipes/src/vfs_lxip/content.mk @@ -6,9 +6,10 @@ PORT_DIR := $(call port_dir,$(REP_DIR)/ports/dde_linux) MIRROR_FROM_REP_DIR := $(LIB_MK) \ lib/import/import-lxip_include.mk \ include/lxip src/include/legacy src/lib/legacy/lx_kit \ + src/lib/lx_kit/spec \ $(foreach SPEC, \ arm arm_64 arm_v6 arm_v7 x86 x86_32 x86_64, \ - src/include/spec/$(SPEC)/legacy) \ + src/include/spec/$(SPEC)) \ $(shell cd $(REP_DIR); find src/lib/lxip -type f) \ $(shell cd $(REP_DIR); find src/lib/vfs -type f) diff --git a/repos/dde_linux/recipes/src/wifi_drv/content.mk b/repos/dde_linux/recipes/src/wifi_drv/content.mk index 6632ce979d..06f221345b 100644 --- a/repos/dde_linux/recipes/src/wifi_drv/content.mk +++ b/repos/dde_linux/recipes/src/wifi_drv/content.mk @@ -12,8 +12,9 @@ MIRROR_FROM_REP_DIR := $(LIB_MK) \ lib/import/import-libnl_include.mk \ lib/import/import-libnl.mk \ include/wifi src/include/legacy src/lib/legacy/lx_kit \ + src/lib/lx_kit/spec \ $(foreach SPEC, x86 x86_32 x86_64, \ - src/include/spec/$(SPEC)/legacy) \ + src/include/spec/$(SPEC)) \ $(shell cd $(REP_DIR); find src/drivers/wifi -type f) \ $(shell cd $(REP_DIR); find src/lib/libnl -type f) \ $(shell cd $(REP_DIR); find src/lib/wifi -type f) \ diff --git a/repos/dde_linux/src/include/legacy/lx_kit/internal/task.h b/repos/dde_linux/src/include/legacy/lx_kit/internal/task.h index b8cd5fd6fb..cd6ef00a97 100644 --- a/repos/dde_linux/src/include/legacy/lx_kit/internal/task.h +++ b/repos/dde_linux/src/include/legacy/lx_kit/internal/task.h @@ -23,7 +23,7 @@ /* Linux emulation environment includes */ #include -#include +#include namespace Lx { diff --git a/repos/dde_linux/src/include/spec/arm/legacy/lx_kit/internal/arch_execute.h b/repos/dde_linux/src/include/spec/arm/lx_kit/arch_execute.h similarity index 100% rename from repos/dde_linux/src/include/spec/arm/legacy/lx_kit/internal/arch_execute.h rename to repos/dde_linux/src/include/spec/arm/lx_kit/arch_execute.h diff --git a/repos/dde_linux/src/include/spec/arm_64/legacy/lx_kit/internal/arch_execute.h b/repos/dde_linux/src/include/spec/arm_64/legacy/lx_kit/internal/arch_execute.h deleted file mode 100644 index 9cd1c7fa00..0000000000 --- a/repos/dde_linux/src/include/spec/arm_64/legacy/lx_kit/internal/arch_execute.h +++ /dev/null @@ -1,43 +0,0 @@ -/** - * \brief Platform specific code - * \author Christian Prochaska - * \date 2019-07-01 - */ - -/* - * Copyright (C) 2019 Genode Labs GmbH - * - * This file is distributed under the terms of the GNU General Public License - * version 2. - */ - -#ifndef _ARCH_EXECUTE_H_ -#define _ARCH_EXECUTE_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#define _JBLEN 31 -typedef struct _jmp_buf { long _jb[_JBLEN + 1]; } jmp_buf[1]; - -void _longjmp(jmp_buf, int); -int _setjmp(jmp_buf); - -#ifdef __cplusplus -} -#endif - - -static inline -void arch_execute(void *sp, void *func, void *arg) -{ - asm volatile ("mov x0, %2;" /* set arg */ - "mov sp, %0;" /* set stack */ - "mov x29, xzr;" /* clear frame pointer */ - "br %1;" /* call func */ - "" - : : "r"(sp), "r"(func), "r"(arg) : "r0"); -} - -#endif /* _ARCH_EXECUTE_H_ */ diff --git a/repos/dde_linux/src/include/spec/x86_32/legacy/lx_kit/internal/arch_execute.h b/repos/dde_linux/src/include/spec/x86_32/lx_kit/arch_execute.h similarity index 100% rename from repos/dde_linux/src/include/spec/x86_32/legacy/lx_kit/internal/arch_execute.h rename to repos/dde_linux/src/include/spec/x86_32/lx_kit/arch_execute.h diff --git a/repos/dde_linux/src/include/spec/x86_64/legacy/lx_kit/internal/arch_execute.h b/repos/dde_linux/src/include/spec/x86_64/lx_kit/arch_execute.h similarity index 100% rename from repos/dde_linux/src/include/spec/x86_64/legacy/lx_kit/internal/arch_execute.h rename to repos/dde_linux/src/include/spec/x86_64/lx_kit/arch_execute.h diff --git a/repos/dde_linux/src/lib/legacy/lx_kit/spec/arm_64/setjmp.S b/repos/dde_linux/src/lib/legacy/lx_kit/spec/arm_64/setjmp.S deleted file mode 100644 index 4ee793c50a..0000000000 --- a/repos/dde_linux/src/lib/legacy/lx_kit/spec/arm_64/setjmp.S +++ /dev/null @@ -1,108 +0,0 @@ -/*- - * Copyright (c) 2014 Andrew Turner - * Copyright (c) 2014 The FreeBSD Foundation - * All rights reserved. - * - * Portions of this software were developed by Andrew Turner - * under sponsorship from the FreeBSD Foundation - * - * 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. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. - * - */ - -/* needed parts from */ -#define __FBSDID(x) -#define ENTRY(sym) .text; .globl sym; .align 2; .type sym,#function; sym: -#define END(sym) .size sym, . - sym -/* end of */ - -__FBSDID("$FreeBSD: releng/12.0/lib/libc/aarch64/gen/setjmp.S 313146 2017-02-03 11:51:06Z andrew $"); - -/* needed parts from */ -#define _JB_SIGMASK 22 -#define _JB_MAGIC__SETJMP 0xfb5d25837d7ff700 -/* end of */ - -ENTRY(_setjmp) - /* Store the magic value and stack pointer */ - ldr x8, .Lmagic - mov x9, sp - stp x8, x9, [x0], #16 - - /* Store the general purpose registers and lr */ - stp x19, x20, [x0], #16 - stp x21, x22, [x0], #16 - stp x23, x24, [x0], #16 - stp x25, x26, [x0], #16 - stp x27, x28, [x0], #16 - stp x29, lr, [x0], #16 - -#ifndef _STANDALONE - /* Store the vfp registers */ - stp d8, d9, [x0], #16 - stp d10, d11, [x0], #16 - stp d12, d13, [x0], #16 - stp d14, d15, [x0] -#endif - - /* Return value */ - mov x0, #0 - ret - .align 3 -.Lmagic: - .quad _JB_MAGIC__SETJMP -END(_setjmp) - -ENTRY(_longjmp) - /* Check the magic value */ - ldr x8, [x0], #8 - ldr x9, .Lmagic - cmp x8, x9 - b.ne botch - - /* Restore the stack pointer */ - ldr x8, [x0], #8 - mov sp, x8 - - /* Restore the general purpose registers and lr */ - ldp x19, x20, [x0], #16 - ldp x21, x22, [x0], #16 - ldp x23, x24, [x0], #16 - ldp x25, x26, [x0], #16 - ldp x27, x28, [x0], #16 - ldp x29, lr, [x0], #16 - -#ifndef _STANDALONE - /* Restore the vfp registers */ - ldp d8, d9, [x0], #16 - ldp d10, d11, [x0], #16 - ldp d12, d13, [x0], #16 - ldp d14, d15, [x0] -#endif - - /* Load the return value */ - mov x0, x1 - ret - -botch: - b botch -END(_longjmp) diff --git a/repos/dde_linux/src/lib/legacy/lx_kit/spec/arm/setjmp.S b/repos/dde_linux/src/lib/lx_kit/spec/arm/setjmp.S similarity index 100% rename from repos/dde_linux/src/lib/legacy/lx_kit/spec/arm/setjmp.S rename to repos/dde_linux/src/lib/lx_kit/spec/arm/setjmp.S diff --git a/repos/dde_linux/src/lib/legacy/lx_kit/spec/x86_32/setjmp.S b/repos/dde_linux/src/lib/lx_kit/spec/x86_32/setjmp.S similarity index 100% rename from repos/dde_linux/src/lib/legacy/lx_kit/spec/x86_32/setjmp.S rename to repos/dde_linux/src/lib/lx_kit/spec/x86_32/setjmp.S diff --git a/repos/dde_linux/src/lib/legacy/lx_kit/spec/x86_64/setjmp.S b/repos/dde_linux/src/lib/lx_kit/spec/x86_64/setjmp.S similarity index 100% rename from repos/dde_linux/src/lib/legacy/lx_kit/spec/x86_64/setjmp.S rename to repos/dde_linux/src/lib/lx_kit/spec/x86_64/setjmp.S