Skip to content

Commit

Permalink
[LLDB] Fix display of value of a vector variables in watchpoint opera…
Browse files Browse the repository at this point in the history
…tions

Reviewers: clayborg, zturner.
Subscribers: jaydeep, bhushan, sagar, nitesh.jain, brucem,lldb-commits.
Differential Revision: http://reviews.llvm.org/D13202

llvm-svn: 249838
  • Loading branch information
Mohit7 committed Oct 9, 2015
1 parent 5df85ce commit 18af8a2
Showing 4 changed files with 95 additions and 3 deletions.
23 changes: 20 additions & 3 deletions lldb/source/Breakpoint/Watchpoint.cpp
Original file line number Diff line number Diff line change
@@ -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);
}
}
}

5 changes: 5 additions & 0 deletions lldb/watchpoint/watchpoint_on_vectors/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
LEVEL = ../../../make

C_SOURCES := main.c

include $(LEVEL)/Makefile.rules
56 changes: 56 additions & 0 deletions lldb/watchpoint/watchpoint_on_vectors/TestValueOfVectorVariable.py
Original file line number Diff line number Diff line change
@@ -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()
14 changes: 14 additions & 0 deletions lldb/watchpoint/watchpoint_on_vectors/main.c
Original file line number Diff line number Diff line change
@@ -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()
{
}

0 comments on commit 18af8a2

Please sign in to comment.