Commit 53ed8c41 authored by Steve Fink's avatar Steve Fink
Browse files

Bug 1250709 - Taskcluster-based browser rooting hazard analysis, r=garndt

--HG--
extra : rebase_source : 3223926ea521639f910093e54297eab38e3a60e1
parent 94c649bd
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
# This mozconfig is used when compiling the browser for the SM(Hf) rooting
# hazard analysis build, see
# This mozconfig is used when compiling the browser for the rooting hazard
# analysis build (labeled H on treeherder). See
# https://wiki.mozilla.org/Javascript:SpiderMonkey:ExactStackRooting

# Do NOT include build/unix/mozconfig.linux because it points directly at the
@@ -21,12 +21,13 @@ mk_add_options MOZ_OBJDIR=obj-analyzed
ac_add_options --enable-debug
ac_add_options --enable-tests
ac_add_options --enable-optimize
ac_add_options --with-compiler-wrapper=$(cd $topsrcdir/sixgill/usr/libexec/sixgill/scripts/wrap_gcc && echo $PWD)/basecc
ac_add_options --without-ccache

CFLAGS="$CFLAGS -Wno-attributes"
CPPFLAGS="$CPPFLAGS -Wno-attributes"
CXXFLAGS="$CXXFLAGS -Wno-attributes"

TOOLTOOL_DIR="$(dirname $topsrcdir)"
export PKG_CONFIG_LIBDIR=/usr/lib64/pkgconfig:/usr/share/pkgconfig
. $topsrcdir/build/unix/mozconfig.gtk

+27 −0
Original line number Diff line number Diff line
#!/bin/bash -ex

################################### build-mulet-haz-linux.sh ###################################
# Ensure all the scripts in this dir are on the path....
DIRNAME=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
PATH=$DIRNAME:$PATH

. desktop-setup.sh
. hazard-analysis.sh

build_js_shell

# Artifacts folder is outside of the cache.
mkdir -p $HOME/artifacts/ || true

function onexit () {
    grab_artifacts "$WORKSPACE/analysis" "$HOME/artifacts"
}

trap onexit EXIT

configure_analysis "$WORKSPACE/analysis"
run_analysis "$WORKSPACE/analysis" browser

check_hazards "$WORKSPACE/analysis"

################################### script end ###################################
+1 −1
Original line number Diff line number Diff line
#!/usr/bin/env python
#!/usr/bin/env python2.7

from __future__ import print_function
import sys
+28 −5
Original line number Diff line number Diff line
#!/bin/bash -ex

HAZARD_SHELL_OBJDIR=$MOZ_OBJDIR/obj-haz-shell
[ -n "$WORKSPACE" ]
[ -n "$MOZ_OBJDIR" ]
[ -n "$GECKO_DIR" ]

HAZARD_SHELL_OBJDIR=$WORKSPACE/obj-haz-shell
JS_SRCDIR=$GECKO_DIR/js/src
ANALYSIS_SRCDIR=$JS_SRCDIR/devtools/rootAnalysis

@@ -8,6 +12,11 @@ ANALYSIS_SRCDIR=$JS_SRCDIR/devtools/rootAnalysis
TOOLTOOL_MANIFEST=js/src/devtools/rootAnalysis/build/sixgill.manifest
. install-packages.sh "$GECKO_DIR"

PYTHON=python2.7
if ! which $PYTHON; then
    PYTHON=python
fi

export CC="$GECKO_DIR/gcc/bin/gcc"
export CXX="$GECKO_DIR/gcc/bin/g++"

@@ -45,7 +54,7 @@ function run_analysis () {

    (
        cd "$analysis_dir"
        python "$ANALYSIS_SRCDIR/analyze.py" --buildcommand="$GECKO_DIR/testing/mozharness/scripts/spidermonkey/build.${build_type}"
        $PYTHON "$ANALYSIS_SRCDIR/analyze.py" --buildcommand="$GECKO_DIR/testing/mozharness/scripts/spidermonkey/build.${build_type}"
    )
}

@@ -59,13 +68,16 @@ function grab_artifacts () {
        cd "$analysis_dir"
        ls -lah

        # Do not error out if no files found
        shopt -s nullglob
        set +e
        for f in *.txt *.lst; do
            gzip -9 -c "$f" > "${artifacts}/$f.gz"
        done

        # Check whether the user requested .xdb file upload in the top commit comment

        if hg --cwd "$GECKO_DIR" log -l1 --template '{desc}\n' | grep -q 'haz: --upload-xdbs'; then
        if hg --cwd "$GECKO_DIR" log -l1 --template '{desc}\n' | grep -q -- '--upload-xdbs'; then
            for f in *.xdb; do
                bzip2 -c "$f" > "${artifacts}/$f.bz2"
            done
@@ -74,8 +86,19 @@ function grab_artifacts () {
}

function check_hazards () {
    if grep 'Function.*has unrooted.*live across GC call' "$1"/rootingHazards.txt; then
        echo "TEST-UNEXPECTED-FAIL hazards detected" >&2
    (
    set +e
    NUM_HAZARDS=$(grep -c 'Function.*has unrooted.*live across GC call' "$1"/rootingHazards.txt)
    NUM_UNSAFE=$(grep -c '^Function.*takes unsafe address of unrooted' "$1"/refs.txt)
    NUM_UNNECESSARY=$(grep -c '^Function.* has unnecessary root' "$1"/unnecessary.txt)

    echo "TinderboxPrint: $NUM_HAZARDS rooting hazards"
    echo "TinderboxPrint: $NUM_UNSAFE unsafe references to unrooted GC pointers"
    echo "TinderboxPrint: $NUM_UNSAFE unnecessary roots"

    if [ $NUM_HAZARDS -gt 0 ]; then
        echo "TEST-UNEXPECTED-FAIL $NUM_HAZARDS hazards detected" >&2
        exit 1
    fi
    )
}
+6 −0
Original line number Diff line number Diff line
@@ -75,6 +75,12 @@ builds:
    types:
      opt:
        task: tasks/builds/opt_linux64_st-an_clobber.yml
  linux64-haz:
    platforms:
      - Linux64
    types:
      debug:
        task: tasks/builds/haz_linux.yml
  macosx64:
    platforms:
      - MacOSX64
Loading