From 388edbe12138e8300e230e2bc9c08a8f273e98d9 Mon Sep 17 00:00:00 2001 From: Ariadne Conill Date: Sat, 12 Dec 2020 06:32:01 +0000 Subject: [PATCH] x86: port to use common trampoline --- arch/x86/defs.h | 3 +++ arch/x86/startcontext.S | 41 ----------------------------------------- arch/x86/trampoline.c | 2 ++ 3 files changed, 5 insertions(+), 41 deletions(-) delete mode 100644 arch/x86/startcontext.S create mode 100644 arch/x86/trampoline.c diff --git a/arch/x86/defs.h b/arch/x86/defs.h index 432ccc8..2b0c68d 100644 --- a/arch/x86/defs.h +++ b/arch/x86/defs.h @@ -59,6 +59,9 @@ #define MCONTEXT_GREGS (20) +#define FETCH_LINKPTR(dest) \ + asm("movl (%%esp, %%ebx, 4), %0" : "=rm" ((dest))); + #include "common-defs.h" #endif diff --git a/arch/x86/startcontext.S b/arch/x86/startcontext.S deleted file mode 100644 index 1cbc68c..0000000 --- a/arch/x86/startcontext.S +++ /dev/null @@ -1,41 +0,0 @@ -/* - * 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 new file mode 100644 index 0000000..83eb453 --- /dev/null +++ b/arch/x86/trampoline.c @@ -0,0 +1,2 @@ +#include "defs.h" +#include "common-trampoline.c"