1import lldb 2from lldbsuite.test.decorators import * 3import lldbsuite.test.lldbtest as lldbtest 4import lldbsuite.test.lldbutil as lldbutil 5import os 6 7 8class TestDSYMSourcePathRemapping(lldbtest.TestBase): 9 def build(self): 10 botdir = self.getBuildArtifact("buildbot") 11 userdir = self.getBuildArtifact("user") 12 inputs = self.getSourcePath("Inputs") 13 lldbutil.mkdir_p(botdir) 14 lldbutil.mkdir_p(userdir) 15 import shutil 16 17 for f in ["main.c", "relative.c"]: 18 shutil.copyfile(os.path.join(inputs, f), os.path.join(botdir, f)) 19 shutil.copyfile(os.path.join(inputs, f), os.path.join(userdir, f)) 20 21 super(TestDSYMSourcePathRemapping, self).build() 22 23 # Remove the build sources. 24 self.assertTrue(os.path.isdir(botdir)) 25 shutil.rmtree(botdir) 26 27 # Create a plist. 28 import subprocess 29 30 dsym = self.getBuildArtifact("a.out.dSYM") 31 uuid = ( 32 subprocess.check_output(["/usr/bin/dwarfdump", "--uuid", dsym]) 33 .decode("utf-8") 34 .split(" ")[1] 35 ) 36 import re 37 38 self.assertTrue(re.match(r"[0-9a-fA-F-]+", uuid)) 39 plist = os.path.join(dsym, "Contents", "Resources", uuid + ".plist") 40 with open(plist, "w") as f: 41 f.write('<?xml version="1.0" encoding="UTF-8"?>\n') 42 f.write( 43 '<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">\n' 44 ) 45 f.write('<plist version="1.0">\n') 46 f.write("<dict>\n") 47 f.write(" <key>DBGSourcePathRemapping</key>\n") 48 f.write(" <dict>\n") 49 f.write(" <key>" + os.path.realpath(botdir) + "</key>\n") 50 f.write(" <string>" + userdir + "</string>\n") 51 f.write(" </dict>\n") 52 f.write("</dict>\n") 53 f.write("</plist>\n") 54 55 @skipIf(debug_info=no_match("dsym")) 56 def test(self): 57 self.build() 58 59 target, process, _, _ = lldbutil.run_to_name_breakpoint(self, "main") 60 self.expect("source list -n main", substrs=["Hello Absolute"]) 61 bkpt = target.BreakpointCreateByName("relative") 62 lldbutil.continue_to_breakpoint(process, bkpt) 63 self.expect("source list -n relative", substrs=["Hello Relative"]) 64