OLD | NEW |
1 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. | 1 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 | 4 |
5 import logging, os, re | 5 import logging, os, re |
6 | 6 |
7 from autotest_lib.client.bin import test, utils | 7 from autotest_lib.client.bin import test, utils |
8 from autotest_lib.client.common_lib import error | 8 from autotest_lib.client.common_lib import error |
9 | 9 |
10 class hardware_SAT(test.test): | 10 class hardware_SAT(test.test): |
11 version = 1 | 11 version = 1 |
12 | 12 |
13 def target_is_x86(self): | 13 def target_is_x86_pie(self): |
14 result = utils.system_output('${CC} -dumpmachine', retain_output=True, | 14 result = utils.system_output('${CC} -dumpmachine', retain_output=True, |
15 ignore_status=True) | 15 ignore_status=True) |
16 x86_pattern = re.compile(r"^i.86.*") | 16 x86_pattern = re.compile(r"^i.86.*") |
17 return x86_pattern.match(result) | 17 if not x86_pattern.match(result): |
| 18 return False |
| 19 result = utils.system_output('${CC} -dumpspecs', retain_output=True, |
| 20 ignore_status=True) |
| 21 if result.find('!nopie:') == -1: |
| 22 return False |
| 23 return True |
18 | 24 |
19 | 25 |
20 # http://code.google.com/p/stressapptest/ | 26 # http://code.google.com/p/stressapptest/ |
21 def setup(self, tarball='stressapptest-1.0.3_autoconf.tar.gz'): | 27 def setup(self, tarball='stressapptest-1.0.3_autoconf.tar.gz'): |
22 # clean | 28 # clean |
23 if os.path.exists(self.srcdir): | 29 if os.path.exists(self.srcdir): |
24 utils.system('rm -rf %s' % self.srcdir) | 30 utils.system('rm -rf %s' % self.srcdir) |
25 | 31 |
26 tarball = utils.unmap_url(self.bindir, tarball, self.tmpdir) | 32 tarball = utils.unmap_url(self.bindir, tarball, self.tmpdir) |
27 utils.extract_tarball_to_dir(tarball, self.srcdir) | 33 utils.extract_tarball_to_dir(tarball, self.srcdir) |
28 | 34 |
29 self.job.setup_dep(['libaio']) | 35 self.job.setup_dep(['libaio']) |
30 ldflags = '-L' + self.autodir + '/deps/libaio/lib' | 36 ldflags = '-L' + self.autodir + '/deps/libaio/lib' |
31 cflags = '-I' + self.autodir + '/deps/libaio/include' | 37 cflags = '-I' + self.autodir + '/deps/libaio/include' |
32 # Add paths to libaio files. | 38 # Add paths to libaio files. |
33 var_flags = 'LDFLAGS="' + ldflags + '"' | 39 var_flags = 'LDFLAGS="' + ldflags + '"' |
34 # TODO(fes): Remove this if there is a better way to detect that we are | 40 if self.target_is_x86_pie(): |
35 # in a hardened build (or if this later properly picks up the -nopie | |
36 # flag from portage) | |
37 if os.path.exists('/etc/hardened') and self.target_is_x86(): | |
38 var_flags += ' CXXFLAGS="-nopie ' + cflags + '"' | 41 var_flags += ' CXXFLAGS="-nopie ' + cflags + '"' |
39 var_flags += ' CFLAGS="-nopie ' + cflags + '"' | 42 var_flags += ' CFLAGS="-nopie ' + cflags + '"' |
40 else: | 43 else: |
41 var_flags += ' CXXFLAGS="' + cflags + '"' | 44 var_flags += ' CXXFLAGS="' + cflags + '"' |
42 var_flags += ' CFLAGS="' + cflags + '"' | 45 var_flags += ' CFLAGS="' + cflags + '"' |
43 var_flags += ' LIBS="-static -laio"' | 46 var_flags += ' LIBS="-static -laio"' |
44 | 47 |
45 os.chdir(self.srcdir) | 48 os.chdir(self.srcdir) |
46 # ./configure stores relevant path and environment variables. | 49 # ./configure stores relevant path and environment variables. |
47 utils.configure(configure=var_flags + ' ./configure') | 50 utils.configure(configure=var_flags + ' ./configure') |
(...skipping 28 matching lines...) Expand all Loading... |
76 # or disk cache problems. Two threads ensure multiple | 79 # or disk cache problems. Two threads ensure multiple |
77 # outstanding transactions to the disk, if supported. | 80 # outstanding transactions to the disk, if supported. |
78 args += ' -f sat.diskthread.a' # disk thread | 81 args += ' -f sat.diskthread.a' # disk thread |
79 args += ' -f sat.diskthread.b' | 82 args += ' -f sat.diskthread.b' |
80 | 83 |
81 os.chdir(os.path.join(self.srcdir, 'src')) | 84 os.chdir(os.path.join(self.srcdir, 'src')) |
82 sat = utils.run('./stressapptest' + args) | 85 sat = utils.run('./stressapptest' + args) |
83 logging.debug(sat.stdout) | 86 logging.debug(sat.stdout) |
84 if not re.search('Status: PASS', sat.stdout): | 87 if not re.search('Status: PASS', sat.stdout): |
85 raise error.TestFail(sat.stdout) | 88 raise error.TestFail(sat.stdout) |
OLD | NEW |