Android Builds of OpenJDK Mobile project now available
Ali Ebrahimi
ali.ebrahimi1781 at gmail.com
Fri Feb 19 00:16:26 UTC 2016
Hi Bob,
On Thu, Feb 18, 2016 at 9:58 PM, Bob Vandette <bob.vandette at oracle.com>
wrote:
> Ali,
>
> I decided to take a slightly different approach to supporting NDK r10e.
>
> My last patch did add support for this version of the NDK but forced the
> Java runtime
> to only support API level 21 and higher. This means we would only be able
> to run
> on devices with Android 5 and newer.
>
> If you look at the Android Dashboard, there are still a lot of devices
> that are supporting
> API level 19.
>
> http://developer.android.com/about/dashboards/index.html
>
> I think it’s best that we set API level 19 as our minimum supported API
> level for now.
>
> This means that we can still use NDK r10e but you need to specify
> —platform=android-19
> when generating the standalone toolchain.
>
> Taking this approach also reduces the number of changes required in the
> mobile/dev
> forest to only 2 files.
>
> Here’s the webrev:
>
> http://cr.openjdk.java.net/~bobv/8150074/webrev.01/
>
I come back with this patchs that work with —platform=android-19
and —platform=android-21 NDK r10e
*jdk.diff*
diff -r 91482de10f40
src/java.base/linux/native/libjava/ProcessHandleImpl_linux.c
--- a/src/java.base/linux/native/libjava/ProcessHandleImpl_linux.c Wed Feb
10 14:17:12 2016 -0500
+++ b/src/java.base/linux/native/libjava/ProcessHandleImpl_linux.c Fri Feb
19 03:22:47 2016 +0330
@@ -241,34 +241,6 @@
}
}
-#ifdef __ANDROID__
-static int getline(char **line, size_t *len, FILE *fp) {
- char *buf;
- size_t bufLen;
- if (*line != NULL) {
- buf = *line;
- bufLen = *len;
- } else {
- buf = malloc(64);
- if (buf == NULL) {
- return -1;
- }
- bufLen = 64;
- }
- if (fgets(buf, bufLen, fp) == NULL) {
- if (*line == NULL) {
- free(buf);
- }
- return -1;
- }
- if (*line == NULL) {
- *line = buf;
- *len = bufLen;
- }
- return strlen(*line);
-}
-#endif
-
/**
* Read the boottime from /proc/stat.
*/
diff -r 91482de10f40 src/java.base/linux/native/libnet/linux_close.c
--- a/src/java.base/linux/native/libnet/linux_close.c Wed Feb 10 14:17:12
2016 -0500
+++ b/src/java.base/linux/native/libnet/linux_close.c Fri Feb 19 03:22:47
2016 +0330
@@ -57,8 +57,10 @@
* Signal to unblock thread
*/
#ifdef __ANDROID__
+#ifndef __SIGRTMAX
#define __SIGRTMAX SIGRTMAX
#endif
+#endif
static int sigWakeup = (__SIGRTMAX - 2);
/*
diff -r 91482de10f40
src/java.base/linux/native/libnio/fs/LinuxNativeDispatcher.c
--- a/src/java.base/linux/native/libnio/fs/LinuxNativeDispatcher.c Wed Feb
10 14:17:12 2016 -0500
+++ b/src/java.base/linux/native/libnio/fs/LinuxNativeDispatcher.c Fri Feb
19 03:22:47 2016 +0330
@@ -36,11 +36,6 @@
#include "sun_nio_fs_LinuxNativeDispatcher.h"
-#ifdef __ANDROID__
-#define setmntent(f,m) fopen(f,m)
-#define endmntent(f) fclose(f)
-#endif
-
typedef size_t fgetxattr_func(int fd, const char* name, void* value,
size_t size);
typedef int fsetxattr_func(int fd, const char* name, void* value, size_t
size, int flags);
typedef int fremovexattr_func(int fd, const char* name);
@@ -173,31 +168,6 @@
return ptr_to_jlong(fp);
}
-#ifdef __ANDROID__
-static struct mntent* getmntent_r(FILE* fp, struct mntent* m, char* buf,
int buflen) {
- if (m) {
- char *str;
- char *last;
-
- // skip comments
- do {
- if (!(str = fgets(buf, buflen, fp)))
- return NULL;
- m->mnt_fsname = strtok_r(str, " \t\n", &last);
- if (m->mnt_fsname == NULL)
- return NULL;
- } while (*(m->mnt_fsname) == '#');
-
- m->mnt_dir = strtok_r((char *)NULL, " \t\n", &last);
- m->mnt_type = strtok_r((char *)NULL, " \t\n", &last);
- m->mnt_opts = strtok_r((char *)NULL, " \t\n", &last);
- if (m->mnt_opts == NULL)
- return NULL;
- }
- return m;
-}
-#endif
-
JNIEXPORT jint JNICALL
Java_sun_nio_fs_LinuxNativeDispatcher_getmntent(JNIEnv* env, jclass this,
jlong value, jobject entry)
diff -r 91482de10f40
src/java.base/unix/native/libjava/ProcessHandleImpl_unix.c
--- a/src/java.base/unix/native/libjava/ProcessHandleImpl_unix.c Wed Feb 10
14:17:12 2016 -0500
+++ b/src/java.base/unix/native/libjava/ProcessHandleImpl_unix.c Fri Feb 19
03:22:47 2016 +0330
@@ -108,27 +108,6 @@
* functionality into corresponding, platform-specific os_ functions.
*/
-#ifdef __ANDROID__
-/*
- * TODO: Android lacks support for the methods listed below. In it's
place are
- * alternatives that use existing Android functionality, but lack reentrant
- * support. Determine if the following are the most suitable alternatives.
- *
- */
-static int getpwuid_r(uid_t uid, struct passwd* pwd, char* buf, size_t
buflen, struct passwd** result)
-{
- *result = NULL;
- errno = 0;
- pwd = getpwuid(uid);
- if (pwd == NULL) {
- return errno;
- }
- // buf not used by caller (see below)
- *result = pwd;
- return 0;
-}
-#endif
-
#ifndef WIFEXITED
#define WIFEXITED(status) (((status)&0xFF) == 0)
#endif
diff -r 91482de10f40
src/java.base/unix/native/libnio/fs/UnixNativeDispatcher.c
--- a/src/java.base/unix/native/libnio/fs/UnixNativeDispatcher.c Wed Feb 10
14:17:12 2016 -0500
+++ b/src/java.base/unix/native/libnio/fs/UnixNativeDispatcher.c Fri Feb 19
03:22:47 2016 +0330
@@ -153,66 +153,6 @@
#endif
static fdopendir_func* my_fdopendir_func = NULL;
-#ifdef __ANDROID__
-/*
- * TODO: Android lacks support for the methods listed below. In it's
place are
- * alternatives that use existing Android functionality, but lack reentrant
- * support. Determine if the following are the most suitable alternatives.
- *
- */
-static int getpwuid_r(uid_t uid, struct passwd* pwd, char* buf, size_t
buflen, struct passwd** result)
-{
- *result = NULL;
- errno = 0;
- pwd = getpwuid(uid);
- if (pwd == NULL) {
- return errno;
- }
- // buf not used by caller (see below)
- *result = pwd;
- return 0;
-}
-
-static int getpwnam_r(const char *name, struct passwd* pwd, char* buf,
size_t buflen, struct passwd** result)
-{
- *result = NULL;
- errno = 0;
- pwd = getpwnam(name);
- if (pwd == NULL) {
- return errno;
- }
- // buf not used by caller (see below)
- *result = pwd;
- return 0;
-}
-
-static int getgrgid_r(gid_t gid, struct group* grp, char* buf, size_t
buflen, struct group** result)
-{
- *result = NULL;
- errno = 0;
- grp = getgrgid(gid);
- if (grp == NULL) {
- return errno;
- }
- // buf not used by caller (see below)
- *result = grp;
- return 0;
-}
-
-static int getgrnam_r(const char *name, struct group* grp, char* buf,
size_t buflen, struct group** result)
-{
- *result = NULL;
- errno = 0;
- grp = getgrnam(name);
- if (grp == NULL) {
- return errno;
- }
- // buf not used by caller (see below)
- *result = grp;
- return 0;
-}
-#endif
-
/**
* fstatat missing from glibc on Linux. Temporary workaround
* for x86/x64.
diff -r 91482de10f40 src/jdk.security.auth/unix/native/libjaas/Unix.c
--- a/src/jdk.security.auth/unix/native/libjaas/Unix.c Wed Feb 10 14:17:12
2016 -0500
+++ b/src/jdk.security.auth/unix/native/libjaas/Unix.c Fri Feb 19 03:22:47
2016 +0330
@@ -38,21 +38,6 @@
#include <string.h>
#include <errno.h>
-#ifdef __ANDROID__
-static int getpwuid_r(uid_t uid, struct passwd* pwd, char* buf, size_t
buflen, struct passwd** result)
-{
- *result = NULL;
- errno = 0;
- pwd = getpwuid(uid);
- if (pwd == NULL) {
- return errno;
- }
- // buf not used by caller (see below)
- *result = pwd;
- return 0;
-}
-#endif
-
/*
* Declare library specific JNI_Onload entry if static build
*/
*hotspot.diff*
diff -r de1d92b01bae src/os/linux/vm/perfMemory_linux.cpp
--- a/src/os/linux/vm/perfMemory_linux.cpp Wed Feb 10 14:15:17 2016 -0500
+++ b/src/os/linux/vm/perfMemory_linux.cpp Fri Feb 19 03:23:39 2016 +0330
@@ -44,7 +44,7 @@
# include <pwd.h>
#ifdef __ANDROID__
-static int getpwuid_r(uid_t uid, struct passwd* pwd, char* buf, size_t
buflen, struct passwd** result)
+int getpwuid_r(uid_t uid, struct passwd* pwd, char* buf, size_t buflen,
struct passwd** result)
{
*result = NULL;
errno = 0;
diff -r de1d92b01bae src/os_cpu/linux_x86/vm/os_linux_x86.cpp
--- a/src/os_cpu/linux_x86/vm/os_linux_x86.cpp Wed Feb 10 14:15:17 2016
-0500
+++ b/src/os_cpu/linux_x86/vm/os_linux_x86.cpp Fri Feb 19 03:23:39 2016
+0330
@@ -73,11 +73,8 @@
# include <sys/wait.h>
# include <pwd.h>
# include <poll.h>
-#ifdef __ANDROID__
-# include <asm/elf.h>
-# include <asm/sigcontext.h>
-#else
# include <ucontext.h>
+#ifndef __ANDROID__
# include <fpu_control.h>
#endif
@@ -88,22 +85,6 @@
#define _FPU_SETCW(cw) __asm__ ("fldcw %0" : : "m" (*&cw))
#endif
-#ifdef __ANDROID__
-typedef elf_greg_t greg_t;
-#define SPELL_REG_SP "esp"
-#define SPELL_REG_FP "ebp"
-#define CTX_REG_AX eax
-#define CTX_REG_BX ebx
-#define CTX_REG_CX ecx
-#define CTX_REG_DX edx
-#define CTX_REG_DI edi
-#define CTX_REG_SI esi
-#define CTX_REG_PC eip
-#define CTX_REG_SP esp
-#define CTX_REG_BP ebp
-#define CTX_REG_TRAPNO trapno
-#define CTX_REG_FL eflags
-#else
#ifdef AMD64
#define SPELL_REG_SP "rsp"
#define SPELL_REG_FP "rbp"
@@ -143,7 +124,6 @@
#define CTX_REG_TRAPNO gregs[REG_TRAPNO]
#define CTX_REG_FL gregs[REG_EFL]
#endif // AMD64
-#endif // __ANDROID__
address os::current_stack_pointer() {
#ifdef SPARC_WORKS
diff -r de1d92b01bae src/share/vm/utilities/globalDefinitions_gcc.hpp
--- a/src/share/vm/utilities/globalDefinitions_gcc.hpp Wed Feb 10 14:15:17
2016 -0500
+++ b/src/share/vm/utilities/globalDefinitions_gcc.hpp Fri Feb 19 03:23:39
2016 +0330
@@ -74,26 +74,10 @@
#endif // __STDC_LIMIT_MACROS
#include <inttypes.h>
#include <signal.h>
-#ifdef __ANDROID__
-#include <asm/sigcontext.h>
-/* avoid conflicting ucontext definitions */
-#define ucontext asm_ucontext
-struct ucontext {
- unsigned long uc_flags;
- struct ucontext *uc_link;
- stack_t uc_stack;
- struct sigcontext uc_mcontext;
- sigset_t uc_sigmask;
-};
-
-typedef struct ucontext ucontext_t;
-#endif //__ANDROID__
#ifndef __OpenBSD__
-#ifndef __ANDROID__
#include <ucontext.h>
#endif
-#endif
#ifdef __APPLE__
#include <AvailabilityMacros.h>
#include <mach/mach.h>
--
Best Regards,
Ali Ebrahimi
-------------- next part --------------
diff -r de1d92b01bae src/os/linux/vm/perfMemory_linux.cpp
--- a/src/os/linux/vm/perfMemory_linux.cpp Wed Feb 10 14:15:17 2016 -0500
+++ b/src/os/linux/vm/perfMemory_linux.cpp Fri Feb 19 03:23:39 2016 +0330
@@ -44,7 +44,7 @@
# include <pwd.h>
#ifdef __ANDROID__
-static int getpwuid_r(uid_t uid, struct passwd* pwd, char* buf, size_t buflen, struct passwd** result)
+int getpwuid_r(uid_t uid, struct passwd* pwd, char* buf, size_t buflen, struct passwd** result)
{
*result = NULL;
errno = 0;
diff -r de1d92b01bae src/os_cpu/linux_x86/vm/os_linux_x86.cpp
--- a/src/os_cpu/linux_x86/vm/os_linux_x86.cpp Wed Feb 10 14:15:17 2016 -0500
+++ b/src/os_cpu/linux_x86/vm/os_linux_x86.cpp Fri Feb 19 03:23:39 2016 +0330
@@ -73,11 +73,8 @@
# include <sys/wait.h>
# include <pwd.h>
# include <poll.h>
-#ifdef __ANDROID__
-# include <asm/elf.h>
-# include <asm/sigcontext.h>
-#else
# include <ucontext.h>
+#ifndef __ANDROID__
# include <fpu_control.h>
#endif
@@ -88,22 +85,6 @@
#define _FPU_SETCW(cw) __asm__ ("fldcw %0" : : "m" (*&cw))
#endif
-#ifdef __ANDROID__
-typedef elf_greg_t greg_t;
-#define SPELL_REG_SP "esp"
-#define SPELL_REG_FP "ebp"
-#define CTX_REG_AX eax
-#define CTX_REG_BX ebx
-#define CTX_REG_CX ecx
-#define CTX_REG_DX edx
-#define CTX_REG_DI edi
-#define CTX_REG_SI esi
-#define CTX_REG_PC eip
-#define CTX_REG_SP esp
-#define CTX_REG_BP ebp
-#define CTX_REG_TRAPNO trapno
-#define CTX_REG_FL eflags
-#else
#ifdef AMD64
#define SPELL_REG_SP "rsp"
#define SPELL_REG_FP "rbp"
@@ -143,7 +124,6 @@
#define CTX_REG_TRAPNO gregs[REG_TRAPNO]
#define CTX_REG_FL gregs[REG_EFL]
#endif // AMD64
-#endif // __ANDROID__
address os::current_stack_pointer() {
#ifdef SPARC_WORKS
diff -r de1d92b01bae src/share/vm/utilities/globalDefinitions_gcc.hpp
--- a/src/share/vm/utilities/globalDefinitions_gcc.hpp Wed Feb 10 14:15:17 2016 -0500
+++ b/src/share/vm/utilities/globalDefinitions_gcc.hpp Fri Feb 19 03:23:39 2016 +0330
@@ -74,26 +74,10 @@
#endif // __STDC_LIMIT_MACROS
#include <inttypes.h>
#include <signal.h>
-#ifdef __ANDROID__
-#include <asm/sigcontext.h>
-/* avoid conflicting ucontext definitions */
-#define ucontext asm_ucontext
-struct ucontext {
- unsigned long uc_flags;
- struct ucontext *uc_link;
- stack_t uc_stack;
- struct sigcontext uc_mcontext;
- sigset_t uc_sigmask;
-};
-
-typedef struct ucontext ucontext_t;
-#endif //__ANDROID__
#ifndef __OpenBSD__
-#ifndef __ANDROID__
#include <ucontext.h>
#endif
-#endif
#ifdef __APPLE__
#include <AvailabilityMacros.h>
#include <mach/mach.h>
-------------- next part --------------
diff -r 91482de10f40 src/java.base/linux/native/libjava/ProcessHandleImpl_linux.c
--- a/src/java.base/linux/native/libjava/ProcessHandleImpl_linux.c Wed Feb 10 14:17:12 2016 -0500
+++ b/src/java.base/linux/native/libjava/ProcessHandleImpl_linux.c Fri Feb 19 03:22:47 2016 +0330
@@ -241,34 +241,6 @@
}
}
-#ifdef __ANDROID__
-static int getline(char **line, size_t *len, FILE *fp) {
- char *buf;
- size_t bufLen;
- if (*line != NULL) {
- buf = *line;
- bufLen = *len;
- } else {
- buf = malloc(64);
- if (buf == NULL) {
- return -1;
- }
- bufLen = 64;
- }
- if (fgets(buf, bufLen, fp) == NULL) {
- if (*line == NULL) {
- free(buf);
- }
- return -1;
- }
- if (*line == NULL) {
- *line = buf;
- *len = bufLen;
- }
- return strlen(*line);
-}
-#endif
-
/**
* Read the boottime from /proc/stat.
*/
diff -r 91482de10f40 src/java.base/linux/native/libnet/linux_close.c
--- a/src/java.base/linux/native/libnet/linux_close.c Wed Feb 10 14:17:12 2016 -0500
+++ b/src/java.base/linux/native/libnet/linux_close.c Fri Feb 19 03:22:47 2016 +0330
@@ -57,8 +57,10 @@
* Signal to unblock thread
*/
#ifdef __ANDROID__
+#ifndef __SIGRTMAX
#define __SIGRTMAX SIGRTMAX
#endif
+#endif
static int sigWakeup = (__SIGRTMAX - 2);
/*
diff -r 91482de10f40 src/java.base/linux/native/libnio/fs/LinuxNativeDispatcher.c
--- a/src/java.base/linux/native/libnio/fs/LinuxNativeDispatcher.c Wed Feb 10 14:17:12 2016 -0500
+++ b/src/java.base/linux/native/libnio/fs/LinuxNativeDispatcher.c Fri Feb 19 03:22:47 2016 +0330
@@ -36,11 +36,6 @@
#include "sun_nio_fs_LinuxNativeDispatcher.h"
-#ifdef __ANDROID__
-#define setmntent(f,m) fopen(f,m)
-#define endmntent(f) fclose(f)
-#endif
-
typedef size_t fgetxattr_func(int fd, const char* name, void* value, size_t size);
typedef int fsetxattr_func(int fd, const char* name, void* value, size_t size, int flags);
typedef int fremovexattr_func(int fd, const char* name);
@@ -173,31 +168,6 @@
return ptr_to_jlong(fp);
}
-#ifdef __ANDROID__
-static struct mntent* getmntent_r(FILE* fp, struct mntent* m, char* buf, int buflen) {
- if (m) {
- char *str;
- char *last;
-
- // skip comments
- do {
- if (!(str = fgets(buf, buflen, fp)))
- return NULL;
- m->mnt_fsname = strtok_r(str, " \t\n", &last);
- if (m->mnt_fsname == NULL)
- return NULL;
- } while (*(m->mnt_fsname) == '#');
-
- m->mnt_dir = strtok_r((char *)NULL, " \t\n", &last);
- m->mnt_type = strtok_r((char *)NULL, " \t\n", &last);
- m->mnt_opts = strtok_r((char *)NULL, " \t\n", &last);
- if (m->mnt_opts == NULL)
- return NULL;
- }
- return m;
-}
-#endif
-
JNIEXPORT jint JNICALL
Java_sun_nio_fs_LinuxNativeDispatcher_getmntent(JNIEnv* env, jclass this,
jlong value, jobject entry)
diff -r 91482de10f40 src/java.base/unix/native/libjava/ProcessHandleImpl_unix.c
--- a/src/java.base/unix/native/libjava/ProcessHandleImpl_unix.c Wed Feb 10 14:17:12 2016 -0500
+++ b/src/java.base/unix/native/libjava/ProcessHandleImpl_unix.c Fri Feb 19 03:22:47 2016 +0330
@@ -108,27 +108,6 @@
* functionality into corresponding, platform-specific os_ functions.
*/
-#ifdef __ANDROID__
-/*
- * TODO: Android lacks support for the methods listed below. In it's place are
- * alternatives that use existing Android functionality, but lack reentrant
- * support. Determine if the following are the most suitable alternatives.
- *
- */
-static int getpwuid_r(uid_t uid, struct passwd* pwd, char* buf, size_t buflen, struct passwd** result)
-{
- *result = NULL;
- errno = 0;
- pwd = getpwuid(uid);
- if (pwd == NULL) {
- return errno;
- }
- // buf not used by caller (see below)
- *result = pwd;
- return 0;
-}
-#endif
-
#ifndef WIFEXITED
#define WIFEXITED(status) (((status)&0xFF) == 0)
#endif
diff -r 91482de10f40 src/java.base/unix/native/libnio/fs/UnixNativeDispatcher.c
--- a/src/java.base/unix/native/libnio/fs/UnixNativeDispatcher.c Wed Feb 10 14:17:12 2016 -0500
+++ b/src/java.base/unix/native/libnio/fs/UnixNativeDispatcher.c Fri Feb 19 03:22:47 2016 +0330
@@ -153,66 +153,6 @@
#endif
static fdopendir_func* my_fdopendir_func = NULL;
-#ifdef __ANDROID__
-/*
- * TODO: Android lacks support for the methods listed below. In it's place are
- * alternatives that use existing Android functionality, but lack reentrant
- * support. Determine if the following are the most suitable alternatives.
- *
- */
-static int getpwuid_r(uid_t uid, struct passwd* pwd, char* buf, size_t buflen, struct passwd** result)
-{
- *result = NULL;
- errno = 0;
- pwd = getpwuid(uid);
- if (pwd == NULL) {
- return errno;
- }
- // buf not used by caller (see below)
- *result = pwd;
- return 0;
-}
-
-static int getpwnam_r(const char *name, struct passwd* pwd, char* buf, size_t buflen, struct passwd** result)
-{
- *result = NULL;
- errno = 0;
- pwd = getpwnam(name);
- if (pwd == NULL) {
- return errno;
- }
- // buf not used by caller (see below)
- *result = pwd;
- return 0;
-}
-
-static int getgrgid_r(gid_t gid, struct group* grp, char* buf, size_t buflen, struct group** result)
-{
- *result = NULL;
- errno = 0;
- grp = getgrgid(gid);
- if (grp == NULL) {
- return errno;
- }
- // buf not used by caller (see below)
- *result = grp;
- return 0;
-}
-
-static int getgrnam_r(const char *name, struct group* grp, char* buf, size_t buflen, struct group** result)
-{
- *result = NULL;
- errno = 0;
- grp = getgrnam(name);
- if (grp == NULL) {
- return errno;
- }
- // buf not used by caller (see below)
- *result = grp;
- return 0;
-}
-#endif
-
/**
* fstatat missing from glibc on Linux. Temporary workaround
* for x86/x64.
diff -r 91482de10f40 src/jdk.security.auth/unix/native/libjaas/Unix.c
--- a/src/jdk.security.auth/unix/native/libjaas/Unix.c Wed Feb 10 14:17:12 2016 -0500
+++ b/src/jdk.security.auth/unix/native/libjaas/Unix.c Fri Feb 19 03:22:47 2016 +0330
@@ -38,21 +38,6 @@
#include <string.h>
#include <errno.h>
-#ifdef __ANDROID__
-static int getpwuid_r(uid_t uid, struct passwd* pwd, char* buf, size_t buflen, struct passwd** result)
-{
- *result = NULL;
- errno = 0;
- pwd = getpwuid(uid);
- if (pwd == NULL) {
- return errno;
- }
- // buf not used by caller (see below)
- *result = pwd;
- return 0;
-}
-#endif
-
/*
* Declare library specific JNI_Onload entry if static build
*/
More information about the mobile-dev
mailing list