| OLD | NEW |
| 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 # Copyright (c) 2012 The Chromium 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 """ | 5 """ |
| 6 Classes in this file define additional actions that need to be taken to run a | 6 Classes in this file define additional actions that need to be taken to run a |
| 7 test under some kind of runtime error detection tool. | 7 test under some kind of runtime error detection tool. |
| 8 | 8 |
| 9 The interface is intended to be used as follows. | 9 The interface is intended to be used as follows. |
| 10 | 10 |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 77 | 77 |
| 78 Returns: | 78 Returns: |
| 79 True if this tool can not work with stripped binaries. | 79 True if this tool can not work with stripped binaries. |
| 80 """ | 80 """ |
| 81 return False | 81 return False |
| 82 | 82 |
| 83 | 83 |
| 84 class AddressSanitizerTool(BaseTool): | 84 class AddressSanitizerTool(BaseTool): |
| 85 """AddressSanitizer tool.""" | 85 """AddressSanitizer tool.""" |
| 86 | 86 |
| 87 WRAPPER_PATH = '/system/bin/asanwrapper' | 87 TMP_DIR = '/data/local/tmp/asan' |
| 88 WRAPPER_NAME = 'asanwrapper.sh' |
| 88 | 89 |
| 89 def __init__(self, adb): | 90 def __init__(self, adb): |
| 90 self._adb = adb | 91 self._adb = adb |
| 91 self._wrap_properties = ['wrap.com.google.android.apps.ch', | 92 self._wrap_properties = ['wrap.com.google.android.apps.ch', |
| 92 'wrap.org.chromium.native_test'] | 93 'wrap.org.chromium.native_test'] |
| 93 | 94 |
| 94 def CopyFiles(self): | 95 def CopyFiles(self): |
| 95 """Copies ASan tools to the device.""" | 96 """Copies ASan tools to the device.""" |
| 96 files = ['system/lib/libasan_preload.so', | 97 files = ['tools/android/asan/asanwrapper.sh', |
| 97 'system/bin/asanwrapper', | 98 'third_party/llvm-build/Release+Asserts/lib/clang/3.2/lib/linux/' + |
| 98 'system/bin/asan/app_process', | 99 'libclang_rt.asan-arm-android.so'] |
| 99 'system/bin/linker'] | |
| 100 android_product_out = os.environ['ANDROID_PRODUCT_OUT'] | |
| 101 self._adb.MakeSystemFolderWritable() | |
| 102 for f in files: | 100 for f in files: |
| 103 self._adb.PushIfNeeded(os.path.join(android_product_out, f), | 101 self._adb.PushIfNeeded(os.path.join(CHROME_DIR, f), |
| 104 os.path.join('/', f)) | 102 os.path.join(AddressSanitizerTool.TMP_DIR, |
| 103 os.path.basename(f))) |
| 105 | 104 |
| 106 def GetTestWrapper(self): | 105 def GetTestWrapper(self): |
| 107 return AddressSanitizerTool.WRAPPER_PATH | 106 return os.path.join(AddressSanitizerTool.TMP_DIR, |
| 107 AddressSanitizerTool.WRAPPER_NAME) |
| 108 | 108 |
| 109 def GetUtilWrapper(self): | 109 def GetUtilWrapper(self): |
| 110 """Returns the wrapper for utilities, such as forwarder. | 110 """Returns the wrapper for utilities, such as forwarder. |
| 111 | 111 |
| 112 AddressSanitizer wrapper must be added to all instrumented binaries, | 112 AddressSanitizer wrapper must be added to all instrumented binaries, |
| 113 including forwarder and the like. This can be removed if such binaries | 113 including forwarder and the like. This can be removed if such binaries |
| 114 were built without instrumentation. """ | 114 were built without instrumentation. """ |
| 115 return AddressSanitizerTool.WRAPPER_PATH | 115 return self.GetTestWrapper() |
| 116 | 116 |
| 117 def SetupEnvironment(self): | 117 def SetupEnvironment(self): |
| 118 self._adb.EnableAdbRoot() |
| 118 for prop in self._wrap_properties: | 119 for prop in self._wrap_properties: |
| 119 self._adb.RunShellCommand('setprop %s "logwrapper %s"' % ( | 120 self._adb.RunShellCommand('setprop %s "logwrapper %s"' % ( |
| 120 prop, self.GetTestWrapper())) | 121 prop, self.GetTestWrapper())) |
| 121 SetChromeTimeoutScale(self._adb, self.GetTimeoutScale()) | 122 SetChromeTimeoutScale(self._adb, self.GetTimeoutScale()) |
| 122 | 123 |
| 123 def CleanUpEnvironment(self): | 124 def CleanUpEnvironment(self): |
| 124 for prop in self._wrap_properties: | 125 for prop in self._wrap_properties: |
| 125 self._adb.RunShellCommand('setprop %s ""' % (prop,)) | 126 self._adb.RunShellCommand('setprop %s ""' % (prop,)) |
| 126 SetChromeTimeoutScale(self._adb, None) | 127 SetChromeTimeoutScale(self._adb, None) |
| 127 | 128 |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 246 if not tool_name: | 247 if not tool_name: |
| 247 return BaseTool() | 248 return BaseTool() |
| 248 | 249 |
| 249 ctor = TOOL_REGISTRY.get(tool_name) | 250 ctor = TOOL_REGISTRY.get(tool_name) |
| 250 if ctor: | 251 if ctor: |
| 251 return ctor(adb) | 252 return ctor(adb) |
| 252 else: | 253 else: |
| 253 print 'Unknown tool %s, available tools: %s' % ( | 254 print 'Unknown tool %s, available tools: %s' % ( |
| 254 tool_name, ', '.join(sorted(TOOL_REGISTRY.keys()))) | 255 tool_name, ', '.join(sorted(TOOL_REGISTRY.keys()))) |
| 255 sys.exit(1) | 256 sys.exit(1) |
| OLD | NEW |