From c475edccfc2cb9dcc987b3ad24879e1a0b74684c Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Wed, 5 Apr 2017 20:23:23 +0200 Subject: [PATCH] dde_linux: use internal setjmp/longjmp only --- .../lib/mk/spec/arm/lx_kit_setjmp.mk | 3 ++ .../lib/mk/spec/x86_32/lx_kit_setjmp.mk | 3 ++ .../lib/mk/spec/x86_64/lx_kit_setjmp.mk | 3 ++ repos/dde_linux/lib/mk/usb.inc | 2 +- repos/dde_linux/lib/mk/wifi.inc | 4 +- .../src/drivers/framebuffer/intel/target.mk | 2 +- .../src/include/lx_kit/internal/task.h | 5 --- .../spec/arm/lx_kit/internal/arch_execute.h | 2 - .../x86_32/lx_kit/internal/arch_execute.h | 2 - .../x86_64/lx_kit/internal/arch_execute.h | 2 - repos/dde_linux/src/lx_kit/spec/arm/setjmp.S | 39 ++++++++++++++++--- 11 files changed, 46 insertions(+), 21 deletions(-) create mode 100644 repos/dde_linux/lib/mk/spec/arm/lx_kit_setjmp.mk create mode 100644 repos/dde_linux/lib/mk/spec/x86_32/lx_kit_setjmp.mk create mode 100644 repos/dde_linux/lib/mk/spec/x86_64/lx_kit_setjmp.mk 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 new file mode 100644 index 000000000..ba31c4917 --- /dev/null +++ b/repos/dde_linux/lib/mk/spec/arm/lx_kit_setjmp.mk @@ -0,0 +1,3 @@ +SRC_S += setjmp.S + +vpath %.S $(REP_DIR)/src/lx_kit/spec/arm 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 new file mode 100644 index 000000000..d084e7d92 --- /dev/null +++ b/repos/dde_linux/lib/mk/spec/x86_32/lx_kit_setjmp.mk @@ -0,0 +1,3 @@ +SRC_S += setjmp.S + +vpath %.S $(REP_DIR)/src/lx_kit/spec/x86_32 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 new file mode 100644 index 000000000..04cbf390f --- /dev/null +++ b/repos/dde_linux/lib/mk/spec/x86_64/lx_kit_setjmp.mk @@ -0,0 +1,3 @@ +SRC_S += setjmp.S + +vpath %.S $(REP_DIR)/src/lx_kit/spec/x86_64 diff --git a/repos/dde_linux/lib/mk/usb.inc b/repos/dde_linux/lib/mk/usb.inc index 94a136f60..806c6e3c3 100644 --- a/repos/dde_linux/lib/mk/usb.inc +++ b/repos/dde_linux/lib/mk/usb.inc @@ -1,7 +1,7 @@ LIB_DIR = $(REP_DIR)/src/lib/usb LIB_INC_DIR = $(LIB_DIR)/include -LIBS += usb_include libc-setjmp config +LIBS += usb_include lx_kit_setjmp config SRC_CC += main.cc lx_emul.cc storage.cc \ input_component.cc evdev.cc nic.cc raw.cc SRC_C += dummies.c scsi.c raw_driver.c diff --git a/repos/dde_linux/lib/mk/wifi.inc b/repos/dde_linux/lib/mk/wifi.inc index 8c54803d4..e59d48f9a 100644 --- a/repos/dde_linux/lib/mk/wifi.inc +++ b/repos/dde_linux/lib/mk/wifi.inc @@ -11,17 +11,15 @@ SHARED_LIB = yes # wifi_include *must* be the first library, otherwise the include # order is wrong # -LIBS += wifi_include libc +LIBS += wifi_include lx_kit_setjmp libc LD_OPT += --version-script=$(LIB_DIR)/symbol.map SRC_CC += dummies.cc init.cc lxcc_emul.cc nic.cc socket_call.cc # lx_kit -CC_OPT += -DUSE_INTERNAL_SETJMP SRC_CC += mapped_io_mem_range.cc irq.cc pci.cc malloc.cc scheduler.cc \ work.cc timer.cc printf.cc env.cc -SRC_S += setjmp.S SRC_C += lxc_emul.c diff --git a/repos/dde_linux/src/drivers/framebuffer/intel/target.mk b/repos/dde_linux/src/drivers/framebuffer/intel/target.mk index 25e146733..1d700613a 100644 --- a/repos/dde_linux/src/drivers/framebuffer/intel/target.mk +++ b/repos/dde_linux/src/drivers/framebuffer/intel/target.mk @@ -1,7 +1,7 @@ REQUIRES = x86 TARGET = intel_fb_drv -LIBS = base intel_fb_drv intel_fb_include libc-setjmp blit +LIBS = base intel_fb_drv intel_fb_include lx_kit_setjmp blit SRC_CC = main.cc lx_emul.cc SRC_C = dummies.c i915_params.c lx_emul_c.c diff --git a/repos/dde_linux/src/include/lx_kit/internal/task.h b/repos/dde_linux/src/include/lx_kit/internal/task.h index 3116e1d37..b680499e0 100644 --- a/repos/dde_linux/src/include/lx_kit/internal/task.h +++ b/repos/dde_linux/src/include/lx_kit/internal/task.h @@ -25,11 +25,6 @@ #include #include -#if !defined(USE_INTERNAL_SETJMP) -/* libc includes */ -#include -#endif /* USE_INTERNAL_SETJMP */ - namespace Lx { diff --git a/repos/dde_linux/src/include/spec/arm/lx_kit/internal/arch_execute.h b/repos/dde_linux/src/include/spec/arm/lx_kit/internal/arch_execute.h index 0354cd56b..45d22167c 100644 --- a/repos/dde_linux/src/include/spec/arm/lx_kit/internal/arch_execute.h +++ b/repos/dde_linux/src/include/spec/arm/lx_kit/internal/arch_execute.h @@ -14,7 +14,6 @@ #ifndef _ARCH_EXECUTE_H_ #define _ARCH_EXECUTE_H_ -#if defined(USE_INTERNAL_SETJMP) #ifdef __cplusplus extern "C" { #endif @@ -28,7 +27,6 @@ int _setjmp(jmp_buf); #ifdef __cplusplus } #endif -#endif /* USE_INTERNAL_SETJMP */ static inline diff --git a/repos/dde_linux/src/include/spec/x86_32/lx_kit/internal/arch_execute.h b/repos/dde_linux/src/include/spec/x86_32/lx_kit/internal/arch_execute.h index 07292bf47..09cbd7213 100644 --- a/repos/dde_linux/src/include/spec/x86_32/lx_kit/internal/arch_execute.h +++ b/repos/dde_linux/src/include/spec/x86_32/lx_kit/internal/arch_execute.h @@ -14,7 +14,6 @@ #ifndef _ARCH_EXECUTE_H_ #define _ARCH_EXECUTE_H_ -#if defined(USE_INTERNAL_SETJMP) #ifdef __cplusplus extern "C" { #endif @@ -28,7 +27,6 @@ int _setjmp(jmp_buf); #ifdef __cplusplus } #endif -#endif /* USE_INTERNAL_SETJMP */ static inline diff --git a/repos/dde_linux/src/include/spec/x86_64/lx_kit/internal/arch_execute.h b/repos/dde_linux/src/include/spec/x86_64/lx_kit/internal/arch_execute.h index d2da328f9..0367439a4 100644 --- a/repos/dde_linux/src/include/spec/x86_64/lx_kit/internal/arch_execute.h +++ b/repos/dde_linux/src/include/spec/x86_64/lx_kit/internal/arch_execute.h @@ -15,7 +15,6 @@ #ifndef _ARCH_EXECUTE_H_ #define _ARCH_EXECUTE_H_ -#if defined(USE_INTERNAL_SETJMP) #ifdef __cplusplus extern "C" { #endif @@ -29,7 +28,6 @@ extern "C" { #ifdef __cplusplus } #endif -#endif /* USE_INTERNAL_SETJMP */ static inline diff --git a/repos/dde_linux/src/lx_kit/spec/arm/setjmp.S b/repos/dde_linux/src/lx_kit/spec/arm/setjmp.S index 4e84fb23f..a3cc4791c 100644 --- a/repos/dde_linux/src/lx_kit/spec/arm/setjmp.S +++ b/repos/dde_linux/src/lx_kit/spec/arm/setjmp.S @@ -32,8 +32,18 @@ * SUCH DAMAGE. */ -//#include -__FBSDID("$FreeBSD$"); +/* needed parts from */ +#define __FBSDID(x) +#define ENTRY(x) .text; .align 0; .globl x; .type x,#function; x:; +#define WEAK_ALIAS(x,y) +#define RET mov pc, lr +#define _JB_MAGIC__SETJMP 0x4278f500 + +#define __SOFTFP__ 1 +#define _STANDALONE +/* end of */ + +__FBSDID("$FreeBSD: release/8.2.0/lib/libc/arm/gen/_setjmp.S 193145 2009-05-31 02:03:40Z marcel $"); /* * C library -- _setjmp, _longjmp @@ -51,9 +61,15 @@ __FBSDID("$FreeBSD$"); ENTRY(_setjmp) ldr r1, .L_setjmp_magic str r1, [r0], #4 - - /* SOFTFP */ +#ifdef __SOFTFP__ add r0, r0, #52 +#else + /* Store fp registers */ + sfm f4, 4, [r0], #48 + /* Store fpsr */ + rfs r1 + str r1, [r0], #0x0004 +#endif /* __SOFTFP__ */ /* Store integer registers */ stmia r0, {r4-r14} @@ -70,8 +86,15 @@ ENTRY(_longjmp) teq r2, r3 bne botch - /* SOFTFP */ +#ifdef __SOFTFP__ add r0, r0, #52 +#else + /* Restore fp registers */ + lfm f4, 4, [r0], #48 + /* Restore fpsr */ + ldr r4, [r0], #0x0004 + wfs r4 +#endif /* __SOFTFP__ */ /* Restore integer registers */ ldmia r0, {r4-r14} @@ -88,4 +111,10 @@ ENTRY(_longjmp) /* validation failed, die die die. */ botch: +#if !defined(_STANDALONE) + bl PIC_SYM(_C_LABEL(longjmperror), PLT) + bl PIC_SYM(_C_LABEL(abort), PLT) + b . - 8 /* Cannot get here */ +#else b . +#endif