summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIan Rogers <irogers@google.com>2014-06-21 22:58:05 -0700
committerIan Rogers <irogers@google.com>2014-06-22 01:30:40 -0700
commit997f0f9e69ce7aee73cebd64be8dc40af9164257 (patch)
tree0d323cec5ae6359fb4dd775a5b539848c930507b
parent87523b6c4df4dd33d4c1e383403e14d6fe06362f (diff)
downloadart-997f0f9e69ce7aee73cebd64be8dc40af9164257.tar.gz
art-997f0f9e69ce7aee73cebd64be8dc40af9164257.tar.bz2
art-997f0f9e69ce7aee73cebd64be8dc40af9164257.zip
Limit the size of files created by run-test to 2MB.
In MemMap::MapAnonymous on the host, avoid creating ashmem regions that are backed by files, when the size of the file will be greater than the ulimit. Change-Id: I7cbf2ac59bf5869ed85850bea8d71898f3b7e1c7
-rw-r--r--runtime/mem_map.cc39
-rw-r--r--test/003-omnibus-opcodes/build2
-rw-r--r--test/056-const-string-jumbo/build2
-rw-r--r--test/303-verification-stress/build2
-rwxr-xr-xtest/run-test13
5 files changed, 42 insertions, 16 deletions
diff --git a/runtime/mem_map.cc b/runtime/mem_map.cc
index 81a86235ec..6c1c86765c 100644
--- a/runtime/mem_map.cc
+++ b/runtime/mem_map.cc
@@ -34,6 +34,9 @@
#ifdef USE_ASHMEM
#include <cutils/ashmem.h>
+#ifndef ANDROID_OS
+#include <sys/resource.h>
+#endif
#endif
namespace art {
@@ -179,20 +182,32 @@ MemMap* MemMap::MapAnonymous(const char* name, byte* expected, size_t byte_count
}
size_t page_aligned_byte_count = RoundUp(byte_count, kPageSize);
+ int flags = MAP_PRIVATE | MAP_ANONYMOUS;
+ ScopedFd fd(-1);
+
#ifdef USE_ASHMEM
- // android_os_Debug.cpp read_mapinfo assumes all ashmem regions associated with the VM are
- // prefixed "dalvik-".
- std::string debug_friendly_name("dalvik-");
- debug_friendly_name += name;
- ScopedFd fd(ashmem_create_region(debug_friendly_name.c_str(), page_aligned_byte_count));
- if (fd.get() == -1) {
- *error_msg = StringPrintf("ashmem_create_region failed for '%s': %s", name, strerror(errno));
- return nullptr;
- }
- int flags = MAP_PRIVATE;
+#ifdef HAVE_ANDROID_OS
+ const bool use_ashmem = true;
#else
- ScopedFd fd(-1);
- int flags = MAP_PRIVATE | MAP_ANONYMOUS;
+ // When not on Android ashmem is faked using files in /tmp. Ensure that such files won't
+ // fail due to ulimit restrictions. If they will then use a regular mmap.
+ struct rlimit rlimit_fsize;
+ CHECK_EQ(getrlimit(RLIMIT_FSIZE, &rlimit_fsize), 0);
+ const bool use_ashmem = (rlimit_fsize.rlim_cur == RLIM_INFINITY) ||
+ (page_aligned_byte_count < rlimit_fsize.rlim_cur);
+#endif
+ if (use_ashmem) {
+ // android_os_Debug.cpp read_mapinfo assumes all ashmem regions associated with the VM are
+ // prefixed "dalvik-".
+ std::string debug_friendly_name("dalvik-");
+ debug_friendly_name += name;
+ fd.reset(ashmem_create_region(debug_friendly_name.c_str(), page_aligned_byte_count));
+ if (fd.get() == -1) {
+ *error_msg = StringPrintf("ashmem_create_region failed for '%s': %s", name, strerror(errno));
+ return nullptr;
+ }
+ flags = MAP_PRIVATE;
+ }
#endif
// We need to store and potentially set an error number for pretty printing of errors
diff --git a/test/003-omnibus-opcodes/build b/test/003-omnibus-opcodes/build
index 9dff837ab6..f909fb2219 100644
--- a/test/003-omnibus-opcodes/build
+++ b/test/003-omnibus-opcodes/build
@@ -22,5 +22,5 @@ ${JAVAC} -d classes `find src -name '*.java'`
rm classes/UnresClass.class
${JAVAC} -d classes `find src2 -name '*.java'`
-${DX} -JXmx256m --debug --dex --dump-to=classes.lst --output=classes.dex classes
+${DX} -JXmx256m --debug --dex --output=classes.dex classes
zip $TEST_NAME.jar classes.dex
diff --git a/test/056-const-string-jumbo/build b/test/056-const-string-jumbo/build
index a12c9d32b5..ef286d140e 100644
--- a/test/056-const-string-jumbo/build
+++ b/test/056-const-string-jumbo/build
@@ -42,5 +42,5 @@ function writeFile(name, start, end) {
mkdir classes
${JAVAC} -d classes src/*.java
-${DX} -JXmx500m --debug --dex --no-optimize --positions=none --no-locals --dump-to=classes.lst --output=classes.dex classes
+${DX} -JXmx500m --debug --dex --no-optimize --positions=none --no-locals --output=classes.dex classes
zip $TEST_NAME.jar classes.dex
diff --git a/test/303-verification-stress/build b/test/303-verification-stress/build
index 2ef9beafd1..c1935d2e9b 100644
--- a/test/303-verification-stress/build
+++ b/test/303-verification-stress/build
@@ -24,5 +24,5 @@ gcc -o classes-gen classes-gen.c
mkdir classes
${JAVAC} -d classes src/*.java
-${DX} --debug --dex --dump-to=classes.lst --output=classes.dex classes
+${DX} --debug --dex --output=classes.dex classes
zip $TEST_NAME.jar classes.dex
diff --git a/test/run-test b/test/run-test
index 34b06cc3a1..d1c5bb2360 100755
--- a/test/run-test
+++ b/test/run-test
@@ -298,6 +298,17 @@ chmod 755 "$run"
export TEST_NAME=`basename ${test_dir}`
+# To cause tests to fail fast, limit the file sizes created by dx, dex2oat and ART output to 2MB.
+file_size_limit=2048
+if echo "$test_dir" | grep 089; then
+ file_size_limit=5120
+elif echo "$test_dir" | grep 083; then
+ file_size_limit=5120
+fi
+if ! ulimit "$file_size_limit"; then
+ echo "ulimit file size setting failed"
+fi
+
good="no"
if [ "$dev_mode" = "yes" ]; then
"./${build}" 2>&1
@@ -376,7 +387,7 @@ fi
echo '#################### info'
cat "${td_info}" | sed 's/^/# /g'
echo '#################### diffs'
- diff --strip-trailing-cr -u "$expected" "$output"
+ diff --strip-trailing-cr -u "$expected" "$output" | tail -n 500
echo '####################'
echo ' '
fi