diff options
| author | Dawn Perchik <dawn@burble.org> | 2015-07-21 22:05:07 +0000 |
|---|---|---|
| committer | Dawn Perchik <dawn@burble.org> | 2015-07-21 22:05:07 +0000 |
| commit | 23b1decbe763783c630763c0ae9b7b20773131c8 (patch) | |
| tree | fdd11d22d8a0ab885562f2a07d7aa9720293bc19 /lldb/test/functionalities | |
| parent | f836c89c4953d9ca5e390b41e0ebc84c903a46c0 (diff) | |
| download | bcm5719-llvm-23b1decbe763783c630763c0ae9b7b20773131c8.tar.gz bcm5719-llvm-23b1decbe763783c630763c0ae9b7b20773131c8.zip | |
Add support for specifying a language to use when parsing breakpoints.
Target and breakpoints options were added:
breakpoint set --language lang --name func
settings set target.language pascal
These specify the Language to use when interpreting the breakpoint's
expression (note: currently only implemented for breakpoints on
identifiers). If the breakpoint language is not set, the target.language
setting is used.
This support is required by Pascal, for example, to set breakpoint at 'ns.foo'
for function 'foo' in namespace 'ns'.
Tests on the language were also added to Module::PrepareForFunctionNameLookup
for efficiency.
Reviewed by: clayborg
Subscribers: jingham, lldb-commits
Differential Revision: http://reviews.llvm.org/D11119
llvm-svn: 242844
Diffstat (limited to 'lldb/test/functionalities')
| -rw-r--r-- | lldb/test/functionalities/breakpoint/breakpoint_options/Makefile | 2 | ||||
| -rw-r--r-- | lldb/test/functionalities/breakpoint/breakpoint_options/TestBreakpointOptions.py | 41 | ||||
| -rw-r--r-- | lldb/test/functionalities/breakpoint/breakpoint_options/foo.cpp | 12 | ||||
| -rw-r--r-- | lldb/test/functionalities/breakpoint/breakpoint_options/main.cpp (renamed from lldb/test/functionalities/breakpoint/breakpoint_options/main.c) | 3 |
4 files changed, 49 insertions, 9 deletions
diff --git a/lldb/test/functionalities/breakpoint/breakpoint_options/Makefile b/lldb/test/functionalities/breakpoint/breakpoint_options/Makefile index b09a579159d..457c4972f2d 100644 --- a/lldb/test/functionalities/breakpoint/breakpoint_options/Makefile +++ b/lldb/test/functionalities/breakpoint/breakpoint_options/Makefile @@ -1,5 +1,5 @@ LEVEL = ../../../make -C_SOURCES := main.c +CXX_SOURCES := main.cpp foo.cpp include $(LEVEL)/Makefile.rules diff --git a/lldb/test/functionalities/breakpoint/breakpoint_options/TestBreakpointOptions.py b/lldb/test/functionalities/breakpoint/breakpoint_options/TestBreakpointOptions.py index b8704bda7d8..e86cdec7786 100644 --- a/lldb/test/functionalities/breakpoint/breakpoint_options/TestBreakpointOptions.py +++ b/lldb/test/functionalities/breakpoint/breakpoint_options/TestBreakpointOptions.py @@ -29,7 +29,7 @@ class BreakpointOptionsTestCase(TestBase): # Call super's setUp(). TestBase.setUp(self) # Find the line number to break inside main(). - self.line = line_number('main.c', '// Set break point at this line.') + self.line = line_number('main.cpp', '// Set break point at this line.') def breakpoint_options_test(self): """Test breakpoint command for different options.""" @@ -37,11 +37,11 @@ class BreakpointOptionsTestCase(TestBase): self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET) # This should create a breakpoint with 1 locations. - lldbutil.run_break_set_by_file_and_line (self, "main.c", self.line, extra_options = "-K 1", num_expected_locations = 1) - lldbutil.run_break_set_by_file_and_line (self, "main.c", self.line, extra_options = "-K 0", num_expected_locations = 1) + lldbutil.run_break_set_by_file_and_line (self, "main.cpp", self.line, extra_options = "-K 1", num_expected_locations = 1) + lldbutil.run_break_set_by_file_and_line (self, "main.cpp", self.line, extra_options = "-K 0", num_expected_locations = 1) # This should create a breakpoint 0 locations. - lldbutil.run_break_set_by_file_and_line (self, "main.c", self.line, extra_options = "-m 0", num_expected_locations = 0) + lldbutil.run_break_set_by_file_and_line (self, "main.cpp", self.line, extra_options = "-m 0", num_expected_locations = 0) # Run the program. self.runCmd("run", RUN_SUCCEEDED) @@ -52,9 +52,9 @@ class BreakpointOptionsTestCase(TestBase): # Check the list of breakpoint. self.expect("breakpoint list -f", "Breakpoint locations shown correctly", - substrs = ["1: file = 'main.c', line = %d, exact_match = 0, locations = 1" % self.line, - "2: file = 'main.c', line = %d, exact_match = 0, locations = 1" % self.line, - "3: file = 'main.c', line = %d, exact_match = 1, locations = 0" % self.line]) + substrs = ["1: file = 'main.cpp', line = %d, exact_match = 0, locations = 1" % self.line, + "2: file = 'main.cpp', line = %d, exact_match = 0, locations = 1" % self.line, + "3: file = 'main.cpp', line = %d, exact_match = 1, locations = 0" % self.line]) # Continue the program, there should be another stop. self.runCmd("process continue") @@ -70,6 +70,33 @@ class BreakpointOptionsTestCase(TestBase): self.expect("process status", "Process exited successfully", patterns = ["^Process [0-9]+ exited with status = 0"]) + def breakpoint_options_language_test(self): + """Test breakpoint command for language option.""" + exe = os.path.join(os.getcwd(), "a.out") + self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET) + + # This should create a breakpoint with 1 locations. + lldbutil.run_break_set_by_symbol (self, 'ns::func', sym_exact=False, extra_options = "-L c++", num_expected_locations=1) + + # This should create a breakpoint 0 locations. + lldbutil.run_break_set_by_symbol (self, 'ns::func', sym_exact=False, extra_options = "-L c", num_expected_locations=0) + self.runCmd("settings set target.language c") + lldbutil.run_break_set_by_symbol (self, 'ns::func', sym_exact=False, num_expected_locations=0) + + # Run the program. + self.runCmd("run", RUN_SUCCEEDED) + + # Stopped once. + self.expect("thread backtrace", STOPPED_DUE_TO_BREAKPOINT, + substrs = ["stop reason = breakpoint 1."]) + + # Continue the program, we should exit. + self.runCmd("process continue") + + # We should exit. + self.expect("process status", "Process exited successfully", + patterns = ["^Process [0-9]+ exited with status = 0"]) + if __name__ == '__main__': import atexit lldb.SBDebugger.Initialize() diff --git a/lldb/test/functionalities/breakpoint/breakpoint_options/foo.cpp b/lldb/test/functionalities/breakpoint/breakpoint_options/foo.cpp new file mode 100644 index 00000000000..e5d0e09803e --- /dev/null +++ b/lldb/test/functionalities/breakpoint/breakpoint_options/foo.cpp @@ -0,0 +1,12 @@ + +namespace ns { + int func(void) + { + return 0; + } +} + +extern "C" int foo(void) +{ + return ns::func(); +} diff --git a/lldb/test/functionalities/breakpoint/breakpoint_options/main.c b/lldb/test/functionalities/breakpoint/breakpoint_options/main.cpp index 359e977cd39..363b90003d7 100644 --- a/lldb/test/functionalities/breakpoint/breakpoint_options/main.c +++ b/lldb/test/functionalities/breakpoint/breakpoint_options/main.cpp @@ -1,7 +1,8 @@ // Set break point at this line. +extern "C" int foo(void); int main (int argc, char **argv) { - return 0; + return foo(); } |

