blob: bd63951ff7f53d96b1cf3e95b59b37804bb85f0a [file] [log] [blame]
# -*- python -*-
# Copyright (c) 2012 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')
# Use of "-nostdlib" means these tests produce statically-linked
# executables. This does not work with the test runner for
# nacl-glibc, which always runs the executables via ld.so. However,
# we want to keep building the tests.
# TODO(mseaborn): To fix this, either switch these tests to
# dynamically link against libc, or make use of ld.so optional.
is_glibc = env.Bit('nacl_glibc')
env.Replace(LIBS=[],
EXTRA_LIBS=[],
LINKFLAGS=['-nostdlib'])
# This can generate references to runtime code we won't link with.
env.FilterOut(CCFLAGS=['-fasynchronous-unwind-tables'])
# This setting will affect the barebones_regs.c test
if env.Bit('build_arm'):
env.Append(CPPDEFINES='SMALL_REGS_TEST')
# NOTE: the x86 linker wants _start() to be the very first function
FAKE_STARTUP = env.ComponentObject('fake_startup', 'fake_startup.c')
barebones_tests = ['addr_modes',
'exit',
'fib',
'hello_world',
'negindex',
'only_bss',
'regs',
'reloc',
'switch',
'vtable',
'vaarg',
]
for basename in barebones_tests:
# TODO(kcc): the barebones tests confuse the current nacl-ified valgrind.
if env.IsRunningUnderValgrind(): continue
is_broken = is_glibc
# This is generating a (probably invalid) relocation on PNaCl GlibC X86-64
# which cannot be handled by the TLS rewrite in binutils.
if basename == 'reloc' and is_glibc and env.Bit('build_x86_64'):
continue
# For MIPS32, barebones_reloc requires a call to 64-bit atomics implemented
# in compiler-rt library, so this test has to be skipped for this arch.
if (basename == 'reloc' and env.Bit('build_mips32') and
not env.Bit('pnacl_generate_pexe')):
continue
src = 'barebones_' + basename + '.c'
nexe_name = 'barebones_' + basename
out = 'barebones_' + basename + '.out'
test = 'run_barebones_' + basename + '_test'
test = 'run_barebones_' + basename + '_test'
nexe = env.ComponentProgram(nexe_name, [FAKE_STARTUP, src])
# NOTE: we avoid using zero as the "good" exit status and just
# arbitrarily picked 55. All tests are coded to follow this model.
node = env.CommandSelLdrTestNacl(out, nexe, exit_status='55')
env.AddNodeToTestSuite(node,
['small_tests', 'sel_ldr_tests', 'barebones_tests'],
test,
is_broken=is_broken)
# The top_of_sandbox test does not apply to x86-32 because the bug
# it tests for cannot happen in a segment-based sandbox, only with
# a sandbox where some kind of address-masking is done.
if not env.Bit('bitcode') and not env.Bit('build_x86_32'):
nexe = env.ComponentProgram('top_of_sandbox', ['top_of_sandbox.c'])
node = env.CommandSelLdrTestNacl('top_of_sandbox.out', nexe)
env.AddNodeToTestSuite(
node, ['small_tests', 'sel_ldr_tests',
'barebones_tests', 'nonpexe_tests'],
'run_top_of_sandbox_test',
is_broken=is_glibc)