From f7690a8bbddec3a0b45bb8245db96ae8aaf3499a Mon Sep 17 00:00:00 2001 From: Fredrik Fornwall Date: Fri, 8 Jan 2016 20:19:06 -0500 Subject: [PATCH] Update libtalloc and proot build files --- disabled-packages/libtalloc/build.sh | 2 +- disabled-packages/libtalloc/wscript.patch | 19 +++++ disabled-packages/proot/build.sh | 11 ++- disabled-packages/proot/src-arch.h.patch | 15 ++++ disabled-packages/proot/src-cli-cli.c.patch | 26 ++++++ .../proot/src-loader-assemble-arm64.h.patch | 99 ++++++++++++++++++++++ disabled-packages/proot/src-loader-loader.c.patch | 26 ++++++ disabled-packages/proot/src-path-temp.c.patch | 29 +++++++ disabled-packages/proot/src-ptrace-ptrace.c.patch | 26 ++++++ disabled-packages/proot/src-ptrace-wait.h.patch | 12 +++ disabled-packages/proot/src-tracee-tracee.c.patch | 13 +++ disabled-packages/proot/src-tracee-tracee.h.patch | 17 ++++ ndk_patches/sys-user.h.patch | 37 ++++++++ ndk_patches/user.h.patch | 18 ---- 14 files changed, 329 insertions(+), 21 deletions(-) create mode 100644 disabled-packages/libtalloc/wscript.patch create mode 100644 disabled-packages/proot/src-arch.h.patch create mode 100644 disabled-packages/proot/src-cli-cli.c.patch create mode 100644 disabled-packages/proot/src-loader-assemble-arm64.h.patch create mode 100644 disabled-packages/proot/src-loader-loader.c.patch create mode 100644 disabled-packages/proot/src-path-temp.c.patch create mode 100644 disabled-packages/proot/src-ptrace-ptrace.c.patch create mode 100644 disabled-packages/proot/src-ptrace-wait.h.patch create mode 100644 disabled-packages/proot/src-tracee-tracee.c.patch create mode 100644 disabled-packages/proot/src-tracee-tracee.h.patch create mode 100644 ndk_patches/sys-user.h.patch delete mode 100644 ndk_patches/user.h.patch diff --git a/disabled-packages/libtalloc/build.sh b/disabled-packages/libtalloc/build.sh index f972a43a..51342e2e 100644 --- a/disabled-packages/libtalloc/build.sh +++ b/disabled-packages/libtalloc/build.sh @@ -1,7 +1,7 @@ # Compiles, but unused (proot will perhaps use it) TERMUX_PKG_HOMEPAGE=https://talloc.samba.org/talloc/doc/html/index.html TERMUX_PKG_DESCRIPTION="Hierarchical, reference counted memory pool system with destructors" -TERMUX_PKG_VERSION=2.1.3 +TERMUX_PKG_VERSION=2.1.5 TERMUX_PKG_SRCURL=https://www.samba.org/ftp/talloc/talloc-${TERMUX_PKG_VERSION}.tar.gz TERMUX_PKG_BUILD_IN_SRC="yes" diff --git a/disabled-packages/libtalloc/wscript.patch b/disabled-packages/libtalloc/wscript.patch new file mode 100644 index 00000000..8535ac58 --- /dev/null +++ b/disabled-packages/libtalloc/wscript.patch @@ -0,0 +1,19 @@ +diff -u -r ../talloc-2.1.5/wscript ./wscript +--- ../talloc-2.1.5/wscript 2015-11-06 08:28:25.000000000 -0500 ++++ ./wscript 2016-01-08 19:19:24.233750343 -0500 +@@ -95,15 +95,6 @@ + if bld.CONFIG_SET('HAVE_PTHREAD'): + testsuite_deps += ' pthread' + +- bld.SAMBA_BINARY('talloc_testsuite', +- 'testsuite_main.c testsuite.c', +- testsuite_deps, +- install=False) +- +- bld.SAMBA_BINARY('talloc_test_magic_differs_helper', +- 'test_magic_differs_helper.c', +- 'talloc', install=False) +- + else: + private_library = True + diff --git a/disabled-packages/proot/build.sh b/disabled-packages/proot/build.sh index c537b299..e75b9428 100644 --- a/disabled-packages/proot/build.sh +++ b/disabled-packages/proot/build.sh @@ -1,12 +1,19 @@ -# Fails to build with __ptrace_request being undefined TERMUX_PKG_HOMEPAGE=http://proot.me/ TERMUX_PKG_DESCRIPTION="Emulate chroot, bind mount and binfmt_misc for non-root users" TERMUX_PKG_VERSION=5.1.0 TERMUX_PKG_SRCURL=https://github.com/proot-me/PRoot/archive/v${TERMUX_PKG_VERSION}.tar.gz TERMUX_PKG_FOLDERNAME=PRoot-${TERMUX_PKG_VERSION} +TERMUX_PKG_DEPENDS="libtalloc" + +export LD=$CC termux_step_make_install () { + export CROSS_COMPILE=${TERMUX_HOST_PLATFORM}- + cd $TERMUX_PKG_SRCDIR/src - make + make V=1 make install + + mkdir -p $TERMUX_PREFIX/share/man/man1 + cp $TERMUX_PKG_SRCDIR/doc/proot/man.1 $TERMUX_PREFIX/share/man/man1/proot.1 } diff --git a/disabled-packages/proot/src-arch.h.patch b/disabled-packages/proot/src-arch.h.patch new file mode 100644 index 00000000..8447f6b4 --- /dev/null +++ b/disabled-packages/proot/src-arch.h.patch @@ -0,0 +1,15 @@ +From https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=788113 + +diff -u -r ../PRoot-5.1.0/src/arch.h ./src/arch.h +--- ../PRoot-5.1.0/src/arch.h 2014-12-15 09:18:11.000000000 -0500 ++++ ./src/arch.h 2016-01-08 19:53:23.789378336 -0500 +@@ -125,6 +125,9 @@ + #define OFFSETOF_STAT_UID_32 0 + #define OFFSETOF_STAT_GID_32 0 + ++ #define EXEC_PIC_ADDRESS 0x500000000000 ++ #define INTERP_PIC_ADDRESS 0x6f0000000000 ++ + #elif defined(ARCH_X86) + + #define SYSNUMS_HEADER1 "syscall/sysnums-i386.h" diff --git a/disabled-packages/proot/src-cli-cli.c.patch b/disabled-packages/proot/src-cli-cli.c.patch new file mode 100644 index 00000000..a6f34c14 --- /dev/null +++ b/disabled-packages/proot/src-cli-cli.c.patch @@ -0,0 +1,26 @@ +diff -u -r ../PRoot-5.1.0/src/cli/cli.c ./src/cli/cli.c +--- ../PRoot-5.1.0/src/cli/cli.c 2014-12-15 09:18:11.000000000 -0500 ++++ ./src/cli/cli.c 2016-01-08 15:16:33.393030857 -0500 +@@ -30,7 +30,9 @@ + #include /* getpid(2), */ + #include /* getpid(2), */ + #include /* errno(3), */ ++#ifndef __ANDROID__ + #include /* backtrace_symbols(3), */ ++#endif + #include /* INT_MAX, */ + + #include "cli/cli.h" +@@ -558,7 +560,12 @@ + void *const pointers[] = { this_function, call_site }; + char **symbols = NULL; + ++#ifdef __ANDROID__ ++ fprintf(stderr, "backtrace_symbols() not available on Android\n"); ++ exit(1); ++#else + symbols = backtrace_symbols(pointers, 2); ++#endif + if (symbols == NULL) + goto end; + diff --git a/disabled-packages/proot/src-loader-assemble-arm64.h.patch b/disabled-packages/proot/src-loader-assemble-arm64.h.patch new file mode 100644 index 00000000..9c8d2c04 --- /dev/null +++ b/disabled-packages/proot/src-loader-assemble-arm64.h.patch @@ -0,0 +1,99 @@ +See https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=788113 + +diff -N -u -r ../PRoot-5.1.0/src/loader/assemble-arm64.h ./src/loader/assemble-arm64.h +--- ../PRoot-5.1.0/src/loader/assembly-arm64.h 1969-12-31 19:00:00.000000000 -0500 ++++ ./src/loader/assembly-arm64.h 2016-01-08 20:12:46.494779723 -0500 +@@ -0,0 +1,93 @@ ++/* -*- c-set-style: "K&R"; c-basic-offset: 8 -*- ++ * ++ * This file is part of PRoot. ++ * ++ * Copyright (C) 2014 STMicroelectronics ++ * ++ * 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 Street, Fifth Floor, Boston, MA ++ * 02110-1301 USA. ++ */ ++ ++#define BRANCH(stack_pointer, destination) do { \ ++ asm volatile ( \ ++ "// Restore initial stack pointer. \n\t" \ ++ "mov sp, %0 \n\t" \ ++ " \n\t" \ ++ "// Clear rtld_fini. \n\t" \ ++ "mov x0, #0 \n\t" \ ++ " \n\t" \ ++ "// Start the program. \n\t" \ ++ "br %1 \n" \ ++ : /* no output */ \ ++ : "r" (stack_pointer), "r" (destination) \ ++ : "memory", "sp", "x0"); \ ++ __builtin_unreachable(); \ ++ } while (0) ++ ++#define PREPARE_ARGS_1(arg1_) \ ++ register word_t arg1 asm("x0") = arg1_; \ ++ ++#define PREPARE_ARGS_3(arg1_, arg2_, arg3_) \ ++ PREPARE_ARGS_1(arg1_) \ ++ register word_t arg2 asm("x1") = arg2_; \ ++ register word_t arg3 asm("x2") = arg3_; \ ++ ++#define PREPARE_ARGS_4(arg1_, arg2_, arg3_, arg4_) \ ++ PREPARE_ARGS_3(arg1_, arg2_, arg3_) \ ++ register word_t arg4 asm("x3") = arg4_; ++ ++#define PREPARE_ARGS_6(arg1_, arg2_, arg3_, arg4_, arg5_, arg6_) \ ++ PREPARE_ARGS_3(arg1_, arg2_, arg3_) \ ++ register word_t arg4 asm("x3") = arg4_; \ ++ register word_t arg5 asm("x4") = arg5_; \ ++ register word_t arg6 asm("x5") = arg6_; ++ ++#define OUTPUT_CONTRAINTS_1 \ ++ "r" (arg1) ++ ++#define OUTPUT_CONTRAINTS_3 \ ++ OUTPUT_CONTRAINTS_1, \ ++ "r" (arg2), "r" (arg3) ++ ++#define OUTPUT_CONTRAINTS_4 \ ++ OUTPUT_CONTRAINTS_3, \ ++ "r" (arg4) ++ ++#define OUTPUT_CONTRAINTS_6 \ ++ OUTPUT_CONTRAINTS_3, \ ++ "r" (arg4), "r" (arg5), "r" (arg6) ++ ++#define SYSCALL(number_, nb_args, args...) \ ++ ({ \ ++ register word_t number asm("w8") = number_; \ ++ register word_t result asm("x0"); \ ++ PREPARE_ARGS_##nb_args(args) \ ++ asm volatile ( \ ++ "svc #0x00000000 \n\t" \ ++ : "=r" (result) \ ++ : "r" (number), \ ++ OUTPUT_CONTRAINTS_##nb_args \ ++ : "memory"); \ ++ result; \ ++ }) ++ ++#define OPENAT 56 ++#define CLOSE 57 ++#define MMAP 222 ++#define MMAP_OFFSET_SHIFT 0 ++#define EXECVE 221 ++#define EXIT 93 ++#define PRCTL 167 ++ diff --git a/disabled-packages/proot/src-loader-loader.c.patch b/disabled-packages/proot/src-loader-loader.c.patch new file mode 100644 index 00000000..a8a5e2a7 --- /dev/null +++ b/disabled-packages/proot/src-loader-loader.c.patch @@ -0,0 +1,26 @@ +See https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=788113 + +diff -N -u -r ../PRoot-5.1.0/src/loader/loader.c ./src/loader/loader.c +--- ../PRoot-5.1.0/src/loader/loader.c 2014-12-15 09:18:11.000000000 -0500 ++++ ./src/loader/loader.c 2016-01-08 20:16:54.746809929 -0500 +@@ -39,6 +39,8 @@ + # include "loader/assembly-x86_64.h" + #elif defined(ARCH_ARM_EABI) + # include "loader/assembly-arm.h" ++#elif defined(ARCH_ARM64) ++# include "loader/assembly-arm64.h" + #elif defined(ARCH_X86) + # include "loader/assembly-x86.h" + #else +@@ -134,7 +136,11 @@ + /* Fall through. */ + + case LOAD_ACTION_OPEN: ++#ifdef OPENAT ++ fd = SYSCALL(OPENAT, 4, AT_FDCWD, stmt->open.string_address, O_RDONLY, 0); ++#else + fd = SYSCALL(OPEN, 3, stmt->open.string_address, O_RDONLY, 0); ++#endif + if (unlikely((int) fd < 0)) + FATAL(); + diff --git a/disabled-packages/proot/src-path-temp.c.patch b/disabled-packages/proot/src-path-temp.c.patch new file mode 100644 index 00000000..86b3c4bf --- /dev/null +++ b/disabled-packages/proot/src-path-temp.c.patch @@ -0,0 +1,29 @@ +diff -u -r ../PRoot-5.1.0/src/path/temp.c ./src/path/temp.c +--- ../PRoot-5.1.0/src/path/temp.c 2014-12-15 09:18:11.000000000 -0500 ++++ ./src/path/temp.c 2016-01-08 19:40:46.901462550 -0500 +@@ -120,9 +120,14 @@ + { + int result; + int status; +- char *cwd; + ++#ifdef __ANDROID__ ++ char cwd[PATH_MAX]; ++ getcwd(cwd, PATH_MAX); ++#else ++ char *cwd; + cwd = get_current_dir_name(); ++#endif + + status = chmod(path, 0700); + if (status < 0) { +@@ -163,7 +168,9 @@ + result = -1; + note(NULL, ERROR, SYSTEM, "can't chdir to '%s'", cwd); + } ++#ifndef __ANDROID__ + free(cwd); ++#endif + } + + return result; diff --git a/disabled-packages/proot/src-ptrace-ptrace.c.patch b/disabled-packages/proot/src-ptrace-ptrace.c.patch new file mode 100644 index 00000000..41c8b037 --- /dev/null +++ b/disabled-packages/proot/src-ptrace-ptrace.c.patch @@ -0,0 +1,26 @@ +diff -u -r ../PRoot-5.1.0/src/ptrace/ptrace.c ./src/ptrace/ptrace.c +--- ../PRoot-5.1.0/src/ptrace/ptrace.c 2014-12-15 09:18:11.000000000 -0500 ++++ ./src/ptrace/ptrace.c 2016-01-08 15:12:27.089144325 -0500 +@@ -27,6 +27,7 @@ + #include /* siginfo_t, */ + #include /* struct iovec, */ + #include /* MIN(), MAX(), */ ++#include /* __WALL */ + #include /* memcpy(3), */ + + #include "ptrace/ptrace.h" +@@ -58,7 +59,13 @@ + #define user_fpregs_struct user_fpsimd_struct + #endif + +-static const char *stringify_ptrace(enum __ptrace_request request) ++static const char *stringify_ptrace( ++#ifdef __ANDROID__ ++ int ++#else ++ enum __ptrace_request ++#endif ++ request) + { + #define CASE_STR(a) case a: return #a; break; + switch ((int) request) { diff --git a/disabled-packages/proot/src-ptrace-wait.h.patch b/disabled-packages/proot/src-ptrace-wait.h.patch new file mode 100644 index 00000000..a616bd6c --- /dev/null +++ b/disabled-packages/proot/src-ptrace-wait.h.patch @@ -0,0 +1,12 @@ +diff -u -r ../PRoot-5.1.0/src/ptrace/wait.h ./src/ptrace/wait.h +--- ../PRoot-5.1.0/src/ptrace/wait.h 2014-12-15 09:18:11.000000000 -0500 ++++ ./src/ptrace/wait.h 2016-01-08 09:07:20.342650218 -0500 +@@ -25,6 +25,8 @@ + + #include "tracee/tracee.h" + ++#include /* for __WALL */ ++ + extern int translate_wait_enter(Tracee *ptracer); + extern int translate_wait_exit(Tracee *ptracer); + extern bool handle_ptracee_event(Tracee *ptracee, int wait_status); diff --git a/disabled-packages/proot/src-tracee-tracee.c.patch b/disabled-packages/proot/src-tracee-tracee.c.patch new file mode 100644 index 00000000..820d59e5 --- /dev/null +++ b/disabled-packages/proot/src-tracee-tracee.c.patch @@ -0,0 +1,13 @@ +diff -u -r ../PRoot-5.1.0/src/tracee/tracee.c ./src/tracee/tracee.c +--- ../PRoot-5.1.0/src/tracee/tracee.c 2014-12-15 09:18:11.000000000 -0500 ++++ ./src/tracee/tracee.c 2016-01-08 19:32:43.493157624 -0500 +@@ -538,6 +538,9 @@ + /* Sanity check. */ + assert(!child->as_ptracee.tracing_started); + ++#ifndef __W_STOPCODE ++#define __W_STOPCODE(sig) ((sig) << 8 | 0x7f) ++#endif + keep_stopped = handle_ptracee_event(child, __W_STOPCODE(SIGSTOP)); + + /* Note that this event was already handled by diff --git a/disabled-packages/proot/src-tracee-tracee.h.patch b/disabled-packages/proot/src-tracee-tracee.h.patch new file mode 100644 index 00000000..05e3638f --- /dev/null +++ b/disabled-packages/proot/src-tracee-tracee.h.patch @@ -0,0 +1,17 @@ +diff -u -r ../PRoot-5.1.0/src/tracee/tracee.h ./src/tracee/tracee.h +--- ../PRoot-5.1.0/src/tracee/tracee.h 2014-12-15 09:18:11.000000000 -0500 ++++ ./src/tracee/tracee.h 2016-01-08 09:04:52.144913929 -0500 +@@ -140,7 +140,12 @@ + && get_sysnum((tracee), ORIGINAL) == sysnum) + + /* How this tracee is restarted. */ +- enum __ptrace_request restart_how; ++#ifdef __ANDROID__ ++ int ++#else ++ enum __ptrace_request ++#endif ++ restart_how; + + /* Value of the tracee's general purpose registers. */ + struct user_regs_struct _regs[NB_REG_VERSION]; diff --git a/ndk_patches/sys-user.h.patch b/ndk_patches/sys-user.h.patch new file mode 100644 index 00000000..fa4861ba --- /dev/null +++ b/ndk_patches/sys-user.h.patch @@ -0,0 +1,37 @@ +diff -u -r /home/fornwall/lib/android-ndk/platforms/android-21/arch-arm64/usr/include/sys/user.h ./usr/include/sys/user.h +--- /home/fornwall/lib/android-ndk/platforms/android-21/arch-arm64/usr/include/sys/user.h 2014-12-08 21:59:41.000000000 -0500 ++++ ./usr/include/sys/user.h 2016-01-08 20:08:08.327228220 -0500 +@@ -99,6 +99,13 @@ + int u_debugreg[8]; + }; + ++/* Needed by binutils on x86 */ ++/* http://osxr.org/android/source/bionic/libc/kernel/arch-x86/asm/user_32.h#0089 */ ++#define NBPG PAGE_SIZE ++#define UPAGES 1 ++#define HOST_TEXT_START_ADDR (u.start_code) ++#define HOST_STACK_END_ADDR (u.start_stack + u.u_ssize * NBPG) ++ + #elif defined(__x86_64__) + + struct user_fpregs_struct { +@@ -234,7 +240,18 @@ + + #elif defined(__aarch64__) + +-// There are no user structures for 64 bit arm. ++/* From https://codereview.chromium.org/1291983003 */ ++struct user_regs_struct { ++ __u64 regs[31]; ++ __u64 sp; ++ __u64 pc; ++ __u64 pstate; ++}; ++struct user_fpsimd_struct { ++ __uint128_t vregs[32]; ++ __u32 fpsr; ++ __u32 fpcr; ++}; + + #else + diff --git a/ndk_patches/user.h.patch b/ndk_patches/user.h.patch deleted file mode 100644 index 93a3a0b6..00000000 --- a/ndk_patches/user.h.patch +++ /dev/null @@ -1,18 +0,0 @@ -Needed for binutils on x86. - -diff -u -r /home/fornwall/lib/android-ndk/platforms/android-21/arch-x86/usr/include/sys/user.h ./usr/include/sys/user.h ---- /home/fornwall/lib/android-ndk/platforms/android-21/arch-x86/usr/include/sys/user.h 2014-12-01 19:05:05.000000000 -0500 -+++ ./usr/include/sys/user.h 2014-12-23 10:31:31.343768553 -0500 -@@ -99,6 +99,12 @@ - int u_debugreg[8]; - }; - -+/* http://osxr.org/android/source/bionic/libc/kernel/arch-x86/asm/user_32.h#0089 */ -+#define NBPG PAGE_SIZE -+#define UPAGES 1 -+#define HOST_TEXT_START_ADDR (u.start_code) -+#define HOST_STACK_END_ADDR (u.start_stack + u.u_ssize * NBPG) -+ - #elif defined(__x86_64__) - - struct user_fpregs_struct { -- 2.11.0