diff options
author | Zachary Turner <zturner@google.com> | 2015-10-28 17:43:26 +0000 |
---|---|---|
committer | Zachary Turner <zturner@google.com> | 2015-10-28 17:43:26 +0000 |
commit | c432c8f856e0bd84de980a9d9bb2d31b06fa95b1 (patch) | |
tree | 4efa528e074a6e2df782345e4cd97f5d85d038c4 /lldb/packages/Python/lldbsuite/test/lang/objc/ivar-IMP | |
parent | a8a3bd210086b50242903ed95048fe5e53897878 (diff) | |
download | bcm5719-llvm-c432c8f856e0bd84de980a9d9bb2d31b06fa95b1.tar.gz bcm5719-llvm-c432c8f856e0bd84de980a9d9bb2d31b06fa95b1.zip |
Move lldb/test to lldb/packages/Python/lldbsuite/test.
This is the conclusion of an effort to get LLDB's Python code
structured into a bona-fide Python package. This has a number
of benefits, but most notably the ability to more easily share
Python code between different but related pieces of LLDB's Python
infrastructure (for example, `scripts` can now share code with
`test`).
llvm-svn: 251532
Diffstat (limited to 'lldb/packages/Python/lldbsuite/test/lang/objc/ivar-IMP')
5 files changed, 103 insertions, 0 deletions
diff --git a/lldb/packages/Python/lldbsuite/test/lang/objc/ivar-IMP/Makefile b/lldb/packages/Python/lldbsuite/test/lang/objc/ivar-IMP/Makefile new file mode 100644 index 00000000000..329ceabeea9 --- /dev/null +++ b/lldb/packages/Python/lldbsuite/test/lang/objc/ivar-IMP/Makefile @@ -0,0 +1,12 @@ +LEVEL = ../../../make + +myclass.o: myclass.h myclass.m + $(CC) myclass.m -c -o myclass.o + +repro: myclass.o repro.m + $(CC) -g -O0 myclass.o repro.m -framework Foundation + +cleanup: + rm -r myclass.o + +include $(LEVEL)/Makefile.rules diff --git a/lldb/packages/Python/lldbsuite/test/lang/objc/ivar-IMP/TestObjCiVarIMP.py b/lldb/packages/Python/lldbsuite/test/lang/objc/ivar-IMP/TestObjCiVarIMP.py new file mode 100644 index 00000000000..30126ebdb60 --- /dev/null +++ b/lldb/packages/Python/lldbsuite/test/lang/objc/ivar-IMP/TestObjCiVarIMP.py @@ -0,0 +1,62 @@ +""" +Test that dynamically discovered ivars of type IMP do not crash LLDB +""" + +from __future__ import print_function + +import use_lldb_suite + +import os, time +import re +import lldb, lldbutil +from lldbtest import * +import commands + +def execute_command (command): + # print('%% %s' % (command)) + (exit_status, output) = commands.getstatusoutput (command) + # if output: + # print(output) + # print('status = %u' % (exit_status)) + return exit_status + +class ObjCiVarIMPTestCase(TestBase): + + mydir = TestBase.compute_mydir(__file__) + + @skipUnlessDarwin + @no_debug_info_test + def test_imp_ivar_type(self): + """Test that dynamically discovered ivars of type IMP do not crash LLDB""" + if self.getArchitecture() == 'i386': + # rdar://problem/9946499 + self.skipTest("Dynamic types for ObjC V1 runtime not implemented") + + execute_command("make repro") + def cleanup(): + execute_command("make cleanup") + self.addTearDownHook(cleanup) + + exe = os.path.join(os.getcwd(), "a.out") + + # Create a target from the debugger. + target = self.dbg.CreateTarget (exe) + self.assertTrue(target, VALID_TARGET) + + # Set up our breakpoint + + bkpt = lldbutil.run_break_set_by_source_regexp (self, "break here") + + # Now launch the process, and do not stop at the entry point. + process = target.LaunchSimple (None, None, self.get_process_working_directory()) + + self.assertTrue(process.GetState() == lldb.eStateStopped, + PROCESS_STOPPED) + + self.expect('frame variable --ptr-depth=1 --show-types -d run -- object', substrs=[ + '(MyClass *) object = 0x', + '(void *) myImp = 0x' + ]) + self.expect('disassemble --start-address `((MyClass*)object)->myImp`', substrs=[ + '-[MyClass init]' + ]) diff --git a/lldb/packages/Python/lldbsuite/test/lang/objc/ivar-IMP/myclass.h b/lldb/packages/Python/lldbsuite/test/lang/objc/ivar-IMP/myclass.h new file mode 100644 index 00000000000..da28d1e0518 --- /dev/null +++ b/lldb/packages/Python/lldbsuite/test/lang/objc/ivar-IMP/myclass.h @@ -0,0 +1,6 @@ +#import <Foundation/Foundation.h> + +@interface MyClass : NSObject +{} +- (id)init; +@end diff --git a/lldb/packages/Python/lldbsuite/test/lang/objc/ivar-IMP/myclass.m b/lldb/packages/Python/lldbsuite/test/lang/objc/ivar-IMP/myclass.m new file mode 100644 index 00000000000..3ff2ac7fe78 --- /dev/null +++ b/lldb/packages/Python/lldbsuite/test/lang/objc/ivar-IMP/myclass.m @@ -0,0 +1,16 @@ +#import <Foundation/Foundation.h> +#import "MyClass.h" + +@implementation MyClass +{ + IMP myImp; +} +- (id)init { + if (self = [super init]) + { + SEL theSelector = @selector(init); + self->myImp = [self methodForSelector:theSelector]; + } + return self; +} +@end diff --git a/lldb/packages/Python/lldbsuite/test/lang/objc/ivar-IMP/repro.m b/lldb/packages/Python/lldbsuite/test/lang/objc/ivar-IMP/repro.m new file mode 100644 index 00000000000..dc522b224a1 --- /dev/null +++ b/lldb/packages/Python/lldbsuite/test/lang/objc/ivar-IMP/repro.m @@ -0,0 +1,7 @@ +#import <Foundation/Foundation.h> +#import "MyClass.h" + +int main() { + id object = [MyClass new]; + return 0; // break here +} |