summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMohit K. Bhakkad <mohit.bhakkad@gmail.com>2015-10-09 15:13:20 +0000
committerMohit K. Bhakkad <mohit.bhakkad@gmail.com>2015-10-09 15:13:20 +0000
commit18af8a20c554a4a5cfe90e1c301c6b509cc3e844 (patch)
treebcd9f2926bd98eca70f804c13803bb83edc5d7e5
parent5df85cebfb7f1d53b3d76ca4b0b9161e14a136e7 (diff)
downloadbcm5719-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.cpp23
-rw-r--r--lldb/watchpoint/watchpoint_on_vectors/Makefile5
-rw-r--r--lldb/watchpoint/watchpoint_on_vectors/TestValueOfVectorVariable.py56
-rw-r--r--lldb/watchpoint/watchpoint_on_vectors/main.c14
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()
+{
+}
OpenPOWER on IntegriCloud