Commit 4da74cad authored by Stephen Roe's avatar Stephen Roe Committed by Commit Bot

[fuchsia] Determine llvm-symbolizer path from test host architecture

and Linux distro.

This supports running tests on x64 Ubuntu and on arm64 Ubuntu 16.04
and arm64 Ubuntu 18.04.

Bug: 1131647
Change-Id: Ie75adcb775bc32601fb4001720e960b17607edee
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2517991
Commit-Queue: Stephen Roe <steveroe@google.com>
Reviewed-by: default avatarKevin Marshall <kmarshall@chromium.org>
Cr-Commit-Position: refs/heads/master@{#829884}
parent df4231b1
...@@ -4,19 +4,48 @@ ...@@ -4,19 +4,48 @@
import logging import logging
import os import os
import re
import subprocess import subprocess
from common import SDK_ROOT from common import SDK_ROOT
from common import GetHostArchFromPlatform from common import GetHostArchFromPlatform
from common import GetHostToolPathFromPlatform from common import GetHostToolPathFromPlatform
# TODO(crbug.com/1131647): Change 'llvm-3.8' to 'llvm' after docker image is # Paths to the llvm-symbolizer executable in different test hosts.
# updated. X64_LLVM_SYMBOLIZER_PATH = os.path.join(SDK_ROOT, os.pardir, os.pardir,
ARM64_DOCKER_LLVM_SYMBOLIZER_PATH = os.path.join('/', 'usr', 'lib', 'llvm-3.8', 'llvm-build', 'Release+Asserts', 'bin',
'llvm-symbolizer')
ARM64_XENIAL_LLVM_SYMBOLIZER_PATH = os.path.join('/', 'usr', 'lib', 'llvm-3.8',
'bin', 'llvm-symbolizer') 'bin', 'llvm-symbolizer')
ARM64_BIONIC_LLVM_SYMBOLIZER_PATH = os.path.join('/', 'usr', 'lib', 'llvm-6.0',
'bin', 'llvm-symbolizer')
def _GetLLVMSymbolizerPath():
"""Determines the path to the LLVM symbolizer executable based on test host
architecture and Ubuntu distro."""
if GetHostArchFromPlatform() == 'x64':
return X64_LLVM_SYMBOLIZER_PATH
# Get distro codename from /etc/os-release.
with open(os.path.join('/', 'etc', 'os-release')) as os_release_file:
os_release_text = os_release_file.read()
version_codename_re = r'^VERSION_CODENAME=(?P<codename>[\w.-]+)$'
match = re.search(version_codename_re, os_release_text, re.MULTILINE)
codename = match.group('codename') if match else None
if codename == 'xenial':
return ARM64_XENIAL_LLVM_SYMBOLIZER_PATH
elif codename == 'bionic':
return ARM64_BIONIC_LLVM_SYMBOLIZER_PATH
else:
raise Exception('Unknown Ubuntu release "%s"' % codename)
def BuildIdsPaths(package_paths): def BuildIdsPaths(package_paths):
"""Generate build ids paths for symbolizer processes.""" """Generates build ids paths for symbolizer processes."""
build_ids_paths = map( build_ids_paths = map(
lambda package_path: os.path.join( lambda package_path: os.path.join(
os.path.dirname(package_path), 'ids.txt'), os.path.dirname(package_path), 'ids.txt'),
...@@ -33,15 +62,8 @@ def RunSymbolizer(input_file, output_file, build_ids_files): ...@@ -33,15 +62,8 @@ def RunSymbolizer(input_file, output_file, build_ids_files):
unstripped binaries on the filesystem. unstripped binaries on the filesystem.
Returns a Popen object for the started process.""" Returns a Popen object for the started process."""
if (GetHostArchFromPlatform() == 'arm64' and
os.path.isfile(ARM64_DOCKER_LLVM_SYMBOLIZER_PATH)):
llvm_symbolizer_path = ARM64_DOCKER_LLVM_SYMBOLIZER_PATH
else:
llvm_symbolizer_path = os.path.join(SDK_ROOT, os.pardir, os.pardir,
'llvm-build', 'Release+Asserts', 'bin',
'llvm-symbolizer')
symbolizer = GetHostToolPathFromPlatform('symbolize') symbolizer = GetHostToolPathFromPlatform('symbolize')
llvm_symbolizer_path = _GetLLVMSymbolizerPath()
symbolizer_cmd = [symbolizer, symbolizer_cmd = [symbolizer,
'-ids-rel', '-llvm-symbolizer', llvm_symbolizer_path, '-ids-rel', '-llvm-symbolizer', llvm_symbolizer_path,
'-build-id-dir', os.path.join(SDK_ROOT, '.build-id')] '-build-id-dir', os.path.join(SDK_ROOT, '.build-id')]
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment