1b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#!/bin/bash 2b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch# Copyright 2012 the V8 project authors. All rights reserved. 3b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch# Redistribution and use in source and binary forms, with or without 4b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch# modification, are permitted provided that the following conditions are 5b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch# met: 6b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch# 7b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch# * Redistributions of source code must retain the above copyright 8b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch# notice, this list of conditions and the following disclaimer. 9b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch# * Redistributions in binary form must reproduce the above 10b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch# copyright notice, this list of conditions and the following 11b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch# disclaimer in the documentation and/or other materials provided 12b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch# with the distribution. 13b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch# * Neither the name of Google Inc. nor the names of its 14b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch# contributors may be used to endorse or promote products derived 15b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch# from this software without specific prior written permission. 16b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch# 17b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 18b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 19b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 20b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 21b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 22b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 29b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch# A simple harness that downloads and runs 'jsfunfuzz' against d8. This 30b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch# takes a long time because it runs many iterations and is intended for 31b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch# automated usage. The package containing 'jsfunfuzz' can be found as an 32b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch# attachment to this bug: 33b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch# https://bugzilla.mozilla.org/show_bug.cgi?id=jsfunfuzz 34b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 35b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochJSFUNFUZZ_URL="https://bugzilla.mozilla.org/attachment.cgi?id=310631" 36b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochJSFUNFUZZ_MD5="d0e497201c5cd7bffbb1cdc1574f4e32" 37b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 38b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochv8_root=$(readlink -f $(dirname $BASH_SOURCE)/../) 39b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 40b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochif [ -n "$1" ]; then 41b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch d8="${v8_root}/$1" 42b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochelse 43b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch d8="${v8_root}/d8" 44b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochfi 45b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 46b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochif [ ! -f "$d8" ]; then 47b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch echo "Failed to find d8 binary: $d8" 48b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch exit 1 49b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochfi 50b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 51b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochjsfunfuzz_file="$v8_root/tools/jsfunfuzz.zip" 52b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochif [ ! -f "$jsfunfuzz_file" ]; then 53b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch echo "Downloading $jsfunfuzz_file ..." 54b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch wget -q -O "$jsfunfuzz_file" $JSFUNFUZZ_URL || exit 1 55b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochfi 56b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 57b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochjsfunfuzz_sum=$(md5sum "$jsfunfuzz_file" | awk '{ print $1 }') 58b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochif [ $jsfunfuzz_sum != $JSFUNFUZZ_MD5 ]; then 59b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch echo "Failed to verify checksum!" 60b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch exit 1 61b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochfi 62b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 63b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochjsfunfuzz_dir="$v8_root/tools/jsfunfuzz" 64b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochif [ ! -d "$jsfunfuzz_dir" ]; then 65b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch echo "Unpacking into $jsfunfuzz_dir ..." 66b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch unzip "$jsfunfuzz_file" -d "$jsfunfuzz_dir" || exit 1 67b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch echo "Patching runner ..." 68b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch cat << EOF | patch -s -p0 -d "$v8_root" 69b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch--- tools/jsfunfuzz/jsfunfuzz/multi_timed_run.py~ 70b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch+++ tools/jsfunfuzz/jsfunfuzz/multi_timed_run.py 71b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch@@ -125,7 +125,7 @@ 72b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 73b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch def many_timed_runs(): 74b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch iteration = 0 75b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch- while True: 76b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch+ while iteration < 100: 77b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch iteration += 1 78b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch logfilename = "w%d" % iteration 79b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch one_timed_run(logfilename) 80b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochEOF 81b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochfi 82b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 83b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochflags='--debug-code --expose-gc --verify-gc' 84b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochpython -u "$jsfunfuzz_dir/jsfunfuzz/multi_timed_run.py" 300 \ 85b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch "$d8" $flags "$jsfunfuzz_dir/jsfunfuzz/jsfunfuzz.js" 86b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochexit_code=$(cat w* | grep " looking good" -c) 87b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochexit_code=$((100-exit_code)) 88014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdocharchive=fuzz-results-$(date +%Y%m%d%H%M%S).tar.bz2 89014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochecho "Creating archive $archive" 90014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochtar -cjf $archive err-* w* 91b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochrm -f err-* w* 92b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 93b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochecho "Total failures: $exit_code" 94b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochexit $exit_code 95