blob: b22089b6120eb3cd06b0f63d9ef8320f4de83c03 [file] [log] [blame]
# -*- python -*-
# Copyright (c) 2011 The Native Client Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
Import('env')
# tests in this directory contain (inline) assembler
if env.Bit('bitcode'):
Return()
if not env.IsRunningUnderValgrind():
Return()
if env.Bit('nacl_glibc'):
golden = env.File('memcheck_test.glibc.stderr.golden')
else:
golden = env.File('memcheck_test.stderr.golden')
memcheck_test_nexe = env.ComponentProgram('memcheck_test', 'memcheck_test.c',
EXTRA_LIBS=['${NONIRT_LIBS}'])
node = env.CommandSelLdrTestNacl(
'memcheck_test.out',
memcheck_test_nexe,
stderr_golden=golden,
filter_group_only='true',
filter_regex=(
"'(Invalid [a-z]+ of size .+)|"
"( at )0x[01-9A-Fa-f]+: ([_a-zA-Z][_a-zA-Z01-9]+) \([^(]*\)|"
"( by )0x[01-9A-Fa-f]+: ([_a-zA-Z][_a-zA-Z01-9]+) \([^(]*\)|"
"( Address) 0x[01-9A-Fa-f]+( is.+)|"
"( Conditional jump or move depends.+)|"
"(VG_USERREQ__CLIENT_CALL.+)|"
"( .*BACKTRACE:)|"
"(ERROR SUMMARY: [01-9]+ errors from [01-9]+ contexts)|"
"(strcmp: .*)'"),
exit_status='1',
)
# Assume that if we are specifying a special memcheck command (e.g., a
# copy of valgrind built from valgrind.org sources, without the
# NaCl-specific patches to check untrusted code), then this test will
# not work.
env.AddNodeToTestSuite(node, ['memcheck_bot_tests'], 'run_memcheck_test',
is_broken=ARGUMENTS.get('memcheck_command') is not None)
# Leak checker sanity test.
if env.Bit('with_leakcheck'):
if ARGUMENTS.get('memcheck_trusted_only', ''):
# Bogus leak_test, since the buildbot_valgrind.sh script runs with
# run_leak_test as an explicit target, so declaring it broken with
# the is_broken mechanism does not work. This is needed when
# memcheck_command is used to have testing done using a version of
# Valgrind that does not have the NaCl patches needed to trace
# into leaks in untrusted code. See
# http://code.google.com/p/nativeclient/issues/detail?id=3158 for
# more information.
#
# TODO(evgeniy): decide whether this is useful in the long term,
# e.g., whether Valgrind/DWARF changes will again require its use,
# and if not, remove.
node = env.Command('leak_test.out',
'/bin/true',
'/bin/true') # posix only but valgrind only runs there
else:
leak_test_nexe = env.ComponentProgram('leak_test', 'leak_test.c',
EXTRA_LIBS=['${NONIRT_LIBS}',
'${PTHREAD_LIBS}'])
node = env.CommandSelLdrTestNacl(
'leak_test.out',
leak_test_nexe,
stderr_golden=env.File('leak_test.stderr.golden'),
filter_group_only='true',
filter_regex=(
"'(7,931,147 bytes in 1 blocks are definitely lost).*'"),
exit_status='1',
)
env.AddNodeToTestSuite(node, ['memcheck_bot_tests'], 'run_leak_test')