d16a2a6884
Make sure gcmole detects issue in DisallowGarbageCollection scopes. DisallowGarbageCollection is widely used in the codebase to document code that doesn't allocate. However, this has the rather unexpected side-effect that gcmole is not run when such a scope is active. This CL changes the default behavior of gcmole to run even with DisallowGarbageCollection scopes present. This will give us the best results of both worlds, dynamic checks by the fuzzer, and static analysis by gcmole. To allow crazy local raw pointer operations there is a new DisableGCMole scope that explicitly disables gcmole. Change-Id: I0a78fb3b4ceaad35be9bcf7293d917a41f90c91f Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2615419 Reviewed-by: Jakob Gruber <jgruber@chromium.org> Reviewed-by: Maya Lekova <mslekova@chromium.org> Commit-Queue: Camillo Bruni <cbruni@chromium.org> Cr-Commit-Position: refs/heads/master@{#72039}
69 lines
2.2 KiB
Bash
Executable File
69 lines
2.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# Copyright 2019 the V8 project authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
# This script will package a built gcmole plugin together with the
|
|
# corresponding clang binary into an archive which can be used on the
|
|
# buildbot infrastructure to be run against V8 checkouts.
|
|
|
|
THIS_DIR="$(readlink -f "$(dirname "${0}")")"
|
|
|
|
PACKAGE_DIR="${THIS_DIR}/gcmole-tools"
|
|
PACKAGE_FILE="${THIS_DIR}/gcmole-tools.tar.gz"
|
|
PACKAGE_SUM="${THIS_DIR}/gcmole-tools.tar.gz.sha1"
|
|
BUILD_DIR="${THIS_DIR}/bootstrap/build"
|
|
|
|
# Echo all commands
|
|
set -x
|
|
|
|
# Clean out any old files
|
|
if [ -e "${PACKAGE_DIR:?}/bin" ] ; then
|
|
rm -rf "${PACKAGE_DIR:?}/bin"
|
|
fi
|
|
if [ -e "${PACKAGE_DIR:?}/lib" ] ; then
|
|
rm -rf "${PACKAGE_DIR:?}/lib"
|
|
fi
|
|
|
|
# Copy all required files
|
|
mkdir -p "${PACKAGE_DIR}/bin"
|
|
cp "${BUILD_DIR}/bin/clang++" "${PACKAGE_DIR}/bin"
|
|
mkdir -p "${PACKAGE_DIR}/lib"
|
|
cp -r "${BUILD_DIR}/lib/clang" "${PACKAGE_DIR}/lib"
|
|
cp "${THIS_DIR}/libgcmole.so" "${PACKAGE_DIR}"
|
|
|
|
# Generate the archive
|
|
cd "$(dirname "${PACKAGE_DIR}")"
|
|
tar -c -z -f "${PACKAGE_FILE}" "$(basename "${PACKAGE_DIR}")"
|
|
|
|
# Generate checksum
|
|
sha1sum "${PACKAGE_FILE}" | awk '{print $1}' > "${PACKAGE_SUM}"
|
|
|
|
set +x
|
|
|
|
echo
|
|
echo You can find a packaged version of gcmole here:
|
|
echo
|
|
echo $(readlink -f "${PACKAGE_FILE}")
|
|
echo
|
|
echo Upload the update package to the chrome infra:
|
|
echo
|
|
echo 'gsutil.py cp tools/gcmole/gcmole-tools.tar.gz gs://chrome-v8-gcmole/$(cat tools/gcmole/gcmole-tools.tar.gz.sha1)'
|
|
echo
|
|
echo Run bootstrap.sh in chroot if glibc versions mismatch with bots:
|
|
echo '# Create chroot'
|
|
echo 'mkdir -p $CHROOT_DIR'
|
|
echo 'sudo debootstrap $DEBIAN_VERSION $CHROOT_DIR'
|
|
echo 'sudo chroot $CHROOT_DIR apt install g++ cmake python git'
|
|
echo '# Mount ./depot_tools and ./v8 dirs in the chroot:'
|
|
echo 'sudo chroot $CHROOT_DIR mkdir /docs'
|
|
echo 'sudo mount --bind /path/to/workspace /docs'
|
|
echo '# Build gcmole'
|
|
echo "sudo chroot \$CHROOT_DIR bash -c 'PATH=/docs/depot_tools:\$PATH; /docs/v8/v8/tools/gcmole/bootstrap.sh'"
|
|
echo
|
|
echo You can now run gcmole using this command:
|
|
echo
|
|
echo CLANG_BIN=\"tools/gcmole/gcmole-tools/bin\" python tools/gcmole/gcmole.py
|
|
echo
|