summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--legacy/ilmbase/APKBUILD36
-rw-r--r--legacy/ltrace/APKBUILD44
-rw-r--r--legacy/ltrace/aarch-part2.patch1982
-rw-r--r--legacy/ltrace/aarch64.patch2155
-rw-r--r--legacy/ltrace/add_ppc64le.patch54
-rw-r--r--legacy/ltrace/musl.patch153
-rw-r--r--legacy/mkinitfs/0001-features-add-virtio_net-to-network-modules.patch21
-rw-r--r--legacy/mkinitfs/0001-features-virtio_net-depends-on-virtio_pci.patch23
-rw-r--r--legacy/mkinitfs/0001-generate-mkinitfs.conf.patch49
-rw-r--r--legacy/mkinitfs/0001-initramfs-do-not-relocate-mountpoint-for-netboot.patch28
-rw-r--r--legacy/mkinitfs/0001-nlplug-findfs-add-primitive-support-for-LUKS2-contai.patch31
-rw-r--r--legacy/mkinitfs/0001-skip-hooks-on-diskless-install.patch30
-rw-r--r--legacy/mkinitfs/0002-initramfs-init-add-disk-and-network-detection-on-s39.patch97
-rw-r--r--legacy/mkinitfs/0003-initramfs-init-add-support-for-ssh-installer.patch121
-rw-r--r--legacy/mkinitfs/APKBUILD47
-rw-r--r--legacy/mkinitfs/mkinitfs.post-install8
l---------legacy/mkinitfs/mkinitfs.post-upgrade1
-rw-r--r--legacy/mkinitfs/mkinitfs.pre-upgrade13
-rw-r--r--legacy/mkinitfs/mkinitfs.trigger33
-rw-r--r--legacy/openexr/APKBUILD48
-rw-r--r--legacy/syslinux/APKBUILD51
-rw-r--r--legacy/syslinux/syslinux.post-upgrade61
-rw-r--r--legacy/syslinux/syslinux.trigger3
-rwxr-xr-xlegacy/syslinux/update-extlinux252
-rw-r--r--legacy/syslinux/update-extlinux.conf75
25 files changed, 0 insertions, 5416 deletions
diff --git a/legacy/ilmbase/APKBUILD b/legacy/ilmbase/APKBUILD
deleted file mode 100644
index d09071080..000000000
--- a/legacy/ilmbase/APKBUILD
+++ /dev/null
@@ -1,36 +0,0 @@
-# Contributor: Sören Tempel <soeren+alpine@soeren-tempel.net>
-# Maintainer:
-pkgname=ilmbase
-pkgver=2.2.1
-pkgrel=0
-pkgdesc="Base libraries from ILM for OpenEXR"
-url="http://www.openexr.com"
-arch="all"
-license="BSD-3-Clause"
-makedepends="bash linux-headers"
-subpackages="$pkgname-dev"
-source="https://download.savannah.nongnu.org/releases/openexr/$pkgname-$pkgver.tar.gz"
-
-build() {
- cd "$builddir"
- ./configure \
- --build=$CBUILD \
- --host=$CHOST \
- --prefix=/usr \
- --sysconfdir=/etc \
- --mandir=/usr/share/man \
- --localstatedir=/var
- make
-}
-
-check() {
- [ "$CARCH" != x86 ] || return 0
- cd "$builddir"
- make check
-}
-package() {
- make DESTDIR="$pkgdir" \
- -C "$builddir" install
-}
-
-sha512sums="a08ddd9069b34a93612445a445a2ddf80c0e22349bcf221a3cc6e9f5575180b08a8b597009dacabf072360e7162e15964988bc79e8ec82cf3da6507148a75320 ilmbase-2.2.1.tar.gz"
diff --git a/legacy/ltrace/APKBUILD b/legacy/ltrace/APKBUILD
deleted file mode 100644
index bd07768bf..000000000
--- a/legacy/ltrace/APKBUILD
+++ /dev/null
@@ -1,44 +0,0 @@
-# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
-pkgname=ltrace
-pkgver=0.7.3
-pkgrel=2
-pkgdesc="Tracks runtime library calls in dynamically linked programs"
-url="http://ltrace.alioth.debian.org/"
-arch="all"
-options="!check" # Test suite has glibc stuff hardcoded.
-license="GPL-2.0+"
-makedepends="linux-headers libelf-dev autoconf automake"
-subpackages="$pkgname-doc"
-# you find latest release here, but need a login:
-# https://alioth.debian.org/frs/?group_id=30892
-source="https://dev.alpinelinux.org/archive/$pkgname/$pkgname-$pkgver.tar.bz2
- musl.patch
- aarch64.patch
- add_ppc64le.patch"
-
-builddir="$srcdir/$pkgname-$pkgver"
-prepare() {
- default_prepare
- aclocal && autoconf && automake --add-missing --force
-}
-
-build() {
- cd "$builddir"
- ./configure \
- --build=$CBUILD \
- --host=$CHOST \
- --prefix=/usr \
- --sysconfdir=/etc \
- --disable-werror
- make
-}
-
-package() {
- cd "$builddir"
- make install INSTALL=install DESTDIR="$pkgdir"
-}
-
-sha512sums="a842b16dcb81da869afa0bddc755fdff0d57b35672505bf2c7164fd983b1938d28b126714128930994cc1230ced69d779456d0cfc16f4008c9b6d19f0852285d ltrace-0.7.3.tar.bz2
-c53e05471c52e161a7f7389994c6467e8f3671c5d8478546bc1897f067c62aeab848d728295f339a241a3fc186e180d47bcc2872a6335877c3813b1b62834698 musl.patch
-e6682f8c9e1e049286b6462bbab03cbdcf31c1770f649be997393cbd9b3b2ce8ada93766474e16bb604624ffe3e3d46d467bfbedecac2af31b904bb4e763d43a aarch64.patch
-987c6d18bdb559e8fe739f09cfb0b567dafcf79b2bd5db7ca32ebb205f3b1d74a8008576e4d73ea90873c1ab9bed17d96ddb7ad8752bf0a160ea0638c955eb1f add_ppc64le.patch"
diff --git a/legacy/ltrace/aarch-part2.patch b/legacy/ltrace/aarch-part2.patch
deleted file mode 100644
index c40d0a797..000000000
--- a/legacy/ltrace/aarch-part2.patch
+++ /dev/null
@@ -1,1982 +0,0 @@
-From ae7249250ea650ec82bc545d4281b852020c7a6f Mon Sep 17 00:00:00 2001
-From: Petr Machata <pmachata@redhat.com>
-Date: Fri, 24 Jan 2014 00:50:06 +0100
-Subject: [PATCH 1/1] Implement aarch64 support
-
-- IFUNC support is not implemented, the rest works well. The only
- other failure is in wide char functions, and that occurs on x86_64
- as well.
----
- configure.ac | 3 +-
- sysdeps/linux-gnu/Makefile.am | 4 +-
- sysdeps/linux-gnu/aarch64/Makefile.am | 25 +
- sysdeps/linux-gnu/aarch64/arch.h | 37 ++
- sysdeps/linux-gnu/aarch64/fetch.c | 365 +++++++++++
- sysdeps/linux-gnu/aarch64/plt.c | 38 ++
- sysdeps/linux-gnu/aarch64/ptrace.h | 22 +
- sysdeps/linux-gnu/aarch64/regs.c | 130 ++++
- sysdeps/linux-gnu/aarch64/signalent.h | 52 ++
- sysdeps/linux-gnu/aarch64/syscallent.h | 1100 ++++++++++++++++++++++++++++++++
- sysdeps/linux-gnu/aarch64/trace.c | 83 +++
- 11 files changed, 1857 insertions(+), 2 deletions(-)
- create mode 100644 sysdeps/linux-gnu/aarch64/Makefile.am
- create mode 100644 sysdeps/linux-gnu/aarch64/arch.h
- create mode 100644 sysdeps/linux-gnu/aarch64/fetch.c
- create mode 100644 sysdeps/linux-gnu/aarch64/plt.c
- create mode 100644 sysdeps/linux-gnu/aarch64/ptrace.h
- create mode 100644 sysdeps/linux-gnu/aarch64/regs.c
- create mode 100644 sysdeps/linux-gnu/aarch64/signalent.h
- create mode 100644 sysdeps/linux-gnu/aarch64/syscallent.h
- create mode 100644 sysdeps/linux-gnu/aarch64/trace.c
-
-diff --git a/configure.ac b/configure.ac
-index c6e6bf0..0e9a124 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -1,6 +1,6 @@
- # -*- Autoconf -*-
- # This file is part of ltrace.
--# Copyright (C) 2010,2013 Petr Machata, Red Hat Inc.
-+# Copyright (C) 2010,2012,2013,2014 Petr Machata, Red Hat Inc.
- # Copyright (C) 2010,2011 Joe Damato
- # Copyright (C) 2010 Marc Kleine-Budde
- # Copyright (C) 2010 Zachary T Welch
-@@ -399,6 +399,7 @@ AC_CONFIG_FILES([
- Makefile
- sysdeps/Makefile
- sysdeps/linux-gnu/Makefile
-+ sysdeps/linux-gnu/aarch64/Makefile
- sysdeps/linux-gnu/alpha/Makefile
- sysdeps/linux-gnu/arm/Makefile
- sysdeps/linux-gnu/cris/Makefile
-diff --git a/sysdeps/linux-gnu/Makefile.am b/sysdeps/linux-gnu/Makefile.am
-index ecee577..ec26162 100644
---- a/sysdeps/linux-gnu/Makefile.am
-+++ b/sysdeps/linux-gnu/Makefile.am
-@@ -1,4 +1,5 @@
- # This file is part of ltrace.
-+# Copyright (C) 2014 Petr Machata, Red Hat, Inc.
- # Copyright (C) 2010,2012 Marc Kleine-Budde, Pengutronix
- #
- # This program is free software; you can redistribute it and/or
-@@ -16,7 +17,8 @@
- # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- # 02110-1301 USA
-
--DIST_SUBDIRS = alpha arm cris ia64 m68k mips ppc s390 sparc x86
-+DIST_SUBDIRS = aarch64 alpha arm cris ia64 m68k mips ppc s390 \
-+ sparc x86
-
- SUBDIRS = \
- $(HOST_CPU)
-diff --git a/sysdeps/linux-gnu/aarch64/Makefile.am b/sysdeps/linux-gnu/aarch64/Makefile.am
-new file mode 100644
-index 0000000..0af4e6e
---- /dev/null
-+++ b/sysdeps/linux-gnu/aarch64/Makefile.am
-@@ -0,0 +1,25 @@
-+# This file is part of ltrace.
-+# Copyright (C) 2014 Petr Machata, Red Hat, Inc.
-+#
-+# This program is free software; you can redistribute it and/or
-+# modify it under the terms of the GNU General Public License as
-+# published by the Free Software Foundation; either version 2 of the
-+# License, or (at your option) any later version.
-+#
-+# This program is distributed in the hope that it will be useful, but
-+# WITHOUT ANY WARRANTY; without even the implied warranty of
-+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+# General Public License for more details.
-+#
-+# You should have received a copy of the GNU General Public License
-+# along with this program; if not, write to the Free Software
-+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-+# 02110-1301 USA
-+
-+noinst_LTLIBRARIES = ../libcpu.la
-+
-+___libcpu_la_SOURCES = fetch.c plt.c regs.c trace.c
-+
-+noinst_HEADERS = arch.h ptrace.h signalent.h syscallent.h
-+
-+MAINTAINERCLEANFILES = Makefile.in
-diff --git a/sysdeps/linux-gnu/aarch64/arch.h b/sysdeps/linux-gnu/aarch64/arch.h
-new file mode 100644
-index 0000000..4137613
---- /dev/null
-+++ b/sysdeps/linux-gnu/aarch64/arch.h
-@@ -0,0 +1,37 @@
-+/*
-+ * This file is part of ltrace.
-+ * Copyright (C) 2014 Petr Machata, Red Hat, Inc.
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License as
-+ * published by the Free Software Foundation; either version 2 of the
-+ * License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful, but
-+ * WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-+ * 02110-1301 USA
-+ */
-+#ifndef LTRACE_AARCH64_ARCH_H
-+#define LTRACE_AARCH64_ARCH_H
-+
-+/* | 31 21 | 20 5 | 4 0 | *
-+ * | 1 1 0 1 0 1 0 0 0 0 1 | imm16 | 0 0 0 0 0 | */
-+#define BREAKPOINT_VALUE { 0xd4, 0x20, 0, 0 }
-+#define BREAKPOINT_LENGTH 4
-+#define DECR_PC_AFTER_BREAK 0
-+
-+#define LT_ELFCLASS ELFCLASS64
-+#define LT_ELF_MACHINE EM_AARCH64
-+
-+#define ARCH_HAVE_FETCH_ARG
-+#define ARCH_ENDIAN_BIG
-+#define ARCH_HAVE_SIZEOF
-+#define ARCH_HAVE_ALIGNOF
-+
-+#endif /* LTRACE_AARCH64_ARCH_H */
-diff --git a/sysdeps/linux-gnu/aarch64/fetch.c b/sysdeps/linux-gnu/aarch64/fetch.c
-new file mode 100644
-index 0000000..8779f03
---- /dev/null
-+++ b/sysdeps/linux-gnu/aarch64/fetch.c
-@@ -0,0 +1,365 @@
-+/*
-+ * This file is part of ltrace.
-+ * Copyright (C) 2014 Petr Machata, Red Hat, Inc.
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License as
-+ * published by the Free Software Foundation; either version 2 of the
-+ * License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful, but
-+ * WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-+ * 02110-1301 USA
-+ */
-+
-+#include <sys/ptrace.h>
-+#include <asm/ptrace.h>
-+#include <stdlib.h>
-+#include <string.h>
-+
-+#include "fetch.h"
-+#include "proc.h"
-+#include "type.h"
-+#include "value.h"
-+
-+int aarch64_read_gregs(struct Process *proc, struct user_pt_regs *regs);
-+int aarch64_read_fregs(struct Process *proc, struct user_fpsimd_state *regs);
-+
-+
-+struct fetch_context
-+{
-+ struct user_pt_regs gregs;
-+ struct user_fpsimd_state fpregs;
-+ arch_addr_t nsaa;
-+ unsigned ngrn;
-+ unsigned nsrn;
-+ arch_addr_t x8;
-+};
-+
-+static int
-+context_init(struct fetch_context *context, struct Process *proc)
-+{
-+ if (aarch64_read_gregs(proc, &context->gregs) < 0
-+ || aarch64_read_fregs(proc, &context->fpregs) < 0)
-+ return -1;
-+
-+ context->ngrn = 0;
-+ context->nsrn = 0;
-+ /* XXX double cast */
-+ context->nsaa = (arch_addr_t) (uintptr_t) context->gregs.sp;
-+ context->x8 = 0;
-+
-+ return 0;
-+}
-+
-+struct fetch_context *
-+arch_fetch_arg_clone(struct Process *proc, struct fetch_context *context)
-+{
-+ struct fetch_context *ret = malloc(sizeof(*ret));
-+ if (ret == NULL)
-+ return NULL;
-+ return memcpy(ret, context, sizeof(*ret));
-+}
-+
-+static void
-+fetch_next_gpr(struct fetch_context *context, unsigned char *buf)
-+{
-+ uint64_t u = context->gregs.regs[context->ngrn++];
-+ memcpy(buf, &u, 8);
-+}
-+
-+static int
-+fetch_gpr(struct fetch_context *context, struct value *value, size_t sz)
-+{
-+ if (sz < 8)
-+ sz = 8;
-+
-+ unsigned char *buf = value_reserve(value, sz);
-+ if (buf == NULL)
-+ return -1;
-+
-+ size_t i;
-+ for (i = 0; i < sz; i += 8)
-+ fetch_next_gpr(context, buf + i);
-+
-+ return 0;
-+}
-+
-+static void
-+fetch_next_sse(struct fetch_context *context, unsigned char *buf, size_t sz)
-+{
-+ __int128 u = context->fpregs.vregs[context->nsrn++];
-+ memcpy(buf, &u, sz);
-+}
-+
-+static int
-+fetch_sse(struct fetch_context *context, struct value *value, size_t sz)
-+{
-+ unsigned char *buf = value_reserve(value, sz);
-+ if (buf == NULL)
-+ return -1;
-+
-+ fetch_next_sse(context, buf, sz);
-+ return 0;
-+}
-+
-+static int
-+fetch_hfa(struct fetch_context *context,
-+ struct value *value, struct arg_type_info *hfa_t, size_t count)
-+{
-+ size_t sz = type_sizeof(value->inferior, hfa_t);
-+ unsigned char *buf = value_reserve(value, sz * count);
-+ if (buf == NULL)
-+ return -1;
-+
-+ size_t i;
-+ for (i = 0; i < count; ++i) {
-+ fetch_next_sse(context, buf, sz);
-+ buf += sz;
-+ }
-+ return 0;
-+}
-+
-+static int
-+fetch_stack(struct fetch_context *context, struct value *value,
-+ size_t align, size_t sz)
-+{
-+ if (align < 8)
-+ align = 8;
-+ size_t amount = ((sz + align - 1) / align) * align;
-+
-+ /* XXX double casts */
-+ uintptr_t sp = (uintptr_t) context->nsaa;
-+ sp = ((sp + align - 1) / align) * align;
-+
-+ value_in_inferior(value, (arch_addr_t) sp);
-+
-+ sp += amount;
-+ context->nsaa = (arch_addr_t) sp;
-+
-+ return 0;
-+}
-+
-+enum convert_method {
-+ CVT_ERR = -1,
-+ CVT_NOP = 0,
-+ CVT_BYREF,
-+};
-+
-+enum fetch_method {
-+ FETCH_NOP,
-+ FETCH_STACK,
-+ FETCH_GPR,
-+ FETCH_SSE,
-+ FETCH_HFA,
-+};
-+
-+struct fetch_script {
-+ enum convert_method c;
-+ enum fetch_method f;
-+ size_t sz;
-+ struct arg_type_info *hfa_t;
-+ size_t count;
-+};
-+
-+static struct fetch_script
-+pass_arg(struct fetch_context const *context,
-+ struct Process *proc, struct arg_type_info *info)
-+{
-+ enum fetch_method cvt = CVT_NOP;
-+
-+ size_t sz = type_sizeof(proc, info);
-+ if (sz == (size_t) -1)
-+ return (struct fetch_script) { CVT_ERR, FETCH_NOP, sz };
-+
-+ switch (info->type) {
-+ case ARGTYPE_VOID:
-+ return (struct fetch_script) { cvt, FETCH_NOP, sz };
-+
-+ case ARGTYPE_STRUCT:
-+ case ARGTYPE_ARRAY:;
-+ size_t count;
-+ struct arg_type_info *hfa_t = type_get_hfa_type(info, &count);
-+ if (hfa_t != NULL && count <= 4) {
-+ if (context->nsrn + count <= 8)
-+ return (struct fetch_script)
-+ { cvt, FETCH_HFA, sz, hfa_t, count };
-+ return (struct fetch_script)
-+ { cvt, FETCH_STACK, sz, hfa_t, count };
-+ }
-+
-+ if (sz <= 16) {
-+ size_t count = sz / 8;
-+ if (context->ngrn + count <= 8)
-+ return (struct fetch_script)
-+ { cvt, FETCH_GPR, sz };
-+ }
-+
-+ cvt = CVT_BYREF;
-+ sz = 8;
-+ /* Fall through. */
-+
-+ case ARGTYPE_POINTER:
-+ case ARGTYPE_INT:
-+ case ARGTYPE_UINT:
-+ case ARGTYPE_LONG:
-+ case ARGTYPE_ULONG:
-+ case ARGTYPE_CHAR:
-+ case ARGTYPE_SHORT:
-+ case ARGTYPE_USHORT:
-+ if (context->ngrn < 8 && sz <= 8)
-+ return (struct fetch_script) { cvt, FETCH_GPR, sz };
-+ /* We don't support types wider than 8 bytes as of
-+ * now. */
-+ assert(sz <= 8);
-+
-+ return (struct fetch_script) { cvt, FETCH_STACK, sz };
-+
-+ case ARGTYPE_FLOAT:
-+ case ARGTYPE_DOUBLE:
-+ if (context->nsrn < 8) {
-+ /* ltrace doesn't support float128. */
-+ assert(sz <= 8);
-+ return (struct fetch_script) { cvt, FETCH_SSE, sz };
-+ }
-+
-+ return (struct fetch_script) { cvt, FETCH_STACK, sz };
-+ }
-+
-+ assert(! "Failed to allocate argument.");
-+ abort();
-+}
-+
-+static int
-+convert_arg(struct value *value, struct fetch_script how)
-+{
-+ switch (how.c) {
-+ case CVT_NOP:
-+ return 0;
-+ case CVT_BYREF:
-+ return value_pass_by_reference(value);
-+ case CVT_ERR:
-+ return -1;
-+ }
-+
-+ assert(! "Don't know how to convert argument.");
-+ abort();
-+}
-+
-+static int
-+fetch_arg(struct fetch_context *context,
-+ struct Process *proc, struct arg_type_info *info,
-+ struct value *value, struct fetch_script how)
-+{
-+ if (convert_arg(value, how) < 0)
-+ return -1;
-+
-+ switch (how.f) {
-+ case FETCH_NOP:
-+ return 0;
-+
-+ case FETCH_STACK:
-+ if (how.hfa_t != NULL && how.count != 0 && how.count <= 8)
-+ context->nsrn = 8;
-+ return fetch_stack(context, value,
-+ type_alignof(proc, info), how.sz);
-+
-+ case FETCH_GPR:
-+ return fetch_gpr(context, value, how.sz);
-+
-+ case FETCH_SSE:
-+ return fetch_sse(context, value, how.sz);
-+
-+ case FETCH_HFA:
-+ return fetch_hfa(context, value, how.hfa_t, how.count);
-+ }
-+
-+ assert(! "Don't know how to fetch argument.");
-+ abort();
-+}
-+
-+struct fetch_context *
-+arch_fetch_arg_init(enum tof type, struct Process *proc,
-+ struct arg_type_info *ret_info)
-+{
-+ struct fetch_context *context = malloc(sizeof *context);
-+ if (context == NULL || context_init(context, proc) < 0) {
-+ fail:
-+ free(context);
-+ return NULL;
-+ }
-+
-+ /* There's a provision in ARMv8 parameter passing convention
-+ * for returning types that, if passed as first argument to a
-+ * function, would be passed on stack. For those types, x8
-+ * contains an address where the return argument should be
-+ * placed. The callee doesn't need to preserve the value of
-+ * x8, so we need to fetch it now.
-+ *
-+ * To my knowledge, there are currently no types where this
-+ * holds, but the code is here, utterly untested. */
-+
-+ struct fetch_script how = pass_arg(context, proc, ret_info);
-+ if (how.c == CVT_ERR)
-+ goto fail;
-+ if (how.c == CVT_NOP && how.f == FETCH_STACK) {
-+ /* XXX double cast. */
-+ context->x8 = (arch_addr_t) (uintptr_t) context->gregs.regs[8];
-+ /* See the comment above about the assert. */
-+ assert(! "Unexpected: first argument passed on stack.");
-+ abort();
-+ }
-+
-+ return context;
-+}
-+
-+int
-+arch_fetch_arg_next(struct fetch_context *context, enum tof type,
-+ struct Process *proc, struct arg_type_info *info,
-+ struct value *value)
-+{
-+ return fetch_arg(context, proc, info, value,
-+ pass_arg(context, proc, info));
-+}
-+
-+int
-+arch_fetch_retval(struct fetch_context *context, enum tof type,
-+ struct Process *proc, struct arg_type_info *info,
-+ struct value *value)
-+{
-+ if (context->x8 != 0) {
-+ value_in_inferior(value, context->x8);
-+ return 0;
-+ }
-+
-+ if (context_init(context, proc) < 0)
-+ return -1;
-+
-+ return fetch_arg(context, proc, info, value,
-+ pass_arg(context, proc, info));
-+}
-+
-+void
-+arch_fetch_arg_done(struct fetch_context *context)
-+{
-+ if (context != NULL)
-+ free(context);
-+}
-+
-+size_t
-+arch_type_sizeof(struct Process *proc, struct arg_type_info *arg)
-+{
-+ return (size_t) -2;
-+}
-+
-+size_t
-+arch_type_alignof(struct Process *proc, struct arg_type_info *arg)
-+{
-+ return (size_t) -2;
-+}
-diff --git a/sysdeps/linux-gnu/aarch64/plt.c b/sysdeps/linux-gnu/aarch64/plt.c
-new file mode 100644
-index 0000000..29dc4c9
---- /dev/null
-+++ b/sysdeps/linux-gnu/aarch64/plt.c
-@@ -0,0 +1,38 @@
-+/*
-+ * This file is part of ltrace.
-+ * Copyright (C) 2014 Petr Machata, Red Hat, Inc.
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License as
-+ * published by the Free Software Foundation; either version 2 of the
-+ * License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful, but
-+ * WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-+ * 02110-1301 USA
-+ */
-+
-+#include <gelf.h>
-+
-+#include "backend.h"
-+#include "proc.h"
-+#include "library.h"
-+#include "ltrace-elf.h"
-+
-+arch_addr_t
-+sym2addr(struct Process *proc, struct library_symbol *sym)
-+{
-+ return sym->enter_addr;
-+}
-+
-+GElf_Addr
-+arch_plt_sym_val(struct ltelf *lte, size_t ndx, GElf_Rela *rela)
-+{
-+ return lte->plt_addr + 32 + ndx * 16;
-+}
-diff --git a/sysdeps/linux-gnu/aarch64/ptrace.h b/sysdeps/linux-gnu/aarch64/ptrace.h
-new file mode 100644
-index 0000000..283c314
---- /dev/null
-+++ b/sysdeps/linux-gnu/aarch64/ptrace.h
-@@ -0,0 +1,22 @@
-+/*
-+ * This file is part of ltrace.
-+ * Copyright (C) 2014 Petr Machata, Red Hat, Inc.
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License as
-+ * published by the Free Software Foundation; either version 2 of the
-+ * License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful, but
-+ * WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-+ * 02110-1301 USA
-+ */
-+
-+#include <sys/ptrace.h>
-+#include <asm/ptrace.h>
-diff --git a/sysdeps/linux-gnu/aarch64/regs.c b/sysdeps/linux-gnu/aarch64/regs.c
-new file mode 100644
-index 0000000..06eb72b
---- /dev/null
-+++ b/sysdeps/linux-gnu/aarch64/regs.c
-@@ -0,0 +1,131 @@
-+/*
-+ * This file is part of ltrace.
-+ * Copyright (C) 2014 Petr Machata, Red Hat, Inc.
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License as
-+ * published by the Free Software Foundation; either version 2 of the
-+ * License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful, but
-+ * WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-+ * 02110-1301 USA
-+ */
-+
-+#include <sys/ptrace.h>
-+#include <asm/ptrace.h>
-+#include <linux/uio.h>
-+#include <assert.h>
-+#include <stdlib.h>
-+#include <stdio.h>
-+
-+#include "backend.h"
-+#include "proc.h"
-+
-+#define PC_OFF (32 * 4)
-+
-+int
-+aarch64_read_gregs(struct Process *proc, struct user_pt_regs *regs)
-+{
-+ *regs = (struct user_pt_regs) {};
-+ struct iovec iovec;
-+ iovec.iov_base = regs;
-+ iovec.iov_len = sizeof *regs;
-+ return ptrace(PTRACE_GETREGSET, proc->pid, NT_PRSTATUS, &iovec) < 0
-+ ? -1 : 0;
-+}
-+
-+int
-+aarch64_write_gregs(struct Process *proc, struct user_pt_regs *regs)
-+{
-+ struct iovec iovec;
-+ iovec.iov_base = regs;
-+ iovec.iov_len = sizeof *regs;
-+ return ptrace(PTRACE_SETREGSET, proc->pid, NT_PRSTATUS, &iovec) < 0
-+ ? -1 : 0;
-+}
-+
-+int
-+aarch64_read_fregs(struct Process *proc, struct user_fpsimd_state *regs)
-+{
-+ *regs = (struct user_fpsimd_state) {};
-+ struct iovec iovec;
-+ iovec.iov_base = regs;
-+ iovec.iov_len = sizeof *regs;
-+ return ptrace(PTRACE_GETREGSET, proc->pid, NT_FPREGSET, &iovec) < 0
-+ ? -1 : 0;
-+}
-+
-+arch_addr_t
-+get_instruction_pointer(struct Process *proc)
-+{
-+ struct user_pt_regs regs;
-+ if (aarch64_read_gregs(proc, &regs) < 0) {
-+ fprintf(stderr, "get_instruction_pointer: "
-+ "Couldn't read registers of %d.\n", proc->pid);
-+ return 0;
-+ }
-+
-+ /*
-+ char buf[128];
-+ sprintf(buf, "cat /proc/%d/maps", proc->pid);
-+ system(buf);
-+ */
-+
-+ /* XXX double cast */
-+ return (arch_addr_t) (uintptr_t) regs.pc;
-+}
-+
-+void
-+set_instruction_pointer(struct Process *proc, arch_addr_t addr)
-+{
-+ struct user_pt_regs regs;
-+ if (aarch64_read_gregs(proc, &regs) < 0) {
-+ fprintf(stderr, "get_instruction_pointer: "
-+ "Couldn't read registers of %d.\n", proc->pid);
-+ return;
-+ }
-+
-+ /* XXX double cast */
-+ regs.pc = (uint64_t) (uintptr_t) addr;
-+
-+ if (aarch64_write_gregs(proc, &regs) < 0) {
-+ fprintf(stderr, "get_instruction_pointer: "
-+ "Couldn't write registers of %d.\n", proc->pid);
-+ return;
-+ }
-+}
-+
-+arch_addr_t
-+get_stack_pointer(struct Process *proc)
-+{
-+ struct user_pt_regs regs;
-+ if (aarch64_read_gregs(proc, &regs) < 0) {
-+ fprintf(stderr, "get_stack_pointer: "
-+ "Couldn't read registers of %d.\n", proc->pid);
-+ return 0;
-+ }
-+
-+ /* XXX double cast */
-+ return (arch_addr_t) (uintptr_t) regs.sp;
-+}
-+
-+arch_addr_t
-+get_return_addr(struct Process *proc, arch_addr_t stack_pointer)
-+{
-+ struct user_pt_regs regs;
-+ if (aarch64_read_gregs(proc, &regs) < 0) {
-+ fprintf(stderr, "get_return_addr: "
-+ "Couldn't read registers of %d.\n", proc->pid);
-+ return 0;
-+ }
-+
-+ /* XXX double cast */
-+ return (arch_addr_t) (uintptr_t) regs.regs[30];
-+}
-diff --git a/sysdeps/linux-gnu/aarch64/signalent.h b/sysdeps/linux-gnu/aarch64/signalent.h
-new file mode 100644
-index 0000000..bf56ebc
---- /dev/null
-+++ b/sysdeps/linux-gnu/aarch64/signalent.h
-@@ -0,0 +1,52 @@
-+/*
-+ * This file is part of ltrace.
-+ * Copyright (C) 2006 Ian Wienand
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License as
-+ * published by the Free Software Foundation; either version 2 of the
-+ * License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful, but
-+ * WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-+ * 02110-1301 USA
-+ */
-+
-+ "SIG_0", /* 0 */
-+ "SIGHUP", /* 1 */
-+ "SIGINT", /* 2 */
-+ "SIGQUIT", /* 3 */
-+ "SIGILL", /* 4 */
-+ "SIGTRAP", /* 5 */
-+ "SIGABRT", /* 6 */
-+ "SIGBUS", /* 7 */
-+ "SIGFPE", /* 8 */
-+ "SIGKILL", /* 9 */
-+ "SIGUSR1", /* 10 */
-+ "SIGSEGV", /* 11 */
-+ "SIGUSR2", /* 12 */
-+ "SIGPIPE", /* 13 */
-+ "SIGALRM", /* 14 */
-+ "SIGTERM", /* 15 */
-+ "SIGSTKFLT", /* 16 */
-+ "SIGCHLD", /* 17 */
-+ "SIGCONT", /* 18 */
-+ "SIGSTOP", /* 19 */
-+ "SIGTSTP", /* 20 */
-+ "SIGTTIN", /* 21 */
-+ "SIGTTOU", /* 22 */
-+ "SIGURG", /* 23 */
-+ "SIGXCPU", /* 24 */
-+ "SIGXFSZ", /* 25 */
-+ "SIGVTALRM", /* 26 */
-+ "SIGPROF", /* 27 */
-+ "SIGWINCH", /* 28 */
-+ "SIGIO", /* 29 */
-+ "SIGPWR", /* 30 */
-+ "SIGSYS", /* 31 */
-diff --git a/sysdeps/linux-gnu/aarch64/syscallent.h b/sysdeps/linux-gnu/aarch64/syscallent.h
-new file mode 100644
-index 0000000..aca8191
---- /dev/null
-+++ b/sysdeps/linux-gnu/aarch64/syscallent.h
-@@ -0,0 +1,1100 @@
-+/*
-+ * This file is part of ltrace.
-+ * Copyright (C) 2014 Petr Machata, Red Hat, Inc.
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License as
-+ * published by the Free Software Foundation; either version 2 of the
-+ * License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful, but
-+ * WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-+ * 02110-1301 USA
-+ */
-+
-+ "io_setup", /* 0 */
-+ "io_destroy", /* 1 */
-+ "io_submit", /* 2 */
-+ "io_cancel", /* 3 */
-+ "io_getevents", /* 4 */
-+ "setxattr", /* 5 */
-+ "lsetxattr", /* 6 */
-+ "fsetxattr", /* 7 */
-+ "getxattr", /* 8 */
-+ "lgetxattr", /* 9 */
-+ "fgetxattr", /* 10 */
-+ "listxattr", /* 11 */
-+ "llistxattr", /* 12 */
-+ "flistxattr", /* 13 */
-+ "removexattr", /* 14 */
-+ "lremovexattr", /* 15 */
-+ "fremovexattr", /* 16 */
-+ "getcwd", /* 17 */
-+ "lookup_dcookie", /* 18 */
-+ "eventfd2", /* 19 */
-+ "epoll_create1", /* 20 */
-+ "epoll_ctl", /* 21 */
-+ "epoll_pwait", /* 22 */
-+ "dup", /* 23 */
-+ "dup3", /* 24 */
-+ "fcntl", /* 25 */
-+ "inotify_init1", /* 26 */
-+ "inotify_add_watch", /* 27 */
-+ "inotify_rm_watch", /* 28 */
-+ "ioctl", /* 29 */
-+ "ioprio_set", /* 30 */
-+ "ioprio_get", /* 31 */
-+ "flock", /* 32 */
-+ "mknodat", /* 33 */
-+ "mkdirat", /* 34 */
-+ "unlinkat", /* 35 */
-+ "symlinkat", /* 36 */
-+ "linkat", /* 37 */
-+ "renameat", /* 38 */
-+ "umount2", /* 39 */
-+ "mount", /* 40 */
-+ "pivot_root", /* 41 */
-+ "nfsservctl", /* 42 */
-+ "statfs", /* 43 */
-+ "fstatfs", /* 44 */
-+ "truncate", /* 45 */
-+ "ftruncate", /* 46 */
-+ "fallocate", /* 47 */
-+ "faccessat", /* 48 */
-+ "chdir", /* 49 */
-+ "fchdir", /* 50 */
-+ "chroot", /* 51 */
-+ "fchmod", /* 52 */
-+ "fchmodat", /* 53 */
-+ "fchownat", /* 54 */
-+ "fchown", /* 55 */
-+ "openat", /* 56 */
-+ "close", /* 57 */
-+ "vhangup", /* 58 */
-+ "pipe2", /* 59 */
-+ "quotactl", /* 60 */
-+ "getdents64", /* 61 */
-+ "lseek", /* 62 */
-+ "read", /* 63 */
-+ "write", /* 64 */
-+ "readv", /* 65 */
-+ "writev", /* 66 */
-+ "pread64", /* 67 */
-+ "pwrite64", /* 68 */
-+ "preadv", /* 69 */
-+ "pwritev", /* 70 */
-+ "sendfile", /* 71 */
-+ "pselect6", /* 72 */
-+ "ppoll", /* 73 */
-+ "signalfd4", /* 74 */
-+ "vmsplice", /* 75 */
-+ "splice", /* 76 */
-+ "tee", /* 77 */
-+ "readlinkat", /* 78 */
-+ "fstatat", /* 79 */
-+ "fstat", /* 80 */
-+ "sync", /* 81 */
-+ "fsync", /* 82 */
-+ "fdatasync", /* 83 */
-+ "sync_file_range", /* 84 */
-+ "timerfd_create", /* 85 */
-+ "timerfd_settime", /* 86 */
-+ "timerfd_gettime", /* 87 */
-+ "utimensat", /* 88 */
-+ "acct", /* 89 */
-+ "capget", /* 90 */
-+ "capset", /* 91 */
-+ "personality", /* 92 */
-+ "exit", /* 93 */
-+ "exit_group", /* 94 */
-+ "waitid", /* 95 */
-+ "set_tid_address", /* 96 */
-+ "unshare", /* 97 */
-+ "futex", /* 98 */
-+ "set_robust_list", /* 99 */
-+ "get_robust_list", /* 100 */
-+ "nanosleep", /* 101 */
-+ "getitimer", /* 102 */
-+ "setitimer", /* 103 */
-+ "kexec_load", /* 104 */
-+ "init_module", /* 105 */
-+ "delete_module", /* 106 */
-+ "timer_create", /* 107 */
-+ "timer_gettime", /* 108 */
-+ "timer_getoverrun", /* 109 */
-+ "timer_settime", /* 110 */
-+ "timer_delete", /* 111 */
-+ "clock_settime", /* 112 */
-+ "clock_gettime", /* 113 */
-+ "clock_getres", /* 114 */
-+ "clock_nanosleep", /* 115 */
-+ "syslog", /* 116 */
-+ "ptrace", /* 117 */
-+ "sched_setparam", /* 118 */
-+ "sched_setscheduler", /* 119 */
-+ "sched_getscheduler", /* 120 */
-+ "sched_getparam", /* 121 */
-+ "sched_setaffinity", /* 122 */
-+ "sched_getaffinity", /* 123 */
-+ "sched_yield", /* 124 */
-+ "sched_get_priority_max", /* 125 */
-+ "sched_get_priority_min", /* 126 */
-+ "sched_rr_get_interval", /* 127 */
-+ "restart_syscall", /* 128 */
-+ "kill", /* 129 */
-+ "tkill", /* 130 */
-+ "tgkill", /* 131 */
-+ "sigaltstack", /* 132 */
-+ "rt_sigsuspend", /* 133 */
-+ "rt_sigaction", /* 134 */
-+ "rt_sigprocmask", /* 135 */
-+ "rt_sigpending", /* 136 */
-+ "rt_sigtimedwait", /* 137 */
-+ "rt_sigqueueinfo", /* 138 */
-+ "rt_sigreturn", /* 139 */
-+ "setpriority", /* 140 */
-+ "getpriority", /* 141 */
-+ "reboot", /* 142 */
-+ "setregid", /* 143 */
-+ "setgid", /* 144 */
-+ "setreuid", /* 145 */
-+ "setuid", /* 146 */
-+ "setresuid", /* 147 */
-+ "getresuid", /* 148 */
-+ "setresgid", /* 149 */
-+ "getresgid", /* 150 */
-+ "setfsuid", /* 151 */
-+ "setfsgid", /* 152 */
-+ "times", /* 153 */
-+ "setpgid", /* 154 */
-+ "getpgid", /* 155 */
-+ "getsid", /* 156 */
-+ "setsid", /* 157 */
-+ "getgroups", /* 158 */
-+ "setgroups", /* 159 */
-+ "uname", /* 160 */
-+ "sethostname", /* 161 */
-+ "setdomainname", /* 162 */
-+ "getrlimit", /* 163 */
-+ "setrlimit", /* 164 */
-+ "getrusage", /* 165 */
-+ "umask", /* 166 */
-+ "prctl", /* 167 */
-+ "getcpu", /* 168 */
-+ "gettimeofday", /* 169 */
-+ "settimeofday", /* 170 */
-+ "adjtimex", /* 171 */
-+ "getpid", /* 172 */
-+ "getppid", /* 173 */
-+ "getuid", /* 174 */
-+ "geteuid", /* 175 */
-+ "getgid", /* 176 */
-+ "getegid", /* 177 */
-+ "gettid", /* 178 */
-+ "sysinfo", /* 179 */
-+ "mq_open", /* 180 */
-+ "mq_unlink", /* 181 */
-+ "mq_timedsend", /* 182 */
-+ "mq_timedreceive", /* 183 */
-+ "mq_notify", /* 184 */
-+ "mq_getsetattr", /* 185 */
-+ "msgget", /* 186 */
-+ "msgctl", /* 187 */
-+ "msgrcv", /* 188 */
-+ "msgsnd", /* 189 */
-+ "semget", /* 190 */
-+ "semctl", /* 191 */
-+ "semtimedop", /* 192 */
-+ "semop", /* 193 */
-+ "shmget", /* 194 */
-+ "shmctl", /* 195 */
-+ "shmat", /* 196 */
-+ "shmdt", /* 197 */
-+ "socket", /* 198 */
-+ "socketpair", /* 199 */
-+ "bind", /* 200 */
-+ "listen", /* 201 */
-+ "accept", /* 202 */
-+ "connect", /* 203 */
-+ "getsockname", /* 204 */
-+ "getpeername", /* 205 */
-+ "sendto", /* 206 */
-+ "recvfrom", /* 207 */
-+ "setsockopt", /* 208 */
-+ "getsockopt", /* 209 */
-+ "shutdown", /* 210 */
-+ "sendmsg", /* 211 */
-+ "recvmsg", /* 212 */
-+ "readahead", /* 213 */
-+ "brk", /* 214 */
-+ "munmap", /* 215 */
-+ "mremap", /* 216 */
-+ "add_key", /* 217 */
-+ "request_key", /* 218 */
-+ "keyctl", /* 219 */
-+ "clone", /* 220 */
-+ "execve", /* 221 */
-+ "mmap", /* 222 */
-+ "fadvise64", /* 223 */
-+ "swapon", /* 224 */
-+ "swapoff", /* 225 */
-+ "mprotect", /* 226 */
-+ "msync", /* 227 */
-+ "mlock", /* 228 */
-+ "munlock", /* 229 */
-+ "mlockall", /* 230 */
-+ "munlockall", /* 231 */
-+ "mincore", /* 232 */
-+ "madvise", /* 233 */
-+ "remap_file_pages", /* 234 */
-+ "mbind", /* 235 */
-+ "get_mempolicy", /* 236 */
-+ "set_mempolicy", /* 237 */
-+ "migrate_pages", /* 238 */
-+ "move_pages", /* 239 */
-+ "rt_tgsigqueueinfo", /* 240 */
-+ "perf_event_open", /* 241 */
-+ "accept4", /* 242 */
-+ "recvmmsg", /* 243 */
-+ "arch_specific_syscall", /* 244 */
-+ "245", /* 245 */
-+ "246", /* 246 */
-+ "247", /* 247 */
-+ "248", /* 248 */
-+ "249", /* 249 */
-+ "250", /* 250 */
-+ "251", /* 251 */
-+ "252", /* 252 */
-+ "253", /* 253 */
-+ "254", /* 254 */
-+ "255", /* 255 */
-+ "256", /* 256 */
-+ "257", /* 257 */
-+ "258", /* 258 */
-+ "259", /* 259 */
-+ "wait4", /* 260 */
-+ "prlimit64", /* 261 */
-+ "fanotify_init", /* 262 */
-+ "fanotify_mark", /* 263 */
-+ "name_to_handle_at", /* 264 */
-+ "open_by_handle_at", /* 265 */
-+ "clock_adjtime", /* 266 */
-+ "syncfs", /* 267 */
-+ "setns", /* 268 */
-+ "sendmmsg", /* 269 */
-+ "process_vm_readv", /* 270 */
-+ "process_vm_writev", /* 271 */
-+ "kcmp", /* 272 */
-+ "finit_module", /* 273 */
-+ "syscalls", /* 274 */
-+ "275", /* 275 */
-+ "276", /* 276 */
-+ "277", /* 277 */
-+ "278", /* 278 */
-+ "279", /* 279 */
-+ "280", /* 280 */
-+ "281", /* 281 */
-+ "282", /* 282 */
-+ "283", /* 283 */
-+ "284", /* 284 */
-+ "285", /* 285 */
-+ "286", /* 286 */
-+ "287", /* 287 */
-+ "288", /* 288 */
-+ "289", /* 289 */
-+ "290", /* 290 */
-+ "291", /* 291 */
-+ "292", /* 292 */
-+ "293", /* 293 */
-+ "294", /* 294 */
-+ "295", /* 295 */
-+ "296", /* 296 */
-+ "297", /* 297 */
-+ "298", /* 298 */
-+ "299", /* 299 */
-+ "300", /* 300 */
-+ "301", /* 301 */
-+ "302", /* 302 */
-+ "303", /* 303 */
-+ "304", /* 304 */
-+ "305", /* 305 */
-+ "306", /* 306 */
-+ "307", /* 307 */
-+ "308", /* 308 */
-+ "309", /* 309 */
-+ "310", /* 310 */
-+ "311", /* 311 */
-+ "312", /* 312 */
-+ "313", /* 313 */
-+ "314", /* 314 */
-+ "315", /* 315 */
-+ "316", /* 316 */
-+ "317", /* 317 */
-+ "318", /* 318 */
-+ "319", /* 319 */
-+ "320", /* 320 */
-+ "321", /* 321 */
-+ "322", /* 322 */
-+ "323", /* 323 */
-+ "324", /* 324 */
-+ "325", /* 325 */
-+ "326", /* 326 */
-+ "327", /* 327 */
-+ "328", /* 328 */
-+ "329", /* 329 */
-+ "330", /* 330 */
-+ "331", /* 331 */
-+ "332", /* 332 */
-+ "333", /* 333 */
-+ "334", /* 334 */
-+ "335", /* 335 */
-+ "336", /* 336 */
-+ "337", /* 337 */
-+ "338", /* 338 */
-+ "339", /* 339 */
-+ "340", /* 340 */
-+ "341", /* 341 */
-+ "342", /* 342 */
-+ "343", /* 343 */
-+ "344", /* 344 */
-+ "345", /* 345 */
-+ "346", /* 346 */
-+ "347", /* 347 */
-+ "348", /* 348 */
-+ "349", /* 349 */
-+ "350", /* 350 */
-+ "351", /* 351 */
-+ "352", /* 352 */
-+ "353", /* 353 */
-+ "354", /* 354 */
-+ "355", /* 355 */
-+ "356", /* 356 */
-+ "357", /* 357 */
-+ "358", /* 358 */
-+ "359", /* 359 */
-+ "360", /* 360 */
-+ "361", /* 361 */
-+ "362", /* 362 */
-+ "363", /* 363 */
-+ "364", /* 364 */
-+ "365", /* 365 */
-+ "366", /* 366 */
-+ "367", /* 367 */
-+ "368", /* 368 */
-+ "369", /* 369 */
-+ "370", /* 370 */
-+ "371", /* 371 */
-+ "372", /* 372 */
-+ "373", /* 373 */
-+ "374", /* 374 */
-+ "375", /* 375 */
-+ "376", /* 376 */
-+ "377", /* 377 */
-+ "378", /* 378 */
-+ "379", /* 379 */
-+ "380", /* 380 */
-+ "381", /* 381 */
-+ "382", /* 382 */
-+ "383", /* 383 */
-+ "384", /* 384 */
-+ "385", /* 385 */
-+ "386", /* 386 */
-+ "387", /* 387 */
-+ "388", /* 388 */
-+ "389", /* 389 */
-+ "390", /* 390 */
-+ "391", /* 391 */
-+ "392", /* 392 */
-+ "393", /* 393 */
-+ "394", /* 394 */
-+ "395", /* 395 */
-+ "396", /* 396 */
-+ "397", /* 397 */
-+ "398", /* 398 */
-+ "399", /* 399 */
-+ "400", /* 400 */
-+ "401", /* 401 */
-+ "402", /* 402 */
-+ "403", /* 403 */
-+ "404", /* 404 */
-+ "405", /* 405 */
-+ "406", /* 406 */
-+ "407", /* 407 */
-+ "408", /* 408 */
-+ "409", /* 409 */
-+ "410", /* 410 */
-+ "411", /* 411 */
-+ "412", /* 412 */
-+ "413", /* 413 */
-+ "414", /* 414 */
-+ "415", /* 415 */
-+ "416", /* 416 */
-+ "417", /* 417 */
-+ "418", /* 418 */
-+ "419", /* 419 */
-+ "420", /* 420 */
-+ "421", /* 421 */
-+ "422", /* 422 */
-+ "423", /* 423 */
-+ "424", /* 424 */
-+ "425", /* 425 */
-+ "426", /* 426 */
-+ "427", /* 427 */
-+ "428", /* 428 */
-+ "429", /* 429 */
-+ "430", /* 430 */
-+ "431", /* 431 */
-+ "432", /* 432 */
-+ "433", /* 433 */
-+ "434", /* 434 */
-+ "435", /* 435 */
-+ "436", /* 436 */
-+ "437", /* 437 */
-+ "438", /* 438 */
-+ "439", /* 439 */
-+ "440", /* 440 */
-+ "441", /* 441 */
-+ "442", /* 442 */
-+ "443", /* 443 */
-+ "444", /* 444 */
-+ "445", /* 445 */
-+ "446", /* 446 */
-+ "447", /* 447 */
-+ "448", /* 448 */
-+ "449", /* 449 */
-+ "450", /* 450 */
-+ "451", /* 451 */
-+ "452", /* 452 */
-+ "453", /* 453 */
-+ "454", /* 454 */
-+ "455", /* 455 */
-+ "456", /* 456 */
-+ "457", /* 457 */
-+ "458", /* 458 */
-+ "459", /* 459 */
-+ "460", /* 460 */
-+ "461", /* 461 */
-+ "462", /* 462 */
-+ "463", /* 463 */
-+ "464", /* 464 */
-+ "465", /* 465 */
-+ "466", /* 466 */
-+ "467", /* 467 */
-+ "468", /* 468 */
-+ "469", /* 469 */
-+ "470", /* 470 */
-+ "471", /* 471 */
-+ "472", /* 472 */
-+ "473", /* 473 */
-+ "474", /* 474 */
-+ "475", /* 475 */
-+ "476", /* 476 */
-+ "477", /* 477 */
-+ "478", /* 478 */
-+ "479", /* 479 */
-+ "480", /* 480 */
-+ "481", /* 481 */
-+ "482", /* 482 */
-+ "483", /* 483 */
-+ "484", /* 484 */
-+ "485", /* 485 */
-+ "486", /* 486 */
-+ "487", /* 487 */
-+ "488", /* 488 */
-+ "489", /* 489 */
-+ "490", /* 490 */
-+ "491", /* 491 */
-+ "492", /* 492 */
-+ "493", /* 493 */
-+ "494", /* 494 */
-+ "495", /* 495 */
-+ "496", /* 496 */
-+ "497", /* 497 */
-+ "498", /* 498 */
-+ "499", /* 499 */
-+ "500", /* 500 */
-+ "501", /* 501 */
-+ "502", /* 502 */
-+ "503", /* 503 */
-+ "504", /* 504 */
-+ "505", /* 505 */
-+ "506", /* 506 */
-+ "507", /* 507 */
-+ "508", /* 508 */
-+ "509", /* 509 */
-+ "510", /* 510 */
-+ "511", /* 511 */
-+ "512", /* 512 */
-+ "513", /* 513 */
-+ "514", /* 514 */
-+ "515", /* 515 */
-+ "516", /* 516 */
-+ "517", /* 517 */
-+ "518", /* 518 */
-+ "519", /* 519 */
-+ "520", /* 520 */
-+ "521", /* 521 */
-+ "522", /* 522 */
-+ "523", /* 523 */
-+ "524", /* 524 */
-+ "525", /* 525 */
-+ "526", /* 526 */
-+ "527", /* 527 */
-+ "528", /* 528 */
-+ "529", /* 529 */
-+ "530", /* 530 */
-+ "531", /* 531 */
-+ "532", /* 532 */
-+ "533", /* 533 */
-+ "534", /* 534 */
-+ "535", /* 535 */
-+ "536", /* 536 */
-+ "537", /* 537 */
-+ "538", /* 538 */
-+ "539", /* 539 */
-+ "540", /* 540 */
-+ "541", /* 541 */
-+ "542", /* 542 */
-+ "543", /* 543 */
-+ "544", /* 544 */
-+ "545", /* 545 */
-+ "546", /* 546 */
-+ "547", /* 547 */
-+ "548", /* 548 */
-+ "549", /* 549 */
-+ "550", /* 550 */
-+ "551", /* 551 */
-+ "552", /* 552 */
-+ "553", /* 553 */
-+ "554", /* 554 */
-+ "555", /* 555 */
-+ "556", /* 556 */
-+ "557", /* 557 */
-+ "558", /* 558 */
-+ "559", /* 559 */
-+ "560", /* 560 */
-+ "561", /* 561 */
-+ "562", /* 562 */
-+ "563", /* 563 */
-+ "564", /* 564 */
-+ "565", /* 565 */
-+ "566", /* 566 */
-+ "567", /* 567 */
-+ "568", /* 568 */
-+ "569", /* 569 */
-+ "570", /* 570 */
-+ "571", /* 571 */
-+ "572", /* 572 */
-+ "573", /* 573 */
-+ "574", /* 574 */
-+ "575", /* 575 */
-+ "576", /* 576 */
-+ "577", /* 577 */
-+ "578", /* 578 */
-+ "579", /* 579 */
-+ "580", /* 580 */
-+ "581", /* 581 */
-+ "582", /* 582 */
-+ "583", /* 583 */
-+ "584", /* 584 */
-+ "585", /* 585 */
-+ "586", /* 586 */
-+ "587", /* 587 */
-+ "588", /* 588 */
-+ "589", /* 589 */
-+ "590", /* 590 */
-+ "591", /* 591 */
-+ "592", /* 592 */
-+ "593", /* 593 */
-+ "594", /* 594 */
-+ "595", /* 595 */
-+ "596", /* 596 */
-+ "597", /* 597 */
-+ "598", /* 598 */
-+ "599", /* 599 */
-+ "600", /* 600 */
-+ "601", /* 601 */
-+ "602", /* 602 */
-+ "603", /* 603 */
-+ "604", /* 604 */
-+ "605", /* 605 */
-+ "606", /* 606 */
-+ "607", /* 607 */
-+ "608", /* 608 */
-+ "609", /* 609 */
-+ "610", /* 610 */
-+ "611", /* 611 */
-+ "612", /* 612 */
-+ "613", /* 613 */
-+ "614", /* 614 */
-+ "615", /* 615 */
-+ "616", /* 616 */
-+ "617", /* 617 */
-+ "618", /* 618 */
-+ "619", /* 619 */
-+ "620", /* 620 */
-+ "621", /* 621 */
-+ "622", /* 622 */
-+ "623", /* 623 */
-+ "624", /* 624 */
-+ "625", /* 625 */
-+ "626", /* 626 */
-+ "627", /* 627 */
-+ "628", /* 628 */
-+ "629", /* 629 */
-+ "630", /* 630 */
-+ "631", /* 631 */
-+ "632", /* 632 */
-+ "633", /* 633 */
-+ "634", /* 634 */
-+ "635", /* 635 */
-+ "636", /* 636 */
-+ "637", /* 637 */
-+ "638", /* 638 */
-+ "639", /* 639 */
-+ "640", /* 640 */
-+ "641", /* 641 */
-+ "642", /* 642 */
-+ "643", /* 643 */
-+ "644", /* 644 */
-+ "645", /* 645 */
-+ "646", /* 646 */
-+ "647", /* 647 */
-+ "648", /* 648 */
-+ "649", /* 649 */
-+ "650", /* 650 */
-+ "651", /* 651 */
-+ "652", /* 652 */
-+ "653", /* 653 */
-+ "654", /* 654 */
-+ "655", /* 655 */
-+ "656", /* 656 */
-+ "657", /* 657 */
-+ "658", /* 658 */
-+ "659", /* 659 */
-+ "660", /* 660 */
-+ "661", /* 661 */
-+ "662", /* 662 */
-+ "663", /* 663 */
-+ "664", /* 664 */
-+ "665", /* 665 */
-+ "666", /* 666 */
-+ "667", /* 667 */
-+ "668", /* 668 */
-+ "669", /* 669 */
-+ "670", /* 670 */
-+ "671", /* 671 */
-+ "672", /* 672 */
-+ "673", /* 673 */
-+ "674", /* 674 */
-+ "675", /* 675 */
-+ "676", /* 676 */
-+ "677", /* 677 */
-+ "678", /* 678 */
-+ "679", /* 679 */
-+ "680", /* 680 */
-+ "681", /* 681 */
-+ "682", /* 682 */
-+ "683", /* 683 */
-+ "684", /* 684 */
-+ "685", /* 685 */
-+ "686", /* 686 */
-+ "687", /* 687 */
-+ "688", /* 688 */
-+ "689", /* 689 */
-+ "690", /* 690 */
-+ "691", /* 691 */
-+ "692", /* 692 */
-+ "693", /* 693 */
-+ "694", /* 694 */
-+ "695", /* 695 */
-+ "696", /* 696 */
-+ "697", /* 697 */
-+ "698", /* 698 */
-+ "699", /* 699 */
-+ "700", /* 700 */
-+ "701", /* 701 */
-+ "702", /* 702 */
-+ "703", /* 703 */
-+ "704", /* 704 */
-+ "705", /* 705 */
-+ "706", /* 706 */
-+ "707", /* 707 */
-+ "708", /* 708 */
-+ "709", /* 709 */
-+ "710", /* 710 */
-+ "711", /* 711 */
-+ "712", /* 712 */
-+ "713", /* 713 */
-+ "714", /* 714 */
-+ "715", /* 715 */
-+ "716", /* 716 */
-+ "717", /* 717 */
-+ "718", /* 718 */
-+ "719", /* 719 */
-+ "720", /* 720 */
-+ "721", /* 721 */
-+ "722", /* 722 */
-+ "723", /* 723 */
-+ "724", /* 724 */
-+ "725", /* 725 */
-+ "726", /* 726 */
-+ "727", /* 727 */
-+ "728", /* 728 */
-+ "729", /* 729 */
-+ "730", /* 730 */
-+ "731", /* 731 */
-+ "732", /* 732 */
-+ "733", /* 733 */
-+ "734", /* 734 */
-+ "735", /* 735 */
-+ "736", /* 736 */
-+ "737", /* 737 */
-+ "738", /* 738 */
-+ "739", /* 739 */
-+ "740", /* 740 */
-+ "741", /* 741 */
-+ "742", /* 742 */
-+ "743", /* 743 */
-+ "744", /* 744 */
-+ "745", /* 745 */
-+ "746", /* 746 */
-+ "747", /* 747 */
-+ "748", /* 748 */
-+ "749", /* 749 */
-+ "750", /* 750 */
-+ "751", /* 751 */
-+ "752", /* 752 */
-+ "753", /* 753 */
-+ "754", /* 754 */
-+ "755", /* 755 */
-+ "756", /* 756 */
-+ "757", /* 757 */
-+ "758", /* 758 */
-+ "759", /* 759 */
-+ "760", /* 760 */
-+ "761", /* 761 */
-+ "762", /* 762 */
-+ "763", /* 763 */
-+ "764", /* 764 */
-+ "765", /* 765 */
-+ "766", /* 766 */
-+ "767", /* 767 */
-+ "768", /* 768 */
-+ "769", /* 769 */
-+ "770", /* 770 */
-+ "771", /* 771 */
-+ "772", /* 772 */
-+ "773", /* 773 */
-+ "774", /* 774 */
-+ "775", /* 775 */
-+ "776", /* 776 */
-+ "777", /* 777 */
-+ "778", /* 778 */
-+ "779", /* 779 */
-+ "780", /* 780 */
-+ "781", /* 781 */
-+ "782", /* 782 */
-+ "783", /* 783 */
-+ "784", /* 784 */
-+ "785", /* 785 */
-+ "786", /* 786 */
-+ "787", /* 787 */
-+ "788", /* 788 */
-+ "789", /* 789 */
-+ "790", /* 790 */
-+ "791", /* 791 */
-+ "792", /* 792 */
-+ "793", /* 793 */
-+ "794", /* 794 */
-+ "795", /* 795 */
-+ "796", /* 796 */
-+ "797", /* 797 */
-+ "798", /* 798 */
-+ "799", /* 799 */
-+ "800", /* 800 */
-+ "801", /* 801 */
-+ "802", /* 802 */
-+ "803", /* 803 */
-+ "804", /* 804 */
-+ "805", /* 805 */
-+ "806", /* 806 */
-+ "807", /* 807 */
-+ "808", /* 808 */
-+ "809", /* 809 */
-+ "810", /* 810 */
-+ "811", /* 811 */
-+ "812", /* 812 */
-+ "813", /* 813 */
-+ "814", /* 814 */
-+ "815", /* 815 */
-+ "816", /* 816 */
-+ "817", /* 817 */
-+ "818", /* 818 */
-+ "819", /* 819 */
-+ "820", /* 820 */
-+ "821", /* 821 */
-+ "822", /* 822 */
-+ "823", /* 823 */
-+ "824", /* 824 */
-+ "825", /* 825 */
-+ "826", /* 826 */
-+ "827", /* 827 */
-+ "828", /* 828 */
-+ "829", /* 829 */
-+ "830", /* 830 */
-+ "831", /* 831 */
-+ "832", /* 832 */
-+ "833", /* 833 */
-+ "834", /* 834 */
-+ "835", /* 835 */
-+ "836", /* 836 */
-+ "837", /* 837 */
-+ "838", /* 838 */
-+ "839", /* 839 */
-+ "840", /* 840 */
-+ "841", /* 841 */
-+ "842", /* 842 */
-+ "843", /* 843 */
-+ "844", /* 844 */
-+ "845", /* 845 */
-+ "846", /* 846 */
-+ "847", /* 847 */
-+ "848", /* 848 */
-+ "849", /* 849 */
-+ "850", /* 850 */
-+ "851", /* 851 */
-+ "852", /* 852 */
-+ "853", /* 853 */
-+ "854", /* 854 */
-+ "855", /* 855 */
-+ "856", /* 856 */
-+ "857", /* 857 */
-+ "858", /* 858 */
-+ "859", /* 859 */
-+ "860", /* 860 */
-+ "861", /* 861 */
-+ "862", /* 862 */
-+ "863", /* 863 */
-+ "864", /* 864 */
-+ "865", /* 865 */
-+ "866", /* 866 */
-+ "867", /* 867 */
-+ "868", /* 868 */
-+ "869", /* 869 */
-+ "870", /* 870 */
-+ "871", /* 871 */
-+ "872", /* 872 */
-+ "873", /* 873 */
-+ "874", /* 874 */
-+ "875", /* 875 */
-+ "876", /* 876 */
-+ "877", /* 877 */
-+ "878", /* 878 */
-+ "879", /* 879 */
-+ "880", /* 880 */
-+ "881", /* 881 */
-+ "882", /* 882 */
-+ "883", /* 883 */
-+ "884", /* 884 */
-+ "885", /* 885 */
-+ "886", /* 886 */
-+ "887", /* 887 */
-+ "888", /* 888 */
-+ "889", /* 889 */
-+ "890", /* 890 */
-+ "891", /* 891 */
-+ "892", /* 892 */
-+ "893", /* 893 */
-+ "894", /* 894 */
-+ "895", /* 895 */
-+ "896", /* 896 */
-+ "897", /* 897 */
-+ "898", /* 898 */
-+ "899", /* 899 */
-+ "900", /* 900 */
-+ "901", /* 901 */
-+ "902", /* 902 */
-+ "903", /* 903 */
-+ "904", /* 904 */
-+ "905", /* 905 */
-+ "906", /* 906 */
-+ "907", /* 907 */
-+ "908", /* 908 */
-+ "909", /* 909 */
-+ "910", /* 910 */
-+ "911", /* 911 */
-+ "912", /* 912 */
-+ "913", /* 913 */
-+ "914", /* 914 */
-+ "915", /* 915 */
-+ "916", /* 916 */
-+ "917", /* 917 */
-+ "918", /* 918 */
-+ "919", /* 919 */
-+ "920", /* 920 */
-+ "921", /* 921 */
-+ "922", /* 922 */
-+ "923", /* 923 */
-+ "924", /* 924 */
-+ "925", /* 925 */
-+ "926", /* 926 */
-+ "927", /* 927 */
-+ "928", /* 928 */
-+ "929", /* 929 */
-+ "930", /* 930 */
-+ "931", /* 931 */
-+ "932", /* 932 */
-+ "933", /* 933 */
-+ "934", /* 934 */
-+ "935", /* 935 */
-+ "936", /* 936 */
-+ "937", /* 937 */
-+ "938", /* 938 */
-+ "939", /* 939 */
-+ "940", /* 940 */
-+ "941", /* 941 */
-+ "942", /* 942 */
-+ "943", /* 943 */
-+ "944", /* 944 */
-+ "945", /* 945 */
-+ "946", /* 946 */
-+ "947", /* 947 */
-+ "948", /* 948 */
-+ "949", /* 949 */
-+ "950", /* 950 */
-+ "951", /* 951 */
-+ "952", /* 952 */
-+ "953", /* 953 */
-+ "954", /* 954 */
-+ "955", /* 955 */
-+ "956", /* 956 */
-+ "957", /* 957 */
-+ "958", /* 958 */
-+ "959", /* 959 */
-+ "960", /* 960 */
-+ "961", /* 961 */
-+ "962", /* 962 */
-+ "963", /* 963 */
-+ "964", /* 964 */
-+ "965", /* 965 */
-+ "966", /* 966 */
-+ "967", /* 967 */
-+ "968", /* 968 */
-+ "969", /* 969 */
-+ "970", /* 970 */
-+ "971", /* 971 */
-+ "972", /* 972 */
-+ "973", /* 973 */
-+ "974", /* 974 */
-+ "975", /* 975 */
-+ "976", /* 976 */
-+ "977", /* 977 */
-+ "978", /* 978 */
-+ "979", /* 979 */
-+ "980", /* 980 */
-+ "981", /* 981 */
-+ "982", /* 982 */
-+ "983", /* 983 */
-+ "984", /* 984 */
-+ "985", /* 985 */
-+ "986", /* 986 */
-+ "987", /* 987 */
-+ "988", /* 988 */
-+ "989", /* 989 */
-+ "990", /* 990 */
-+ "991", /* 991 */
-+ "992", /* 992 */
-+ "993", /* 993 */
-+ "994", /* 994 */
-+ "995", /* 995 */
-+ "996", /* 996 */
-+ "997", /* 997 */
-+ "998", /* 998 */
-+ "999", /* 999 */
-+ "1000", /* 1000 */
-+ "1001", /* 1001 */
-+ "1002", /* 1002 */
-+ "1003", /* 1003 */
-+ "1004", /* 1004 */
-+ "1005", /* 1005 */
-+ "1006", /* 1006 */
-+ "1007", /* 1007 */
-+ "1008", /* 1008 */
-+ "1009", /* 1009 */
-+ "1010", /* 1010 */
-+ "1011", /* 1011 */
-+ "1012", /* 1012 */
-+ "1013", /* 1013 */
-+ "1014", /* 1014 */
-+ "1015", /* 1015 */
-+ "1016", /* 1016 */
-+ "1017", /* 1017 */
-+ "1018", /* 1018 */
-+ "1019", /* 1019 */
-+ "1020", /* 1020 */
-+ "1021", /* 1021 */
-+ "1022", /* 1022 */
-+ "1023", /* 1023 */
-+ "open", /* 1024 */
-+ "link", /* 1025 */
-+ "unlink", /* 1026 */
-+ "mknod", /* 1027 */
-+ "chmod", /* 1028 */
-+ "chown", /* 1029 */
-+ "mkdir", /* 1030 */
-+ "rmdir", /* 1031 */
-+ "lchown", /* 1032 */
-+ "access", /* 1033 */
-+ "rename", /* 1034 */
-+ "readlink", /* 1035 */
-+ "symlink", /* 1036 */
-+ "utimes", /* 1037 */
-+ "stat", /* 1038 */
-+ "lstat", /* 1039 */
-+ "pipe", /* 1040 */
-+ "dup2", /* 1041 */
-+ "epoll_create", /* 1042 */
-+ "inotify_init", /* 1043 */
-+ "eventfd", /* 1044 */
-+ "signalfd", /* 1045 */
-+ "sendfile", /* 1046 */
-+ "ftruncate", /* 1047 */
-+ "truncate", /* 1048 */
-+ "stat", /* 1049 */
-+ "lstat", /* 1050 */
-+ "fstat", /* 1051 */
-+ "fcntl", /* 1052 */
-+ "fadvise64", /* 1053 */
-+ "newfstatat", /* 1054 */
-+ "fstatfs", /* 1055 */
-+ "statfs", /* 1056 */
-+ "lseek", /* 1057 */
-+ "mmap", /* 1058 */
-+ "alarm", /* 1059 */
-+ "getpgrp", /* 1060 */
-+ "pause", /* 1061 */
-+ "time", /* 1062 */
-+ "utime", /* 1063 */
-+ "creat", /* 1064 */
-+ "getdents", /* 1065 */
-+ "futimesat", /* 1066 */
-+ "select", /* 1067 */
-+ "poll", /* 1068 */
-+ "epoll_wait", /* 1069 */
-+ "ustat", /* 1070 */
-+ "vfork", /* 1071 */
-+ "oldwait4", /* 1072 */
-+ "recv", /* 1073 */
-+ "send", /* 1074 */
-+ "bdflush", /* 1075 */
-+ "umount", /* 1076 */
-+ "uselib", /* 1077 */
-+ "_sysctl", /* 1078 */
-+ "fork", /* 1079 */
-diff --git a/sysdeps/linux-gnu/aarch64/trace.c b/sysdeps/linux-gnu/aarch64/trace.c
-new file mode 100644
-index 0000000..5544b51
---- /dev/null
-+++ b/sysdeps/linux-gnu/aarch64/trace.c
-@@ -0,0 +1,84 @@
-+/*
-+ * This file is part of ltrace.
-+ * Copyright (C) 2014 Petr Machata, Red Hat, Inc.
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License as
-+ * published by the Free Software Foundation; either version 2 of the
-+ * License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful, but
-+ * WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-+ * 02110-1301 USA
-+ */
-+
-+#include <sys/ptrace.h>
-+#include <sys/types.h>
-+#include <sys/wait.h>
-+#include <asm/ptrace.h>
-+#include <string.h>
-+#include <stdio.h>
-+#include <errno.h>
-+
-+#include "backend.h"
-+#include "proc.h"
-+
-+void
-+get_arch_dep(struct Process *proc)
-+{
-+}
-+
-+int aarch64_read_gregs(struct Process *proc, struct user_pt_regs *regs);
-+
-+/* The syscall instruction is:
-+ * | 31 21 | 20 5 | 4 0 |
-+ * | 1 1 0 1 0 1 0 0 | 0 0 0 | imm16 | 0 0 0 0 1 | */
-+#define SVC_MASK 0xffe0001f
-+#define SVC_VALUE 0xd4000001
-+
-+int
-+syscall_p(struct Process *proc, int status, int *sysnum)
-+{
-+ if (WIFSTOPPED(status)
-+ && WSTOPSIG(status) == (SIGTRAP | proc->tracesysgood)) {
-+
-+ struct user_pt_regs regs;
-+ if (aarch64_read_gregs(proc, &regs) < 0) {
-+ fprintf(stderr, "syscall_p: "
-+ "Couldn't read registers of %d.\n", proc->pid);
-+ return -1;
-+ }
-+
-+ errno = 0;
-+ unsigned long insn = (unsigned long) ptrace(PTRACE_PEEKTEXT,
-+ proc->pid,
-+ regs.pc - 4, 0);
-+ if (insn == -1UL && errno != 0) {
-+ fprintf(stderr, "syscall_p: "
-+ "Couldn't peek into %d: %s\n", proc->pid,
-+ strerror(errno));
-+ return -1;
-+ }
-+
-+ insn &= 0xffffffffUL;
-+ if ((insn & SVC_MASK) == SVC_VALUE) {
-+ *sysnum = regs.regs[8];
-+
-+ size_t d1 = proc->callstack_depth - 1;
-+ if (proc->callstack_depth > 0
-+ && proc->callstack[d1].is_syscall
-+ && proc->callstack[d1].c_un.syscall == *sysnum)
-+ return 2;
-+
-+ return 1;
-+ }
-+ }
-+
-+ return 0;
-+}
---
-1.9.1
-
diff --git a/legacy/ltrace/aarch64.patch b/legacy/ltrace/aarch64.patch
deleted file mode 100644
index a89c3073a..000000000
--- a/legacy/ltrace/aarch64.patch
+++ /dev/null
@@ -1,2155 +0,0 @@
-From 982cbca34b2b49a158086ff5f43eb9bba89edead Mon Sep 17 00:00:00 2001
-From: Petr Machata <pmachata@redhat.com>
-Date: Wed, 6 Feb 2013 15:46:04 +0100
-Subject: [PATCH] Move get_hfa_type from IA64 backend to type.c, name it
- type_get_hfa_type
-
----
- sysdeps/linux-gnu/ia64/fetch.c | 48 ++++++++----------------------------------
- type.c | 36 +++++++++++++++++++++++++++++++
- type.h | 11 +++++++++-
- 3 files changed, 55 insertions(+), 40 deletions(-)
-
-diff --git a/sysdeps/linux-gnu/ia64/fetch.c b/sysdeps/linux-gnu/ia64/fetch.c
-index e90dbed..171c7a2 100644
---- a/sysdeps/linux-gnu/ia64/fetch.c
-+++ b/sysdeps/linux-gnu/ia64/fetch.c
-@@ -1,6 +1,6 @@
- /*
- * This file is part of ltrace.
-- * Copyright (C) 2012 Petr Machata, Red Hat Inc.
-+ * Copyright (C) 2012,2013 Petr Machata, Red Hat Inc.
- * Copyright (C) 2008,2009 Juan Cespedes
- * Copyright (C) 2006 Steve Fink
- * Copyright (C) 2006 Ian Wienand
-@@ -249,37 +249,6 @@ allocate_float(struct fetch_context *ctx, struct process *proc,
- return 0;
- }
-
--static enum arg_type
--get_hfa_type(struct arg_type_info *info, size_t *countp)
--{
-- size_t n = type_aggregate_size(info);
-- if (n == (size_t)-1)
-- return ARGTYPE_VOID;
--
-- enum arg_type type = ARGTYPE_VOID;
-- *countp = 0;
--
-- while (n-- > 0) {
-- struct arg_type_info *emt = type_element(info, n);
--
-- enum arg_type emt_type = emt->type;
-- size_t emt_count = 1;
-- if (emt_type == ARGTYPE_STRUCT || emt_type == ARGTYPE_ARRAY)
-- emt_type = get_hfa_type(emt, &emt_count);
--
-- if (type == ARGTYPE_VOID) {
-- if (emt_type != ARGTYPE_FLOAT
-- && emt_type != ARGTYPE_DOUBLE)
-- return ARGTYPE_VOID;
-- type = emt_type;
-- }
-- if (emt_type != type)
-- return ARGTYPE_VOID;
-- *countp += emt_count;
-- }
-- return type;
--}
--
- static int
- allocate_hfa(struct fetch_context *ctx, struct process *proc,
- struct arg_type_info *info, struct value *valuep,
-@@ -380,10 +349,11 @@ allocate_ret(struct fetch_context *ctx, struct process *proc,
- * floating-point registers, beginning with f8. */
- if (info->type == ARGTYPE_STRUCT || info->type == ARGTYPE_ARRAY) {
- size_t hfa_size;
-- enum arg_type hfa_type = get_hfa_type(info, &hfa_size);
-- if (hfa_type != ARGTYPE_VOID && hfa_size <= 8)
-+ struct arg_type_info *hfa_info
-+ = type_get_hfa_type(info, &hfa_size);
-+ if (hfa_info != NULL && hfa_size <= 8)
- return allocate_hfa(ctx, proc, info, valuep,
-- hfa_type, hfa_size);
-+ hfa_info->type, hfa_size);
- }
-
- /* Integers and pointers are passed in r8. 128-bit integers
-@@ -409,7 +379,7 @@ arch_fetch_arg_next(struct fetch_context *ctx, enum tof type,
- struct arg_type_info *info, struct value *valuep)
- {
- switch (info->type) {
-- enum arg_type hfa_type;
-+ struct arg_type_info *hfa_info;
- size_t hfa_size;
-
- case ARGTYPE_VOID:
-@@ -421,10 +391,10 @@ arch_fetch_arg_next(struct fetch_context *ctx, enum tof type,
- return allocate_float(ctx, proc, info, valuep, 1);
-
- case ARGTYPE_STRUCT:
-- hfa_type = get_hfa_type(info, &hfa_size);
-- if (hfa_type != ARGTYPE_VOID)
-+ hfa_info = type_get_hfa_type(info, &hfa_size);
-+ if (hfa_info != NULL)
- return allocate_hfa(ctx, proc, info, valuep,
-- hfa_type, hfa_size);
-+ hfa_info->type, hfa_size);
- /* Fall through. */
- case ARGTYPE_CHAR:
- case ARGTYPE_SHORT:
-diff --git a/type.c b/type.c
-index 11b4ce1..d5bc98f 100644
---- a/type.c
-+++ b/type.c
-@@ -564,3 +564,39 @@ type_get_fp_equivalent(struct arg_type_info *info)
- }
- abort();
- }
-+
-+struct arg_type_info *
-+type_get_hfa_type(struct arg_type_info *info, size_t *countp)
-+{
-+ assert(info != NULL);
-+ if (info->type != ARGTYPE_STRUCT
-+ && info->type != ARGTYPE_ARRAY)
-+ return NULL;
-+
-+ size_t n = type_aggregate_size(info);
-+ if (n == (size_t)-1)
-+ return NULL;
-+
-+ struct arg_type_info *ret = NULL;
-+ *countp = 0;
-+
-+ while (n-- > 0) {
-+ struct arg_type_info *emt = type_element(info, n);
-+
-+ size_t emt_count = 1;
-+ if (emt->type == ARGTYPE_STRUCT || emt->type == ARGTYPE_ARRAY)
-+ emt = type_get_hfa_type(emt, &emt_count);
-+ if (emt == NULL)
-+ return NULL;
-+ if (ret == NULL) {
-+ if (emt->type != ARGTYPE_FLOAT
-+ && emt->type != ARGTYPE_DOUBLE)
-+ return NULL;
-+ ret = emt;
-+ }
-+ if (emt->type != ret->type)
-+ return NULL;
-+ *countp += emt_count;
-+ }
-+ return ret;
-+}
-diff --git a/type.h b/type.h
-index b92c1af..3210677 100644
---- a/type.h
-+++ b/type.h
-@@ -1,6 +1,6 @@
- /*
- * This file is part of ltrace.
-- * Copyright (C) 2011,2012 Petr Machata, Red Hat Inc.
-+ * Copyright (C) 2011,2012,2013 Petr Machata, Red Hat Inc.
- * Copyright (C) 1997-2009 Juan Cespedes
- *
- * This program is free software; you can redistribute it and/or
-@@ -142,4 +142,13 @@ int type_is_signed(enum arg_type type);
- * type. */
- struct arg_type_info *type_get_fp_equivalent(struct arg_type_info *info);
-
-+/* If INFO is homogeneous floating-point aggregate, return the
-+ * corresponding floating point type, and set *COUNTP to number of
-+ * fields of the structure. Otherwise return NULL. INFO is a HFA if
-+ * it's an aggregate whose each field is either a HFA, or a
-+ * floating-point type. */
-+struct arg_type_info *type_get_hfa_type(struct arg_type_info *info,
-+ size_t *countp);
-+
-+
- #endif /* TYPE_H */
---
-1.9.1
-
-From ae7249250ea650ec82bc545d4281b852020c7a6f Mon Sep 17 00:00:00 2001
-From: Petr Machata <pmachata@redhat.com>
-Date: Fri, 24 Jan 2014 00:50:06 +0100
-Subject: [PATCH 1/1] Implement aarch64 support
-
-- IFUNC support is not implemented, the rest works well. The only
- other failure is in wide char functions, and that occurs on x86_64
- as well.
----
- configure.ac | 3 +-
- sysdeps/linux-gnu/Makefile.am | 4 +-
- sysdeps/linux-gnu/aarch64/Makefile.am | 25 +
- sysdeps/linux-gnu/aarch64/arch.h | 37 ++
- sysdeps/linux-gnu/aarch64/fetch.c | 365 +++++++++++
- sysdeps/linux-gnu/aarch64/plt.c | 38 ++
- sysdeps/linux-gnu/aarch64/ptrace.h | 22 +
- sysdeps/linux-gnu/aarch64/regs.c | 130 ++++
- sysdeps/linux-gnu/aarch64/signalent.h | 52 ++
- sysdeps/linux-gnu/aarch64/syscallent.h | 1100 ++++++++++++++++++++++++++++++++
- sysdeps/linux-gnu/aarch64/trace.c | 83 +++
- 11 files changed, 1857 insertions(+), 2 deletions(-)
- create mode 100644 sysdeps/linux-gnu/aarch64/Makefile.am
- create mode 100644 sysdeps/linux-gnu/aarch64/arch.h
- create mode 100644 sysdeps/linux-gnu/aarch64/fetch.c
- create mode 100644 sysdeps/linux-gnu/aarch64/plt.c
- create mode 100644 sysdeps/linux-gnu/aarch64/ptrace.h
- create mode 100644 sysdeps/linux-gnu/aarch64/regs.c
- create mode 100644 sysdeps/linux-gnu/aarch64/signalent.h
- create mode 100644 sysdeps/linux-gnu/aarch64/syscallent.h
- create mode 100644 sysdeps/linux-gnu/aarch64/trace.c
-
-diff --git a/configure.ac b/configure.ac
-index c6e6bf0..0e9a124 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -1,6 +1,6 @@
- # -*- Autoconf -*-
- # This file is part of ltrace.
--# Copyright (C) 2010,2013 Petr Machata, Red Hat Inc.
-+# Copyright (C) 2010,2012,2013,2014 Petr Machata, Red Hat Inc.
- # Copyright (C) 2010,2011 Joe Damato
- # Copyright (C) 2010 Marc Kleine-Budde
- # Copyright (C) 2010 Zachary T Welch
-@@ -399,6 +399,7 @@ AC_CONFIG_FILES([
- Makefile
- sysdeps/Makefile
- sysdeps/linux-gnu/Makefile
-+ sysdeps/linux-gnu/aarch64/Makefile
- sysdeps/linux-gnu/alpha/Makefile
- sysdeps/linux-gnu/arm/Makefile
- sysdeps/linux-gnu/cris/Makefile
-diff --git a/sysdeps/linux-gnu/Makefile.am b/sysdeps/linux-gnu/Makefile.am
-index ecee577..ec26162 100644
---- a/sysdeps/linux-gnu/Makefile.am
-+++ b/sysdeps/linux-gnu/Makefile.am
-@@ -1,4 +1,5 @@
- # This file is part of ltrace.
-+# Copyright (C) 2014 Petr Machata, Red Hat, Inc.
- # Copyright (C) 2010,2012 Marc Kleine-Budde, Pengutronix
- #
- # This program is free software; you can redistribute it and/or
-@@ -16,7 +17,8 @@
- # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- # 02110-1301 USA
-
--DIST_SUBDIRS = alpha arm cris ia64 m68k mips ppc s390 sparc x86
-+DIST_SUBDIRS = aarch64 alpha arm cris ia64 m68k mips ppc s390 \
-+ sparc x86
-
- SUBDIRS = \
- $(HOST_CPU)
-diff --git a/sysdeps/linux-gnu/aarch64/Makefile.am b/sysdeps/linux-gnu/aarch64/Makefile.am
-new file mode 100644
-index 0000000..0af4e6e
---- /dev/null
-+++ b/sysdeps/linux-gnu/aarch64/Makefile.am
-@@ -0,0 +1,25 @@
-+# This file is part of ltrace.
-+# Copyright (C) 2014 Petr Machata, Red Hat, Inc.
-+#
-+# This program is free software; you can redistribute it and/or
-+# modify it under the terms of the GNU General Public License as
-+# published by the Free Software Foundation; either version 2 of the
-+# License, or (at your option) any later version.
-+#
-+# This program is distributed in the hope that it will be useful, but
-+# WITHOUT ANY WARRANTY; without even the implied warranty of
-+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+# General Public License for more details.
-+#
-+# You should have received a copy of the GNU General Public License
-+# along with this program; if not, write to the Free Software
-+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-+# 02110-1301 USA
-+
-+noinst_LTLIBRARIES = ../libcpu.la
-+
-+___libcpu_la_SOURCES = fetch.c plt.c regs.c trace.c
-+
-+noinst_HEADERS = arch.h ptrace.h signalent.h syscallent.h
-+
-+MAINTAINERCLEANFILES = Makefile.in
-diff --git a/sysdeps/linux-gnu/aarch64/arch.h b/sysdeps/linux-gnu/aarch64/arch.h
-new file mode 100644
-index 0000000..4137613
---- /dev/null
-+++ b/sysdeps/linux-gnu/aarch64/arch.h
-@@ -0,0 +1,37 @@
-+/*
-+ * This file is part of ltrace.
-+ * Copyright (C) 2014 Petr Machata, Red Hat, Inc.
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License as
-+ * published by the Free Software Foundation; either version 2 of the
-+ * License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful, but
-+ * WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-+ * 02110-1301 USA
-+ */
-+#ifndef LTRACE_AARCH64_ARCH_H
-+#define LTRACE_AARCH64_ARCH_H
-+
-+/* | 31 21 | 20 5 | 4 0 | *
-+ * | 1 1 0 1 0 1 0 0 0 0 1 | imm16 | 0 0 0 0 0 | */
-+#define BREAKPOINT_VALUE { 0xd4, 0x20, 0, 0 }
-+#define BREAKPOINT_LENGTH 4
-+#define DECR_PC_AFTER_BREAK 0
-+
-+#define LT_ELFCLASS ELFCLASS64
-+#define LT_ELF_MACHINE EM_AARCH64
-+
-+#define ARCH_HAVE_FETCH_ARG
-+#define ARCH_ENDIAN_BIG
-+#define ARCH_HAVE_SIZEOF
-+#define ARCH_HAVE_ALIGNOF
-+
-+#endif /* LTRACE_AARCH64_ARCH_H */
-diff --git a/sysdeps/linux-gnu/aarch64/fetch.c b/sysdeps/linux-gnu/aarch64/fetch.c
-new file mode 100644
-index 0000000..8779f03
---- /dev/null
-+++ b/sysdeps/linux-gnu/aarch64/fetch.c
-@@ -0,0 +1,365 @@
-+/*
-+ * This file is part of ltrace.
-+ * Copyright (C) 2014 Petr Machata, Red Hat, Inc.
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License as
-+ * published by the Free Software Foundation; either version 2 of the
-+ * License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful, but
-+ * WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-+ * 02110-1301 USA
-+ */
-+
-+#include <sys/ptrace.h>
-+#include <asm/ptrace.h>
-+#include <stdlib.h>
-+#include <string.h>
-+
-+#include "fetch.h"
-+#include "proc.h"
-+#include "type.h"
-+#include "value.h"
-+
-+int aarch64_read_gregs(struct Process *proc, struct user_pt_regs *regs);
-+int aarch64_read_fregs(struct Process *proc, struct user_fpsimd_state *regs);
-+
-+
-+struct fetch_context
-+{
-+ struct user_pt_regs gregs;
-+ struct user_fpsimd_state fpregs;
-+ arch_addr_t nsaa;
-+ unsigned ngrn;
-+ unsigned nsrn;
-+ arch_addr_t x8;
-+};
-+
-+static int
-+context_init(struct fetch_context *context, struct Process *proc)
-+{
-+ if (aarch64_read_gregs(proc, &context->gregs) < 0
-+ || aarch64_read_fregs(proc, &context->fpregs) < 0)
-+ return -1;
-+
-+ context->ngrn = 0;
-+ context->nsrn = 0;
-+ /* XXX double cast */
-+ context->nsaa = (arch_addr_t) (uintptr_t) context->gregs.sp;
-+ context->x8 = 0;
-+
-+ return 0;
-+}
-+
-+struct fetch_context *
-+arch_fetch_arg_clone(struct Process *proc, struct fetch_context *context)
-+{
-+ struct fetch_context *ret = malloc(sizeof(*ret));
-+ if (ret == NULL)
-+ return NULL;
-+ return memcpy(ret, context, sizeof(*ret));
-+}
-+
-+static void
-+fetch_next_gpr(struct fetch_context *context, unsigned char *buf)
-+{
-+ uint64_t u = context->gregs.regs[context->ngrn++];
-+ memcpy(buf, &u, 8);
-+}
-+
-+static int
-+fetch_gpr(struct fetch_context *context, struct value *value, size_t sz)
-+{
-+ if (sz < 8)
-+ sz = 8;
-+
-+ unsigned char *buf = value_reserve(value, sz);
-+ if (buf == NULL)
-+ return -1;
-+
-+ size_t i;
-+ for (i = 0; i < sz; i += 8)
-+ fetch_next_gpr(context, buf + i);
-+
-+ return 0;
-+}
-+
-+static void
-+fetch_next_sse(struct fetch_context *context, unsigned char *buf, size_t sz)
-+{
-+ __int128 u = context->fpregs.vregs[context->nsrn++];
-+ memcpy(buf, &u, sz);
-+}
-+
-+static int
-+fetch_sse(struct fetch_context *context, struct value *value, size_t sz)
-+{
-+ unsigned char *buf = value_reserve(value, sz);
-+ if (buf == NULL)
-+ return -1;
-+
-+ fetch_next_sse(context, buf, sz);
-+ return 0;
-+}
-+
-+static int
-+fetch_hfa(struct fetch_context *context,
-+ struct value *value, struct arg_type_info *hfa_t, size_t count)
-+{
-+ size_t sz = type_sizeof(value->inferior, hfa_t);
-+ unsigned char *buf = value_reserve(value, sz * count);
-+ if (buf == NULL)
-+ return -1;
-+
-+ size_t i;
-+ for (i = 0; i < count; ++i) {
-+ fetch_next_sse(context, buf, sz);
-+ buf += sz;
-+ }
-+ return 0;
-+}
-+
-+static int
-+fetch_stack(struct fetch_context *context, struct value *value,
-+ size_t align, size_t sz)
-+{
-+ if (align < 8)
-+ align = 8;
-+ size_t amount = ((sz + align - 1) / align) * align;
-+
-+ /* XXX double casts */
-+ uintptr_t sp = (uintptr_t) context->nsaa;
-+ sp = ((sp + align - 1) / align) * align;
-+
-+ value_in_inferior(value, (arch_addr_t) sp);
-+
-+ sp += amount;
-+ context->nsaa = (arch_addr_t) sp;
-+
-+ return 0;
-+}
-+
-+enum convert_method {
-+ CVT_ERR = -1,
-+ CVT_NOP = 0,
-+ CVT_BYREF,
-+};
-+
-+enum fetch_method {
-+ FETCH_NOP,
-+ FETCH_STACK,
-+ FETCH_GPR,
-+ FETCH_SSE,
-+ FETCH_HFA,
-+};
-+
-+struct fetch_script {
-+ enum convert_method c;
-+ enum fetch_method f;
-+ size_t sz;
-+ struct arg_type_info *hfa_t;
-+ size_t count;
-+};
-+
-+static struct fetch_script
-+pass_arg(struct fetch_context const *context,
-+ struct Process *proc, struct arg_type_info *info)
-+{
-+ enum fetch_method cvt = CVT_NOP;
-+
-+ size_t sz = type_sizeof(proc, info);
-+ if (sz == (size_t) -1)
-+ return (struct fetch_script) { CVT_ERR, FETCH_NOP, sz };
-+
-+ switch (info->type) {
-+ case ARGTYPE_VOID:
-+ return (struct fetch_script) { cvt, FETCH_NOP, sz };
-+
-+ case ARGTYPE_STRUCT:
-+ case ARGTYPE_ARRAY:;
-+ size_t count;
-+ struct arg_type_info *hfa_t = type_get_hfa_type(info, &count);
-+ if (hfa_t != NULL && count <= 4) {
-+ if (context->nsrn + count <= 8)
-+ return (struct fetch_script)
-+ { cvt, FETCH_HFA, sz, hfa_t, count };
-+ return (struct fetch_script)
-+ { cvt, FETCH_STACK, sz, hfa_t, count };
-+ }
-+
-+ if (sz <= 16) {
-+ size_t count = sz / 8;
-+ if (context->ngrn + count <= 8)
-+ return (struct fetch_script)
-+ { cvt, FETCH_GPR, sz };
-+ }
-+
-+ cvt = CVT_BYREF;
-+ sz = 8;
-+ /* Fall through. */
-+
-+ case ARGTYPE_POINTER:
-+ case ARGTYPE_INT:
-+ case ARGTYPE_UINT:
-+ case ARGTYPE_LONG:
-+ case ARGTYPE_ULONG:
-+ case ARGTYPE_CHAR:
-+ case ARGTYPE_SHORT:
-+ case ARGTYPE_USHORT:
-+ if (context->ngrn < 8 && sz <= 8)
-+ return (struct fetch_script) { cvt, FETCH_GPR, sz };
-+ /* We don't support types wider than 8 bytes as of
-+ * now. */
-+ assert(sz <= 8);
-+
-+ return (struct fetch_script) { cvt, FETCH_STACK, sz };
-+
-+ case ARGTYPE_FLOAT:
-+ case ARGTYPE_DOUBLE:
-+ if (context->nsrn < 8) {
-+ /* ltrace doesn't support float128. */
-+ assert(sz <= 8);
-+ return (struct fetch_script) { cvt, FETCH_SSE, sz };
-+ }
-+
-+ return (struct fetch_script) { cvt, FETCH_STACK, sz };
-+ }
-+
-+ assert(! "Failed to allocate argument.");
-+ abort();
-+}
-+
-+static int
-+convert_arg(struct value *value, struct fetch_script how)
-+{
-+ switch (how.c) {
-+ case CVT_NOP:
-+ return 0;
-+ case CVT_BYREF:
-+ return value_pass_by_reference(value);
-+ case CVT_ERR:
-+ return -1;
-+ }
-+
-+ assert(! "Don't know how to convert argument.");
-+ abort();
-+}
-+
-+static int
-+fetch_arg(struct fetch_context *context,
-+ struct Process *proc, struct arg_type_info *info,
-+ struct value *value, struct fetch_script how)
-+{
-+ if (convert_arg(value, how) < 0)
-+ return -1;
-+
-+ switch (how.f) {
-+ case FETCH_NOP:
-+ return 0;
-+
-+ case FETCH_STACK:
-+ if (how.hfa_t != NULL && how.count != 0 && how.count <= 8)
-+ context->nsrn = 8;
-+ return fetch_stack(context, value,
-+ type_alignof(proc, info), how.sz);
-+
-+ case FETCH_GPR:
-+ return fetch_gpr(context, value, how.sz);
-+
-+ case FETCH_SSE:
-+ return fetch_sse(context, value, how.sz);
-+
-+ case FETCH_HFA:
-+ return fetch_hfa(context, value, how.hfa_t, how.count);
-+ }
-+
-+ assert(! "Don't know how to fetch argument.");
-+ abort();
-+}
-+
-+struct fetch_context *
-+arch_fetch_arg_init(enum tof type, struct Process *proc,
-+ struct arg_type_info *ret_info)
-+{
-+ struct fetch_context *context = malloc(sizeof *context);
-+ if (context == NULL || context_init(context, proc) < 0) {
-+ fail:
-+ free(context);
-+ return NULL;
-+ }
-+
-+ /* There's a provision in ARMv8 parameter passing convention
-+ * for returning types that, if passed as first argument to a
-+ * function, would be passed on stack. For those types, x8
-+ * contains an address where the return argument should be
-+ * placed. The callee doesn't need to preserve the value of
-+ * x8, so we need to fetch it now.
-+ *
-+ * To my knowledge, there are currently no types where this
-+ * holds, but the code is here, utterly untested. */
-+
-+ struct fetch_script how = pass_arg(context, proc, ret_info);
-+ if (how.c == CVT_ERR)
-+ goto fail;
-+ if (how.c == CVT_NOP && how.f == FETCH_STACK) {
-+ /* XXX double cast. */
-+ context->x8 = (arch_addr_t) (uintptr_t) context->gregs.regs[8];
-+ /* See the comment above about the assert. */
-+ assert(! "Unexpected: first argument passed on stack.");
-+ abort();
-+ }
-+
-+ return context;
-+}
-+
-+int
-+arch_fetch_arg_next(struct fetch_context *context, enum tof type,
-+ struct Process *proc, struct arg_type_info *info,
-+ struct value *value)
-+{
-+ return fetch_arg(context, proc, info, value,
-+ pass_arg(context, proc, info));
-+}
-+
-+int
-+arch_fetch_retval(struct fetch_context *context, enum tof type,
-+ struct Process *proc, struct arg_type_info *info,
-+ struct value *value)
-+{
-+ if (context->x8 != 0) {
-+ value_in_inferior(value, context->x8);
-+ return 0;
-+ }
-+
-+ if (context_init(context, proc) < 0)
-+ return -1;
-+
-+ return fetch_arg(context, proc, info, value,
-+ pass_arg(context, proc, info));
-+}
-+
-+void
-+arch_fetch_arg_done(struct fetch_context *context)
-+{
-+ if (context != NULL)
-+ free(context);
-+}
-+
-+size_t
-+arch_type_sizeof(struct Process *proc, struct arg_type_info *arg)
-+{
-+ return (size_t) -2;
-+}
-+
-+size_t
-+arch_type_alignof(struct Process *proc, struct arg_type_info *arg)
-+{
-+ return (size_t) -2;
-+}
-diff --git a/sysdeps/linux-gnu/aarch64/plt.c b/sysdeps/linux-gnu/aarch64/plt.c
-new file mode 100644
-index 0000000..29dc4c9
---- /dev/null
-+++ b/sysdeps/linux-gnu/aarch64/plt.c
-@@ -0,0 +1,38 @@
-+/*
-+ * This file is part of ltrace.
-+ * Copyright (C) 2014 Petr Machata, Red Hat, Inc.
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License as
-+ * published by the Free Software Foundation; either version 2 of the
-+ * License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful, but
-+ * WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-+ * 02110-1301 USA
-+ */
-+
-+#include <gelf.h>
-+
-+#include "backend.h"
-+#include "proc.h"
-+#include "library.h"
-+#include "ltrace-elf.h"
-+
-+arch_addr_t
-+sym2addr(struct Process *proc, struct library_symbol *sym)
-+{
-+ return sym->enter_addr;
-+}
-+
-+GElf_Addr
-+arch_plt_sym_val(struct ltelf *lte, size_t ndx, GElf_Rela *rela)
-+{
-+ return lte->plt_addr + 32 + ndx * 16;
-+}
-diff --git a/sysdeps/linux-gnu/aarch64/ptrace.h b/sysdeps/linux-gnu/aarch64/ptrace.h
-new file mode 100644
-index 0000000..283c314
---- /dev/null
-+++ b/sysdeps/linux-gnu/aarch64/ptrace.h
-@@ -0,0 +1,22 @@
-+/*
-+ * This file is part of ltrace.
-+ * Copyright (C) 2014 Petr Machata, Red Hat, Inc.
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License as
-+ * published by the Free Software Foundation; either version 2 of the
-+ * License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful, but
-+ * WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-+ * 02110-1301 USA
-+ */
-+
-+#include <sys/ptrace.h>
-+#include <asm/ptrace.h>
-diff --git a/sysdeps/linux-gnu/aarch64/regs.c b/sysdeps/linux-gnu/aarch64/regs.c
-new file mode 100644
-index 0000000..06eb72b
---- /dev/null
-+++ b/sysdeps/linux-gnu/aarch64/regs.c
-@@ -0,0 +1,131 @@
-+/*
-+ * This file is part of ltrace.
-+ * Copyright (C) 2014 Petr Machata, Red Hat, Inc.
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License as
-+ * published by the Free Software Foundation; either version 2 of the
-+ * License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful, but
-+ * WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-+ * 02110-1301 USA
-+ */
-+
-+#include <sys/ptrace.h>
-+#include <asm/ptrace.h>
-+#include <linux/uio.h>
-+#include <assert.h>
-+#include <stdlib.h>
-+#include <stdio.h>
-+
-+#include "backend.h"
-+#include "proc.h"
-+
-+#define PC_OFF (32 * 4)
-+
-+int
-+aarch64_read_gregs(struct Process *proc, struct user_pt_regs *regs)
-+{
-+ *regs = (struct user_pt_regs) {};
-+ struct iovec iovec;
-+ iovec.iov_base = regs;
-+ iovec.iov_len = sizeof *regs;
-+ return ptrace(PTRACE_GETREGSET, proc->pid, NT_PRSTATUS, &iovec) < 0
-+ ? -1 : 0;
-+}
-+
-+int
-+aarch64_write_gregs(struct Process *proc, struct user_pt_regs *regs)
-+{
-+ struct iovec iovec;
-+ iovec.iov_base = regs;
-+ iovec.iov_len = sizeof *regs;
-+ return ptrace(PTRACE_SETREGSET, proc->pid, NT_PRSTATUS, &iovec) < 0
-+ ? -1 : 0;
-+}
-+
-+int
-+aarch64_read_fregs(struct Process *proc, struct user_fpsimd_state *regs)
-+{
-+ *regs = (struct user_fpsimd_state) {};
-+ struct iovec iovec;
-+ iovec.iov_base = regs;
-+ iovec.iov_len = sizeof *regs;
-+ return ptrace(PTRACE_GETREGSET, proc->pid, NT_FPREGSET, &iovec) < 0
-+ ? -1 : 0;
-+}
-+
-+arch_addr_t
-+get_instruction_pointer(struct Process *proc)
-+{
-+ struct user_pt_regs regs;
-+ if (aarch64_read_gregs(proc, &regs) < 0) {
-+ fprintf(stderr, "get_instruction_pointer: "
-+ "Couldn't read registers of %d.\n", proc->pid);
-+ return 0;
-+ }
-+
-+ /*
-+ char buf[128];
-+ sprintf(buf, "cat /proc/%d/maps", proc->pid);
-+ system(buf);
-+ */
-+
-+ /* XXX double cast */
-+ return (arch_addr_t) (uintptr_t) regs.pc;
-+}
-+
-+void
-+set_instruction_pointer(struct Process *proc, arch_addr_t addr)
-+{
-+ struct user_pt_regs regs;
-+ if (aarch64_read_gregs(proc, &regs) < 0) {
-+ fprintf(stderr, "get_instruction_pointer: "
-+ "Couldn't read registers of %d.\n", proc->pid);
-+ return;
-+ }
-+
-+ /* XXX double cast */
-+ regs.pc = (uint64_t) (uintptr_t) addr;
-+
-+ if (aarch64_write_gregs(proc, &regs) < 0) {
-+ fprintf(stderr, "get_instruction_pointer: "
-+ "Couldn't write registers of %d.\n", proc->pid);
-+ return;
-+ }
-+}
-+
-+arch_addr_t
-+get_stack_pointer(struct Process *proc)
-+{
-+ struct user_pt_regs regs;
-+ if (aarch64_read_gregs(proc, &regs) < 0) {
-+ fprintf(stderr, "get_stack_pointer: "
-+ "Couldn't read registers of %d.\n", proc->pid);
-+ return 0;
-+ }
-+
-+ /* XXX double cast */
-+ return (arch_addr_t) (uintptr_t) regs.sp;
-+}
-+
-+arch_addr_t
-+get_return_addr(struct Process *proc, arch_addr_t stack_pointer)
-+{
-+ struct user_pt_regs regs;
-+ if (aarch64_read_gregs(proc, &regs) < 0) {
-+ fprintf(stderr, "get_return_addr: "
-+ "Couldn't read registers of %d.\n", proc->pid);
-+ return 0;
-+ }
-+
-+ /* XXX double cast */
-+ return (arch_addr_t) (uintptr_t) regs.regs[30];
-+}
-diff --git a/sysdeps/linux-gnu/aarch64/signalent.h b/sysdeps/linux-gnu/aarch64/signalent.h
-new file mode 100644
-index 0000000..bf56ebc
---- /dev/null
-+++ b/sysdeps/linux-gnu/aarch64/signalent.h
-@@ -0,0 +1,52 @@
-+/*
-+ * This file is part of ltrace.
-+ * Copyright (C) 2006 Ian Wienand
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License as
-+ * published by the Free Software Foundation; either version 2 of the
-+ * License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful, but
-+ * WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-+ * 02110-1301 USA
-+ */
-+
-+ "SIG_0", /* 0 */
-+ "SIGHUP", /* 1 */
-+ "SIGINT", /* 2 */
-+ "SIGQUIT", /* 3 */
-+ "SIGILL", /* 4 */
-+ "SIGTRAP", /* 5 */
-+ "SIGABRT", /* 6 */
-+ "SIGBUS", /* 7 */
-+ "SIGFPE", /* 8 */
-+ "SIGKILL", /* 9 */
-+ "SIGUSR1", /* 10 */
-+ "SIGSEGV", /* 11 */
-+ "SIGUSR2", /* 12 */
-+ "SIGPIPE", /* 13 */
-+ "SIGALRM", /* 14 */
-+ "SIGTERM", /* 15 */
-+ "SIGSTKFLT", /* 16 */
-+ "SIGCHLD", /* 17 */
-+ "SIGCONT", /* 18 */
-+ "SIGSTOP", /* 19 */
-+ "SIGTSTP", /* 20 */
-+ "SIGTTIN", /* 21 */
-+ "SIGTTOU", /* 22 */
-+ "SIGURG", /* 23 */
-+ "SIGXCPU", /* 24 */
-+ "SIGXFSZ", /* 25 */
-+ "SIGVTALRM", /* 26 */
-+ "SIGPROF", /* 27 */
-+ "SIGWINCH", /* 28 */
-+ "SIGIO", /* 29 */
-+ "SIGPWR", /* 30 */
-+ "SIGSYS", /* 31 */
-diff --git a/sysdeps/linux-gnu/aarch64/syscallent.h b/sysdeps/linux-gnu/aarch64/syscallent.h
-new file mode 100644
-index 0000000..aca8191
---- /dev/null
-+++ b/sysdeps/linux-gnu/aarch64/syscallent.h
-@@ -0,0 +1,1100 @@
-+/*
-+ * This file is part of ltrace.
-+ * Copyright (C) 2014 Petr Machata, Red Hat, Inc.
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License as
-+ * published by the Free Software Foundation; either version 2 of the
-+ * License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful, but
-+ * WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-+ * 02110-1301 USA
-+ */
-+
-+ "io_setup", /* 0 */
-+ "io_destroy", /* 1 */
-+ "io_submit", /* 2 */
-+ "io_cancel", /* 3 */
-+ "io_getevents", /* 4 */
-+ "setxattr", /* 5 */
-+ "lsetxattr", /* 6 */
-+ "fsetxattr", /* 7 */
-+ "getxattr", /* 8 */
-+ "lgetxattr", /* 9 */
-+ "fgetxattr", /* 10 */
-+ "listxattr", /* 11 */
-+ "llistxattr", /* 12 */
-+ "flistxattr", /* 13 */
-+ "removexattr", /* 14 */
-+ "lremovexattr", /* 15 */
-+ "fremovexattr", /* 16 */
-+ "getcwd", /* 17 */
-+ "lookup_dcookie", /* 18 */
-+ "eventfd2", /* 19 */
-+ "epoll_create1", /* 20 */
-+ "epoll_ctl", /* 21 */
-+ "epoll_pwait", /* 22 */
-+ "dup", /* 23 */
-+ "dup3", /* 24 */
-+ "fcntl", /* 25 */
-+ "inotify_init1", /* 26 */
-+ "inotify_add_watch", /* 27 */
-+ "inotify_rm_watch", /* 28 */
-+ "ioctl", /* 29 */
-+ "ioprio_set", /* 30 */
-+ "ioprio_get", /* 31 */
-+ "flock", /* 32 */
-+ "mknodat", /* 33 */
-+ "mkdirat", /* 34 */
-+ "unlinkat", /* 35 */
-+ "symlinkat", /* 36 */
-+ "linkat", /* 37 */
-+ "renameat", /* 38 */
-+ "umount2", /* 39 */
-+ "mount", /* 40 */
-+ "pivot_root", /* 41 */
-+ "nfsservctl", /* 42 */
-+ "statfs", /* 43 */
-+ "fstatfs", /* 44 */
-+ "truncate", /* 45 */
-+ "ftruncate", /* 46 */
-+ "fallocate", /* 47 */
-+ "faccessat", /* 48 */
-+ "chdir", /* 49 */
-+ "fchdir", /* 50 */
-+ "chroot", /* 51 */
-+ "fchmod", /* 52 */
-+ "fchmodat", /* 53 */
-+ "fchownat", /* 54 */
-+ "fchown", /* 55 */
-+ "openat", /* 56 */
-+ "close", /* 57 */
-+ "vhangup", /* 58 */
-+ "pipe2", /* 59 */
-+ "quotactl", /* 60 */
-+ "getdents64", /* 61 */
-+ "lseek", /* 62 */
-+ "read", /* 63 */
-+ "write", /* 64 */
-+ "readv", /* 65 */
-+ "writev", /* 66 */
-+ "pread64", /* 67 */
-+ "pwrite64", /* 68 */
-+ "preadv", /* 69 */
-+ "pwritev", /* 70 */
-+ "sendfile", /* 71 */
-+ "pselect6", /* 72 */
-+ "ppoll", /* 73 */
-+ "signalfd4", /* 74 */
-+ "vmsplice", /* 75 */
-+ "splice", /* 76 */
-+ "tee", /* 77 */
-+ "readlinkat", /* 78 */
-+ "fstatat", /* 79 */
-+ "fstat", /* 80 */
-+ "sync", /* 81 */
-+ "fsync", /* 82 */
-+ "fdatasync", /* 83 */
-+ "sync_file_range", /* 84 */
-+ "timerfd_create", /* 85 */
-+ "timerfd_settime", /* 86 */
-+ "timerfd_gettime", /* 87 */
-+ "utimensat", /* 88 */
-+ "acct", /* 89 */
-+ "capget", /* 90 */
-+ "capset", /* 91 */
-+ "personality", /* 92 */
-+ "exit", /* 93 */
-+ "exit_group", /* 94 */
-+ "waitid", /* 95 */
-+ "set_tid_address", /* 96 */
-+ "unshare", /* 97 */
-+ "futex", /* 98 */
-+ "set_robust_list", /* 99 */
-+ "get_robust_list", /* 100 */
-+ "nanosleep", /* 101 */
-+ "getitimer", /* 102 */
-+ "setitimer", /* 103 */
-+ "kexec_load", /* 104 */
-+ "init_module", /* 105 */
-+ "delete_module", /* 106 */
-+ "timer_create", /* 107 */
-+ "timer_gettime", /* 108 */
-+ "timer_getoverrun", /* 109 */
-+ "timer_settime", /* 110 */
-+ "timer_delete", /* 111 */
-+ "clock_settime", /* 112 */
-+ "clock_gettime", /* 113 */
-+ "clock_getres", /* 114 */
-+ "clock_nanosleep", /* 115 */
-+ "syslog", /* 116 */
-+ "ptrace", /* 117 */
-+ "sched_setparam", /* 118 */
-+ "sched_setscheduler", /* 119 */
-+ "sched_getscheduler", /* 120 */
-+ "sched_getparam", /* 121 */
-+ "sched_setaffinity", /* 122 */
-+ "sched_getaffinity", /* 123 */
-+ "sched_yield", /* 124 */
-+ "sched_get_priority_max", /* 125 */
-+ "sched_get_priority_min", /* 126 */
-+ "sched_rr_get_interval", /* 127 */
-+ "restart_syscall", /* 128 */
-+ "kill", /* 129 */
-+ "tkill", /* 130 */
-+ "tgkill", /* 131 */
-+ "sigaltstack", /* 132 */
-+ "rt_sigsuspend", /* 133 */
-+ "rt_sigaction", /* 134 */
-+ "rt_sigprocmask", /* 135 */
-+ "rt_sigpending", /* 136 */
-+ "rt_sigtimedwait", /* 137 */
-+ "rt_sigqueueinfo", /* 138 */
-+ "rt_sigreturn", /* 139 */
-+ "setpriority", /* 140 */
-+ "getpriority", /* 141 */
-+ "reboot", /* 142 */
-+ "setregid", /* 143 */
-+ "setgid", /* 144 */
-+ "setreuid", /* 145 */
-+ "setuid", /* 146 */
-+ "setresuid", /* 147 */
-+ "getresuid", /* 148 */
-+ "setresgid", /* 149 */
-+ "getresgid", /* 150 */
-+ "setfsuid", /* 151 */
-+ "setfsgid", /* 152 */
-+ "times", /* 153 */
-+ "setpgid", /* 154 */
-+ "getpgid", /* 155 */
-+ "getsid", /* 156 */
-+ "setsid", /* 157 */
-+ "getgroups", /* 158 */
-+ "setgroups", /* 159 */
-+ "uname", /* 160 */
-+ "sethostname", /* 161 */
-+ "setdomainname", /* 162 */
-+ "getrlimit", /* 163 */
-+ "setrlimit", /* 164 */
-+ "getrusage", /* 165 */
-+ "umask", /* 166 */
-+ "prctl", /* 167 */
-+ "getcpu", /* 168 */
-+ "gettimeofday", /* 169 */
-+ "settimeofday", /* 170 */
-+ "adjtimex", /* 171 */
-+ "getpid", /* 172 */
-+ "getppid", /* 173 */
-+ "getuid", /* 174 */
-+ "geteuid", /* 175 */
-+ "getgid", /* 176 */
-+ "getegid", /* 177 */
-+ "gettid", /* 178 */
-+ "sysinfo", /* 179 */
-+ "mq_open", /* 180 */
-+ "mq_unlink", /* 181 */
-+ "mq_timedsend", /* 182 */
-+ "mq_timedreceive", /* 183 */
-+ "mq_notify", /* 184 */
-+ "mq_getsetattr", /* 185 */
-+ "msgget", /* 186 */
-+ "msgctl", /* 187 */
-+ "msgrcv", /* 188 */
-+ "msgsnd", /* 189 */
-+ "semget", /* 190 */
-+ "semctl", /* 191 */
-+ "semtimedop", /* 192 */
-+ "semop", /* 193 */
-+ "shmget", /* 194 */
-+ "shmctl", /* 195 */
-+ "shmat", /* 196 */
-+ "shmdt", /* 197 */
-+ "socket", /* 198 */
-+ "socketpair", /* 199 */
-+ "bind", /* 200 */
-+ "listen", /* 201 */
-+ "accept", /* 202 */
-+ "connect", /* 203 */
-+ "getsockname", /* 204 */
-+ "getpeername", /* 205 */
-+ "sendto", /* 206 */
-+ "recvfrom", /* 207 */
-+ "setsockopt", /* 208 */
-+ "getsockopt", /* 209 */
-+ "shutdown", /* 210 */
-+ "sendmsg", /* 211 */
-+ "recvmsg", /* 212 */
-+ "readahead", /* 213 */
-+ "brk", /* 214 */
-+ "munmap", /* 215 */
-+ "mremap", /* 216 */
-+ "add_key", /* 217 */
-+ "request_key", /* 218 */
-+ "keyctl", /* 219 */
-+ "clone", /* 220 */
-+ "execve", /* 221 */
-+ "mmap", /* 222 */
-+ "fadvise64", /* 223 */
-+ "swapon", /* 224 */
-+ "swapoff", /* 225 */
-+ "mprotect", /* 226 */
-+ "msync", /* 227 */
-+ "mlock", /* 228 */
-+ "munlock", /* 229 */
-+ "mlockall", /* 230 */
-+ "munlockall", /* 231 */
-+ "mincore", /* 232 */
-+ "madvise", /* 233 */
-+ "remap_file_pages", /* 234 */
-+ "mbind", /* 235 */
-+ "get_mempolicy", /* 236 */
-+ "set_mempolicy", /* 237 */
-+ "migrate_pages", /* 238 */
-+ "move_pages", /* 239 */
-+ "rt_tgsigqueueinfo", /* 240 */
-+ "perf_event_open", /* 241 */
-+ "accept4", /* 242 */
-+ "recvmmsg", /* 243 */
-+ "arch_specific_syscall", /* 244 */
-+ "245", /* 245 */
-+ "246", /* 246 */
-+ "247", /* 247 */
-+ "248", /* 248 */
-+ "249", /* 249 */
-+ "250", /* 250 */
-+ "251", /* 251 */
-+ "252", /* 252 */
-+ "253", /* 253 */
-+ "254", /* 254 */
-+ "255", /* 255 */
-+ "256", /* 256 */
-+ "257", /* 257 */
-+ "258", /* 258 */
-+ "259", /* 259 */
-+ "wait4", /* 260 */
-+ "prlimit64", /* 261 */
-+ "fanotify_init", /* 262 */
-+ "fanotify_mark", /* 263 */
-+ "name_to_handle_at", /* 264 */
-+ "open_by_handle_at", /* 265 */
-+ "clock_adjtime", /* 266 */
-+ "syncfs", /* 267 */
-+ "setns", /* 268 */
-+ "sendmmsg", /* 269 */
-+ "process_vm_readv", /* 270 */
-+ "process_vm_writev", /* 271 */
-+ "kcmp", /* 272 */
-+ "finit_module", /* 273 */
-+ "syscalls", /* 274 */
-+ "275", /* 275 */
-+ "276", /* 276 */
-+ "277", /* 277 */
-+ "278", /* 278 */
-+ "279", /* 279 */
-+ "280", /* 280 */
-+ "281", /* 281 */
-+ "282", /* 282 */
-+ "283", /* 283 */
-+ "284", /* 284 */
-+ "285", /* 285 */
-+ "286", /* 286 */
-+ "287", /* 287 */
-+ "288", /* 288 */
-+ "289", /* 289 */
-+ "290", /* 290 */
-+ "291", /* 291 */
-+ "292", /* 292 */
-+ "293", /* 293 */
-+ "294", /* 294 */
-+ "295", /* 295 */
-+ "296", /* 296 */
-+ "297", /* 297 */
-+ "298", /* 298 */
-+ "299", /* 299 */
-+ "300", /* 300 */
-+ "301", /* 301 */
-+ "302", /* 302 */
-+ "303", /* 303 */
-+ "304", /* 304 */
-+ "305", /* 305 */
-+ "306", /* 306 */
-+ "307", /* 307 */
-+ "308", /* 308 */
-+ "309", /* 309 */
-+ "310", /* 310 */
-+ "311", /* 311 */
-+ "312", /* 312 */
-+ "313", /* 313 */
-+ "314", /* 314 */
-+ "315", /* 315 */
-+ "316", /* 316 */
-+ "317", /* 317 */
-+ "318", /* 318 */
-+ "319", /* 319 */
-+ "320", /* 320 */
-+ "321", /* 321 */
-+ "322", /* 322 */
-+ "323", /* 323 */
-+ "324", /* 324 */
-+ "325", /* 325 */
-+ "326", /* 326 */
-+ "327", /* 327 */
-+ "328", /* 328 */
-+ "329", /* 329 */
-+ "330", /* 330 */
-+ "331", /* 331 */
-+ "332", /* 332 */
-+ "333", /* 333 */
-+ "334", /* 334 */
-+ "335", /* 335 */
-+ "336", /* 336 */
-+ "337", /* 337 */
-+ "338", /* 338 */
-+ "339", /* 339 */
-+ "340", /* 340 */
-+ "341", /* 341 */
-+ "342", /* 342 */
-+ "343", /* 343 */
-+ "344", /* 344 */
-+ "345", /* 345 */
-+ "346", /* 346 */
-+ "347", /* 347 */
-+ "348", /* 348 */
-+ "349", /* 349 */
-+ "350", /* 350 */
-+ "351", /* 351 */
-+ "352", /* 352 */
-+ "353", /* 353 */
-+ "354", /* 354 */
-+ "355", /* 355 */
-+ "356", /* 356 */
-+ "357", /* 357 */
-+ "358", /* 358 */
-+ "359", /* 359 */
-+ "360", /* 360 */
-+ "361", /* 361 */
-+ "362", /* 362 */
-+ "363", /* 363 */
-+ "364", /* 364 */
-+ "365", /* 365 */
-+ "366", /* 366 */
-+ "367", /* 367 */
-+ "368", /* 368 */
-+ "369", /* 369 */
-+ "370", /* 370 */
-+ "371", /* 371 */
-+ "372", /* 372 */
-+ "373", /* 373 */
-+ "374", /* 374 */
-+ "375", /* 375 */
-+ "376", /* 376 */
-+ "377", /* 377 */
-+ "378", /* 378 */
-+ "379", /* 379 */
-+ "380", /* 380 */
-+ "381", /* 381 */
-+ "382", /* 382 */
-+ "383", /* 383 */
-+ "384", /* 384 */
-+ "385", /* 385 */
-+ "386", /* 386 */
-+ "387", /* 387 */
-+ "388", /* 388 */
-+ "389", /* 389 */
-+ "390", /* 390 */
-+ "391", /* 391 */
-+ "392", /* 392 */
-+ "393", /* 393 */
-+ "394", /* 394 */
-+ "395", /* 395 */
-+ "396", /* 396 */
-+ "397", /* 397 */
-+ "398", /* 398 */
-+ "399", /* 399 */
-+ "400", /* 400 */
-+ "401", /* 401 */
-+ "402", /* 402 */
-+ "403", /* 403 */
-+ "404", /* 404 */
-+ "405", /* 405 */
-+ "406", /* 406 */
-+ "407", /* 407 */
-+ "408", /* 408 */
-+ "409", /* 409 */
-+ "410", /* 410 */
-+ "411", /* 411 */
-+ "412", /* 412 */
-+ "413", /* 413 */
-+ "414", /* 414 */
-+ "415", /* 415 */
-+ "416", /* 416 */
-+ "417", /* 417 */
-+ "418", /* 418 */
-+ "419", /* 419 */
-+ "420", /* 420 */
-+ "421", /* 421 */
-+ "422", /* 422 */
-+ "423", /* 423 */
-+ "424", /* 424 */
-+ "425", /* 425 */
-+ "426", /* 426 */
-+ "427", /* 427 */
-+ "428", /* 428 */
-+ "429", /* 429 */
-+ "430", /* 430 */
-+ "431", /* 431 */
-+ "432", /* 432 */
-+ "433", /* 433 */
-+ "434", /* 434 */
-+ "435", /* 435 */
-+ "436", /* 436 */
-+ "437", /* 437 */
-+ "438", /* 438 */
-+ "439", /* 439 */
-+ "440", /* 440 */
-+ "441", /* 441 */
-+ "442", /* 442 */
-+ "443", /* 443 */
-+ "444", /* 444 */
-+ "445", /* 445 */
-+ "446", /* 446 */
-+ "447", /* 447 */
-+ "448", /* 448 */
-+ "449", /* 449 */
-+ "450", /* 450 */
-+ "451", /* 451 */
-+ "452", /* 452 */
-+ "453", /* 453 */
-+ "454", /* 454 */
-+ "455", /* 455 */
-+ "456", /* 456 */
-+ "457", /* 457 */
-+ "458", /* 458 */
-+ "459", /* 459 */
-+ "460", /* 460 */
-+ "461", /* 461 */
-+ "462", /* 462 */
-+ "463", /* 463 */
-+ "464", /* 464 */
-+ "465", /* 465 */
-+ "466", /* 466 */
-+ "467", /* 467 */
-+ "468", /* 468 */
-+ "469", /* 469 */
-+ "470", /* 470 */
-+ "471", /* 471 */
-+ "472", /* 472 */
-+ "473", /* 473 */
-+ "474", /* 474 */
-+ "475", /* 475 */
-+ "476", /* 476 */
-+ "477", /* 477 */
-+ "478", /* 478 */
-+ "479", /* 479 */
-+ "480", /* 480 */
-+ "481", /* 481 */
-+ "482", /* 482 */
-+ "483", /* 483 */
-+ "484", /* 484 */
-+ "485", /* 485 */
-+ "486", /* 486 */
-+ "487", /* 487 */
-+ "488", /* 488 */
-+ "489", /* 489 */
-+ "490", /* 490 */
-+ "491", /* 491 */
-+ "492", /* 492 */
-+ "493", /* 493 */
-+ "494", /* 494 */
-+ "495", /* 495 */
-+ "496", /* 496 */
-+ "497", /* 497 */
-+ "498", /* 498 */
-+ "499", /* 499 */
-+ "500", /* 500 */
-+ "501", /* 501 */
-+ "502", /* 502 */
-+ "503", /* 503 */
-+ "504", /* 504 */
-+ "505", /* 505 */
-+ "506", /* 506 */
-+ "507", /* 507 */
-+ "508", /* 508 */
-+ "509", /* 509 */
-+ "510", /* 510 */
-+ "511", /* 511 */
-+ "512", /* 512 */
-+ "513", /* 513 */
-+ "514", /* 514 */
-+ "515", /* 515 */
-+ "516", /* 516 */
-+ "517", /* 517 */
-+ "518", /* 518 */
-+ "519", /* 519 */
-+ "520", /* 520 */
-+ "521", /* 521 */
-+ "522", /* 522 */
-+ "523", /* 523 */
-+ "524", /* 524 */
-+ "525", /* 525 */
-+ "526", /* 526 */
-+ "527", /* 527 */
-+ "528", /* 528 */
-+ "529", /* 529 */
-+ "530", /* 530 */
-+ "531", /* 531 */
-+ "532", /* 532 */
-+ "533", /* 533 */
-+ "534", /* 534 */
-+ "535", /* 535 */
-+ "536", /* 536 */
-+ "537", /* 537 */
-+ "538", /* 538 */
-+ "539", /* 539 */
-+ "540", /* 540 */
-+ "541", /* 541 */
-+ "542", /* 542 */
-+ "543", /* 543 */
-+ "544", /* 544 */
-+ "545", /* 545 */
-+ "546", /* 546 */
-+ "547", /* 547 */
-+ "548", /* 548 */
-+ "549", /* 549 */
-+ "550", /* 550 */
-+ "551", /* 551 */
-+ "552", /* 552 */
-+ "553", /* 553 */
-+ "554", /* 554 */
-+ "555", /* 555 */
-+ "556", /* 556 */
-+ "557", /* 557 */
-+ "558", /* 558 */
-+ "559", /* 559 */
-+ "560", /* 560 */
-+ "561", /* 561 */
-+ "562", /* 562 */
-+ "563", /* 563 */
-+ "564", /* 564 */
-+ "565", /* 565 */
-+ "566", /* 566 */
-+ "567", /* 567 */
-+ "568", /* 568 */
-+ "569", /* 569 */
-+ "570", /* 570 */
-+ "571", /* 571 */
-+ "572", /* 572 */
-+ "573", /* 573 */
-+ "574", /* 574 */
-+ "575", /* 575 */
-+ "576", /* 576 */
-+ "577", /* 577 */
-+ "578", /* 578 */
-+ "579", /* 579 */
-+ "580", /* 580 */
-+ "581", /* 581 */
-+ "582", /* 582 */
-+ "583", /* 583 */
-+ "584", /* 584 */
-+ "585", /* 585 */
-+ "586", /* 586 */
-+ "587", /* 587 */
-+ "588", /* 588 */
-+ "589", /* 589 */
-+ "590", /* 590 */
-+ "591", /* 591 */
-+ "592", /* 592 */
-+ "593", /* 593 */
-+ "594", /* 594 */
-+ "595", /* 595 */
-+ "596", /* 596 */
-+ "597", /* 597 */
-+ "598", /* 598 */
-+ "599", /* 599 */
-+ "600", /* 600 */
-+ "601", /* 601 */
-+ "602", /* 602 */
-+ "603", /* 603 */
-+ "604", /* 604 */
-+ "605", /* 605 */
-+ "606", /* 606 */
-+ "607", /* 607 */
-+ "608", /* 608 */
-+ "609", /* 609 */
-+ "610", /* 610 */
-+ "611", /* 611 */
-+ "612", /* 612 */
-+ "613", /* 613 */
-+ "614", /* 614 */
-+ "615", /* 615 */
-+ "616", /* 616 */
-+ "617", /* 617 */
-+ "618", /* 618 */
-+ "619", /* 619 */
-+ "620", /* 620 */
-+ "621", /* 621 */
-+ "622", /* 622 */
-+ "623", /* 623 */
-+ "624", /* 624 */
-+ "625", /* 625 */
-+ "626", /* 626 */
-+ "627", /* 627 */
-+ "628", /* 628 */
-+ "629", /* 629 */
-+ "630", /* 630 */
-+ "631", /* 631 */
-+ "632", /* 632 */
-+ "633", /* 633 */
-+ "634", /* 634 */
-+ "635", /* 635 */
-+ "636", /* 636 */
-+ "637", /* 637 */
-+ "638", /* 638 */
-+ "639", /* 639 */
-+ "640", /* 640 */
-+ "641", /* 641 */
-+ "642", /* 642 */
-+ "643", /* 643 */
-+ "644", /* 644 */
-+ "645", /* 645 */
-+ "646", /* 646 */
-+ "647", /* 647 */
-+ "648", /* 648 */
-+ "649", /* 649 */
-+ "650", /* 650 */
-+ "651", /* 651 */
-+ "652", /* 652 */
-+ "653", /* 653 */
-+ "654", /* 654 */
-+ "655", /* 655 */
-+ "656", /* 656 */
-+ "657", /* 657 */
-+ "658", /* 658 */
-+ "659", /* 659 */
-+ "660", /* 660 */
-+ "661", /* 661 */
-+ "662", /* 662 */
-+ "663", /* 663 */
-+ "664", /* 664 */
-+ "665", /* 665 */
-+ "666", /* 666 */
-+ "667", /* 667 */
-+ "668", /* 668 */
-+ "669", /* 669 */
-+ "670", /* 670 */
-+ "671", /* 671 */
-+ "672", /* 672 */
-+ "673", /* 673 */
-+ "674", /* 674 */
-+ "675", /* 675 */
-+ "676", /* 676 */
-+ "677", /* 677 */
-+ "678", /* 678 */
-+ "679", /* 679 */
-+ "680", /* 680 */
-+ "681", /* 681 */
-+ "682", /* 682 */
-+ "683", /* 683 */
-+ "684", /* 684 */
-+ "685", /* 685 */
-+ "686", /* 686 */
-+ "687", /* 687 */
-+ "688", /* 688 */
-+ "689", /* 689 */
-+ "690", /* 690 */
-+ "691", /* 691 */
-+ "692", /* 692 */
-+ "693", /* 693 */
-+ "694", /* 694 */
-+ "695", /* 695 */
-+ "696", /* 696 */
-+ "697", /* 697 */
-+ "698", /* 698 */
-+ "699", /* 699 */
-+ "700", /* 700 */
-+ "701", /* 701 */
-+ "702", /* 702 */
-+ "703", /* 703 */
-+ "704", /* 704 */
-+ "705", /* 705 */
-+ "706", /* 706 */
-+ "707", /* 707 */
-+ "708", /* 708 */
-+ "709", /* 709 */
-+ "710", /* 710 */
-+ "711", /* 711 */
-+ "712", /* 712 */
-+ "713", /* 713 */
-+ "714", /* 714 */
-+ "715", /* 715 */
-+ "716", /* 716 */
-+ "717", /* 717 */
-+ "718", /* 718 */
-+ "719", /* 719 */
-+ "720", /* 720 */
-+ "721", /* 721 */
-+ "722", /* 722 */
-+ "723", /* 723 */
-+ "724", /* 724 */
-+ "725", /* 725 */
-+ "726", /* 726 */
-+ "727", /* 727 */
-+ "728", /* 728 */
-+ "729", /* 729 */
-+ "730", /* 730 */
-+ "731", /* 731 */
-+ "732", /* 732 */
-+ "733", /* 733 */
-+ "734", /* 734 */
-+ "735", /* 735 */
-+ "736", /* 736 */
-+ "737", /* 737 */
-+ "738", /* 738 */
-+ "739", /* 739 */
-+ "740", /* 740 */
-+ "741", /* 741 */
-+ "742", /* 742 */
-+ "743", /* 743 */
-+ "744", /* 744 */
-+ "745", /* 745 */
-+ "746", /* 746 */
-+ "747", /* 747 */
-+ "748", /* 748 */
-+ "749", /* 749 */
-+ "750", /* 750 */
-+ "751", /* 751 */
-+ "752", /* 752 */
-+ "753", /* 753 */
-+ "754", /* 754 */
-+ "755", /* 755 */
-+ "756", /* 756 */
-+ "757", /* 757 */
-+ "758", /* 758 */
-+ "759", /* 759 */
-+ "760", /* 760 */
-+ "761", /* 761 */
-+ "762", /* 762 */
-+ "763", /* 763 */
-+ "764", /* 764 */
-+ "765", /* 765 */
-+ "766", /* 766 */
-+ "767", /* 767 */
-+ "768", /* 768 */
-+ "769", /* 769 */
-+ "770", /* 770 */
-+ "771", /* 771 */
-+ "772", /* 772 */
-+ "773", /* 773 */
-+ "774", /* 774 */
-+ "775", /* 775 */
-+ "776", /* 776 */
-+ "777", /* 777 */
-+ "778", /* 778 */
-+ "779", /* 779 */
-+ "780", /* 780 */
-+ "781", /* 781 */
-+ "782", /* 782 */
-+ "783", /* 783 */
-+ "784", /* 784 */
-+ "785", /* 785 */
-+ "786", /* 786 */
-+ "787", /* 787 */
-+ "788", /* 788 */
-+ "789", /* 789 */
-+ "790", /* 790 */
-+ "791", /* 791 */
-+ "792", /* 792 */
-+ "793", /* 793 */
-+ "794", /* 794 */
-+ "795", /* 795 */
-+ "796", /* 796 */
-+ "797", /* 797 */
-+ "798", /* 798 */
-+ "799", /* 799 */
-+ "800", /* 800 */
-+ "801", /* 801 */
-+ "802", /* 802 */
-+ "803", /* 803 */
-+ "804", /* 804 */
-+ "805", /* 805 */
-+ "806", /* 806 */
-+ "807", /* 807 */
-+ "808", /* 808 */
-+ "809", /* 809 */
-+ "810", /* 810 */
-+ "811", /* 811 */
-+ "812", /* 812 */
-+ "813", /* 813 */
-+ "814", /* 814 */
-+ "815", /* 815 */
-+ "816", /* 816 */
-+ "817", /* 817 */
-+ "818", /* 818 */
-+ "819", /* 819 */
-+ "820", /* 820 */
-+ "821", /* 821 */
-+ "822", /* 822 */
-+ "823", /* 823 */
-+ "824", /* 824 */
-+ "825", /* 825 */
-+ "826", /* 826 */
-+ "827", /* 827 */
-+ "828", /* 828 */
-+ "829", /* 829 */
-+ "830", /* 830 */
-+ "831", /* 831 */
-+ "832", /* 832 */
-+ "833", /* 833 */
-+ "834", /* 834 */
-+ "835", /* 835 */
-+ "836", /* 836 */
-+ "837", /* 837 */
-+ "838", /* 838 */
-+ "839", /* 839 */
-+ "840", /* 840 */
-+ "841", /* 841 */
-+ "842", /* 842 */
-+ "843", /* 843 */
-+ "844", /* 844 */
-+ "845", /* 845 */
-+ "846", /* 846 */
-+ "847", /* 847 */
-+ "848", /* 848 */
-+ "849", /* 849 */
-+ "850", /* 850 */
-+ "851", /* 851 */
-+ "852", /* 852 */
-+ "853", /* 853 */
-+ "854", /* 854 */
-+ "855", /* 855 */
-+ "856", /* 856 */
-+ "857", /* 857 */
-+ "858", /* 858 */
-+ "859", /* 859 */
-+ "860", /* 860 */
-+ "861", /* 861 */
-+ "862", /* 862 */
-+ "863", /* 863 */
-+ "864", /* 864 */
-+ "865", /* 865 */
-+ "866", /* 866 */
-+ "867", /* 867 */
-+ "868", /* 868 */
-+ "869", /* 869 */
-+ "870", /* 870 */
-+ "871", /* 871 */
-+ "872", /* 872 */
-+ "873", /* 873 */
-+ "874", /* 874 */
-+ "875", /* 875 */
-+ "876", /* 876 */
-+ "877", /* 877 */
-+ "878", /* 878 */
-+ "879", /* 879 */
-+ "880", /* 880 */
-+ "881", /* 881 */
-+ "882", /* 882 */
-+ "883", /* 883 */
-+ "884", /* 884 */
-+ "885", /* 885 */
-+ "886", /* 886 */
-+ "887", /* 887 */
-+ "888", /* 888 */
-+ "889", /* 889 */
-+ "890", /* 890 */
-+ "891", /* 891 */
-+ "892", /* 892 */
-+ "893", /* 893 */
-+ "894", /* 894 */
-+ "895", /* 895 */
-+ "896", /* 896 */
-+ "897", /* 897 */
-+ "898", /* 898 */
-+ "899", /* 899 */
-+ "900", /* 900 */
-+ "901", /* 901 */
-+ "902", /* 902 */
-+ "903", /* 903 */
-+ "904", /* 904 */
-+ "905", /* 905 */
-+ "906", /* 906 */
-+ "907", /* 907 */
-+ "908", /* 908 */
-+ "909", /* 909 */
-+ "910", /* 910 */
-+ "911", /* 911 */
-+ "912", /* 912 */
-+ "913", /* 913 */
-+ "914", /* 914 */
-+ "915", /* 915 */
-+ "916", /* 916 */
-+ "917", /* 917 */
-+ "918", /* 918 */
-+ "919", /* 919 */
-+ "920", /* 920 */
-+ "921", /* 921 */
-+ "922", /* 922 */
-+ "923", /* 923 */
-+ "924", /* 924 */
-+ "925", /* 925 */
-+ "926", /* 926 */
-+ "927", /* 927 */
-+ "928", /* 928 */
-+ "929", /* 929 */
-+ "930", /* 930 */
-+ "931", /* 931 */
-+ "932", /* 932 */
-+ "933", /* 933 */
-+ "934", /* 934 */
-+ "935", /* 935 */
-+ "936", /* 936 */
-+ "937", /* 937 */
-+ "938", /* 938 */
-+ "939", /* 939 */
-+ "940", /* 940 */
-+ "941", /* 941 */
-+ "942", /* 942 */
-+ "943", /* 943 */
-+ "944", /* 944 */
-+ "945", /* 945 */
-+ "946", /* 946 */
-+ "947", /* 947 */
-+ "948", /* 948 */
-+ "949", /* 949 */
-+ "950", /* 950 */
-+ "951", /* 951 */
-+ "952", /* 952 */
-+ "953", /* 953 */
-+ "954", /* 954 */
-+ "955", /* 955 */
-+ "956", /* 956 */
-+ "957", /* 957 */
-+ "958", /* 958 */
-+ "959", /* 959 */
-+ "960", /* 960 */
-+ "961", /* 961 */
-+ "962", /* 962 */
-+ "963", /* 963 */
-+ "964", /* 964 */
-+ "965", /* 965 */
-+ "966", /* 966 */
-+ "967", /* 967 */
-+ "968", /* 968 */
-+ "969", /* 969 */
-+ "970", /* 970 */
-+ "971", /* 971 */
-+ "972", /* 972 */
-+ "973", /* 973 */
-+ "974", /* 974 */
-+ "975", /* 975 */
-+ "976", /* 976 */
-+ "977", /* 977 */
-+ "978", /* 978 */
-+ "979", /* 979 */
-+ "980", /* 980 */
-+ "981", /* 981 */
-+ "982", /* 982 */
-+ "983", /* 983 */
-+ "984", /* 984 */
-+ "985", /* 985 */
-+ "986", /* 986 */
-+ "987", /* 987 */
-+ "988", /* 988 */
-+ "989", /* 989 */
-+ "990", /* 990 */
-+ "991", /* 991 */
-+ "992", /* 992 */
-+ "993", /* 993 */
-+ "994", /* 994 */
-+ "995", /* 995 */
-+ "996", /* 996 */
-+ "997", /* 997 */
-+ "998", /* 998 */
-+ "999", /* 999 */
-+ "1000", /* 1000 */
-+ "1001", /* 1001 */
-+ "1002", /* 1002 */
-+ "1003", /* 1003 */
-+ "1004", /* 1004 */
-+ "1005", /* 1005 */
-+ "1006", /* 1006 */
-+ "1007", /* 1007 */
-+ "1008", /* 1008 */
-+ "1009", /* 1009 */
-+ "1010", /* 1010 */
-+ "1011", /* 1011 */
-+ "1012", /* 1012 */
-+ "1013", /* 1013 */
-+ "1014", /* 1014 */
-+ "1015", /* 1015 */
-+ "1016", /* 1016 */
-+ "1017", /* 1017 */
-+ "1018", /* 1018 */
-+ "1019", /* 1019 */
-+ "1020", /* 1020 */
-+ "1021", /* 1021 */
-+ "1022", /* 1022 */
-+ "1023", /* 1023 */
-+ "open", /* 1024 */
-+ "link", /* 1025 */
-+ "unlink", /* 1026 */
-+ "mknod", /* 1027 */
-+ "chmod", /* 1028 */
-+ "chown", /* 1029 */
-+ "mkdir", /* 1030 */
-+ "rmdir", /* 1031 */
-+ "lchown", /* 1032 */
-+ "access", /* 1033 */
-+ "rename", /* 1034 */
-+ "readlink", /* 1035 */
-+ "symlink", /* 1036 */
-+ "utimes", /* 1037 */
-+ "stat", /* 1038 */
-+ "lstat", /* 1039 */
-+ "pipe", /* 1040 */
-+ "dup2", /* 1041 */
-+ "epoll_create", /* 1042 */
-+ "inotify_init", /* 1043 */
-+ "eventfd", /* 1044 */
-+ "signalfd", /* 1045 */
-+ "sendfile", /* 1046 */
-+ "ftruncate", /* 1047 */
-+ "truncate", /* 1048 */
-+ "stat", /* 1049 */
-+ "lstat", /* 1050 */
-+ "fstat", /* 1051 */
-+ "fcntl", /* 1052 */
-+ "fadvise64", /* 1053 */
-+ "newfstatat", /* 1054 */
-+ "fstatfs", /* 1055 */
-+ "statfs", /* 1056 */
-+ "lseek", /* 1057 */
-+ "mmap", /* 1058 */
-+ "alarm", /* 1059 */
-+ "getpgrp", /* 1060 */
-+ "pause", /* 1061 */
-+ "time", /* 1062 */
-+ "utime", /* 1063 */
-+ "creat", /* 1064 */
-+ "getdents", /* 1065 */
-+ "futimesat", /* 1066 */
-+ "select", /* 1067 */
-+ "poll", /* 1068 */
-+ "epoll_wait", /* 1069 */
-+ "ustat", /* 1070 */
-+ "vfork", /* 1071 */
-+ "oldwait4", /* 1072 */
-+ "recv", /* 1073 */
-+ "send", /* 1074 */
-+ "bdflush", /* 1075 */
-+ "umount", /* 1076 */
-+ "uselib", /* 1077 */
-+ "_sysctl", /* 1078 */
-+ "fork", /* 1079 */
-diff --git a/sysdeps/linux-gnu/aarch64/trace.c b/sysdeps/linux-gnu/aarch64/trace.c
-new file mode 100644
-index 0000000..5544b51
---- /dev/null
-+++ b/sysdeps/linux-gnu/aarch64/trace.c
-@@ -0,0 +1,84 @@
-+/*
-+ * This file is part of ltrace.
-+ * Copyright (C) 2014 Petr Machata, Red Hat, Inc.
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License as
-+ * published by the Free Software Foundation; either version 2 of the
-+ * License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful, but
-+ * WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-+ * 02110-1301 USA
-+ */
-+
-+#include <sys/ptrace.h>
-+#include <sys/types.h>
-+#include <sys/wait.h>
-+#include <asm/ptrace.h>
-+#include <string.h>
-+#include <stdio.h>
-+#include <errno.h>
-+
-+#include "backend.h"
-+#include "proc.h"
-+
-+void
-+get_arch_dep(struct Process *proc)
-+{
-+}
-+
-+int aarch64_read_gregs(struct Process *proc, struct user_pt_regs *regs);
-+
-+/* The syscall instruction is:
-+ * | 31 21 | 20 5 | 4 0 |
-+ * | 1 1 0 1 0 1 0 0 | 0 0 0 | imm16 | 0 0 0 0 1 | */
-+#define SVC_MASK 0xffe0001f
-+#define SVC_VALUE 0xd4000001
-+
-+int
-+syscall_p(struct Process *proc, int status, int *sysnum)
-+{
-+ if (WIFSTOPPED(status)
-+ && WSTOPSIG(status) == (SIGTRAP | proc->tracesysgood)) {
-+
-+ struct user_pt_regs regs;
-+ if (aarch64_read_gregs(proc, &regs) < 0) {
-+ fprintf(stderr, "syscall_p: "
-+ "Couldn't read registers of %d.\n", proc->pid);
-+ return -1;
-+ }
-+
-+ errno = 0;
-+ unsigned long insn = (unsigned long) ptrace(PTRACE_PEEKTEXT,
-+ proc->pid,
-+ regs.pc - 4, 0);
-+ if (insn == -1UL && errno != 0) {
-+ fprintf(stderr, "syscall_p: "
-+ "Couldn't peek into %d: %s\n", proc->pid,
-+ strerror(errno));
-+ return -1;
-+ }
-+
-+ insn &= 0xffffffffUL;
-+ if ((insn & SVC_MASK) == SVC_VALUE) {
-+ *sysnum = regs.regs[8];
-+
-+ size_t d1 = proc->callstack_depth - 1;
-+ if (proc->callstack_depth > 0
-+ && proc->callstack[d1].is_syscall
-+ && proc->callstack[d1].c_un.syscall == *sysnum)
-+ return 2;
-+
-+ return 1;
-+ }
-+ }
-+
-+ return 0;
-+}
---
-1.9.1
-
diff --git a/legacy/ltrace/add_ppc64le.patch b/legacy/ltrace/add_ppc64le.patch
deleted file mode 100644
index 32efa8b52..000000000
--- a/legacy/ltrace/add_ppc64le.patch
+++ /dev/null
@@ -1,54 +0,0 @@
---- ltrace-0.7.3.orig/configure.ac
-+++ ltrace-0.7.3/configure.ac
-@@ -43,7 +43,7 @@
- arm*|sa110) HOST_CPU="arm" ;;
- cris*) HOST_CPU="cris" ;;
- mips*) HOST_CPU="mips" ;;
-- powerpc|powerpc64) HOST_CPU="ppc" ;;
-+ powerpc|powerpc64|powerpc64le) HOST_CPU="ppc" ;;
- sun4u|sparc64) HOST_CPU="sparc" ;;
- s390x) HOST_CPU="s390" ;;
- i?86|x86_64) HOST_CPU="x86" ;;
-@@ -159,7 +159,7 @@
- arm*|sa110) UNWIND_ARCH="arm" ;;
- i?86) UNWIND_ARCH="x86" ;;
- powerpc) UNWIND_ARCH="ppc32" ;;
-- powerpc64) UNWIND_ARCH="ppc64" ;;
-+ powerpc64|powerpc64le) UNWIND_ARCH="ppc64" ;;
- mips*) UNWIND_ARCH="mips" ;;
- *) UNWIND_ARCH="${host_cpu}" ;;
- esac
---- ltrace-0.7.3.orig/sysdeps/linux-gnu/ppc/ptrace.h
-+++ ltrace-0.7.3/sysdeps/linux-gnu/ppc/ptrace.h
-@@ -18,4 +18,5 @@
- * 02110-1301 USA
- */
-
-+#include <asm/ptrace.h>
- #include <sys/ptrace.h>
---- ltrace-0.7.3.orig/sysdeps/linux-gnu/ppc/regs.c
-+++ ltrace-0.7.3/sysdeps/linux-gnu/ppc/regs.c
-@@ -26,7 +26,9 @@
- #include <sys/ptrace.h>
- #include <asm/ptrace.h>
- #include <errno.h>
-+#ifdef HAVE_ERROR_H
- #include <error.h>
-+#endif
-
- #include "proc.h"
- #include "common.h"
-@@ -47,8 +49,11 @@
- void
- set_instruction_pointer(Process *proc, void *addr)
- {
-- if (ptrace(PTRACE_POKEUSER, proc->pid, sizeof(long)*PT_NIP, addr) != 0)
-- error(0, errno, "set_instruction_pointer");
-+ if (ptrace(PTRACE_POKEUSER, proc->pid, sizeof(long)*PT_NIP, addr) != 0){
-+ strerror(0, errno, "set_instruction_pointer");
-+ report_global_error("%s: set_instruction_pointer",
-+ strerror(errno));
-+ }
- }
-
- void *
diff --git a/legacy/ltrace/musl.patch b/legacy/ltrace/musl.patch
deleted file mode 100644
index 2dc909c95..000000000
--- a/legacy/ltrace/musl.patch
+++ /dev/null
@@ -1,153 +0,0 @@
---- ./configure.ac.orig
-+++ ./configure.ac
-@@ -34,6 +34,7 @@
- case "${host_os}" in
- linux-gnu*) HOST_OS="linux-gnu" ;;
- linux-uclibc*) HOST_OS="linux-gnu" ;;
-+ linux-musl*) HOST_OS="linux-gnu" ;;
- *) AC_MSG_ERROR([unkown host-os ${host_os}]) ;;
- esac
- AC_SUBST(HOST_OS)
-@@ -234,6 +235,7 @@
- sys/param.h \
- sys/time.h \
- unistd.h \
-+ error.h \
- ])
-
- # Checks for typedefs, structures, and compiler characteristics.
-diff --git a/expr.c b/expr.c
-index 32860fd..374c549 100644
---- a/expr.c
-+++ b/expr.c
-@@ -19,9 +19,12 @@
- */
-
- #include <string.h>
-+#include <stdio.h>
- #include <assert.h>
- #include <errno.h>
-+#ifdef HAVE_ERROR_H
- #include <error.h>
-+#endif
- #include <stdlib.h>
-
- #include "expr.h"
-@@ -330,8 +333,11 @@ expr_self(void)
- static struct expr_node *node = NULL;
- if (node == NULL) {
- node = malloc(sizeof(*node));
-- if (node == NULL)
-- error(1, errno, "malloc expr_self");
-+ if (node == NULL) {
-+ fprintf(stderr, "%s: malloc expr_self\n",
-+ strerror(errno));
-+ exit(1);
-+ }
- expr_init_self(node);
- }
- return node;
-diff --git a/glob.c b/glob.c
-index 075c867..06fec47 100644
---- a/glob.c
-+++ b/glob.c
-@@ -180,7 +180,7 @@ glob_to_regex(const char *glob, char **retp)
- goto fail;
- }
- *retp = buf;
-- return REG_NOERROR;
-+ return 0;
- }
-
- int
-@@ -188,7 +188,7 @@ globcomp(regex_t *preg, const char *glob, int cflags)
- {
- char *regex = NULL;
- int status = glob_to_regex(glob, &regex);
-- if (status != REG_NOERROR)
-+ if (status != 0)
- return status;
- assert(regex != NULL);
- status = regcomp(preg, regex, cflags);
-diff --git a/options.c b/options.c
-index 1e19dc7..1dc5e1e 100644
---- a/options.c
-+++ b/options.c
-@@ -204,7 +204,7 @@ compile_libname(const char *expr, const char *a_lib, int lib_re_p,
-
- regex_t lib_re;
- int status = (lib_re_p ? regcomp : globcomp)(&lib_re, lib, 0);
-- if (status != REG_NOERROR) {
-+ if (status != 0) {
- char buf[100];
- regerror(status, &lib_re, buf, sizeof buf);
- fprintf(stderr, "Rule near '%s' will be ignored: %s.\n",
-diff --git a/read_config_file.c b/read_config_file.c
-index e247436..73528fe 100644
---- a/read_config_file.c
-+++ b/read_config_file.c
-@@ -27,7 +27,9 @@
- #include <stdlib.h>
- #include <ctype.h>
- #include <errno.h>
-+#ifdef HAVE_ERROR_H
- #include <error.h>
-+#endif
- #include <assert.h>
-
- #include "common.h"
-@@ -1258,8 +1260,12 @@ void
- init_global_config(void)
- {
- struct arg_type_info *info = malloc(2 * sizeof(*info));
-- if (info == NULL)
-- error(1, errno, "malloc in init_global_config");
-+ if (info == NULL) {
-+ report_error(filename, line_no,
-+ "%s: malloc in init_global_config",
-+ strerror(errno));
-+ exit(1);
-+ }
-
- memset(info, 0, 2 * sizeof(*info));
- info[0].type = ARGTYPE_POINTER;
-diff --git a/zero.c b/zero.c
-index bc119ee..e685f59 100644
---- a/zero.c
-+++ b/zero.c
-@@ -18,8 +18,11 @@
- * 02110-1301 USA
- */
-
-+#ifdef HAVE_ERROR_H
- #include <error.h>
-+#endif
- #include <errno.h>
-+#include <string.h>
-
- #include "zero.h"
- #include "common.h"
-@@ -96,8 +99,11 @@ expr_node_zero(void)
- static struct expr_node *node = NULL;
- if (node == NULL) {
- node = malloc(sizeof(*node));
-- if (node == NULL)
-- error(1, errno, "malloc expr_node_zero");
-+ if (node == NULL) {
-+ report_global_error("%s: malloc expr_node_zero",
-+ strerror(errno));
-+ exit(1);
-+ }
- expr_init_cb1(node, &zero1_callback,
- expr_self(), 0, (void *)-1);
- }
---- ./proc.h.orig
-+++ ./proc.h
-@@ -26,6 +26,7 @@
- #include "config.h"
-
- #include <sys/time.h>
-+#include <unistd.h>
-
- #if defined(HAVE_LIBUNWIND)
- # include <libunwind.h>
diff --git a/legacy/mkinitfs/0001-features-add-virtio_net-to-network-modules.patch b/legacy/mkinitfs/0001-features-add-virtio_net-to-network-modules.patch
deleted file mode 100644
index 012738163..000000000
--- a/legacy/mkinitfs/0001-features-add-virtio_net-to-network-modules.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-From d15cc41a7892d48f8255225003a89b91f0c13349 Mon Sep 17 00:00:00 2001
-From: Carlo Landmeter <clandmeter@alpinelinux.org>
-Date: Sun, 29 Apr 2018 11:15:18 +0000
-Subject: [PATCH] features: add virtio_net to network modules
-
----
- features.d/network.modules | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/features.d/network.modules b/features.d/network.modules
-index 311df0b..caa37a8 100644
---- a/features.d/network.modules
-+++ b/features.d/network.modules
-@@ -2,3 +2,4 @@ kernel/drivers/net/ethernet
- kernel/net/packet/af_packet.ko
- kernel/drivers/net/hyperv
- kernel/drivers/net/vmxnet3
-+kernel/drivers/net/virtio_net*
---
-2.17.0
-
diff --git a/legacy/mkinitfs/0001-features-virtio_net-depends-on-virtio_pci.patch b/legacy/mkinitfs/0001-features-virtio_net-depends-on-virtio_pci.patch
deleted file mode 100644
index 8b01d294a..000000000
--- a/legacy/mkinitfs/0001-features-virtio_net-depends-on-virtio_pci.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-From 56d4208345b8da08ada6e6176a0a46cf94f89516 Mon Sep 17 00:00:00 2001
-From: Carlo Landmeter <clandmeter@alpinelinux.org>
-Date: Sun, 29 Apr 2018 21:14:36 +0000
-Subject: [PATCH] features: virtio_net depends on virtio_pci
-
----
- features.d/network.modules | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/features.d/network.modules b/features.d/network.modules
-index caa37a8..e4f084c 100644
---- a/features.d/network.modules
-+++ b/features.d/network.modules
-@@ -2,4 +2,5 @@ kernel/drivers/net/ethernet
- kernel/net/packet/af_packet.ko
- kernel/drivers/net/hyperv
- kernel/drivers/net/vmxnet3
--kernel/drivers/net/virtio_net*
-+kernel/drivers/virtio/virtio_pci.ko
-+kernel/drivers/net/virtio_net.ko
---
-2.17.0
-
diff --git a/legacy/mkinitfs/0001-generate-mkinitfs.conf.patch b/legacy/mkinitfs/0001-generate-mkinitfs.conf.patch
deleted file mode 100644
index a556879d7..000000000
--- a/legacy/mkinitfs/0001-generate-mkinitfs.conf.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-From 9e1b472701fa1785989f6757243a3d81e97944f2 Mon Sep 17 00:00:00 2001
-From: Natanael Copa <ncopa@alpinelinux.org>
-Date: Mon, 14 May 2018 16:32:08 +0200
-Subject: [PATCH 1/3] generate mkinitfs.conf
-
-we may want have conditional default config depending on architecture
----
- Makefile | 7 +++++--
- mkinitfs.conf | 2 --
- 2 files changed, 5 insertions(+), 4 deletions(-)
- delete mode 100644 mkinitfs.conf
-
-diff --git a/Makefile b/Makefile
-index 68959fe..fc01d1a 100644
---- a/Makefile
-+++ b/Makefile
-@@ -70,12 +70,13 @@ SED_REPLACE := -e 's:@VERSION@:$(FULL_VERSION):g' \
- -e 's:@sysconfdir@:$(sysconfdir):g' \
- -e 's:@datadir@:$(datadir):g'
-
-+DEFAULT_FEATURES ?= ata base cdrom ext2 ext4 keymap kms mmc raid scsi usb virtio
-
-
--all: $(SBIN_FILES) $(SCRIPTS)
-+all: $(SBIN_FILES) $(SCRIPTS) $(CONF_FILES)
-
- clean:
-- rm -f $(SCRIPTS)
-+ rm -f $(SCRIPTS) mkinitfs.conf
-
- help:
- @echo mkinitfs $(VERSION)
-@@ -116,3 +117,5 @@ install: $(SBIN_FILES) $(SHARE_FILES) $(CONF_FILES)
- $(INSTALL) -D $$i $(DESTDIR)/usr/share/mkinitfs/$$i;\
- done
-
-+mkinitfs.conf:
-+ echo 'features="$(DEFAULT_FEATURES)"' > $@
-diff --git a/mkinitfs.conf b/mkinitfs.conf
-deleted file mode 100644
-index 67a5444..0000000
---- a/mkinitfs.conf
-+++ /dev/null
-@@ -1,2 +0,0 @@
--# run mkinitfs -L for a list of available features
--features="ata base cdrom ext2 ext3 ext4 keymap kms mmc raid scsi usb virtio"
---
-2.17.0
-
diff --git a/legacy/mkinitfs/0001-initramfs-do-not-relocate-mountpoint-for-netboot.patch b/legacy/mkinitfs/0001-initramfs-do-not-relocate-mountpoint-for-netboot.patch
deleted file mode 100644
index e6e580a14..000000000
--- a/legacy/mkinitfs/0001-initramfs-do-not-relocate-mountpoint-for-netboot.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From 1d115251816a3f83a008883f1b9665c3d8f4d3a4 Mon Sep 17 00:00:00 2001
-From: Carlo Landmeter <clandmeter@alpinelinux.org>
-Date: Tue, 20 Feb 2018 10:18:11 +0000
-Subject: [PATCH] initramfs: do not relocate mountpoint for netboot
-
-mountpoint cannot be located when repo is external.
----
- initramfs-init.in | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/initramfs-init.in b/initramfs-init.in
-index 95fcd97..bf2d9bd 100755
---- a/initramfs-init.in
-+++ b/initramfs-init.in
-@@ -221,6 +221,10 @@ relocate_mount() {
- return
- fi
- while read dir; do
-+ # skip http(s)/ftp repos for netboot
-+ if ! [ -d "$dir" ]; then
-+ continue
-+ fi
- local dev=$(df -P "$dir" | tail -1 | awk '{print $1}')
- local mnt=$(find_mnt $dev $fstab)
- if [ -n "$mnt" ]; then
---
-2.16.1
-
diff --git a/legacy/mkinitfs/0001-nlplug-findfs-add-primitive-support-for-LUKS2-contai.patch b/legacy/mkinitfs/0001-nlplug-findfs-add-primitive-support-for-LUKS2-contai.patch
deleted file mode 100644
index 7681be46b..000000000
--- a/legacy/mkinitfs/0001-nlplug-findfs-add-primitive-support-for-LUKS2-contai.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From 15e312961e1bc86da98f2d3dc1d43331bd6f98f7 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?S=C3=B6ren=20Tempel?= <soeren+git@soeren-tempel.net>
-Date: Sat, 20 Jan 2018 00:50:15 +0100
-Subject: [PATCH] nlplug-findfs: add primitive support for LUKS2 containers
-
-Since we previously specified an explicit request_type for the
-crypt_load() function nlplug-findfs couldn't open LUKS2 containers. By
-using CRYPT_LUKS crypt_load accepts any known LUKUS container format.
-
-We could add an additional command line flag to nlplug-finds for
-specifying the request_type but I guess this is good enough for now.
----
- nlplug-findfs.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/nlplug-findfs.c b/nlplug-findfs.c
-index be525cc..7fb5468 100644
---- a/nlplug-findfs.c
-+++ b/nlplug-findfs.c
-@@ -582,7 +582,7 @@ static void *cryptsetup_thread(void *data)
- goto notify_out;
- }
-
-- r = crypt_load(cd, CRYPT_LUKS1, params);
-+ r = crypt_load(cd, CRYPT_LUKS, params);
- if (r < 0) {
- warnx("crypt_load(%s)", data_devnode);
- goto free_out;
---
-2.15.0
-
diff --git a/legacy/mkinitfs/0001-skip-hooks-on-diskless-install.patch b/legacy/mkinitfs/0001-skip-hooks-on-diskless-install.patch
deleted file mode 100644
index a20ebc200..000000000
--- a/legacy/mkinitfs/0001-skip-hooks-on-diskless-install.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From 0bd97e8aef5208bc92c3e72049f7fea198a90bd1 Mon Sep 17 00:00:00 2001
-From: Henrik Riomar <henrik.riomar@gmail.com>
-Date: Mon, 8 Jan 2018 16:37:44 +0100
-Subject: [PATCH] skip hooks on diskless install
-
-We can not run hooks before musl and busybox is installed.
-
-Use the new flag --initramfs-diskless-boot in order to skip hooks.
-This flag also implies --initdb and the relevant --force flags for
-initramfs diskless boot.
----
- initramfs-init.in | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/initramfs-init.in b/initramfs-init.in
-index f3a3ee5..7c78c58 100755
---- a/initramfs-init.in
-+++ b/initramfs-init.in
-@@ -598,7 +598,7 @@ if [ "$KOPT_chart" = yes ]; then
- pkgs="$pkgs acct"
- fi
-
--apkflags="--initdb --progress --force"
-+apkflags="--initramfs-diskless-boot --progress"
- if [ -z "$ALPINE_REPO" ]; then
- apkflags="$apkflags --no-network"
- else
---
-2.15.0
-
diff --git a/legacy/mkinitfs/0002-initramfs-init-add-disk-and-network-detection-on-s39.patch b/legacy/mkinitfs/0002-initramfs-init-add-disk-and-network-detection-on-s39.patch
deleted file mode 100644
index aef8293a1..000000000
--- a/legacy/mkinitfs/0002-initramfs-init-add-disk-and-network-detection-on-s39.patch
+++ /dev/null
@@ -1,97 +0,0 @@
-From 7f77e0b383330265be27f551b2e384a6a8648afa Mon Sep 17 00:00:00 2001
-From: "Tuan M. Hoang" <tmhoang@flatglobe.org>
-Date: Mon, 14 May 2018 10:14:29 -0500
-Subject: [PATCH 2/3] initramfs-init: add disk and network detection on s390x
-
-- Allow including dasd and qeth modules when building initramfs
-- Add detection for dasd and qeth devices from cmdline in init
----
- Makefile | 7 ++++++-
- features.d/dasd_mod.modules | 1 +
- features.d/qeth.modules | 1 +
- initramfs-init.in | 21 ++++++++++++++++++++-
- 4 files changed, 28 insertions(+), 2 deletions(-)
- create mode 100644 features.d/dasd_mod.modules
- create mode 100644 features.d/qeth.modules
-
-diff --git a/Makefile b/Makefile
-index fc01d1a..40dc284 100644
---- a/Makefile
-+++ b/Makefile
-@@ -48,7 +48,9 @@ CONF_FILES := mkinitfs.conf \
- features.d/xfs.files \
- features.d/xfs.modules \
- features.d/zfs.files \
-- features.d/zfs.modules
-+ features.d/zfs.modules \
-+ features.d/qeth.modules \
-+ features.d/dasd_mod.modules
-
- SCRIPTS := mkinitfs bootchartd initramfs-init
- IN_FILES := $(addsuffix .in,$(SCRIPTS))
-@@ -71,6 +73,9 @@ SED_REPLACE := -e 's:@VERSION@:$(FULL_VERSION):g' \
- -e 's:@datadir@:$(datadir):g'
-
- DEFAULT_FEATURES ?= ata base cdrom ext2 ext4 keymap kms mmc raid scsi usb virtio
-+ifeq ($(shell uname -m), s390x)
-+DEFAULT_FEATURES += qeth dasd_mod
-+endif
-
-
- all: $(SBIN_FILES) $(SCRIPTS) $(CONF_FILES)
-diff --git a/features.d/dasd_mod.modules b/features.d/dasd_mod.modules
-new file mode 100644
-index 0000000..ce843c5
---- /dev/null
-+++ b/features.d/dasd_mod.modules
-@@ -0,0 +1 @@
-+kernel/drivers/s390/block/dasd*
-diff --git a/features.d/qeth.modules b/features.d/qeth.modules
-new file mode 100644
-index 0000000..bb5c320
---- /dev/null
-+++ b/features.d/qeth.modules
-@@ -0,0 +1 @@
-+kernel/drivers/s390/net/qeth*
-diff --git a/initramfs-init.in b/initramfs-init.in
-index bf2d9bd..933c8c1 100755
---- a/initramfs-init.in
-+++ b/initramfs-init.in
-@@ -269,7 +269,7 @@ set -- $(cat /proc/cmdline)
- myopts="alpine_dev autodetect autoraid chart cryptroot cryptdm cryptheader cryptoffset
- cryptdiscards debug_init dma init_args keep_apk_new modules ovl_dev pkgs quiet
- root_size root usbdelay ip alpine_repo apkovl alpine_start splash blacklist
-- overlaytmpfs rootfstype rootflags nbd resume"
-+ overlaytmpfs rootfstype rootflags nbd resume s390x_net dasd"
-
- for opt; do
- case "$opt" in
-@@ -345,6 +345,25 @@ mount -t devpts -o gid=5,mode=0620,noexec,nosuid devpts /dev/pts
- [ -d /dev/shm ] || mkdir /dev/shm
- mount -t tmpfs -o nodev,nosuid,noexec shm /dev/shm
-
-+if [ -n "$dasd" ]; then
-+ for mod in dasd_mod dasd_eckd_mod dasd_fba_mod; do
-+ modprobe $mod
-+ done
-+ for _dasd in $(echo "$dasd" | tr ',' ' ' ); do
-+ echo 1 > /sys/bus/ccw/devices/"${_dasd%%:*}"/online
-+ done
-+fi
-+
-+if [ "${s390x_net%%,*}" = "qeth_l2" ]; then
-+ for mod in qeth qeth_l2 qeth_l3; do
-+ modprobe $mod
-+ done
-+ _channel="${s390x_net#*,}"
-+ echo "$_channel" > /sys/bus/ccwgroup/drivers/qeth/group
-+ echo 1 > /sys/bus/ccwgroup/drivers/qeth/"${_channel%%,*}"/layer2
-+ echo 1 > /sys/bus/ccwgroup/drivers/qeth/"${_channel%%,*}"/online
-+fi
-+
- # load available drivers to get access to modloop media
- ebegin "Loading boot drivers"
-
---
-2.17.0
-
diff --git a/legacy/mkinitfs/0003-initramfs-init-add-support-for-ssh-installer.patch b/legacy/mkinitfs/0003-initramfs-init-add-support-for-ssh-installer.patch
deleted file mode 100644
index bcc4e0d49..000000000
--- a/legacy/mkinitfs/0003-initramfs-init-add-support-for-ssh-installer.patch
+++ /dev/null
@@ -1,121 +0,0 @@
-From 64be7028a529d940f81fda31a8e1dfa2281e4989 Mon Sep 17 00:00:00 2001
-From: "Tuan M. Hoang" <tmhoang@flatglobe.org>
-Date: Mon, 21 May 2018 11:54:44 +0000
-Subject: [PATCH 3/3] initramfs-init: add support for ssh installer
-
-This commit allows starting 'firstboot' service (see aports/openrc),
-which will setup installation through SSH if specified in kernel
-parameters.
-
-Real wget is used instead since busybox's wget is broken without
-openssl binary #8917. Credits to clandmeter.
-
-- Allow adding DNS server in configure_ip()
-- Prefix kernel parameters with KOPT_
----
- initramfs-init.in | 37 ++++++++++++++++++++++++++++++++-----
- 1 file changed, 32 insertions(+), 5 deletions(-)
-
-diff --git a/initramfs-init.in b/initramfs-init.in
-index 933c8c1..f33f010 100755
---- a/initramfs-init.in
-+++ b/initramfs-init.in
-@@ -183,6 +183,8 @@ configure_ip() {
- local netmask="$4"
- local device="$6"
- local autoconf="$7"
-+ local dns1="$8"
-+ local dns2="$9"
- case "$client_ip" in
- off|none|'') return;;
- dhcp) autoconf="dhcp";;
-@@ -209,6 +211,8 @@ configure_ip() {
- ebegin "Setting IP ($device)..."
- ip_set "$device" "$client_ip" "$netmask" "$gw_ip"
- eend $?
-+ [ -n "$dns1" ] && echo "nameserver $dns1" >> /etc/resolv.conf
-+ [ -n "$dns2" ] && echo "nameserver $dns2" >> /etc/resolv.conf
- fi
- MAC_ADDRESS=$(cat /sys/class/net/$device/address)
- }
-@@ -262,6 +266,19 @@ setup_nbd() {
- [ "$n" != 0 ] || return 1
- }
-
-+# possible cmdline options which could have secure urls.
-+# this does not include apkovl as it need to be fetched inside of initramfs
-+need_wget() {
-+ local opt= ret=1
-+ for opt in modloop ssh_key; do
-+ eval "opt=\$KOPT_$opt"
-+ case "$opt" in
-+ https://*|ftps://*) ret=0;;
-+ esac
-+ done
-+ return $ret
-+}
-+
- # read the kernel options. we need surve things like:
- # acpi_osi="!Windows 2006" xen-pciback.hide=(01:00.0)
- set -- $(cat /proc/cmdline)
-@@ -269,7 +286,7 @@ set -- $(cat /proc/cmdline)
- myopts="alpine_dev autodetect autoraid chart cryptroot cryptdm cryptheader cryptoffset
- cryptdiscards debug_init dma init_args keep_apk_new modules ovl_dev pkgs quiet
- root_size root usbdelay ip alpine_repo apkovl alpine_start splash blacklist
-- overlaytmpfs rootfstype rootflags nbd resume s390x_net dasd"
-+ overlaytmpfs rootfstype rootflags nbd resume s390x_net dasd ssh_key ssh_pass"
-
- for opt; do
- case "$opt" in
-@@ -345,20 +362,20 @@ mount -t devpts -o gid=5,mode=0620,noexec,nosuid devpts /dev/pts
- [ -d /dev/shm ] || mkdir /dev/shm
- mount -t tmpfs -o nodev,nosuid,noexec shm /dev/shm
-
--if [ -n "$dasd" ]; then
-+if [ -n "$KOPT_dasd" ]; then
- for mod in dasd_mod dasd_eckd_mod dasd_fba_mod; do
- modprobe $mod
- done
-- for _dasd in $(echo "$dasd" | tr ',' ' ' ); do
-+ for _dasd in $(echo "$KOPT_dasd" | tr ',' ' ' ); do
- echo 1 > /sys/bus/ccw/devices/"${_dasd%%:*}"/online
- done
- fi
-
--if [ "${s390x_net%%,*}" = "qeth_l2" ]; then
-+if [ "${KOPT_s390x_net%%,*}" = "qeth_l2" ]; then
- for mod in qeth qeth_l2 qeth_l3; do
- modprobe $mod
- done
-- _channel="${s390x_net#*,}"
-+ _channel="${KOPT_s390x_net#*,}"
- echo "$_channel" > /sys/bus/ccwgroup/drivers/qeth/group
- echo 1 > /sys/bus/ccwgroup/drivers/qeth/"${_channel%%,*}"/layer2
- echo 1 > /sys/bus/ccwgroup/drivers/qeth/"${_channel%%,*}"/online
-@@ -540,6 +557,8 @@ if [ -f "$sysroot/etc/.default_boot_services" -o ! -f "$ovl" ]; then
- rc_add killprocs shutdown
- rc_add savecache shutdown
-
-+ rc_add firstboot default
-+
- rm -f "$sysroot/etc/.default_boot_services"
- fi
-
-@@ -622,6 +641,14 @@ if [ "$KOPT_chart" = yes ]; then
- pkgs="$pkgs acct"
- fi
-
-+# add openssh
-+if [ -n "$KOPT_ssh_key" ] || [ -n "$KOPT_ssh_pass" ]; then
-+ pkgs="$pkgs openssh"
-+fi
-+
-+# add wget if using secure urls in cmdline
-+need_wget && pkgs="$pkgs wget"
-+
- apkflags="--initramfs-diskless-boot --progress"
- if [ -z "$ALPINE_REPO" ]; then
- apkflags="$apkflags --no-network"
---
-2.17.0
-
diff --git a/legacy/mkinitfs/APKBUILD b/legacy/mkinitfs/APKBUILD
deleted file mode 100644
index fe21413e3..000000000
--- a/legacy/mkinitfs/APKBUILD
+++ /dev/null
@@ -1,47 +0,0 @@
-# Maintainer:
-pkgname=mkinitfs
-pkgver=3.2.0
-_ver=${pkgver%_git*}
-pkgrel=14
-pkgdesc="Tool to generate initramfs images for Alpine"
-url="https://git.alpinelinux.org/cgit/mkinitfs"
-arch="all"
-options="!check" # currently we do not ship any testsuite
-license="GPL-2.0-only"
-makedepends_build=""
-makedepends_host="busybox kmod-dev util-linux-dev cryptsetup-dev linux-headers"
-makedepends="$makedepends_build $makedepends_host"
-depends="busybox>=1.28.2-r1 apk-tools>=2.9.1 lddtree>=1.25"
-install="$pkgname.pre-upgrade $pkgname.post-install $pkgname.post-upgrade"
-triggers="$pkgname.trigger=/usr/share/kernel/*"
-source="http://dev.alpinelinux.org/archive/$pkgname/$pkgname-$_ver.tar.xz
- 0001-skip-hooks-on-diskless-install.patch
- 0001-nlplug-findfs-add-primitive-support-for-LUKS2-contai.patch
- 0001-initramfs-do-not-relocate-mountpoint-for-netboot.patch
- 0001-features-add-virtio_net-to-network-modules.patch
- 0001-features-virtio_net-depends-on-virtio_pci.patch
- 0001-generate-mkinitfs.conf.patch
- 0002-initramfs-init-add-disk-and-network-detection-on-s39.patch
- 0003-initramfs-init-add-support-for-ssh-installer.patch
- "
-builddir="$srcdir/$pkgname-$_ver"
-
-build() {
- cd "$builddir"
- make VERSION=$pkgver-r$pkgrel
-}
-
-package() {
- cd "$builddir"
- make install DESTDIR="$pkgdir"
-}
-
-sha512sums="906bfbce677d4ece9c9fea7b2a529121740bc9d96ea011be083303cc5c56162f09271b0a673e9e335234ccf2f293109bda1eda333698a95357d0772c86f498af mkinitfs-3.2.0.tar.xz
-f5c9b21e53c663dac1b8f33f929dbe067492f0dc1bd5ef5310ef531033f31fc3fa0b6de6dce03cecaf90b8ed47b278d0f1f7c64dbbeede7621c895ee3ea79864 0001-skip-hooks-on-diskless-install.patch
-4d298d73cc6e557c51de805721ef4b9f002498af5dd9f0aebfd6620ec84d1fadde76888bc2d40efc71dc0a8497aa0586ac65d596eb0021bfed633adcc3aca3b4 0001-nlplug-findfs-add-primitive-support-for-LUKS2-contai.patch
-4387357cfcd3441c5d8777e42c0e62a73fa446aacd2faac081947afc39bdd8fb91e12b34f3b69a6827bd7d0705f54514b77c0ff4c38ee0d70553050117c42576 0001-initramfs-do-not-relocate-mountpoint-for-netboot.patch
-530a33638e7ba1faceed9a5cb0a2e08bec5d29d160a99730b7a2fb6c98f93a511908df8ab14cc47884397c9affee899a23896aab1c6c9073015ce077cc16552f 0001-features-add-virtio_net-to-network-modules.patch
-e5a6a25ea51b0ef16f525af20f8e44e64f5c4bb56f46b220151fc03cfa2c530ec55e2755a5dca766f9dad467815b5949bd22e029bcda89fbcef0d40bb3fd1a0f 0001-features-virtio_net-depends-on-virtio_pci.patch
-3dfc39cf9c97ed63869b7d36f9c666b6d4d2250240ed64a6e827056e4fc0ed2d2cb03f63772761404e745fa57e8ea2e3157107c323866fa8f32f7195c0555770 0001-generate-mkinitfs.conf.patch
-92ef3fb695aa060ff4d7c682eead8eae0065c4e28dc155d233cfdbd6b7ac55d1d5ba0258e3f48fb47512acd8594a893c809c5b93ad7715c99a1697331c27491d 0002-initramfs-init-add-disk-and-network-detection-on-s39.patch
-64840c34d91549c6e68a22a6eb0093d84a53a78ebbe3f12287e0ccb0fabbb1bb7829ca246522e0bdfdb45c32b0afb598447dfc688f261911c3d1d48d55f05503 0003-initramfs-init-add-support-for-ssh-installer.patch"
diff --git a/legacy/mkinitfs/mkinitfs.post-install b/legacy/mkinitfs/mkinitfs.post-install
deleted file mode 100644
index a2a404b09..000000000
--- a/legacy/mkinitfs/mkinitfs.post-install
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh
-
-# safety. if nlplug-findfs is missing in the initramfs image we may end up
-# with an unbootable system.
-
-if ! grep -q -w /sbin/nlplug-findfs /etc/mkinitfs/features.d/base.files; then
- echo "/sbin/nlplug-findfs" >> /etc/mkinitfs/features.d/base.files
-fi
diff --git a/legacy/mkinitfs/mkinitfs.post-upgrade b/legacy/mkinitfs/mkinitfs.post-upgrade
deleted file mode 120000
index 78caf2e57..000000000
--- a/legacy/mkinitfs/mkinitfs.post-upgrade
+++ /dev/null
@@ -1 +0,0 @@
-mkinitfs.post-install \ No newline at end of file
diff --git a/legacy/mkinitfs/mkinitfs.pre-upgrade b/legacy/mkinitfs/mkinitfs.pre-upgrade
deleted file mode 100644
index 0ece527f9..000000000
--- a/legacy/mkinitfs/mkinitfs.pre-upgrade
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/bin/sh
-
-mkdir -p /etc/mkinitfs/features.d
-for i in files modules; do
- for j in /etc/mkinitfs/$i.d/*; do
- [ -e "$j" ] || continue
- case "$j" in
- *.apk-new) continue;;
- esac
- mv $j /etc/mkinitfs/features.d/${j##*/}.$i
- done
-done
-exit 0
diff --git a/legacy/mkinitfs/mkinitfs.trigger b/legacy/mkinitfs/mkinitfs.trigger
deleted file mode 100644
index e8acc9785..000000000
--- a/legacy/mkinitfs/mkinitfs.trigger
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/bin/sh
-
-for i in "$@"; do
- # get last element in path
- flavor=${i##*/}
- if ! [ -f "$i"/kernel.release ]; then
- # kernel was uninstalled
- rm -f $( readlink -f /boot/initramfs-$flavor ) \
- /boot/initramfs-$flavor /boot/vmlinuz-$flavor \
- /boot/$flavor /boot/$flavor.gz /$flavor /$flavor.gz
- continue
- fi
- abi_release=$(cat "$i"/kernel.release)
- initfs=initramfs-$flavor
- mkinitfs -o /boot/$initfs $abi_release
-done
-
-# extlinux will use path relative partition, so if /boot is on a
-# separate partition we want /boot/<kernel> resolve to /<kernel>
-if ! [ -e /boot/boot ]; then
- ln -sf . /boot/boot
-fi
-
-# cleanup unused initramfs
-for i in /boot/initramfs-[0-9]*; do
- [ -f $i ] || continue
- if ! [ -f /boot/vmlinuz-${i#/boot/initramfs-} ]; then
- rm "$i"
- fi
-done
-
-sync
-exit 0
diff --git a/legacy/openexr/APKBUILD b/legacy/openexr/APKBUILD
deleted file mode 100644
index 9ed94b688..000000000
--- a/legacy/openexr/APKBUILD
+++ /dev/null
@@ -1,48 +0,0 @@
-# Contributor: Sören Tempel <soeren+alpine@soeren-tempel.net>
-# Maintainer:
-pkgname=openexr
-pkgver=2.2.1
-pkgrel=1
-pkgdesc="High-dynamic-range image file format and library"
-url="http://www.openexr.com/"
-arch="all"
-options="!check" # fails during TestSharedFrameBuffer:
-# channels RGBA, compression 8, writing reading comparing
-# Assertion failed: relError < .1 (compareDwa.cpp: compareDwa: 122)
-license="BSD-3-Clause"
-depends=""
-makedepends="ilmbase-dev zlib-dev"
-subpackages="$pkgname-doc $pkgname-dev $pkgname-tools"
-source="https://download.savannah.nongnu.org/releases/openexr/${pkgname}-${pkgver}.tar.gz"
-
-build() {
- cd "$builddir"
- ./configure \
- --build=$CBUILD \
- --host=$CHOST \
- --prefix=/usr \
- --sysconfdir=/etc \
- --mandir=/usr/share/man \
- --localstatedir=/var \
- --disable-static
- make
-}
-
-check() {
- cd "$builddir"
- make check
-}
-
-package() {
- cd "$builddir"
- make DESTDIR="$pkgdir" install
-}
-
-tools() {
- pkgdesc="Tools for OpenEXR, a high-dynamic-range image file format"
- cd "$builddir"
- mkdir -p "$subpkgdir"/usr/
- mv "$pkgdir"/usr/bin "$subpkgdir"/usr/
-}
-
-sha512sums="192100c6ac47534f3a93c55327d2ab90b07a8265156855086b326184328c257dcde12991b3f3f1831e2df4226fe884adcfe481c2f02a157c715aee665e89a480 openexr-2.2.1.tar.gz"
diff --git a/legacy/syslinux/APKBUILD b/legacy/syslinux/APKBUILD
deleted file mode 100644
index 43ac057b1..000000000
--- a/legacy/syslinux/APKBUILD
+++ /dev/null
@@ -1,51 +0,0 @@
-# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
-pkgname=syslinux
-pkgver=6.04_pre1
-pkgrel=3
-_ver=${pkgver/_/-}
-pkgdesc="Boot loader for the Linux operating system"
-url="http://syslinux.org"
-arch="pmmx x86 x86_64"
-license="GPL"
-makedepends="linux-headers nasm perl util-linux-dev gnu-efi-dev"
-depends="mtools blkid mawk"
-triggers="syslinux.trigger=/boot"
-install="syslinux.post-upgrade"
-options="!check textrels" # does not ship tests in tarball
-ldpath="/usr/share/syslinux"
-
-source="https://www.kernel.org/pub/linux/utils/boot/syslinux/Testing/${pkgver%_pre*}/syslinux-$_ver.tar.xz
- update-extlinux.conf
- update-extlinux
- "
-subpackages="$pkgname-doc $pkgname-dev"
-
-_loaderarch=
-case "$CARCH" in
-x86) _loaderarch=efi32;;
-x86_64) _loaderarch=efi64;;
-esac
-
-builddir="$srcdir"/$pkgname-$_ver
-
-build() {
- cd "$builddir"
- unset LDFLAGS
- make $_loaderarch installer
-}
-
-package() {
- cd "$builddir"
- make -j1 INSTALLROOT="$pkgdir" MANDIR=/usr/share/man \
- bios $_loaderarch install
-
- mkdir -p "$pkgdir"/etc/update-extlinux.d
- cp "$srcdir"/update-extlinux.conf "$pkgdir"/etc/
- sed "/^version=/s/=.*/=$pkgver-r$pkgrel/" "$srcdir"/update-extlinux \
- > "$pkgdir"/sbin/update-extlinux
- chmod 755 "$pkgdir"/sbin/update-extlinux
-}
-
-sha512sums="7927dd39be8e2dcf4138a6fea33def67d19d938379d694f15b48fdd2f5924c028b7a9e7bd71d0c7c6630c203e9e2a54296628e530632ad5e6f55b1ebefe8fc98 syslinux-6.04-pre1.tar.xz
-9071be450e543597f6f95b9a5811869c5351a71f4c42f7879b9f7ec1b13e2e4d455e9f2900e3897d5e5870bd87c934b7168328186c5f17631f2b09a524e10a1a update-extlinux.conf
-8f4f003053a3a265a11522b5bd6c71998ae3bf7ef1fbc2ed51675e432485ba4453f707b1bc1a1ed2089cf226456a56e7742b197b45b015099820b7fed5c2f153 update-extlinux"
diff --git a/legacy/syslinux/syslinux.post-upgrade b/legacy/syslinux/syslinux.post-upgrade
deleted file mode 100644
index 90388668d..000000000
--- a/legacy/syslinux/syslinux.post-upgrade
+++ /dev/null
@@ -1,61 +0,0 @@
-#!/bin/sh
-
-# find given append opt
-get_append_opt() {
- awk -v search="$1" '
- $1 == "append" || $1 == "APPEND" {
- split($0, a);
- for (i in a) {
- if (index(a[i], search) == 1) {
- print a[i];
- }
- }
- }' /boot/extlinux.conf | sort | uniq
-}
-
-# print default kernel options
-get_default_opts() {
- awk '
- $1 == "append" || $1 == "APPEND" {
- opts="";
- space="";
- split($0, a);
- for (i in a) {
- if (i != 1 \
- && (index(a[i], "root=") != 1) \
- && (index(a[i], "initrd=") != 1) \
- && (index(a[i], "modules=") != 1)) {
- opts = opts space a[i];
- space = " ";
- }
- }
- print opts;
- }
- ' /boot/extlinux.conf | sort | uniq
-}
-
-if ! [ -f /boot/extlinux.conf ]; then
- exit 0
-fi
-
-# check if we already have a generated extlinux.conf
-if grep -q '^# Generated by update-extlinux' /boot/extlinux.conf; then
- exit 0
-fi
-
-# try fish out the kernel opts from extlinuix.conf's append line
-root=$(get_append_opt 'root=' | head -n 1)
-modules=$(get_append_opt 'modules=' | head -n 1)
-opts=$(get_default_opts | head -n 1)
-
-# populate update-extlinux.conf with the info we know
-if [ -n "$root" ]; then
- sed -i -e "/^root=/s|.*|$root|g" /etc/update-extlinux.conf
-fi
-if [ -n "$modules" ]; then
- sed -i -e "/^modules=/s|.*|$modules|g" /etc/update-extlinux.conf
-fi
-if [ -n "$opts" ]; then
- sed -i -e "/^default_kernel_opts=/s|.*|default_kernel_opts=\"$opts\"|g" /etc/update-extlinux.conf
-fi
-
diff --git a/legacy/syslinux/syslinux.trigger b/legacy/syslinux/syslinux.trigger
deleted file mode 100644
index fe91f4379..000000000
--- a/legacy/syslinux/syslinux.trigger
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh
-
-update-extlinux --warn-only
diff --git a/legacy/syslinux/update-extlinux b/legacy/syslinux/update-extlinux
deleted file mode 100755
index 5e1183ba9..000000000
--- a/legacy/syslinux/update-extlinux
+++ /dev/null
@@ -1,252 +0,0 @@
-#!/bin/sh
-
-version=
-default=0
-timeout=5
-verbose=0
-
-conf=/boot/extlinux.conf
-myconf=/etc/update-extlinux.conf
-
-# read in extlinux settings
-if [ -f "$myconf" ]; then
- . $myconf
-fi
-
-everbose() {
- if [ "$verbose" = "0" ]; then
- return
- fi
-
- echo $*
-}
-
-ewarn() {
- echo "WARNING:" $@ >&2
-}
-
-eerror() {
- echo "ERROR:" $@ >&2
- return 1
-}
-
-usage() {
- echo "usage: $0 [-v|--verbose] [--warn-only]"
-}
-
-while [ $# -gt 0 ]; do
- opt="$1"
- shift
- case "$opt" in
- -v|--verbose)
- verbose=1
- ;;
- --warn-only)
- warn_only=1
- ;;
- --)
- break
- ;;
- -*)
- usage
- exit 1
- ;;
- esac
-done
-
-everbose "Updating extlinux configuration."
-
-if [ "x$root" = "x" ]; then
- ewarn "Root device is not specified in $myconf."
- blkid_export=$(blkid -o export /dev/root)
- if [ -n "$blkid_export" ]; then
- export $blkid_export
- fi
- if [ -z "$UUID" ]; then
- # try parse /proc/mount for mounted /
- dev=$(awk '$2 == "/" {dev=$1} END {print dev}' /proc/mounts)
- if [ -n "$dev" ]; then
- blkid_export=$(blkid -o export $dev)
- if [ -n "$blkid_export" ]; then
- export "$blkid_export"
- fi
- fi
- fi
- if [ -z "$UUID" ]; then
- if [ -z "$dev" ]; then
- if [ -n "$warn_only" ]; then
- ewarn "Failed to detect root device. extlinux.conf is not updated"
- exit 0
- else
- eerror "Failed to detect root device"
- exit 1
- fi
- else
- root=$dev
- fi
- else
- root=UUID=$UUID
- fi
- everbose "Root device is: $root"
-fi
-
-rtimeout=$(( ${timeout} * 10 ))
-syslinux_menu=menu.c32
-menu_hidden=
-
-# vesa menu has been requested?
-if [ "$vesa_menu" = "1" ]; then
- syslinux_menu=vesamenu.c32
-fi
-
-umask 0022
-rm -f $conf.new
-echo "# Generated by update-extlinux $version" > $conf.new
-if [ -n "$serial_port" ]; then
- echo "SERIAL $serial_port ${serial_baud:-115200}" >> $conf.new
-fi
-echo "DEFAULT $syslinux_menu" >> $conf.new
-echo "PROMPT 0" >> $conf.new
-echo "MENU TITLE Adelie $(uname -s) Boot Menu" >> $conf.new
-if [ "$hidden" = "1" ]; then
- echo "MENU HIDDEN" >> $conf.new
-fi
-echo "MENU AUTOBOOT Adelie will be booted automatically in # seconds." >> $conf.new
-echo "TIMEOUT $rtimeout" >> $conf.new
-
-lst=0
-if [ -f "/boot/xen.gz" ]; then
- for kernel in $(find /boot -name "vmlinuz-*" -type f); do
- tag=$(basename $kernel | cut -b9-)
- everbose "Found Xen hypervisor: /boot/xen.gz, kernel: $kernel"
-
- if [ -f "/boot/initramfs-$tag" ]; then
- everbose "Found initramfs: /boot/initramfs-$tag"
- initramfs="initramfs-$tag"
- else
- initramfs=
- fi
- label=xen-$(grep -w -l $tag /usr/share/kernel/*/kernel.release \
- | cut -d/ -f5)
- if [ "$label" = "xen-" ]; then
- label=xen-$lst
- fi
-
- echo "LABEL $label" >> $conf.new
- if [ "$label" = "$default" ]; then
- echo " MENU DEFAULT" >> $conf.new
- fi
- echo " MENU LABEL Xen + Linux $tag" >> $conf.new
- echo " COM32 mboot.c32" >> $conf.new
- echo " APPEND xen.gz $xen_opts --- $(basename $kernel) root=$root modules=${modules}${TYPE:+,$TYPE} $default_kernel_opts --- $initramfs" >> $conf.new
- echo "" >> $conf.new
- lst=$(($lst + 1))
- done
-fi
-
-for kernel in $(find /boot -name "vmlinuz*" -type f); do
- case $kernel in
- *vmlinuz) tag=vanilla;;
- *vmlinuz-*) tag=$(basename $kernel | cut -b9-);;
- *) continue;;
- esac
- everbose "Found kernel: $kernel"
- label=$(grep -w -l $tag /usr/share/kernel/*/kernel.release | cut -d/ -f5)
- if [ -z "$label" ]; then
- if [ "$tag" = vanilla ]; then
- label="vanilla"
- else
- label=$lst
- fi
- fi
- echo "LABEL $label" >> $conf.new
- if [ "$label" = "$default" ]; then
- echo " MENU DEFAULT" >> $conf.new
- fi
- echo " MENU LABEL Linux $tag" >> $conf.new
- echo " LINUX $(basename $kernel)" >> $conf.new
- if [ -f "/boot/initramfs-$tag" ]; then
- everbose "Found initramfs: /boot/initramfs-$tag"
- echo " INITRD initramfs-$tag" >> $conf.new
- fi
- echo " APPEND root=$root modules=${modules}${TYPE:+,$TYPE} $default_kernel_opts" >> $conf.new
- echo "" >> $conf.new
- lst=$(($lst + 1))
-done
-
-if [ -n "$password" ]; then
- echo "NOESCAPE 1" >> $conf.new
- echo "MENU MASTER PASSWD $password" >> $conf.new
- echo "" >> $conf.new
- chmod o-r $conf.new
-fi
-
-everbose "$lst entries found."
-
-for entry in /etc/update-extlinux.d/*; do
- [ -f "$entry" ] && { cat $entry; echo ""; } >> $conf.new
-done
-
-echo "MENU SEPARATOR" >> $conf.new
-echo "" >> $conf.new
-
-if [ -f "/boot/hdt.c32" ]; then
- everbose "Found Hardware Detection Tool: /boot/hdt.c32"
- echo "LABEL hdt" >> $conf.new
- echo " MENU LABEL Hardware info" >> $conf.new
- if [ -n "$password" ]; then
- echo " MENU PASSWD" >> $conf.new
- fi
- echo " COM32 hdt.c32" >> $conf.new
- if [ -f "/boot/memtest" ]; then
- everbose "Found memtest86+: /boot/memtest"
- echo " APPEND memtest=memtest" >> $conf.new
- fi
- echo "" >> $conf.new
-elif [ -f "/boot/memtest" ]; then
- everbose "Found memtest86+: /boot/memtest"
- echo "LABEL memtest" >> $conf.new
- echo " MENU LABEL Memtest86+" >> $conf.new
- echo " KERNEL memtest" >> $conf.new
- echo "" >> $conf.new
-fi
-
-for i in reboot poweroff; do
- [ -f "/boot/$i.c32" ] || continue
- everbose "Found $i"
- # make first char capital
- cap=$( echo $i | awk '{sub(".", substr(toupper($0),1,1), $0); print}' )
- echo "LABEL $i" >> $conf.new
- echo " MENU LABEL $cap" >> $conf.new
- echo " COM32 $i.c32" >> $conf.new
- echo "" >> $conf.new
-done
-
-if cmp -s $conf.new $conf; then
- everbose "Configuration unchanged."
- rm $conf.new
-fi
-
-if [ "$overwrite" != "1" ]; then
- exit 0
-elif [ -f "$conf.new" ]; then
- # keep a backup just in case
- if [ -f "$conf" ]; then
- mv $conf $conf.old
- fi
-
- mv $conf.new $conf
-fi
-
-everbose "Installing libutil.c32 libcom32.c32 mboot.c32 menu.c32 vesamenu.c32 to /boot."
-cp /usr/share/syslinux/libutil.c32 \
- /usr/share/syslinux/libcom32.c32 \
- /usr/share/syslinux/mboot.c32 \
- /usr/share/syslinux/menu.c32 \
- /usr/share/syslinux/vesamenu.c32 \
- /boot
-
-case "$(stat -f -c '%T' /boot)" in
-ext*) extlinux --update /boot || [ -n "$warn_only" ];;
-esac
-
diff --git a/legacy/syslinux/update-extlinux.conf b/legacy/syslinux/update-extlinux.conf
deleted file mode 100644
index 39598cb99..000000000
--- a/legacy/syslinux/update-extlinux.conf
+++ /dev/null
@@ -1,75 +0,0 @@
-# configuration for extlinux config builder
-
-# overwrite
-# Overwrite current /boot/extlinux.conf. If this is not '1' we will only
-# write to /boot/extlinux.conf.new
-overwrite=1
-
-# vesa_menu
-# use fancy vesa menu (vesamenu.c32) menus, won't work with serial
-vesa_menu=1
-
-# default_kernel_opts
-# default kernel options
-default_kernel_opts=ro
-
-# modules
-# modules which should be loaded before pivot_root
-modules=
-#sd-mod,usb-storage,ext3
-
-# root
-# root device - if not specified, will be guessed using
-# blkid -o export /dev/root
-root=
-
-# verbose
-# if set to non-zero, update-extlinux will be a lot more verbose.
-verbose=0
-
-# hidden
-# if set to non-zero, the boot menu will be hidden by default.
-hidden=0
-
-# timeout
-# number of seconds to wait before booting default
-timeout=5
-
-# default
-# default kernel to boot
-default=vanilla
-
-# serial_port
-# serial port number - if not specified, serial console will be disabled
-serial_port=
-
-# serial_baud
-# the baudrate for the serial port. Will use 115200 if unset
-serial_baud=115200
-
-# xen_opts
-# options to hand to xen hypervisor, useful ones are:
-# dom0_mem=256M (give domain-0 environment 256M ram)
-xen_opts=dom0_mem=256M
-
-# if you copy /usr/share/syslinux/reboot.c32 to /boot/, a menu entry
-# will be auto-generated for it
-
-# if you copy hdt.c32, libgpl.c32, and libmenu.c32 from /usr/share/syslinux/
-# to /boot/, a menu entry will be auto-generated for HDT
-
-# if you download and install /boot/memtest, then if HDT is present it
-# will use it, else a separate menu entry will be auto-generated for
-# memtest
-
-# optional password
-# you can generate a SHA512 password using: mkpasswd
-#
-# if you assign a password, you should make this file world-unreadable
-#
-# if a password is assigned, the menu entries can't be edited at boot
-# time, and HDT if present is password-protected
-#
-# you can also include "MENU PASSWD" in any custom entries you have in
-# /etc/update-extlinux.d/
-password=''