[tor-commits] [tor-browser-build/master] Bug 28469: Fix unsupported libbacktrace in Rust 1.26
gk at torproject.org
gk at torproject.org
Fri Nov 16 09:41:06 UTC 2018
commit d4215cdbc472573bafe020532ebfcfb491e7615f
Author: sisbell <shane.isbell at gmail.com>
Date: Fri Nov 16 07:19:03 2018 +0000
Bug 28469: Fix unsupported libbacktrace in Rust 1.26
---
...e-dl_iterate_phdr-is-undefined-on-Android.patch | 34 +++++++++++++++++
projects/rust/build | 5 +++
projects/rust/config | 6 ++-
projects/rust/replace_pagesize_in_mmap.patch | 44 ++++++++++++++++++++++
4 files changed, 88 insertions(+), 1 deletion(-)
diff --git a/projects/rust/0001-Make-sure-dl_iterate_phdr-is-undefined-on-Android.patch b/projects/rust/0001-Make-sure-dl_iterate_phdr-is-undefined-on-Android.patch
new file mode 100644
index 0000000..75cd657
--- /dev/null
+++ b/projects/rust/0001-Make-sure-dl_iterate_phdr-is-undefined-on-Android.patch
@@ -0,0 +1,34 @@
+From 4fa67c8a014ac10558be71edec9048851ca7a02d Mon Sep 17 00:00:00 2001
+From: Georg Koppen <gk at torproject.org>
+Date: Thu, 15 Nov 2018 19:04:46 +0000
+Subject: [PATCH] Make sure `dl_iterate_phdr` is undefined on Android
+
+If we build with API < 21 we'll run into undefined reference errors.
+We follow the Rust people who ran into similar issues when
+upgrading libbacktrace for 1.28.0 in making sure `dl_iterate_phdr` is
+not defined for Android.
+
+diff --git a/src/libbacktrace/configure b/src/libbacktrace/configure
+index 8bdb29d256..8941fcd2b0 100755
+--- a/src/libbacktrace/configure
++++ b/src/libbacktrace/configure
+@@ -12397,7 +12397,15 @@ rm -f conftest*
+ have_dl_iterate_phdr=no ;;
+ esac
+ else
+- ac_fn_c_check_func "$LINENO" "dl_iterate_phdr" "ac_cv_func_dl_iterate_phdr"
++ case "${host}" in
++ *-*-androideabi*)
++ # Avoid dl_iterate_phdr on older Android API (which we use),
++ # as defining it causes undefined reference errors when
++ # compiling Firefox later on.
++ have_dl_iterate_phdr=no ;;
++ *) ac_fn_c_check_func "$LINENO" "dl_iterate_phdr" "ac_cv_func_dl_iterate_phdr" ;;
++ esac
++
+ if test "x$ac_cv_func_dl_iterate_phdr" = x""yes; then :
+ have_dl_iterate_phdr=yes
+ else
+--
+2.19.1
+
diff --git a/projects/rust/build b/projects/rust/build
index 7ae3073..12f012a 100644
--- a/projects/rust/build
+++ b/projects/rust/build
@@ -62,6 +62,11 @@ cd /var/tmp/build/rustc-[% c('version') %]-src
patch -p1 < $rootdir/unwind.patch
[% END %]
+[% IF c("var/android") %]
+ patch -p1 < $rootdir/0001-Make-sure-dl_iterate_phdr-is-undefined-on-Android.patch
+ patch -p1 < $rootdir/replace_pagesize_in_mmap.patch
+[% END %]
+
mkdir build
cd build
../configure --prefix=$distdir [% c("var/configure_opt") %]
diff --git a/projects/rust/config b/projects/rust/config
index 83ae690..99d1177 100644
--- a/projects/rust/config
+++ b/projects/rust/config
@@ -22,7 +22,7 @@ targets:
- libssl-dev
- pkg-config
- zlib1g-dev
- configure_opt: --enable-local-rust --enable-vendor --enable-extended --release-channel=stable --sysconfdir=etc --target=armv7-linux-androideabi --set=target.armv7-linux-androideabi.ar=$ANDROID_NDK_HOME/arm/bin/arm-linux-androideabi-ar --set=target.armv7-linux-androideabi.linker=$ANDROID_NDK_HOME/arm/bin/arm-linux-androideabi-clang --set=target.armv7-linux-androideabi.cc=$ANDROID_NDK_HOME/arm/bin/arm-linux-androideabi-gcc
+ configure_opt: --enable-local-rust --enable-vendor --enable-extended --release-channel=stable --sysconfdir=etc --target=armv7-linux-androideabi --set=target.armv7-linux-androideabi.cc=$ANDROID_NDK_HOME/arm/bin/arm-linux-androideabi-gcc
linux:
var:
@@ -90,3 +90,7 @@ input_files:
gpg_keyring: rust.gpg
- filename: unwind.patch
enable: '[% c("var/windows-i686") %]'
+ - filename: 0001-Make-sure-dl_iterate_phdr-is-undefined-on-Android.patch
+ enable: '[% c("var/android") %]'
+ - filename: replace_pagesize_in_mmap.patch
+ enable: '[% c("var/android") %]'
diff --git a/projects/rust/replace_pagesize_in_mmap.patch b/projects/rust/replace_pagesize_in_mmap.patch
new file mode 100644
index 0000000..598f190
--- /dev/null
+++ b/projects/rust/replace_pagesize_in_mmap.patch
@@ -0,0 +1,44 @@
+diff --git a/src/libbacktrace/mmap.c b/src/libbacktrace/mmap.c
+index 138ef70711..e3c4cd2643 100644
+--- a/src/libbacktrace/mmap.c
++++ b/src/libbacktrace/mmap.c
+@@ -140,7 +140,7 @@ backtrace_alloc (struct backtrace_state *state,
+ {
+ /* Allocate a new page. */
+
+- pagesize = getpagesize ();
++ pagesize = sysconf(_SC_PAGESIZE);
+ asksize = (size + pagesize - 1) & ~ (pagesize - 1);
+ page = mmap (NULL, asksize, PROT_READ | PROT_WRITE,
+ MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+@@ -181,7 +181,7 @@ backtrace_free (struct backtrace_state *state, void *addr, size_t size,
+ {
+ size_t pagesize;
+
+- pagesize = getpagesize ();
++ pagesize = sysconf(_SC_PAGESIZE);
+ if (((uintptr_t) addr & (pagesize - 1)) == 0
+ && (size & (pagesize - 1)) == 0)
+ {
+@@ -226,7 +226,7 @@ backtrace_vector_grow (struct backtrace_state *state,size_t size,
+ size_t alc;
+ void *base;
+
+- pagesize = getpagesize ();
++ pagesize = sysconf(_SC_PAGESIZE);
+ alc = vec->size + size;
+ if (vec->size == 0)
+ alc = 16 * size;
+diff --git a/src/libbacktrace/mmapio.c b/src/libbacktrace/mmapio.c
+index dfdaf6fa52..5b23003090 100644
+--- a/src/libbacktrace/mmapio.c
++++ b/src/libbacktrace/mmapio.c
+@@ -60,7 +60,7 @@ backtrace_get_view (struct backtrace_state *state ATTRIBUTE_UNUSED,
+ off_t pageoff;
+ void *map;
+
+- pagesize = getpagesize ();
++ pagesize = sysconf(_SC_PAGESIZE);
+ inpage = offset % pagesize;
+ pageoff = offset - inpage;
+
More information about the tor-commits
mailing list