diff options
author | Mohit K. Bhakkad <mohit.bhakkad@gmail.com> | 2015-10-09 15:13:20 +0000 |
---|---|---|
committer | Mohit K. Bhakkad <mohit.bhakkad@gmail.com> | 2015-10-09 15:13:20 +0000 |
commit | 18af8a20c554a4a5cfe90e1c301c6b509cc3e844 (patch) | |
tree | bcd9f2926bd98eca70f804c13803bb83edc5d7e5 | |
parent | 5df85cebfb7f1d53b3d76ca4b0b9161e14a136e7 (diff) | |
download | bcm5719-llvm-18af8a20c554a4a5cfe90e1c301c6b509cc3e844.tar.gz bcm5719-llvm-18af8a20c554a4a5cfe90e1c301c6b509cc3e844.zip |
[LLDB] Fix display of value of a vector variables in watchpoint operations
Reviewers: clayborg, zturner.
Subscribers: jaydeep, bhushan, sagar, nitesh.jain, brucem,lldb-commits.
Differential Revision: http://reviews.llvm.org/D13202
llvm-svn: 249838
-rw-r--r-- | lldb/source/Breakpoint/Watchpoint.cpp | 23 | ||||
-rw-r--r-- | lldb/watchpoint/watchpoint_on_vectors/Makefile | 5 | ||||
-rw-r--r-- | lldb/watchpoint/watchpoint_on_vectors/TestValueOfVectorVariable.py | 56 | ||||
-rw-r--r-- | lldb/watchpoint/watchpoint_on_vectors/main.c | 14 |
4 files changed, 95 insertions, 3 deletions
diff --git a/lldb/source/Breakpoint/Watchpoint.cpp b/lldb/source/Breakpoint/Watchpoint.cpp index 41b24fd67df..f1cb679c61d 100644 --- a/lldb/source/Breakpoint/Watchpoint.cpp +++ b/lldb/source/Breakpoint/Watchpoint.cpp @@ -218,14 +218,31 @@ Watchpoint::DumpSnapshots(Stream *s, const char *prefix) const s->Printf("\nWatchpoint %u hit:", GetID()); prefix = ""; } - + if (m_old_value_sp) { - s->Printf("\n%sold value: %s", prefix, m_old_value_sp->GetValueAsCString()); + const char *old_value_cstr = m_old_value_sp->GetValueAsCString(); + if (old_value_cstr && old_value_cstr[0]) + s->Printf("\n%sold value: %s", prefix, old_value_cstr); + else + { + const char *old_summary_cstr = m_old_value_sp-> GetSummaryAsCString(); + if (old_summary_cstr && old_summary_cstr[0]) + s->Printf("\n%sold value: %s", prefix, old_summary_cstr); + } } + if (m_new_value_sp) { - s->Printf("\n%snew value: %s", prefix, m_new_value_sp->GetValueAsCString()); + const char *new_value_cstr = m_new_value_sp->GetValueAsCString(); + if (new_value_cstr && new_value_cstr[0]) + s->Printf("\n%snew value: %s", prefix, new_value_cstr); + else + { + const char *new_summary_cstr = m_new_value_sp-> GetSummaryAsCString(); + if (new_summary_cstr && new_summary_cstr[0]) + s->Printf("\n%snew value: %s", prefix, new_summary_cstr); + } } } diff --git a/lldb/watchpoint/watchpoint_on_vectors/Makefile b/lldb/watchpoint/watchpoint_on_vectors/Makefile new file mode 100644 index 00000000000..b09a579159d --- /dev/null +++ b/lldb/watchpoint/watchpoint_on_vectors/Makefile @@ -0,0 +1,5 @@ +LEVEL = ../../../make + +C_SOURCES := main.c + +include $(LEVEL)/Makefile.rules diff --git a/lldb/watchpoint/watchpoint_on_vectors/TestValueOfVectorVariable.py b/lldb/watchpoint/watchpoint_on_vectors/TestValueOfVectorVariable.py new file mode 100644 index 00000000000..aae807e80f0 --- /dev/null +++ b/lldb/watchpoint/watchpoint_on_vectors/TestValueOfVectorVariable.py @@ -0,0 +1,56 @@ +""" +Test displayed value of a vector variable while doing watchpoint operations +""" + +import os, time +import unittest2 +import lldb +from lldbtest import * +import lldbutil + +class TestValueOfVectorVariableTestCase(TestBase): + + mydir = TestBase.compute_mydir(__file__) + + @dsym_test + def test_value_of_vector_variable_with_dsym_using_watchpoint_set(self): + """Test verify displayed value of vector variable.""" + self.buildDsym(dictionary=self.d) + self.setTearDownCleanup(dictionary=self.d) + self.value_of_vector_variable_with_watchpoint_set() + + @dwarf_test + def test_value_of_vector_variable_with_dwarf_using_watchpoint_set(self): + """Test verify displayed value of vector variable.""" + self.buildDwarf(dictionary=self.d) + self.setTearDownCleanup(dictionary=self.d) + self.value_of_vector_variable_with_watchpoint_set() + + def setUp(self): + # Call super's setUp(). + TestBase.setUp(self) + # Our simple source filename. + self.source = 'main.c' + self.exe_name = 'a.out' + self.d = {'C_SOURCES': self.source, 'EXE': self.exe_name} + + def value_of_vector_variable_with_watchpoint_set(self): + """Test verify displayed value of vector variable""" + exe = os.path.join(os.getcwd(), 'a.out') + self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET) + + # Set break to get a frame + self.runCmd("b main") + + # Run the program. + self.runCmd("run", RUN_SUCCEEDED) + + # Value of a vector variable should be displayed correctly + self.expect("watchpoint set variable global_vector", WATCHPOINT_CREATED, + substrs = ['new value: (1, 2, 3, 4, 5, 6, 7, 8)']) + +if __name__ == '__main__': + import atexit + lldb.SBDebugger.Initialize() + atexit.register(lambda: lldb.SBDebugger.Terminate()) + unittest2.main() diff --git a/lldb/watchpoint/watchpoint_on_vectors/main.c b/lldb/watchpoint/watchpoint_on_vectors/main.c new file mode 100644 index 00000000000..95f7fc2fc1b --- /dev/null +++ b/lldb/watchpoint/watchpoint_on_vectors/main.c @@ -0,0 +1,14 @@ +//===-- main.c --------------------------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +typedef short v8i16 __attribute__ ((vector_size(16))); +v8i16 global_vector = {1, 2, 3, 4, 5, 6, 7, 8}; + +int main() +{ +} |