From 8762c7698cc380d33042fa9e0b8ee9704a842281 Mon Sep 17 00:00:00 2001 From: hyc Date: Wed, 26 Apr 2017 01:25:33 +0100 Subject: Preliminary bionic/Android support Mostly from Crystax NDK --- config/libc/bionic.in | 183 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 183 insertions(+) create mode 100644 config/libc/bionic.in (limited to 'config') diff --git a/config/libc/bionic.in b/config/libc/bionic.in new file mode 100644 index 00000000..20697add --- /dev/null +++ b/config/libc/bionic.in @@ -0,0 +1,183 @@ +# bionic options + +## depends on ! WINDOWS && ! BARE_METAL +## depends on ARCH_arm || ARCH_mips || ARCH_x86 +## +## select LIBC_SUPPORT_THREADS_POSIX +## +## help Bionic is the Android C library. It is prebuilt. + +config THREADS + default "posix" + +config LIBC_BIONIC_CUSTOM + bool + prompt "Custom bionic" + help + The chosen bionic-libc version shall be not downloaded. Instead use + a custom location to get the source. + +if LIBC_BIONIC_CUSTOM + +config LIBC_BIONIC_CUSTOM_LOCATION + string + prompt "Full path to custom bionic source" + help + Enter the path to the directory or tarball of your source for bionic. + + If the path is a zip archive, it should extract to: -/ + where the name is android-ndk, and the version is set + below in the custom version string. + +config LIBC_BIONIC_CUSTOM_VERSION + string + prompt "Custom BIONIC version" + help + Enter the version number for your custom bionic. + +config LIBC_VERSION + string + default LIBC_BIONIC_CUSTOM_VERSION + +endif # LIBC_BIONIC_CUSTOM + +if ! LIBC_BIONIC_CUSTOM + +choice + bool + prompt "bionic version" +# Don't remove next line +# CT_INSERT_VERSION_BELOW + +config LIBC_BIONIC_V_15beta1 + bool + prompt "15beta1" + +config LIBC_BIONIC_V_14b + bool + prompt "14b" + +config LIBC_BIONIC_V_13b + bool + prompt "13b (OBSOLETE)" + depends on OBSOLETE + +config LIBC_BIONIC_V_12b + bool + prompt "12b (OBSOLETE)" + depends on OBSOLETE + +config LIBC_BIONIC_V_11c + bool + prompt "11c (OBSOLETE)" + depends on OBSOLETE + +config LIBC_BIONIC_V_10e + bool + prompt "10e (OBSOLETE)" + depends on OBSOLETE + +endchoice + +config LIBC_VERSION + string +# Don't remove next line +# CT_INSERT_VERSION_STRING_BELOW + default "r15-beta1" if LIBC_BIONIC_V_15beta1 + default "r14b" if LIBC_BIONIC_V_14b + default "r13b" if LIBC_BIONIC_V_13b + default "r12b" if LIBC_BIONIC_V_12b + default "r11c" if LIBC_BIONIC_V_11c + default "r10e" if LIBC_BIONIC_V_10e + +endif # ! LIBC_BIONIC_CUSTOM + +choice + bool + prompt "Android API level" + help + The minimum for 64 bit support is 21. +# Don't remove next line +# CT_INSERT_VERSION_BELOW + +config ANDROID_API_24 + bool + prompt "24" + +config ANDROID_API_23 + bool + prompt "23" + +config ANDROID_API_22 + bool + prompt "22" + +config ANDROID_API_21 + bool + prompt "21" + +config ANDROID_API_19 + bool + prompt "19" + depends on ARCH_32 + +config ANDROID_API_18 + bool + prompt "18" + depends on ARCH_32 + +config ANDROID_API_17 + bool + prompt "17" + depends on ARCH_32 + +config ANDROID_API_16 + bool + prompt "16" + depends on ARCH_32 + +config ANDROID_API_15 + bool + prompt "15" + depends on ARCH_32 + +config ANDROID_API_14 + bool + prompt "14" + depends on ARCH_32 + +config ANDROID_API_13 + bool + prompt "13" + depends on ARCH_32 + +config ANDROID_API_12 + bool + prompt "12" + depends on ARCH_32 + +config ANDROID_API_9 + bool + prompt "9" + depends on ARCH_32 + +endchoice + +config ANDROID_API + string +# Don't remove next line +# CT_INSERT_VERSION_STRING_BELOW + default "24" if ANDROID_API_24 + default "23" if ANDROID_API_23 + default "22" if ANDROID_API_22 + default "21" if ANDROID_API_21 + default "19" if ANDROID_API_19 + default "18" if ANDROID_API_18 + default "17" if ANDROID_API_17 + default "16" if ANDROID_API_16 + default "15" if ANDROID_API_15 + default "14" if ANDROID_API_14 + default "13" if ANDROID_API_13 + default "12" if ANDROID_API_12 + default "9" if ANDROID_API_9 + -- cgit v1.2.3 From a6e11562c46d9228ad70a84f7f0031b342078944 Mon Sep 17 00:00:00 2001 From: hyc Date: Wed, 26 Apr 2017 03:04:07 +0100 Subject: Tweaks for bionic/TLS --- config/cc/gcc.in.2 | 1 + config/libc/bionic.in | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) (limited to 'config') diff --git a/config/cc/gcc.in.2 b/config/cc/gcc.in.2 index c147f05e..963cb2a2 100644 --- a/config/cc/gcc.in.2 +++ b/config/cc/gcc.in.2 @@ -94,6 +94,7 @@ config CC_GCC_SYSTEM_ZLIB config CC_GCC_CONFIG_TLS tristate prompt "Configure TLS (Thread Local Storage)" + depends on !LIBC_bionic default m help Specify that the target supports TLS (Thread Local Storage). Usually diff --git a/config/libc/bionic.in b/config/libc/bionic.in index 20697add..b6b7af58 100644 --- a/config/libc/bionic.in +++ b/config/libc/bionic.in @@ -5,7 +5,9 @@ ## ## select LIBC_SUPPORT_THREADS_POSIX ## -## help Bionic is the Android C library. It is prebuilt. +## help Bionic is the Android C library. It is prebuilt, extracted from the Android NDK. +## help This platform has no TLS (Thread Local Storage) support so that option must be +## help disabled in the Compiler options. config THREADS default "posix" -- cgit v1.2.3 From 24b3fca91064cd25953d06c8a240fbb9ccc21fc7 Mon Sep 17 00:00:00 2001 From: Alexey Neyman Date: Sun, 14 May 2017 15:22:35 -0700 Subject: Mark bionic EXPERIMENTAL and dependent on GCC6+ Signed-off-by: Alexey Neyman --- config/libc/bionic.in | 2 ++ 1 file changed, 2 insertions(+) (limited to 'config') diff --git a/config/libc/bionic.in b/config/libc/bionic.in index b6b7af58..9e041300 100644 --- a/config/libc/bionic.in +++ b/config/libc/bionic.in @@ -2,6 +2,8 @@ ## depends on ! WINDOWS && ! BARE_METAL ## depends on ARCH_arm || ARCH_mips || ARCH_x86 +## depends on EXPERIMENTAL +## depends on CC_GCC_6_or_later ## ## select LIBC_SUPPORT_THREADS_POSIX ## -- cgit v1.2.3 From 97a20eed5c3cf3a2f7bb261705405b8b16c56b36 Mon Sep 17 00:00:00 2001 From: Alexey Neyman Date: Sun, 14 May 2017 18:46:34 -0700 Subject: Disallow duma/ltrace/strace for bionic Allow cross-gdb and gdbserver. This requires removal of an explicit check that disables gdbserver on android. However, the comment above that check refers to exec_elf.h, which has been removed since API level 19. It builds fine with current selection of the sample (21). Only build-tested, hope someone can give it a try and report back. We can fine tune the check for GDB but I'll leave it for now. Signed-off-by: Alexey Neyman --- config/debug/duma.in | 1 + config/debug/gdb.in.native | 1 + config/debug/ltrace.in | 1 + config/debug/strace.in | 2 ++ patches/gdb/7.12.1/200-allow-android.patch | 42 ++++++++++++++++++++++ .../aarch64-unknown-linux-android/crosstool.config | 2 ++ 6 files changed, 49 insertions(+) create mode 100644 patches/gdb/7.12.1/200-allow-android.patch (limited to 'config') diff --git a/config/debug/duma.in b/config/debug/duma.in index 170a6945..f9e727b8 100644 --- a/config/debug/duma.in +++ b/config/debug/duma.in @@ -1,6 +1,7 @@ # D.U.M.A. - Detect Unintended Memory Access - Memory checker ## depends on ! BARE_METAL +## depends on ! LIBC_bionic ## help D.U.M.A. - Detect Unintended Memory Access ## help A memory bound checker, with additional features. diff --git a/config/debug/gdb.in.native b/config/debug/gdb.in.native index e856b5da..faee8c3d 100644 --- a/config/debug/gdb.in.native +++ b/config/debug/gdb.in.native @@ -4,6 +4,7 @@ config GDB_NATIVE bool prompt "Native gdb" depends on ! BARE_METAL + depends on ! LIBC_bionic select EXPAT_TARGET select NCURSES_TARGET help diff --git a/config/debug/ltrace.in b/config/debug/ltrace.in index 4c626764..fab6b81f 100644 --- a/config/debug/ltrace.in +++ b/config/debug/ltrace.in @@ -1,6 +1,7 @@ # ltrace ## select LIBELF_TARGET +## depends on ! LIBC_bionic ## ## help ltrace is a program that simply runs the specified command until it exits. ## help It intercepts and records the dynamic library calls which are called by diff --git a/config/debug/strace.in b/config/debug/strace.in index 38dd96fd..e77702bf 100644 --- a/config/debug/strace.in +++ b/config/debug/strace.in @@ -1,5 +1,7 @@ # strace +## depends on ! LIBC_bionic + choice bool prompt "strace version" diff --git a/patches/gdb/7.12.1/200-allow-android.patch b/patches/gdb/7.12.1/200-allow-android.patch new file mode 100644 index 00000000..7954477c --- /dev/null +++ b/patches/gdb/7.12.1/200-allow-android.patch @@ -0,0 +1,42 @@ +diff -urpN gdb-7.12.1.orig/gdb/gdbserver/configure gdb-7.12.1/gdb/gdbserver/configure +--- gdb-7.12.1.orig/gdb/gdbserver/configure 2017-05-14 17:02:46.742711695 -0700 ++++ gdb-7.12.1/gdb/gdbserver/configure 2017-05-14 17:03:22.147058607 -0700 +@@ -6671,17 +6671,6 @@ fi + + + case "${target}" in +- *-android*) +- # Starting with NDK version 9, actually includes definitions +- # of Elf32_auxv_t and Elf64_auxv_t. But sadly, includes +- # which defines some of the ELF types incorrectly, +- # leading to conflicts with the defintions from . +- # This makes it impossible for us to include both and +- # , which means that, in practice, we do not have +- # access to Elf32_auxv_t and Elf64_auxv_t on this platform. +- # Therefore, do not try to auto-detect availability, as it would +- # get it wrong on this platform. +- ;; + *) + ac_fn_c_check_type "$LINENO" "Elf32_auxv_t" "ac_cv_type_Elf32_auxv_t" "#include + +diff -urpN gdb-7.12.1.orig/gdb/gdbserver/configure.ac gdb-7.12.1/gdb/gdbserver/configure.ac +--- gdb-7.12.1.orig/gdb/gdbserver/configure.ac 2017-05-14 17:02:46.742711695 -0700 ++++ gdb-7.12.1/gdb/gdbserver/configure.ac 2017-05-14 17:03:53.219361720 -0700 +@@ -179,17 +179,6 @@ AC_CHECK_TYPES(socklen_t, [], [], + ]) + + case "${target}" in +- *-android*) +- # Starting with NDK version 9, actually includes definitions +- # of Elf32_auxv_t and Elf64_auxv_t. But sadly, includes +- # which defines some of the ELF types incorrectly, +- # leading to conflicts with the defintions from . +- # This makes it impossible for us to include both and +- # , which means that, in practice, we do not have +- # access to Elf32_auxv_t and Elf64_auxv_t on this platform. +- # Therefore, do not try to auto-detect availability, as it would +- # get it wrong on this platform. +- ;; + *) + AC_CHECK_TYPES([Elf32_auxv_t, Elf64_auxv_t], [], [], + #include diff --git a/samples/aarch64-unknown-linux-android/crosstool.config b/samples/aarch64-unknown-linux-android/crosstool.config index 339819c0..295b219a 100644 --- a/samples/aarch64-unknown-linux-android/crosstool.config +++ b/samples/aarch64-unknown-linux-android/crosstool.config @@ -1,3 +1,4 @@ +CT_EXPERIMENTAL=y CT_ARCH_arm=y CT_ARCH_64=y CT_ARCH_ARCH="armv8-a" @@ -6,4 +7,5 @@ CT_KERNEL_linux=y CT_LIBC_BIONIC_V_14b=y CT_ANDROID_API_21=y CT_CC_LANG_CXX=y +CT_DEBUG_gdb=y CT_GETTEXT=y -- cgit v1.2.3