diff options
author | A. Wilcox <AWilcox@Wilcox-Tech.com> | 2018-10-23 19:31:59 +0000 |
---|---|---|
committer | A. Wilcox <AWilcox@Wilcox-Tech.com> | 2018-10-23 19:31:59 +0000 |
commit | 7749175e007b4fbd53d08b712201ecf27f173aec (patch) | |
tree | f48382f894dc4af4afa3c65af9e3b66fdb7f1934 /legacy | |
parent | 348791237928aa54acc58bfc9e52a419dcec328d (diff) | |
download | packages-7749175e007b4fbd53d08b712201ecf27f173aec.tar.gz packages-7749175e007b4fbd53d08b712201ecf27f173aec.tar.bz2 packages-7749175e007b4fbd53d08b712201ecf27f173aec.tar.xz packages-7749175e007b4fbd53d08b712201ecf27f173aec.zip |
legacy/: remove permanently dead packages
Diffstat (limited to 'legacy')
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, ®s) < 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, ®s) < 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, ®s) < 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, ®s) < 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, ®s) < 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, ®s) < 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, ®s) < 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, ®s) < 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, ®s) < 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, ®s) < 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, ®s) < 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, ®s) < 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, ®ex); -- 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='' |