diff options
Diffstat (limited to 'system/libucontext/pmmx.patch')
-rw-r--r-- | system/libucontext/pmmx.patch | 87 |
1 files changed, 87 insertions, 0 deletions
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" <AWilcox@Wilcox-Tech.com> +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 <ariadne@dereferenced.org> ++ * ++ * 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 <libucontext/libucontext.h> +-#include "common-trampoline.c" +-- +2.32.0 (Apple Git-132) + |