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)