xref: /aosp_15_r20/external/autotest/client/cros/asan.py (revision 9c5db1993ded3edbeafc8092d69fe5de2ee02df7)
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