1""" 2Test lldb 'image list' on object files across multiple architectures. 3This exercises classes like ObjectFileELF and their support for opening 4foreign-architecture object files. 5""" 6 7 8import os.path 9import re 10 11import lldb 12from lldbsuite.test.decorators import * 13from lldbsuite.test.lldbtest import * 14from lldbsuite.test import lldbutil 15 16 17class TestImageListMultiArchitecture(TestBase): 18 @no_debug_info_test 19 @skipIfRemote 20 def test_image_list_shows_multiple_architectures(self): 21 """Test that image list properly shows the correct architecture for a set of different architecture object files.""" 22 images = { 23 "hello-freebsd-10.0-x86_64-clang-3.3": re.compile( 24 r"x86_64-(\*)?-freebsd10.0(-unknown)? x86_64" 25 ), 26 "hello-freebsd-10.0-x86_64-gcc-4.7.3": re.compile( 27 r"x86_64-(\*)?-freebsd10.0(-unknown)? x86_64" 28 ), 29 "hello-netbsd-6.1-x86_64-gcc-4.5.3": re.compile( 30 r"x86_64-(\*)?-netbsd6.1.4(-unknown)? x86_64" 31 ), 32 "hello-ubuntu-14.04-x86_64-gcc-4.8.2": re.compile( 33 r"x86_64-(\*)?-linux(-unknown)? x86_64" 34 ), 35 "hello-ubuntu-14.04-x86_64-clang-3.5pre": re.compile( 36 r"x86_64-(\*)?-linux(-unknown)? x86_64" 37 ), 38 } 39 40 for image_name in images: 41 file_name = os.path.abspath( 42 os.path.join(os.path.dirname(__file__), "bin", image_name) 43 ) 44 expected_triple_and_arch_regex = images[image_name] 45 46 self.runCmd("file {}".format(file_name)) 47 self.match("image list -t -A", [expected_triple_and_arch_regex]) 48 # Revert to the host platform after all of this is done 49 self.runCmd("platform select host") 50