ndk_patches: add patches for sem and shm (#691)
authorVishal Biswas <vshlbiswas@ymail.com>
Tue, 24 Jan 2017 09:41:46 +0000 (15:11 +0530)
committerFredrik Fornwall <fredrik@fornwall.net>
Tue, 24 Jan 2017 09:41:46 +0000 (10:41 +0100)
* ndk_patches: add patches for sem and shm

* add #ifdef around syscall stubs for shm.h and sem.h

README.md
build-package.sh
ndk_patches/sys-sem.h.patch [new file with mode: 0644]
ndk_patches/sys-shm.h.patch [new file with mode: 0644]
packages/ndk-sysroot/build.sh

index c1386be..e5a45fe 100644 (file)
--- a/README.md
+++ b/README.md
@@ -122,6 +122,10 @@ Common porting problems
 * mempcpy(3) is a GNU extension. We have added it to &lt;string.h&gt; provided TERMUX_EXPOSE_MEMPCPY is defined,
   so use something like CFLAGS+=" -DTERMUX_EXPOSE_MEMPCPY=1" for packages expecting that function to exist.
 
+* Android uses a customized version of shared memory managemnt known as ashmem. Standard shm and semaphore libc
+  wrappers (semget(2), shmat(2) and others) aren't available. Direct syscalls can be used with
+  `CFLAGS+=" -DTERMUX_SHMEM_STUBS=1 -DTERMUX_SEMOPS_STUBS=1"`.
+
 dlopen() and RTLD&#95;&#42; flags
 =================================
 &lt;dlfcn.h&gt; originally declares
index b015634..645108d 100755 (executable)
@@ -206,7 +206,7 @@ termux_step_setup_variables() {
        TERMUX_STANDALONE_TOOLCHAIN="$TERMUX_TOPDIR/_lib/toolchain-${TERMUX_ARCH}-ndk${TERMUX_NDK_VERSION}-api${TERMUX_API_LEVEL}"
        # Bump the below version if a change is made in toolchain setup to ensure
        # that everyone gets an updated toolchain:
-       TERMUX_STANDALONE_TOOLCHAIN+="-v9"
+       TERMUX_STANDALONE_TOOLCHAIN+="-v10"
 
        export TERMUX_TAR="tar"
        export TERMUX_TOUCH="touch"
diff --git a/ndk_patches/sys-sem.h.patch b/ndk_patches/sys-sem.h.patch
new file mode 100644 (file)
index 0000000..dea3b85
--- /dev/null
@@ -0,0 +1,17 @@
+--- /home/vishal/Android/Sdk/ndk-bundle/platforms/android-21/arch-arm/usr/include/sys/sem.h    2016-10-12 15:11:58.000000000 +0530
++++ ./usr/include/sys/sem.h    2017-01-24 08:23:25.150726158 +0530
+@@ -31,4 +31,14 @@
+ #include <linux/sem.h>
++#ifdef TERMUX_SEMOPS_STUBS
++
++#include <sys/syscall.h>
++
++#define semop(semid, sops, nsops)  syscall(__NR_semop, semid, sops, nsops)
++#define semget(key, nsems, semflg) syscall(__NR_semget, key, nsems, semflg)
++#define semctl(semid, semnum, cmd, ...) syscall(__NR_semctl, semid, semnum, cmd, __VA_ARGS__)
++
++#endif /* TERMUX_SEMOPS_STUBS */
++
+ #endif /* _SYS_SEM_H_ */
diff --git a/ndk_patches/sys-shm.h.patch b/ndk_patches/sys-shm.h.patch
new file mode 100644 (file)
index 0000000..f104ef1
--- /dev/null
@@ -0,0 +1,20 @@
+--- /home/vishal/Android/Sdk/ndk-bundle/platforms/android-21/arch-arm/usr/include/sys/shm.h    2016-10-12 15:11:58.000000000 +0530
++++ ./usr/include/sys/shm.h    2017-01-24 08:21:49.997228838 +0530
+@@ -31,4 +31,17 @@
+ #include <linux/shm.h>
++#ifdef TERMUX_SHMEM_STUBS
++
++#include <sys/syscall.h>
++#include <limits.h>
++
++#define SHMLBA PAGE_SIZE
++#define shmget(key, size, shmflg) syscall(__NR_shmget, key, size, shmflg)
++#define shmctl(shmid, cmd, buf) syscall(__NR_shmctl, shmid, cmd, buf)
++#define shmat(shmid, shmaddr, shmflg) syscall(__NR_shmat, shmid, shmaddr, shmflg)
++#define shmdt(shmaddr) syscall(__NR_shmdt, shmaddr)
++
++#endif /* TERMUX_SHMEM_STUBS */
++
+ #endif /* _SYS_SHM_H_ */
index 787a976..84a230c 100644 (file)
@@ -1,7 +1,7 @@
 TERMUX_PKG_HOMEPAGE=https://developer.android.com/tools/sdk/ndk/index.html
 TERMUX_PKG_DESCRIPTION="System header and library files from the Android NDK needed for compiling C programs"
 TERMUX_PKG_VERSION=$TERMUX_NDK_VERSION
-TERMUX_PKG_REVISION=7
+TERMUX_PKG_REVISION=8
 TERMUX_PKG_NO_DEVELSPLIT=yes
 # Depend on libandroid-support-dev so that iconv.h and libintl.h are available:
 TERMUX_PKG_DEPENDS="libandroid-support-dev"