1*9c5db199SXin Li# Copyright 2015 The Chromium OS Authors. All rights reserved. 2*9c5db199SXin Li# Use of this source code is governed by a BSD-style license that can be 3*9c5db199SXin Li# found in the LICENSE file. 4*9c5db199SXin Li 5*9c5db199SXin Liimport logging 6*9c5db199SXin Li 7*9c5db199SXin Lifrom autotest_lib.client.bin import utils 8*9c5db199SXin Li 9*9c5db199SXin Li 10*9c5db199SXin Li_ASAN_SYMBOL = "__asan_init" 11*9c5db199SXin Li 12*9c5db199SXin Li 13*9c5db199SXin Lidef running_on_asan(binary="debugd"): 14*9c5db199SXin Li """Returns whether we're running on ASan. 15*9c5db199SXin Li 16*9c5db199SXin Li @param binary: file to test for ASan symbols. 17*9c5db199SXin Li """ 18*9c5db199SXin Li # -q, --quiet * Only output 'bad' things 19*9c5db199SXin Li # -F, --format <arg> * Use specified format for output 20*9c5db199SXin Li # -g, --gmatch * Use regex rather than string compare (with -s) 21*9c5db199SXin Li # -s, --symbol <arg> * Find a specified symbol 22*9c5db199SXin Li scanelf_command = "scanelf -qF'%s#F'" 23*9c5db199SXin Li scanelf_command += " -gs %s `which %s`" % (_ASAN_SYMBOL, binary) 24*9c5db199SXin Li symbol = utils.system_output(scanelf_command) 25*9c5db199SXin Li logging.debug("running_on_asan(): symbol: '%s', _ASAN_SYMBOL: '%s'", 26*9c5db199SXin Li symbol, _ASAN_SYMBOL) 27*9c5db199SXin Li return symbol != "" 28