Imported Upstream version 6.10.0.49

Former-commit-id: 1d6753294b2993e1fbf92de9366bb9544db4189b
This commit is contained in:
Xamarin Public Jenkins (auto-signing)
2020-01-16 16:38:04 +00:00
parent d94e79959b
commit 468663ddbb
48518 changed files with 2789335 additions and 61176 deletions

View File

@@ -0,0 +1,21 @@
CC ?= clang
ifeq "$(ARCH)" ""
ARCH = x86_64
endif
CFLAGS ?= -g -O0 -arch $(ARCH)
all: clean
$(CC) $(CFLAGS) -dynamiclib -o com.apple.sbd bundle.c
mkdir com.apple.sbd.xpc
mv com.apple.sbd com.apple.sbd.xpc/
mkdir -p com.apple.sbd.xpc.dSYM/Contents/Resources/DWARF
mv com.apple.sbd.dSYM/Contents/Resources/DWARF/com.apple.sbd com.apple.sbd.xpc.dSYM/Contents/Resources/DWARF/
rm -rf com.apple.sbd.dSYM
mkdir hide.app
tar cf - com.apple.sbd.xpc com.apple.sbd.xpc.dSYM | ( cd hide.app;tar xBpf -)
$(CC) $(CFLAGS) -o find-bundle-with-dots-in-fn main.c
clean:
rm -rf a.out a.out.dSYM hide.app com.apple.sbd com.apple.sbd.dSYM com.apple.sbd.xpc com.apple.sbd.xpc.dSYM find-bundle-with-dots-in-fn find-bundle-with-dots-in-fn.dSYM

View File

@@ -0,0 +1,71 @@
"""Test that a dSYM can be found when a binary is in a bundle hnd has dots in the filename."""
from __future__ import print_function
#import unittest2
import os.path
from time import sleep
import lldb
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
from lldbsuite.test import lldbutil
exe_name = 'find-bundle-with-dots-in-fn' # must match Makefile
class BundleWithDotInFilenameTestCase(TestBase):
mydir = TestBase.compute_mydir(__file__)
@skipIfRemote
@skipUnlessDarwin
# This test is explicitly a dSYM test, it doesn't need to run for any other config, but
# the following doesn't work, fixme.
# @skipIf(debug_info=no_match(["dsym"]), bugnumber="This test is looking explicitly for a dSYM")
def setUp(self):
TestBase.setUp(self)
self.source = 'main.c'
def tearDown(self):
# Destroy process before TestBase.tearDown()
self.dbg.GetSelectedTarget().GetProcess().Destroy()
# Call super's tearDown().
TestBase.tearDown(self)
def test_attach_and_check_dsyms(self):
"""Test attach to binary, see if the bundle dSYM is found"""
exe = os.path.join(os.getcwd(), exe_name)
self.build()
popen = self.spawnSubprocess(exe)
self.addTearDownHook(self.cleanupSubprocesses)
# Give the inferior time to start up, dlopen a bundle, remove the bundle it linked in
sleep(5)
# Since the library that was dlopen()'ed is now removed, lldb will need to find the
# binary & dSYM via target.exec-search-paths
settings_str = "settings set target.exec-search-paths " + self.get_process_working_directory() + "/hide.app"
self.runCmd(settings_str)
self.runCmd("process attach -p " + str(popen.pid))
target = self.dbg.GetSelectedTarget()
self.assertTrue(target.IsValid(), 'Should have a valid Target after attaching to process')
setup_complete = target.FindFirstGlobalVariable("setup_is_complete")
self.assertTrue(setup_complete.GetValueAsUnsigned() == 1, 'Check that inferior process has completed setup')
# Find the bundle module, see if we found the dSYM too (they're both in "hide.app")
i = 0
while i < target.GetNumModules():
mod = target.GetModuleAtIndex(i)
if mod.GetFileSpec().GetFilename() == 'com.apple.sbd':
dsym_name = mod.GetSymbolFileSpec().GetFilename()
self.assertTrue (dsym_name == 'com.apple.sbd', "Check that we found the dSYM for the bundle that was loaded")
i=i+1
if __name__ == '__main__':
unittest.main()

View File

@@ -0,0 +1,4 @@
int foo ()
{
return 5;
}

View File

@@ -0,0 +1,28 @@
#include <dlfcn.h>
#include <unistd.h>
#include <stdlib.h>
int setup_is_complete = 0;
int main()
{
void *handle = dlopen ("com.apple.sbd.xpc/com.apple.sbd", RTLD_NOW);
if (handle)
{
if (dlsym(handle, "foo"))
{
system ("/bin/rm -rf com.apple.sbd.xpc com.apple.sbd.xpc.dSYM");
setup_is_complete = 1;
// At this point we want lldb to attach to the process. If lldb attaches
// before we've removed the dlopen'ed bundle, lldb will find the bundle
// at its actual filepath and not have to do any tricky work, invalidating
// the test.
for (int loop_limiter = 0; loop_limiter < 100; loop_limiter++)
sleep (1);
}
}
return 0;
}

View File

@@ -0,0 +1,44 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>BuildMachineOSBuild</key>
<string>16B2657</string>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleExecutable</key>
<string>MyFramework</string>
<key>CFBundleIdentifier</key>
<string>com.apple.test.framework</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>MyFramework</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>113</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleSupportedPlatforms</key>
<array>
<string>MacOSX</string>
</array>
<key>CFBundleVersion</key>
<string>113</string>
<key>DTCompiler</key>
<string>com.apple.compilers.llvm.clang.1_0</string>
<key>DTPlatformBuild</key>
<string>9L120i</string>
<key>DTPlatformVersion</key>
<string>GM</string>
<key>DTSDKBuild</key>
<string>17A261x</string>
<key>DTSDKName</key>
<string>macosx10.13</string>
<key>DTXcode</key>
<string>0900</string>
<key>DTXcodeBuild</key>
<string>9L120i</string>
</dict>
</plist>

View File

@@ -0,0 +1,28 @@
CC ?= clang
ifeq "$(ARCH)" ""
ARCH = x86_64
endif
CFLAGS ?= -g -O0 -arch $(ARCH)
all: clean
$(CC) $(CFLAGS) -install_name $(PWD)/MyFramework.framework/Versions/A/MyFramework -dynamiclib -o MyFramework myframework.c
mkdir -p MyFramework.framework/Versions/A/Headers
mkdir -p MyFramework.framework/Versions/A/Resources
cp MyFramework MyFramework.framework/Versions/A
cp MyFramework.h MyFramework.framework/Versions/A/Headers
cp Info.plist MyFramework.framework/Versions/A/Resources
( cd MyFramework.framework/Versions ; ln -s A Current )
( cd MyFramework.framework/ ; ln -s Versions/Current/Headers . )
( cd MyFramework.framework/ ; ln -s Versions/Current/MyFramework . )
( cd MyFramework.framework/ ; ln -s Versions/Current/Resources . )
mv MyFramework.dSYM MyFramework.framework.dSYM
mkdir hide.app
rm -f MyFramework
tar cf - MyFramework.framework MyFramework.framework.dSYM | ( cd hide.app;tar xBpf -)
$(CC) $(CFLAGS) -o deep-bundle main.c -F. -framework MyFramework
clean:
rm -rf a.out a.out.dSYM deep-bundle deep-bundle.dSYM MyFramework.framework MyFramework.framework.dSYM MyFramework MyFramework.dSYM hide.app

View File

@@ -0,0 +1,75 @@
"""Test that a dSYM can be found when a binary is in a deep bundle with multiple pathname components."""
from __future__ import print_function
#import unittest2
import os.path
from time import sleep
import lldb
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
from lldbsuite.test import lldbutil
exe_name = 'deep-bundle' # must match Makefile
class DeepBundleTestCase(TestBase):
mydir = TestBase.compute_mydir(__file__)
@skipIfRemote
@skipUnlessDarwin
# This test is explicitly a dSYM test, it doesn't need to run for any other config, but
# the following doesn't work, fixme.
# @skipIf(debug_info=no_match(["dsym"]), bugnumber="This test is looking explicitly for a dSYM")
def setUp(self):
TestBase.setUp(self)
self.source = 'main.c'
def tearDown(self):
# Destroy process before TestBase.tearDown()
self.dbg.GetSelectedTarget().GetProcess().Destroy()
# Call super's tearDown().
TestBase.tearDown(self)
def test_attach_and_check_dsyms(self):
"""Test attach to binary, see if the framework dSYM is found"""
exe = os.path.join(os.getcwd(), exe_name)
self.build()
popen = self.spawnSubprocess(exe)
self.addTearDownHook(self.cleanupSubprocesses)
# Give the inferior time to start up, dlopen a bundle, remove the bundle it linked in
sleep(5)
# Since the library that was dlopen()'ed is now removed, lldb will need to find the
# binary & dSYM via target.exec-search-paths
settings_str = "settings set target.exec-search-paths " + self.get_process_working_directory() + "/hide.app"
self.runCmd(settings_str)
self.runCmd("process attach -p " + str(popen.pid))
target = self.dbg.GetSelectedTarget()
self.assertTrue(target.IsValid(), 'Should have a valid Target after attaching to process')
setup_complete = target.FindFirstGlobalVariable("setup_is_complete")
self.assertTrue(setup_complete.GetValueAsUnsigned() == 1, 'Check that inferior process has completed setup')
# Find the bundle module, see if we found the dSYM too (they're both in "hide.app")
i = 0
found_module = False
while i < target.GetNumModules():
mod = target.GetModuleAtIndex(i)
if mod.GetFileSpec().GetFilename() == 'MyFramework':
found_module = True
dsym_name = mod.GetSymbolFileSpec().GetFilename()
self.assertTrue (dsym_name == 'MyFramework', "Check that we found the dSYM for the bundle that was loaded")
i=i+1
self.assertTrue(found_module, "Check that we found the framework loaded in lldb's image list")
if __name__ == '__main__':
unittest.main()

View File

@@ -0,0 +1,22 @@
#include <MyFramework/MyFramework.h>
#include <unistd.h>
#include <stdlib.h>
int setup_is_complete = 0;
int main()
{
system ("/bin/rm -rf MyFramework MyFramework.framework MyFramework.framework.dSYM");
setup_is_complete = 1;
// At this point we want lldb to attach to the process. If lldb attaches
// before we've removed the framework we're running against, it will be
// easy for lldb to find the binary & dSYM without using target.exec-search-paths,
// which is the point of this test.
for (int loop_limiter = 0; loop_limiter < 100; loop_limiter++)
sleep (1);
return foo();
}

View File

@@ -0,0 +1,4 @@
int foo ()
{
return 5;
}