Art versions in the directory, and where they were build from
-------------------------------------------------------------

See https://source.android.com/source/build-numbers.html for build numbers.

Device names:

  angler: Nexus 6P
  mako: Nexus 4


art (default)
-------------
Build from AOSP branch master. To update to a new AOSP master

  mkdir master
  cd master
  repo init -u https://android.googlesource.com/platform/manifest -b master
  repo sync -cq -j24
  source build/envsetup.sh
  lunch aosp_angler-eng
  m -j24
  m -j24 build-art
  m -j24 test-art-host

Collected into tools/linux/art

  scripts/update-host-art.sh --android-checkout ~/android/master --art-dir art

The precise info for the AOSP master used is in aosp_master_manifest.xml, which is
produced using this command:

  repo manifest -o aosp_master_manifest.xml -r

To reproduce that AOSP state, use the following commands:

  mkdir master
  cd master
  mkdir -p .repo/manifests
  cp <r8-checkout>/aosp_master_manifest.xml .repo/manifests
  repo init -u https://android.googlesource.com/platform/manifest -m aosp_master_manifest.xml
  <continue with repo sync as above>

art-10.0.0 (Android Q)
---------------------
Build from branch android-10.0.0_r14.

export BRANCH=android-10.0.0_r14
mkdir ${BRANCH}
cd ${BRANCH}
repo init -u https://android.googlesource.com/platform/manifest -b ${BRANCH}
repo sync -cq -j24
source build/envsetup.sh
lunch aosp_coral-userdebug
m -j24
m -j24 build-art
m -j24 test-art-host

Collected into tools/linux/art-10.0.0.

  cd <r8 checkout>
  scripts/update-host-art.sh \
     --android-checkout /usr/local/ssd/android/${BRANCH} \
     --art-dir art-10.0.0 \
     --android-product coral

art-9.0.0 (Android P)
---------------------
Build from branch android-9.0.0_r18.

export BRANCH=android-9.0.0_r18
mkdir ${BRANCH}
cd ${BRANCH}
repo init -u https://android.googlesource.com/platform/manifest -b ${BRANCH}
repo sync -cq -j24
source build/envsetup.sh
lunch aosp_marlin-userdebug
m -j24
m -j24 build-art
m -j24 test-art-host

Collected into tools/linux/art-9.0.0.

  cd <r8 checkout>
  scripts/update-host-art.sh \
    --android-checkout /usr/local/ssd/android/${BRANCH} \
    --art-dir art-9.0.0 \
    --android-product marlin

art-8.1.0 (Android O MR1)
-------------------------
Build from branch android-8.1.0_r51.

export BRANCH=android-8.1.0_r51
mkdir ${BRANCH}
cd ${BRANCH}
repo init -u https://android.googlesource.com/platform/manifest -b ${BRANCH}
repo sync -cq -j24
source build/envsetup.sh
lunch aosp_marlin-userdebug
m -j24
m -j24 build-art
m -j24 test-art-host

Collected into tools/linux/art-8.1.0.

  cd <r8 checkout>
  scripts/update-host-art.sh \
    --android-checkout /usr/local/ssd/android/${BRANCH} \
    --art-dir art-8.1.0 \
    --android-product marlin

art-7.0.0
---------
Build from branch android-7.0.0_r21 with the following patch:

diff --git a/runtime/thread.cc b/runtime/thread.cc
index 16f30cded..acdd995e9 100644
--- a/runtime/thread.cc
+++ b/runtime/thread.cc
@@ -554,6 +554,12 @@ void Thread::InstallImplicitProtection() {
   // AddressSanitizer does not like the part of this functions that reads every stack page.
   // Looks a lot like an out-of-bounds access.
 
+  //
+  // Accesses too far below the current machine register corresponding to the stack pointer (e.g.,
+  // ESP on x86[-32], SP on ARM) might cause a SIGSEGV (at least on x86 with newer kernels). We
+  // thus have to move the stack pointer. We do this portably by using a recursive function with a
+  // large stack frame size.
+
   // (Defensively) first remove the protection on the protected region as will want to read
   // and write it. Ignore errors.
   UnprotectStack();
@@ -561,12 +567,26 @@ void Thread::InstallImplicitProtection() {
   VLOG(threads) << "Need to map in stack for thread at " << std::hex <<
       static_cast<void*>(pregion);
 
-  // Read every page from the high address to the low.
-  volatile uint8_t dont_optimize_this;
-  UNUSED(dont_optimize_this);
-  for (uint8_t* p = stack_top; p >= pregion; p -= kPageSize) {
-    dont_optimize_this = *p;
-  }
+  struct RecurseDownStack {
+    // This function has an intentionally large stack size.
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wframe-larger-than="
+    NO_INLINE
+    static void Touch(uintptr_t target) {
+      volatile size_t zero = 0;
+      // Use a large local volatile array to ensure a large frame size. Do not use anything close
+      // to a full page for ASAN. It would be nice to ensure the frame size is at most a page, but
+      // there is no pragma support for this.
+      volatile char space[kPageSize - 256];
+      char sink ATTRIBUTE_UNUSED = space[zero];
+      if (reinterpret_cast<uintptr_t>(space) >= target + kPageSize) {
+        Touch(target);
+      }
+      zero *= 2;  // Try to avoid tail recursion.
+    }
+#pragma GCC diagnostic pop
+  };
+  RecurseDownStack::Touch(reinterpret_cast<uintptr_t>(pregion));
 
   VLOG(threads) << "(again) installing stack protected region at " << std::hex <<
       static_cast<void*>(pregion) << " to " <<


  mkdir 7.0.0_r21
  cd 7.0.0_r21
  repo init -u https://android.googlesource.com/platform/manifest -b android-7.0.0_r21
  repo sync -cq -j24
  source build/envsetup.sh
  lunch aosp_angler-userdebug
  cd art
  <apply patch>
  cd ..
  m -j24
  m -j24 build-art
  m -j24 test-art-host

Collected into tools/linux/art-7.0.0.

  scripts/update-host-art.sh --android-checkout ~/android/7.0.0_r21 --art-dir art-7.0.0


art-6.0.1
---------
Build from branch android-6.0.1_r66 with the following patch:

diff --git a/runtime/thread.cc b/runtime/thread.cc
index 6e8f89cb4..788d717ca 100644
--- a/runtime/thread.cc
+++ b/runtime/thread.cc
@@ -357,20 +357,37 @@ void Thread::InstallImplicitProtection() {
   uint8_t* stack_top = reinterpret_cast<uint8_t*>(reinterpret_cast<uintptr_t>(&stack_himem) &
       ~(kPageSize - 1));    // Page containing current top of stack.
 
+  //
+  // Accesses too far below the current machine register corresponding to the stack pointer (e.g.,
+  // ESP on x86[-32], SP on ARM) might cause a SIGSEGV (at least on x86 with newer kernels). We
+  // thus have to move the stack pointer. We do this portably by using a recursive function with a
+  // large stack frame size.
+
   // First remove the protection on the protected region as will want to read and
   // write it.  This may fail (on the first attempt when the stack is not mapped)
   // but we ignore that.
   UnprotectStack();
 
-  // Map in the stack.  This must be done by reading from the
-  // current stack pointer downwards as the stack may be mapped using VM_GROWSDOWN
-  // in the kernel.  Any access more than a page below the current SP might cause
-  // a segv.
-
-  // Read every page from the high address to the low.
-  for (uint8_t* p = stack_top; p >= pregion; p -= kPageSize) {
-    dont_optimize_this = *p;
-  }
+  struct RecurseDownStack {
+    // This function has an intentionally large stack size.
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wframe-larger-than="
+    NO_INLINE
+    static void Touch(uintptr_t target) {
+      volatile size_t zero = 0;
+      // Use a large local volatile array to ensure a large frame size. Do not use anything close
+      // to a full page for ASAN. It would be nice to ensure the frame size is at most a page, but
+      // there is no pragma support for this.
+      volatile char space[kPageSize - 256];
+      char sink ATTRIBUTE_UNUSED = space[zero];
+      if (reinterpret_cast<uintptr_t>(space) >= target + kPageSize) {
+        Touch(target);
+      }
+      zero *= 2;  // Try to avoid tail recursion.
+    }
+#pragma GCC diagnostic pop
+  };
+  RecurseDownStack::Touch(reinterpret_cast<uintptr_t>(pregion));
 
   VLOG(threads) << "installing stack protected region at " << std::hex <<
       static_cast<void*>(pregion) << " to " <<


  mkdir 6.0.1_r66
  cd 6.0.1_r66
  repo init -u https://android.googlesource.com/platform/manifest -b android-6.0.1_r66
  repo sync -cq -j24
  source build/envsetup.sh
  lunch aosp_angler-userdebug
  cd art
  <apply patch>
  cd ..
  m -j24
  m -j24 build-art
  m -j24 test-art-host

Collected into tools/linux/art-6.0.1.

  scripts/update-host-art.sh --android-checkout ~/android/6.0.1_r66 --art-dir art-6.0.1


art-5.1.1
---------
Build from branch 5.1.1_r19 with the following patch:

diff --git a/runtime/thread.cc b/runtime/thread.cc
index 2f474f7ae..f927ad7a3 100644
--- a/runtime/thread.cc
+++ b/runtime/thread.cc
@@ -257,20 +257,39 @@ void Thread::InstallImplicitProtection() {
   byte* stack_top = reinterpret_cast<byte*>(reinterpret_cast<uintptr_t>(&stack_himem) &
       ~(kPageSize - 1));    // Page containing current top of stack.
 
+  //
+  // Accesses too far below the current machine register corresponding to the stack pointer (e.g.,
+  // ESP on x86[-32], SP on ARM) might cause a SIGSEGV (at least on x86 with newer kernels). We
+  // thus have to move the stack pointer. We do this portably by using a recursive function with a
+  // large stack frame size.
+
   // First remove the protection on the protected region as will want to read and
   // write it.  This may fail (on the first attempt when the stack is not mapped)
   // but we ignore that.
   UnprotectStack();
 
-  // Map in the stack.  This must be done by reading from the
-  // current stack pointer downwards as the stack may be mapped using VM_GROWSDOWN
-  // in the kernel.  Any access more than a page below the current SP might cause
-  // a segv.
-
-  // Read every page from the high address to the low.
-  for (byte* p = stack_top; p >= pregion; p -= kPageSize) {
-    dont_optimize_this = *p;
-  }
+#define NO_INLINE __attribute__ ((noinline))
+#define ATTRIBUTE_UNUSED __attribute__((__unused__))
+  struct RecurseDownStack {
+    // This function has an intentionally large stack size.
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wframe-larger-than="
+    NO_INLINE
+    static void Touch(uintptr_t target) {
+      volatile size_t zero = 0;
+      // Use a large local volatile array to ensure a large frame size. Do not use anything close
+      // to a full page for ASAN. It would be nice to ensure the frame size is at most a page, but
+      // there is no pragma support for this.
+      volatile char space[kPageSize - 256];
+      char sink ATTRIBUTE_UNUSED = space[zero];
+      if (reinterpret_cast<uintptr_t>(space) >= target + kPageSize) {
+        Touch(target);
+      }
+      zero *= 2;  // Try to avoid tail recursion.
+    }
+#pragma GCC diagnostic pop
+  };
+  RecurseDownStack::Touch(reinterpret_cast<uintptr_t>(pregion));
 
   VLOG(threads) << "installing stack protected region at " << std::hex <<
       static_cast<void*>(pregion) << " to " <<


  mkdir 5.1.1_r19
  cd 5.1.1_r19
  repo init -u https://android.googlesource.com/platform/manifest -b android-5.1.1_r19
  repo sync -cq -j24
  source build/envsetup.sh
  lunch aosp_mako-userdebug
  cd art
  <apply patch>
  cd ..
  m -j24
  m -j24 build-art
  m -j24 test-art-host

Collected into tools/linux/art-5.1.1.

  scripts/update-host-art.sh --android-checkout ~/android/5.1.1_r19 --art-dir art-5.1.1 --android-product mako
