summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--system/libucontext/APKBUILD12
-rw-r--r--system/libucontext/git.patch115
-rw-r--r--system/libucontext/powerpc.patch1121
-rw-r--r--system/libucontext/static.patch76
4 files changed, 123 insertions, 1201 deletions
diff --git a/system/libucontext/APKBUILD b/system/libucontext/APKBUILD
index 93bc2b252..78b079435 100644
--- a/system/libucontext/APKBUILD
+++ b/system/libucontext/APKBUILD
@@ -1,17 +1,20 @@
# Maintainer: A. Wilcox <awilfox@adelielinux.org>
pkgname=libucontext
-pkgver=0.9.0
+pkgver=0.10
pkgrel=0
pkgdesc="Implementation of software-defined threading"
-url="https://code.foxkit.us/adelie/libucontext/"
+url=" "
arch="all"
license="ISC"
depends=""
makedepends=""
subpackages="$pkgname-dev"
-source="https://distfiles.adelielinux.org/source/libucontext/libucontext-$pkgver.tar.xz"
+source="https://distfiles.dereferenced.org/libucontext/libucontext-$pkgver.tar.xz
+ git.patch
+ "
case "$CTARGET_ARCH" in
+aarch64_be) LIBUCONTEXT_ARCH="aarch64" ;;
arm*) LIBUCONTEXT_ARCH="arm" ;;
ppc64le) LIBUCONTEXT_ARCH="ppc64" ;;
pmmx) LIBUCONTEXT_ARCH="x86" ;;
@@ -30,4 +33,5 @@ package() {
make ARCH="$LIBUCONTEXT_ARCH" DESTDIR="$pkgdir" install
}
-sha512sums="47ffa743e0b364d7a5d5ae633f89e83a7e3bbdf62a8a703a06a522c08b187b785548e8b8d58d53fc4fd984575f086794e74c12d40075326c6e88024e841550b6 libucontext-0.9.0.tar.xz"
+sha512sums="ef04485f66edd94711a15681953aed12652ea3821036e6a5b10d1ba3c0371ffabd689c85ee2403bc6a94544932e64855d8f5412f46b50d8b5a934f70a771fcb1 libucontext-0.10.tar.xz
+f3f5da2f76302fb3aeba8cca6e3485f264714ad12160e83ef92785a5f2a318cb4cea88e350df71dd6c976d075525361f36e67467ffb82b30fed6acee11be8095 git.patch"
diff --git a/system/libucontext/git.patch b/system/libucontext/git.patch
new file mode 100644
index 000000000..d42ee0803
--- /dev/null
+++ b/system/libucontext/git.patch
@@ -0,0 +1,115 @@
+From d7688a41df4cbe51e52bfebbab7d411548ed7738 Mon Sep 17 00:00:00 2001
+From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
+Date: Mon, 30 Mar 2020 02:22:43 -0500
+Subject: [PATCH 1/3] README: Remove support section
+
+This is no longer a member of the gcompat family of projects;
+remove the mention of that and the gcompat mailing list link.
+---
+ README.md | 5 -----
+ 1 file changed, 5 deletions(-)
+
+diff --git a/README.md b/README.md
+index 97a03b6..1db0516 100644
+--- a/README.md
++++ b/README.md
+@@ -38,8 +38,3 @@ $ make ARCH=x86_64 check
+ $ make ARCH=x86_64 DESTDIR=out install
+ ```
+
+-
+-## support
+-
+-`libucontext` is offered as part of the `gcompat` project. Accordingly, please address all questions
+-and bug reports to gcompat@lists.adelielinux.org.
+
+From e2178de76a7d3f41fed7cc5bef3e68eea623a72a Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 30 Mar 2020 08:21:20 +0000
+Subject: [PATCH 2/3] Makefile: Add LIBDIR variable
+
+This ensures that it can be installed into custom location and also
+
+Upstream-Status: Submitted
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ Makefile | 11 ++++++-----
+ 1 file changed, 6 insertions(+), 5 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index a8dedc2..74ebdbf 100644
+--- a/Makefile
++++ b/Makefile
+@@ -3,6 +3,7 @@ ifeq ($(ARCH),$(filter $(ARCH),i386 i686))
+ override ARCH = x86
+ endif
+
++LIBDIR := /lib
+ CFLAGS = -ggdb3 -O2 -Wall -Iarch/${ARCH} -Iarch/common
+
+ LIBUCONTEXT_C_SRC = $(wildcard arch/${ARCH}/*.c)
+@@ -13,8 +14,8 @@ LIBUCONTEXT_SOVERSION = 0
+ LIBUCONTEXT_NAME = libucontext.so
+ LIBUCONTEXT_STATIC_NAME = libucontext.a
+ LIBUCONTEXT_SONAME = libucontext.so.${LIBUCONTEXT_SOVERSION}
+-LIBUCONTEXT_PATH = /lib/${LIBUCONTEXT_SONAME}
+-LIBUCONTEXT_STATIC_PATH = /lib/${LIBUCONTEXT_STATIC_NAME}
++LIBUCONTEXT_PATH = ${LIBDIR}/${LIBUCONTEXT_SONAME}
++LIBUCONTEXT_STATIC_PATH = ${LIBDIR}/${LIBUCONTEXT_STATIC_NAME}
+
+ all: ${LIBUCONTEXT_SONAME} ${LIBUCONTEXT_STATIC_NAME}
+
+@@ -39,9 +40,9 @@ clean:
+ ${LIBUCONTEXT_OBJ} test_libucontext
+
+ install: all
+- install -D -m755 ${LIBUCONTEXT_NAME} ${DESTDIR}/${LIBUCONTEXT_PATH}
+- install -D -m664 ${LIBUCONTEXT_STATIC_NAME} ${DESTDIR}/${LIBUCONTEXT_STATIC_PATH}
+- ln -sf ${LIBUCONTEXT_SONAME} ${DESTDIR}/lib/${LIBUCONTEXT_NAME}
++ install -D -m755 ${LIBUCONTEXT_NAME} ${DESTDIR}${LIBUCONTEXT_PATH}
++ install -D -m664 ${LIBUCONTEXT_STATIC_NAME} ${DESTDIR}${LIBUCONTEXT_STATIC_PATH}
++ ln -sf ${LIBUCONTEXT_SONAME} ${DESTDIR}${LIBDIR}/${LIBUCONTEXT_NAME}
+
+ check: test_libucontext ${LIBUCONTEXT_SONAME}
+ env LD_LIBRARY_PATH=$(shell pwd) ./test_libucontext
+
+From 467ee2916d0eacbd32af10ead14e5d86e365fa2b Mon Sep 17 00:00:00 2001
+From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
+Date: Mon, 30 Mar 2020 17:25:30 -0500
+Subject: [PATCH 3/3] x86: Update copyright statement
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Commit d0ccf2f96f12bfa040cc056f7dc26b3fd25c168d contains the makecontext
+fix from Adélie commit aaeb73ea701388e55b7640e32509a5f6a57f6350[1], as
+seen at AdelieLinux/libucontext@aaeb73ea – but it didn't include the
+addition of my author line.
+
+The full commit text, for future documentation/reference, was:
+
+```
+x86: Write link pointer at correct stack offset
+
+It must come *after* the parameters, not *before*.
+```
+
+Fixes: d0ccf2f96f12 ("x86: modernize")
+Signed-off-by: A. Wilcox <AWilcox@Wilcox-Tech.com>
+
+[1]: https://code.foxkit.us/adelie/libucontext/commit/aaeb73ea701388e55b7640e32509a5f6a57f6350
+---
+ arch/x86/makecontext.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/arch/x86/makecontext.c b/arch/x86/makecontext.c
+index ee9c2e2..bc8163c 100644
+--- a/arch/x86/makecontext.c
++++ b/arch/x86/makecontext.c
+@@ -1,5 +1,6 @@
+ /*
+ * Copyright (c) 2018 Ariadne Conill <ariadne@dereferenced.org>
++ * Copyright (c) 2019 A. Wilcox <awilfox@adelielinux.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
diff --git a/system/libucontext/powerpc.patch b/system/libucontext/powerpc.patch
deleted file mode 100644
index ed7604d7b..000000000
--- a/system/libucontext/powerpc.patch
+++ /dev/null
@@ -1,1121 +0,0 @@
-From 94216c60c43a30e39fbc4f347450768699c6c77c Mon Sep 17 00:00:00 2001
-From: Bobby Bingham <koorogi@koorogi.info>
-Date: Mon, 1 Apr 2019 23:02:12 -0500
-Subject: [PATCH] test ability to pass 10 args through makecontext
-
----
- test_libucontext.c | 23 +++++++++++++++++++++--
- 1 file changed, 21 insertions(+), 2 deletions(-)
-
-diff --git a/test_libucontext.c b/test_libucontext.c
-index 121cc3e..e5eac83 100644
---- a/test_libucontext.c
-+++ b/test_libucontext.c
-@@ -6,13 +6,32 @@
- #include <stdio.h>
- #include <ucontext.h>
- #include <stdint.h>
-+#include <stdlib.h>
- #include <string.h>
-
-
- static ucontext_t ctx[3];
-
-
--static void f1 (void) {
-+static void check_arg(int actual, int expected) {
-+ if (actual == expected) return;
-+ fprintf(stderr, "argument has wrong value. got %d, expected %d.\n", actual, expected);
-+ abort();
-+}
-+
-+
-+static void f1 (int a, int b, int c, int d, int e, int f, int g, int h, int i, int j) {
-+ check_arg(a, 1);
-+ check_arg(b, 2);
-+ check_arg(c, 3);
-+ check_arg(d, 4);
-+ check_arg(e, 5);
-+ check_arg(f, 6);
-+ check_arg(g, 7);
-+ check_arg(h, 8);
-+ check_arg(i, 9);
-+ check_arg(j, 10);
-+
- printf("start f1\n");
- swapcontext(&ctx[1], &ctx[2]);
- printf("finish f1\n");
-@@ -40,7 +59,7 @@ int main (int argc, const char *argv[]) {
- ctx[1].uc_stack.ss_sp = st1;
- ctx[1].uc_stack.ss_size = sizeof st1;
- ctx[1].uc_link = &ctx[0];
-- makecontext(&ctx[1], f1, 0);
-+ makecontext(&ctx[1], f1, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
-
-
- getcontext(&ctx[2]);
-From cb59e7ee957b389578a3f973484ae3198f6cfed1 Mon Sep 17 00:00:00 2001
-From: Bobby Bingham <koorogi@koorogi.info>
-Date: Mon, 1 Apr 2019 23:03:21 -0500
-Subject: [PATCH] test calls to getcontext without makecontext
-
----
- test_libucontext.c | 12 ++++++++++++
- 1 file changed, 12 insertions(+)
-
-diff --git a/test_libucontext.c b/test_libucontext.c
-index e5eac83..a4a9b4c 100644
---- a/test_libucontext.c
-+++ b/test_libucontext.c
-@@ -48,6 +48,7 @@ static void f2 (void) {
- int main (int argc, const char *argv[]) {
- char st1[8192];
- char st2[8192];
-+ volatile int done = 0;
-
-
- /* poison each coroutine's stack memory for debugging purposes */
-@@ -70,5 +71,16 @@ int main (int argc, const char *argv[]) {
-
-
- swapcontext(&ctx[0], &ctx[2]);
-+
-+
-+ /* test ability to use getcontext/setcontext without makecontext */
-+ getcontext(&ctx[1]);
-+ printf("done = %d\n", done);
-+ if (done++ == 0) setcontext(&ctx[1]);
-+ if (done != 2) {
-+ fprintf(stderr, "wrong value for done. got %d, expected 2\n", done);
-+ abort();
-+ }
-+
- return 0;
- }
-From b6a9b5e279123f16569e0fd9f8ff14ff04bed7a3 Mon Sep 17 00:00:00 2001
-From: Bobby Bingham <koorogi@koorogi.info>
-Date: Fri, 5 Apr 2019 13:32:03 -0500
-Subject: [PATCH] ppc32: fix stack alignment
-
-The stack should be 16-byte aligned, not 8 mod 16.
----
- arch/ppc/makecontext.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/arch/ppc/makecontext.c b/arch/ppc/makecontext.c
-index c562ea5..1b9efdf 100644
---- a/arch/ppc/makecontext.c
-+++ b/arch/ppc/makecontext.c
-@@ -37,7 +37,7 @@ __makecontext(ucontext_t *ucp, void (*func)(void), int argc, ...)
-
- sp = (greg_t *) ((uintptr_t) ucp->uc_stack.ss_sp + ucp->uc_stack.ss_size);
- sp -= (uc_link + 1);
-- sp = (greg_t *) (((uintptr_t) sp & -16L) - 8);
-+ sp = (greg_t *) ((uintptr_t) sp & -16L);
-
- ucp->uc_mcontext.gregs[REG_NIP] = (uintptr_t) func;
- ucp->uc_mcontext.gregs[REG_LNK] = (uintptr_t) &__start_context;
-From b9bd4045fb34f060d6cf37fc7da7ab13b91462de Mon Sep 17 00:00:00 2001
-From: Bobby Bingham <koorogi@koorogi.info>
-Date: Fri, 5 Apr 2019 13:35:00 -0500
-Subject: [PATCH] ppc32/64: fix back chain pointer
-
-The ABI states that sp[0] should point to the previous stack frame, or be
-zero if there is no previous stack frame. makecontext previously set this
-slot to point to the __start_context function, rather than to a valid
-stack frame.
----
- arch/ppc/makecontext.c | 2 +-
- arch/ppc64/makecontext.c | 2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/arch/ppc/makecontext.c b/arch/ppc/makecontext.c
-index 1b9efdf..729f465 100644
---- a/arch/ppc/makecontext.c
-+++ b/arch/ppc/makecontext.c
-@@ -44,7 +44,7 @@ __makecontext(ucontext_t *ucp, void (*func)(void), int argc, ...)
- ucp->uc_mcontext.gregs[REG_R31] = (uintptr_t) ucp->uc_link;
- ucp->uc_mcontext.gregs[REG_SP] = (uintptr_t) sp;
-
-- sp[0] = (uintptr_t) &__start_context;
-+ sp[0] = 0;
- sp[uc_link] = (uintptr_t) ucp->uc_link;
- argp = &sp[2];
-
-diff --git a/arch/ppc64/makecontext.c b/arch/ppc64/makecontext.c
-index 9d6b998..91fb579 100644
---- a/arch/ppc64/makecontext.c
-+++ b/arch/ppc64/makecontext.c
-@@ -45,7 +45,7 @@ __makecontext(ucontext_t *ucp, void (*func)(void), int argc, ...)
- ucp->uc_mcontext.gp_regs[REG_ENTRY] = (uintptr_t) func;
- ucp->uc_mcontext.gp_regs[REG_R31] = (uintptr_t) ucp->uc_link;
-
-- sp[0] = (uintptr_t) &__start_context;
-+ sp[0] = 0;
- sp[uc_link] = (uintptr_t) ucp->uc_link;
- argp = &sp[2];
-
-From b500b054c7cf412a6042496afa08b4302f7ed929 Mon Sep 17 00:00:00 2001
-From: Bobby Bingham <koorogi@koorogi.info>
-Date: Fri, 5 Apr 2019 13:38:36 -0500
-Subject: [PATCH] ppc32/64: don't store uc_link on the stack
-
-This was previously stored either in the CR (ppc64) or LR (ppc32) save
-area of the stack, or to one of the parameter save slots.
-
-In either case, the saved value was unused. This value is also passed
-to __start_context via r31, so there's no need to pass it on the stack.
----
- arch/ppc/makecontext.c | 6 ++----
- arch/ppc64/makecontext.c | 6 ++----
- 2 files changed, 4 insertions(+), 8 deletions(-)
-
-diff --git a/arch/ppc/makecontext.c b/arch/ppc/makecontext.c
-index 729f465..2b7ea67 100644
---- a/arch/ppc/makecontext.c
-+++ b/arch/ppc/makecontext.c
-@@ -30,13 +30,12 @@ __makecontext(ucontext_t *ucp, void (*func)(void), int argc, ...)
- greg_t *sp, *argp;
- va_list va;
- int i;
-- unsigned int uc_link, stack_args;
-+ unsigned int stack_args;
-
- stack_args = argc > 8 ? argc - 8 : 0;
-- uc_link = stack_args + 1;
-
- sp = (greg_t *) ((uintptr_t) ucp->uc_stack.ss_sp + ucp->uc_stack.ss_size);
-- sp -= (uc_link + 1);
-+ sp -= stack_args + 2;
- sp = (greg_t *) ((uintptr_t) sp & -16L);
-
- ucp->uc_mcontext.gregs[REG_NIP] = (uintptr_t) func;
-@@ -45,7 +44,6 @@ __makecontext(ucontext_t *ucp, void (*func)(void), int argc, ...)
- ucp->uc_mcontext.gregs[REG_SP] = (uintptr_t) sp;
-
- sp[0] = 0;
-- sp[uc_link] = (uintptr_t) ucp->uc_link;
- argp = &sp[2];
-
- va_start(va, argc);
-diff --git a/arch/ppc64/makecontext.c b/arch/ppc64/makecontext.c
-index 91fb579..b060371 100644
---- a/arch/ppc64/makecontext.c
-+++ b/arch/ppc64/makecontext.c
-@@ -30,13 +30,12 @@ __makecontext(ucontext_t *ucp, void (*func)(void), int argc, ...)
- greg_t *sp, *argp;
- va_list va;
- int i;
-- unsigned int uc_link, stack_args;
-+ unsigned int stack_args;
-
- stack_args = argc > 8 ? argc - 8 : 0;
-- uc_link = stack_args + 1;
-
- sp = (greg_t *) ((uintptr_t) ucp->uc_stack.ss_sp + ucp->uc_stack.ss_size);
-- sp -= (uc_link + 1);
-+ sp -= stack_args + 2;
- sp = (greg_t *) (((uintptr_t) sp & -16L));
-
- ucp->uc_mcontext.gp_regs[REG_NIP] = (uintptr_t) func;
-@@ -46,7 +45,6 @@ __makecontext(ucontext_t *ucp, void (*func)(void), int argc, ...)
- ucp->uc_mcontext.gp_regs[REG_R31] = (uintptr_t) ucp->uc_link;
-
- sp[0] = 0;
-- sp[uc_link] = (uintptr_t) ucp->uc_link;
- argp = &sp[2];
-
- va_start(va, argc);
-From 55168fcb1809dde45c99450f1f3be27716c473db Mon Sep 17 00:00:00 2001
-From: Bobby Bingham <koorogi@koorogi.info>
-Date: Fri, 5 Apr 2019 13:57:53 -0500
-Subject: [PATCH] ppc32/64: simplify storage of stack parameters
-
-The switch statement is simpler as an if/else, and removing the argp
-variable makes the code more symmetric between the register and stack
-parameter cases.
----
- arch/ppc/makecontext.c | 24 ++++++------------------
- arch/ppc64/makecontext.c | 24 ++++++------------------
- 2 files changed, 12 insertions(+), 36 deletions(-)
-
-diff --git a/arch/ppc/makecontext.c b/arch/ppc/makecontext.c
-index 2b7ea67..4a404a4 100644
---- a/arch/ppc/makecontext.c
-+++ b/arch/ppc/makecontext.c
-@@ -27,7 +27,7 @@ extern void __start_context(void);
- void
- __makecontext(ucontext_t *ucp, void (*func)(void), int argc, ...)
- {
-- greg_t *sp, *argp;
-+ greg_t *sp;
- va_list va;
- int i;
- unsigned int stack_args;
-@@ -44,27 +44,15 @@ __makecontext(ucontext_t *ucp, void (*func)(void), int argc, ...)
- ucp->uc_mcontext.gregs[REG_SP] = (uintptr_t) sp;
-
- sp[0] = 0;
-- argp = &sp[2];
-
- va_start(va, argc);
-
-- for (i = 0; i < argc; i++)
-- switch (i)
-- {
-- case 0:
-- case 1:
-- case 2:
-- case 3:
-- case 4:
-- case 5:
-- case 6:
-- case 7:
-+ for (i = 0; i < argc; i++) {
-+ if (i < 8)
- ucp->uc_mcontext.gregs[i + 3] = va_arg (va, greg_t);
-- break;
-- default:
-- *argp++ = va_arg (va, greg_t);
-- break;
-- }
-+ else
-+ sp[i-8 + 2] = va_arg (va, greg_t);
-+ }
-
- va_end(va);
- }
-diff --git a/arch/ppc64/makecontext.c b/arch/ppc64/makecontext.c
-index b060371..962f98a 100644
---- a/arch/ppc64/makecontext.c
-+++ b/arch/ppc64/makecontext.c
-@@ -27,7 +27,7 @@ extern void __start_context(void);
- void
- __makecontext(ucontext_t *ucp, void (*func)(void), int argc, ...)
- {
-- greg_t *sp, *argp;
-+ greg_t *sp;
- va_list va;
- int i;
- unsigned int stack_args;
-@@ -45,27 +45,15 @@ __makecontext(ucontext_t *ucp, void (*func)(void), int argc, ...)
- ucp->uc_mcontext.gp_regs[REG_R31] = (uintptr_t) ucp->uc_link;
-
- sp[0] = 0;
-- argp = &sp[2];
-
- va_start(va, argc);
-
-- for (i = 0; i < argc; i++)
-- switch (i)
-- {
-- case 0:
-- case 1:
-- case 2:
-- case 3:
-- case 4:
-- case 5:
-- case 6:
-- case 7:
-+ for (i = 0; i < argc; i++) {
-+ if (i < 8)
- ucp->uc_mcontext.gp_regs[i + 3] = va_arg (va, greg_t);
-- break;
-- default:
-- *argp++ = va_arg (va, greg_t);
-- break;
-- }
-+ else
-+ sp[i-8 + 2] = va_arg (va, greg_t);
-+ }
-
- va_end(va);
- }
-From 8ea5f548b9146ffeea2074a33a06bbbd07a74402 Mon Sep 17 00:00:00 2001
-From: Bobby Bingham <koorogi@koorogi.info>
-Date: Fri, 5 Apr 2019 14:01:10 -0500
-Subject: [PATCH] ppc64: fix makecontext with more than 8 parameters
-
-The ELFv2 ABI used on PPC64 differs from the ELFv1 ABI used on PPC32 here.
-On PPC64, once there are any parameters that need to be passed on the
-stack, space needs to be reserved on the stack to pass all parameters.
-Parameters 0-7 are still only passed by register, but if the callee needs
-to spill them, it can use the stack space reserved for the corresponding
-parameter to do so.
----
- arch/ppc64/makecontext.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/arch/ppc64/makecontext.c b/arch/ppc64/makecontext.c
-index 962f98a..ea980e9 100644
---- a/arch/ppc64/makecontext.c
-+++ b/arch/ppc64/makecontext.c
-@@ -32,7 +32,7 @@ __makecontext(ucontext_t *ucp, void (*func)(void), int argc, ...)
- int i;
- unsigned int stack_args;
-
-- stack_args = argc > 8 ? argc - 8 : 0;
-+ stack_args = argc > 8 ? argc : 0;
-
- sp = (greg_t *) ((uintptr_t) ucp->uc_stack.ss_sp + ucp->uc_stack.ss_size);
- sp -= stack_args + 2;
-@@ -52,7 +52,7 @@ __makecontext(ucontext_t *ucp, void (*func)(void), int argc, ...)
- if (i < 8)
- ucp->uc_mcontext.gp_regs[i + 3] = va_arg (va, greg_t);
- else
-- sp[i-8 + 2] = va_arg (va, greg_t);
-+ sp[i + 2] = va_arg (va, greg_t);
- }
-
- va_end(va);
-From a00a05ce2950ca3b306f8ccc3e817ea8cd675015 Mon Sep 17 00:00:00 2001
-From: Bobby Bingham <koorogi@koorogi.info>
-Date: Fri, 5 Apr 2019 14:03:47 -0500
-Subject: [PATCH] ppc64: fix incorrect position of parameters within stack
- frame
-
-On PPC64, there are 4 register-sized stack slots below the parameter save
-area, which is different from the 2 stack slots on PPC32.
----
- arch/ppc64/makecontext.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/arch/ppc64/makecontext.c b/arch/ppc64/makecontext.c
-index ea980e9..a4c1bf9 100644
---- a/arch/ppc64/makecontext.c
-+++ b/arch/ppc64/makecontext.c
-@@ -35,7 +35,7 @@ __makecontext(ucontext_t *ucp, void (*func)(void), int argc, ...)
- stack_args = argc > 8 ? argc : 0;
-
- sp = (greg_t *) ((uintptr_t) ucp->uc_stack.ss_sp + ucp->uc_stack.ss_size);
-- sp -= stack_args + 2;
-+ sp -= stack_args + 4;
- sp = (greg_t *) (((uintptr_t) sp & -16L));
-
- ucp->uc_mcontext.gp_regs[REG_NIP] = (uintptr_t) func;
-@@ -52,7 +52,7 @@ __makecontext(ucontext_t *ucp, void (*func)(void), int argc, ...)
- if (i < 8)
- ucp->uc_mcontext.gp_regs[i + 3] = va_arg (va, greg_t);
- else
-- sp[i + 2] = va_arg (va, greg_t);
-+ sp[i + 4] = va_arg (va, greg_t);
- }
-
- va_end(va);
-From 40d07758a5677e8869d7a62a499236bb6ed01897 Mon Sep 17 00:00:00 2001
-From: Bobby Bingham <koorogi@koorogi.info>
-Date: Fri, 5 Apr 2019 14:09:25 -0500
-Subject: [PATCH] ppc32/64: correct signature of function parameter to
- makecontext
-
-Because makecontext can pass a set of integer arguments to the provided
-function, it is incorrect to require that this function accept no
-parameters.
----
- arch/ppc/makecontext.c | 2 +-
- arch/ppc64/makecontext.c | 2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/arch/ppc/makecontext.c b/arch/ppc/makecontext.c
-index 4a404a4..0633c0f 100644
---- a/arch/ppc/makecontext.c
-+++ b/arch/ppc/makecontext.c
-@@ -25,7 +25,7 @@ extern void __start_context(void);
-
-
- void
--__makecontext(ucontext_t *ucp, void (*func)(void), int argc, ...)
-+__makecontext(ucontext_t *ucp, void (*func)(), int argc, ...)
- {
- greg_t *sp;
- va_list va;
-diff --git a/arch/ppc64/makecontext.c b/arch/ppc64/makecontext.c
-index a4c1bf9..8a293b5 100644
---- a/arch/ppc64/makecontext.c
-+++ b/arch/ppc64/makecontext.c
-@@ -25,7 +25,7 @@ extern void __start_context(void);
-
-
- void
--__makecontext(ucontext_t *ucp, void (*func)(void), int argc, ...)
-+__makecontext(ucontext_t *ucp, void (*func)(), int argc, ...)
- {
- greg_t *sp;
- va_list va;
-From edf69879eadaec0c72ba7ef5e7d2389946c6644b Mon Sep 17 00:00:00 2001
-From: Bobby Bingham <koorogi@koorogi.info>
-Date: Fri, 5 Apr 2019 14:09:39 -0500
-Subject: [PATCH] ppc64: remove unnecessary parentheses
-
----
- arch/ppc64/makecontext.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/arch/ppc64/makecontext.c b/arch/ppc64/makecontext.c
-index 8a293b5..84d390a 100644
---- a/arch/ppc64/makecontext.c
-+++ b/arch/ppc64/makecontext.c
-@@ -36,7 +36,7 @@ __makecontext(ucontext_t *ucp, void (*func)(), int argc, ...)
-
- sp = (greg_t *) ((uintptr_t) ucp->uc_stack.ss_sp + ucp->uc_stack.ss_size);
- sp -= stack_args + 4;
-- sp = (greg_t *) (((uintptr_t) sp & -16L));
-+ sp = (greg_t *) ((uintptr_t) sp & -16L);
-
- ucp->uc_mcontext.gp_regs[REG_NIP] = (uintptr_t) func;
- ucp->uc_mcontext.gp_regs[REG_LNK] = (uintptr_t) &__start_context;
-From 29eac4259adfd85e0f4946a1080bb9e3f8c0cc2e Mon Sep 17 00:00:00 2001
-From: Bobby Bingham <koorogi@koorogi.info>
-Date: Fri, 5 Apr 2019 14:10:28 -0500
-Subject: [PATCH] ppc32/64: remove unused includes
-
----
- arch/ppc/makecontext.c | 2 --
- arch/ppc64/makecontext.c | 2 --
- 2 files changed, 4 deletions(-)
-
-diff --git a/arch/ppc/makecontext.c b/arch/ppc/makecontext.c
-index 0633c0f..7214a40 100644
---- a/arch/ppc/makecontext.c
-+++ b/arch/ppc/makecontext.c
-@@ -11,10 +11,8 @@
- */
-
- #define _GNU_SOURCE
--#include <stddef.h>
- #include <stdarg.h>
- #include <signal.h>
--#include <string.h>
- #include <stdint.h>
-
-
-diff --git a/arch/ppc64/makecontext.c b/arch/ppc64/makecontext.c
-index 84d390a..2650f56 100644
---- a/arch/ppc64/makecontext.c
-+++ b/arch/ppc64/makecontext.c
-@@ -11,10 +11,8 @@
- */
-
- #define _GNU_SOURCE
--#include <stddef.h>
- #include <stdarg.h>
- #include <signal.h>
--#include <string.h>
- #include <stdint.h>
-
-
-From 90ff6330e62c8f836016668c9f769af365b257cb Mon Sep 17 00:00:00 2001
-From: Bobby Bingham <koorogi@koorogi.info>
-Date: Fri, 5 Apr 2019 14:11:21 -0500
-Subject: [PATCH] ppc32/64: update copyright
-
----
- arch/ppc/makecontext.c | 1 +
- arch/ppc64/makecontext.c | 1 +
- 2 files changed, 2 insertions(+)
-
-diff --git a/arch/ppc/makecontext.c b/arch/ppc/makecontext.c
-index 7214a40..51c492f 100644
---- a/arch/ppc/makecontext.c
-+++ b/arch/ppc/makecontext.c
-@@ -1,5 +1,6 @@
- /*
- * Copyright (c) 2018 William Pitcock <nenolod@dereferenced.org>
-+ * Copyright (c) 2019 Bobby Bingham <koorogi@koorogi.info>
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
-diff --git a/arch/ppc64/makecontext.c b/arch/ppc64/makecontext.c
-index 2650f56..43da557 100644
---- a/arch/ppc64/makecontext.c
-+++ b/arch/ppc64/makecontext.c
-@@ -1,5 +1,6 @@
- /*
- * Copyright (c) 2018 William Pitcock <nenolod@dereferenced.org>
-+ * Copyright (c) 2019 Bobby Bingham <koorogi@koorogi.info>
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
-From 2610c7faa7b9c4114d53bb659264a6be238cd2a3 Mon Sep 17 00:00:00 2001
-From: Bobby Bingham <koorogi@koorogi.info>
-Date: Sat, 23 Feb 2019 17:12:37 -0600
-Subject: [PATCH] ppc32/64: rewrite get/set/swapcontext in assembly
-
-getcontext cannot be correctly implemented in C.
-
-If this calls another function, as it does to call syscall, it needs to
-first spill its return address to the stack. If, after getcontext returns,
-its caller then calls other functions, this saved return address can be
-clobbered. When the context saved by getcontext is later restored, the
-(now clobbered) return address will be reloaded from the stack, and the
-second return from getcontext will return to the wrong location.
-
-Because the powerpc swapcontext syscall allows either the old context or
-new context pointers to be null, it is usable for implementing all of
-get/set/swapcontext.
-
-We therefore rewrite swapcontext in assembly, and get/setcontext as simple
-assembly function wrappers around swapcontext.
-
-The one piece we keep in C is the code to check the return value of the
-system call and to set errno. This code was actually unnecessary before --
-libc does this within syscall. However, now that the system call is made
-directly in assembly, bypassing libc, it is truly necessary. Because errno
-is thread-local and the details of how to set it can vary by libc, this
-code remains written in C.
----
- Makefile | 10 +----
- README.md | 2 +-
- arch/ppc/getcontext.S | 20 +++++++++
- arch/ppc/{getcontext.c => retfromsyscall.c} | 30 +++----------
- arch/ppc/setcontext.S | 21 +++++++++
- arch/ppc/setcontext.c | 45 -------------------
- arch/ppc/swapcontext.S | 23 ++++++++++
- arch/ppc/swapcontext.c | 45 -------------------
- arch/ppc64/getcontext.S | 25 +++++++++++
- arch/ppc64/{getcontext.c => retfromsyscall.c} | 30 +++----------
- arch/ppc64/setcontext.S | 26 +++++++++++
- arch/ppc64/setcontext.c | 45 -------------------
- arch/ppc64/swapcontext.S | 28 ++++++++++++
- arch/ppc64/swapcontext.c | 45 -------------------
- 14 files changed, 156 insertions(+), 239 deletions(-)
- create mode 100644 arch/ppc/getcontext.S
- rename arch/ppc/{getcontext.c => retfromsyscall.c} (53%)
- create mode 100644 arch/ppc/setcontext.S
- delete mode 100644 arch/ppc/setcontext.c
- create mode 100644 arch/ppc/swapcontext.S
- delete mode 100644 arch/ppc/swapcontext.c
- create mode 100644 arch/ppc64/getcontext.S
- rename arch/ppc64/{getcontext.c => retfromsyscall.c} (53%)
- create mode 100644 arch/ppc64/setcontext.S
- delete mode 100644 arch/ppc64/setcontext.c
- create mode 100644 arch/ppc64/swapcontext.S
- delete mode 100644 arch/ppc64/swapcontext.c
-
-diff --git a/Makefile b/Makefile
-index 51365a3..d6ff1b0 100644
---- a/Makefile
-+++ b/Makefile
-@@ -2,14 +2,8 @@ ARCH := $(shell uname -m)
-
- CFLAGS = -ggdb3 -O2 -Wall -Iarch/${ARCH}
-
--LIBUCONTEXT_C_SRC = \
-- arch/${ARCH}/makecontext.c
--
--LIBUCONTEXT_S_SRC = \
-- arch/${ARCH}/getcontext.S \
-- arch/${ARCH}/setcontext.S \
-- arch/${ARCH}/swapcontext.S \
-- arch/${ARCH}/startcontext.S
-+LIBUCONTEXT_C_SRC = $(wildcard arch/${ARCH}/*.c)
-+LIBUCONTEXT_S_SRC = $(wildcard arch/${ARCH}/*.S)
-
- LIBUCONTEXT_OBJ = ${LIBUCONTEXT_C_SRC:.c=.o} ${LIBUCONTEXT_S_SRC:.S=.o}
- LIBUCONTEXT_SOVERSION = 0
-diff --git a/README.md b/README.md
-index 6bd4493..27d3d0b 100644
---- a/README.md
-+++ b/README.md
-@@ -19,7 +19,7 @@ Right now these archs are supported and should work on bare metal:
- * aarch64
- * s390x
-
--These archs require kernel assistance and use a syscall (the only assembly is the trampoline):
-+These archs require kernel assistance and use a syscall:
-
- * ppc
- * ppc64 (ELFv2 ABI spec only, ELFv1 not supported)
-diff --git a/arch/ppc/getcontext.S b/arch/ppc/getcontext.S
-new file mode 100644
-index 0000000..beffaf5
---- /dev/null
-+++ b/arch/ppc/getcontext.S
-@@ -0,0 +1,20 @@
-+/*
-+ * Copyright (c) 2019 Bobby Bingham <koorogi@koorogi.info>
-+ *
-+ * 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.
-+ */
-+
-+.global __getcontext
-+.hidden __swapcontext
-+__getcontext:
-+ li 4, 0
-+ b __swapcontext@local
-+
-+.weak getcontext
-+getcontext = __getcontext
-diff --git a/arch/ppc/getcontext.c b/arch/ppc/retfromsyscall.c
-similarity index 53%
-rename from arch/ppc/getcontext.c
-rename to arch/ppc/retfromsyscall.c
-index 5da9dfb..3ad43c0 100644
---- a/arch/ppc/getcontext.c
-+++ b/arch/ppc/retfromsyscall.c
-@@ -1,5 +1,6 @@
- /*
- * Copyright (c) 2018 William Pitcock <nenolod@dereferenced.org>
-+ * Copyright (c) 2019 Bobby Bingham <koorogi@koorogi.info>
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
-@@ -10,36 +11,15 @@
- * from the use of this software.
- */
-
--#define _GNU_SOURCE
--#include <stddef.h>
--#include <stdarg.h>
--#include <signal.h>
--#include <string.h>
--#include <stdint.h>
- #include <errno.h>
--#include <unistd.h>
--#include <sys/syscall.h>
-
--
--int
--__getcontext(ucontext_t *ucp)
-+__attribute__ ((visibility ("hidden")))
-+int __retfromsyscall(long retval)
- {
--#ifdef SYS_swapcontext
-- int r;
--
-- r = syscall(SYS_swapcontext, ucp, NULL, sizeof(ucontext_t));
-- if (r < 0)
-- {
-- errno = -r;
-+ if (retval < 0) {
-+ errno = -retval;
- return -1;
- }
--
- return 0;
--#else
-- errno = ENOSYS;
-- return -1;
--#endif
- }
-
--
--extern __typeof(__getcontext) getcontext __attribute__((weak, __alias__("__getcontext")));
-diff --git a/arch/ppc/setcontext.S b/arch/ppc/setcontext.S
-new file mode 100644
-index 0000000..89e6de0
---- /dev/null
-+++ b/arch/ppc/setcontext.S
-@@ -0,0 +1,21 @@
-+/*
-+ * Copyright (c) 2019 Bobby Bingham <koorogi@koorogi.info>
-+ *
-+ * 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.
-+ */
-+
-+.global __setcontext
-+.hidden __swapcontext
-+__setcontext:
-+ mr 4, 3
-+ li 3, 0
-+ b __swapcontext@local
-+
-+.weak setcontext
-+setcontext = __setcontext
-diff --git a/arch/ppc/setcontext.c b/arch/ppc/setcontext.c
-deleted file mode 100644
-index 59c65b4..0000000
---- a/arch/ppc/setcontext.c
-+++ /dev/null
-@@ -1,45 +0,0 @@
--/*
-- * Copyright (c) 2018 William Pitcock <nenolod@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.
-- */
--
--#define _GNU_SOURCE
--#include <stddef.h>
--#include <stdarg.h>
--#include <signal.h>
--#include <string.h>
--#include <stdint.h>
--#include <errno.h>
--#include <unistd.h>
--#include <sys/syscall.h>
--
--
--int
--__setcontext(const ucontext_t *ucp)
--{
--#ifdef SYS_swapcontext
-- int r;
--
-- r = syscall(SYS_swapcontext, NULL, (void *) ucp, sizeof(ucontext_t));
-- if (r < 0)
-- {
-- errno = -r;
-- return -1;
-- }
--
-- return r;
--#else
-- errno = ENOSYS;
-- return -1;
--#endif
--}
--
--
--extern __typeof(__setcontext) setcontext __attribute__((weak, __alias__("__setcontext")));
-diff --git a/arch/ppc/swapcontext.S b/arch/ppc/swapcontext.S
-new file mode 100644
-index 0000000..24b6655
---- /dev/null
-+++ b/arch/ppc/swapcontext.S
-@@ -0,0 +1,23 @@
-+/*
-+ * Copyright (c) 2019 Bobby Bingham <koorogi@koorogi.info>
-+ *
-+ * 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.
-+ */
-+
-+.global __swapcontext
-+__swapcontext:
-+ li 0, 249 # SYS_swapcontext
-+ li 5, 1184 # sizeof(ucontext_t)
-+ sc
-+
-+.hidden __retfromsyscall
-+ b __retfromsyscall@local
-+
-+.weak swapcontext
-+swapcontext = __swapcontext
-diff --git a/arch/ppc/swapcontext.c b/arch/ppc/swapcontext.c
-deleted file mode 100644
-index af14bc2..0000000
---- a/arch/ppc/swapcontext.c
-+++ /dev/null
-@@ -1,45 +0,0 @@
--/*
-- * Copyright (c) 2018 William Pitcock <nenolod@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.
-- */
--
--#define _GNU_SOURCE
--#include <stddef.h>
--#include <stdarg.h>
--#include <signal.h>
--#include <string.h>
--#include <stdint.h>
--#include <errno.h>
--#include <unistd.h>
--#include <sys/syscall.h>
--
--
--int
--__swapcontext(ucontext_t *oucp, const ucontext_t *ucp)
--{
--#ifdef SYS_swapcontext
-- int r;
--
-- r = syscall(SYS_swapcontext, oucp, ucp, sizeof(ucontext_t));
-- if (r < 0)
-- {
-- errno = -r;
-- return -1;
-- }
--
-- return r;
--#else
-- errno = ENOSYS;
-- return -1;
--#endif
--}
--
--
--extern __typeof(__swapcontext) swapcontext __attribute__((weak, __alias__("__swapcontext")));
-diff --git a/arch/ppc64/getcontext.S b/arch/ppc64/getcontext.S
-new file mode 100644
-index 0000000..935edd2
---- /dev/null
-+++ b/arch/ppc64/getcontext.S
-@@ -0,0 +1,25 @@
-+/*
-+ * Copyright (c) 2019 Bobby Bingham <koorogi@koorogi.info>
-+ *
-+ * 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.
-+ */
-+
-+.global __getcontext
-+.hidden __swapcontext
-+__getcontext:
-+ addis 2, 12, .TOC.-__getcontext@ha
-+ addi 2, 12, .TOC.-__getcontext@l
-+
-+ .localentry __getcontext,.-__getcontext
-+
-+ li 4, 0
-+ b __swapcontext
-+
-+.weak getcontext
-+getcontext = __getcontext
-diff --git a/arch/ppc64/getcontext.c b/arch/ppc64/retfromsyscall.c
-similarity index 53%
-rename from arch/ppc64/getcontext.c
-rename to arch/ppc64/retfromsyscall.c
-index 5da9dfb..3ad43c0 100644
---- a/arch/ppc64/getcontext.c
-+++ b/arch/ppc64/retfromsyscall.c
-@@ -1,5 +1,6 @@
- /*
- * Copyright (c) 2018 William Pitcock <nenolod@dereferenced.org>
-+ * Copyright (c) 2019 Bobby Bingham <koorogi@koorogi.info>
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
-@@ -10,36 +11,15 @@
- * from the use of this software.
- */
-
--#define _GNU_SOURCE
--#include <stddef.h>
--#include <stdarg.h>
--#include <signal.h>
--#include <string.h>
--#include <stdint.h>
- #include <errno.h>
--#include <unistd.h>
--#include <sys/syscall.h>
-
--
--int
--__getcontext(ucontext_t *ucp)
-+__attribute__ ((visibility ("hidden")))
-+int __retfromsyscall(long retval)
- {
--#ifdef SYS_swapcontext
-- int r;
--
-- r = syscall(SYS_swapcontext, ucp, NULL, sizeof(ucontext_t));
-- if (r < 0)
-- {
-- errno = -r;
-+ if (retval < 0) {
-+ errno = -retval;
- return -1;
- }
--
- return 0;
--#else
-- errno = ENOSYS;
-- return -1;
--#endif
- }
-
--
--extern __typeof(__getcontext) getcontext __attribute__((weak, __alias__("__getcontext")));
-diff --git a/arch/ppc64/setcontext.S b/arch/ppc64/setcontext.S
-new file mode 100644
-index 0000000..5a0cde3
---- /dev/null
-+++ b/arch/ppc64/setcontext.S
-@@ -0,0 +1,26 @@
-+/*
-+ * Copyright (c) 2019 Bobby Bingham <koorogi@koorogi.info>
-+ *
-+ * 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.
-+ */
-+
-+.global __setcontext
-+.hidden __swapcontext
-+__setcontext:
-+ addis 2, 12, .TOC.-__setcontext@ha
-+ addi 2, 12, .TOC.-__setcontext@l
-+
-+ .localentry __setcontext,.-__setcontext
-+
-+ mr 4, 3
-+ li 3, 0
-+ b __swapcontext
-+
-+.weak setcontext
-+setcontext = __setcontext
-diff --git a/arch/ppc64/setcontext.c b/arch/ppc64/setcontext.c
-deleted file mode 100644
-index 59c65b4..0000000
---- a/arch/ppc64/setcontext.c
-+++ /dev/null
-@@ -1,45 +0,0 @@
--/*
-- * Copyright (c) 2018 William Pitcock <nenolod@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.
-- */
--
--#define _GNU_SOURCE
--#include <stddef.h>
--#include <stdarg.h>
--#include <signal.h>
--#include <string.h>
--#include <stdint.h>
--#include <errno.h>
--#include <unistd.h>
--#include <sys/syscall.h>
--
--
--int
--__setcontext(const ucontext_t *ucp)
--{
--#ifdef SYS_swapcontext
-- int r;
--
-- r = syscall(SYS_swapcontext, NULL, (void *) ucp, sizeof(ucontext_t));
-- if (r < 0)
-- {
-- errno = -r;
-- return -1;
-- }
--
-- return r;
--#else
-- errno = ENOSYS;
-- return -1;
--#endif
--}
--
--
--extern __typeof(__setcontext) setcontext __attribute__((weak, __alias__("__setcontext")));
-diff --git a/arch/ppc64/swapcontext.S b/arch/ppc64/swapcontext.S
-new file mode 100644
-index 0000000..982537a
---- /dev/null
-+++ b/arch/ppc64/swapcontext.S
-@@ -0,0 +1,28 @@
-+/*
-+ * Copyright (c) 2019 Bobby Bingham <koorogi@koorogi.info>
-+ *
-+ * 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.
-+ */
-+
-+.global __swapcontext
-+__swapcontext:
-+ addis 2, 12, .TOC.-__swapcontext@ha
-+ addi 2, 12, .TOC.-__swapcontext@l
-+
-+ .localentry __swapcontext,.-__swapcontext
-+
-+ li 0, 249 # SYS_swapcontext
-+ li 5, 1696 # sizeof(ucontext_t)
-+ sc
-+
-+.hidden __retfromsyscall
-+ b __retfromsyscall
-+
-+.weak swapcontext
-+swapcontext = __swapcontext
-diff --git a/arch/ppc64/swapcontext.c b/arch/ppc64/swapcontext.c
-deleted file mode 100644
-index af14bc2..0000000
---- a/arch/ppc64/swapcontext.c
-+++ /dev/null
-@@ -1,45 +0,0 @@
--/*
-- * Copyright (c) 2018 William Pitcock <nenolod@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.
-- */
--
--#define _GNU_SOURCE
--#include <stddef.h>
--#include <stdarg.h>
--#include <signal.h>
--#include <string.h>
--#include <stdint.h>
--#include <errno.h>
--#include <unistd.h>
--#include <sys/syscall.h>
--
--
--int
--__swapcontext(ucontext_t *oucp, const ucontext_t *ucp)
--{
--#ifdef SYS_swapcontext
-- int r;
--
-- r = syscall(SYS_swapcontext, oucp, ucp, sizeof(ucontext_t));
-- if (r < 0)
-- {
-- errno = -r;
-- return -1;
-- }
--
-- return r;
--#else
-- errno = ENOSYS;
-- return -1;
--#endif
--}
--
--
--extern __typeof(__swapcontext) swapcontext __attribute__((weak, __alias__("__swapcontext")));
diff --git a/system/libucontext/static.patch b/system/libucontext/static.patch
deleted file mode 100644
index a51e55f64..000000000
--- a/system/libucontext/static.patch
+++ /dev/null
@@ -1,76 +0,0 @@
-From 9cc1a2c0e62c75dc7afd20d5e337953f44693b70 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Gabriel=20Iva=C8=99cu?= <givascu@bitdefender.com>
-Date: Tue, 9 Apr 2019 16:07:39 +0300
-Subject: [PATCH] Build static library too
-
----
- Makefile | 6 +++++-
- 1 file changed, 5 insertions(+), 1 deletion(-)
-
-diff --git a/Makefile b/Makefile
-index d6ff1b0..d81153c 100644
---- a/Makefile
-+++ b/Makefile
-@@ -8,10 +8,14 @@ LIBUCONTEXT_S_SRC = $(wildcard arch/${ARCH}/*.S)
- LIBUCONTEXT_OBJ = ${LIBUCONTEXT_C_SRC:.c=.o} ${LIBUCONTEXT_S_SRC:.S=.o}
- LIBUCONTEXT_SOVERSION = 0
- LIBUCONTEXT_NAME = libucontext.so
-+LIBUCONTEXT_STATIC_NAME = libucontext.a
- LIBUCONTEXT_SONAME = libucontext.so.${LIBUCONTEXT_SOVERSION}
- LIBUCONTEXT_PATH = /lib/${LIBUCONTEXT_SONAME}
-
--all: ${LIBUCONTEXT_SONAME}
-+all: ${LIBUCONTEXT_SONAME} ${LIBUCONTEXT_STATIC_NAME}
-+
-+${LIBUCONTEXT_STATIC_NAME}: ${LIBUCONTEXT_OBJ}
-+ $(AR) rcs ${LIBUCONTEXT_STATIC_NAME} ${LIBUCONTEXT_OBJ}
-
- ${LIBUCONTEXT_NAME}: ${LIBUCONTEXT_OBJ}
- $(CC) -o ${LIBUCONTEXT_NAME} -Wl,-soname,${LIBUCONTEXT_SONAME} \
-From 2e15b383272fafbbb92882990b8f339e2c6888d2 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Gabriel=20Iva=C8=99cu?= <givascu@bitdefender.com>
-Date: Fri, 12 Apr 2019 10:48:24 +0300
-Subject: [PATCH] Makefile: Handle static library at clean/install
-
----
- .gitignore | 1 +
- Makefile | 5 ++++-
- 2 files changed, 5 insertions(+), 1 deletion(-)
-
-diff --git a/.gitignore b/.gitignore
-index 4fb95ca..d2e350f 100644
---- a/.gitignore
-+++ b/.gitignore
-@@ -34,5 +34,6 @@ Makefile.in
-
- *.o
- test_libucontext
-+libucontext.a
- libucontext.so
- libucontext.so.*
-diff --git a/Makefile b/Makefile
-index d81153c..8a605fd 100644
---- a/Makefile
-+++ b/Makefile
-@@ -11,6 +11,7 @@ LIBUCONTEXT_NAME = libucontext.so
- LIBUCONTEXT_STATIC_NAME = libucontext.a
- LIBUCONTEXT_SONAME = libucontext.so.${LIBUCONTEXT_SOVERSION}
- LIBUCONTEXT_PATH = /lib/${LIBUCONTEXT_SONAME}
-+LIBUCONTEXT_STATIC_PATH = /lib/${LIBUCONTEXT_STATIC_NAME}
-
- all: ${LIBUCONTEXT_SONAME} ${LIBUCONTEXT_STATIC_NAME}
-
-@@ -31,10 +32,12 @@ ${LIBUCONTEXT_SONAME}: ${LIBUCONTEXT_NAME}
- $(CC) -fPIC -DPIC ${CFLAGS} ${CPPFLAGS} -c -o $@ $<
-
- clean:
-- rm -f ${LIBUCONTEXT_NAME} ${LIBUCONTEXT_SONAME} ${LIBUCONTEXT_OBJ} test_libucontext
-+ rm -f ${LIBUCONTEXT_NAME} ${LIBUCONTEXT_SONAME} ${LIBUCONTEXT_STATIC_NAME} \
-+ ${LIBUCONTEXT_OBJ} test_libucontext
-
- install: all
- install -D -m755 ${LIBUCONTEXT_NAME} ${DESTDIR}/${LIBUCONTEXT_PATH}
-+ install -D -m664 ${LIBUCONTEXT_STATIC_NAME} ${DESTDIR}/${LIBUCONTEXT_STATIC_PATH}
- ln -sf ${LIBUCONTEXT_SONAME} ${DESTDIR}/lib/${LIBUCONTEXT_NAME}
-
- check: test_libucontext ${LIBUCONTEXT_SONAME}