From ca84a197cfb87c2b59557952cc70182c797ae210 Mon Sep 17 00:00:00 2001 From: "A. Wilcox" Date: Mon, 25 Apr 2022 23:35:51 -0500 Subject: system/libucontext: Fix segfault on pmmx Revert a commit that uses the common trampoline. TODO: report upstream. --- system/libucontext/APKBUILD | 7 +++- system/libucontext/pmmx.patch | 87 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 92 insertions(+), 2 deletions(-) create mode 100644 system/libucontext/pmmx.patch diff --git a/system/libucontext/APKBUILD b/system/libucontext/APKBUILD index c7e2132fc..ae05f76ff 100644 --- a/system/libucontext/APKBUILD +++ b/system/libucontext/APKBUILD @@ -9,7 +9,9 @@ license="ISC" depends="" makedepends="" subpackages="$pkgname-dev" -source="https://distfiles.dereferenced.org/libucontext/libucontext-$pkgver.tar.xz" +source="https://distfiles.dereferenced.org/libucontext/libucontext-$pkgver.tar.xz + pmmx.patch + " case "$CTARGET_ARCH" in aarch64_be) LIBUCONTEXT_ARCH="aarch64" ;; @@ -31,4 +33,5 @@ package() { make ARCH="$LIBUCONTEXT_ARCH" DESTDIR="$pkgdir" install } -sha512sums="6603f2dcd87c4d9919c1726f2964632483e1a647733ff543d5935e3e2dac548adf320f1f9fb4c494691fe99fb393d64b15369f04d3783b2ca4c40b68c3d87865 libucontext-1.2.tar.xz" +sha512sums="6603f2dcd87c4d9919c1726f2964632483e1a647733ff543d5935e3e2dac548adf320f1f9fb4c494691fe99fb393d64b15369f04d3783b2ca4c40b68c3d87865 libucontext-1.2.tar.xz +e5855aaf5042856e019dcd8bbf85c1319c4ed3ea836fd64617595b1fcacc14a101f7631e9d07a8af7f624a82c59a5bc6d2c1011b961ba4fede37725b6f5e9c37 pmmx.patch" diff --git a/system/libucontext/pmmx.patch b/system/libucontext/pmmx.patch new file mode 100644 index 000000000..3f6019ab8 --- /dev/null +++ b/system/libucontext/pmmx.patch @@ -0,0 +1,87 @@ +From 196db62779287efb098943c2d4f2433e4b8ea592 Mon Sep 17 00:00:00 2001 +From: "A. Wilcox" +Date: Mon, 25 Apr 2022 23:34:32 -0500 +Subject: [PATCH] Revert "x86: port to use common trampoline" + +This reverts commit 388edbe12138e8300e230e2bc9c08a8f273e98d9. +--- + arch/x86/defs.h | 3 --- + arch/x86/startcontext.S | 41 +++++++++++++++++++++++++++++++++++++++++ + arch/x86/trampoline.c | 3 --- + 3 files changed, 41 insertions(+), 6 deletions(-) + create mode 100644 arch/x86/startcontext.S + delete mode 100644 arch/x86/trampoline.c + +diff --git a/arch/x86/defs.h b/arch/x86/defs.h +index 9370869..e0166e5 100644 +--- a/arch/x86/defs.h ++++ b/arch/x86/defs.h +@@ -57,9 +57,6 @@ + + #define MCONTEXT_GREGS (20) + +-#define FETCH_LINKPTR(dest) \ +- asm("movl (%%esp, %%ebx, 4), %0" : "=r" ((dest))); +- + #include "common-defs.h" + + #endif +diff --git a/arch/x86/startcontext.S b/arch/x86/startcontext.S +new file mode 100644 +index 0000000..1cbc68c +--- /dev/null ++++ b/arch/x86/startcontext.S +@@ -0,0 +1,41 @@ ++/* ++ * Copyright (c) 2018, 2020 Ariadne Conill ++ * ++ * Permission to use, copy, modify, and/or distribute this software for any ++ * purpose with or without fee is hereby granted, provided that the above ++ * copyright notice and this permission notice appear in all copies. ++ * ++ * This software is provided 'as is' and without any warranty, express or ++ * implied. In no event shall the authors be liable for any damages arising ++ * from the use of this software. ++ */ ++ ++#include "defs.h" ++ ++FUNC(libucontext_trampoline) ++ /* get the proper context into position and test for NULL */ ++ leal (%esp,%ebx,4), %esp ++ cmpl $0, (%esp) ++ ++ /* restore global offset table, exit@plt and libucontext_setcontext@plt need this */ ++ call __i686.get_pc_thunk.bx ++ addl $_GLOBAL_OFFSET_TABLE_, %ebx ++ ++ /* if we have no linked context, lets get out of here */ ++ je no_linked_context ++ ++ /* call setcontext to switch to the linked context */ ++ call libucontext_setcontext@plt ++ movl %eax, (%esp) ++ ++no_linked_context: ++ /* we are returning into a null context, it seems, so maybe we should exit */ ++ call exit@plt ++ ++ /* something is really hosed, call hlt to force termination */ ++ hlt ++ ++__i686.get_pc_thunk.bx: ++ mov (%esp), %ebx ++ ret ++END(libucontext_trampoline) +diff --git a/arch/x86/trampoline.c b/arch/x86/trampoline.c +deleted file mode 100644 +index 699a050..0000000 +--- a/arch/x86/trampoline.c ++++ /dev/null +@@ -1,3 +0,0 @@ +-#include "defs.h" +-#include +-#include "common-trampoline.c" +-- +2.32.0 (Apple Git-132) + -- cgit v1.2.3-60-g2f50