summaryrefslogtreecommitdiff
path: root/packages/Python/lldbsuite/test/lang/cpp/dynamic-value
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2019-08-20 18:01:57 +0000
committerDimitry Andric <dim@FreeBSD.org>2019-08-20 18:01:57 +0000
commit88c643b6fec27eec436c8d138fee6346e92337d6 (patch)
tree82cd13b2f3cde1c9e5f79689ba4e6ba67694843f /packages/Python/lldbsuite/test/lang/cpp/dynamic-value
parent94994d372d014ce4c8758b9605d63fae651bd8aa (diff)
Notes
Diffstat (limited to 'packages/Python/lldbsuite/test/lang/cpp/dynamic-value')
-rw-r--r--packages/Python/lldbsuite/test/lang/cpp/dynamic-value/Makefile5
-rw-r--r--packages/Python/lldbsuite/test/lang/cpp/dynamic-value/TestCppValueCast.py138
-rw-r--r--packages/Python/lldbsuite/test/lang/cpp/dynamic-value/TestDynamicValue.py253
-rw-r--r--packages/Python/lldbsuite/test/lang/cpp/dynamic-value/pass-to-base.cpp69
-rw-r--r--packages/Python/lldbsuite/test/lang/cpp/dynamic-value/sbvalue-cast.cpp80
5 files changed, 0 insertions, 545 deletions
diff --git a/packages/Python/lldbsuite/test/lang/cpp/dynamic-value/Makefile b/packages/Python/lldbsuite/test/lang/cpp/dynamic-value/Makefile
deleted file mode 100644
index 8770b2343ef0..000000000000
--- a/packages/Python/lldbsuite/test/lang/cpp/dynamic-value/Makefile
+++ /dev/null
@@ -1,5 +0,0 @@
-LEVEL = ../../../make
-
-CXX_SOURCES := pass-to-base.cpp
-
-include $(LEVEL)/Makefile.rules
diff --git a/packages/Python/lldbsuite/test/lang/cpp/dynamic-value/TestCppValueCast.py b/packages/Python/lldbsuite/test/lang/cpp/dynamic-value/TestCppValueCast.py
deleted file mode 100644
index 497f17f4454c..000000000000
--- a/packages/Python/lldbsuite/test/lang/cpp/dynamic-value/TestCppValueCast.py
+++ /dev/null
@@ -1,138 +0,0 @@
-"""
-Test lldb Python API SBValue::Cast(SBType) for C++ types.
-"""
-
-from __future__ import print_function
-
-
-import unittest2
-import os
-import time
-import re
-import lldb
-from lldbsuite.test.decorators import *
-from lldbsuite.test.lldbtest import *
-from lldbsuite.test import lldbutil
-
-
-class CppValueCastTestCase(TestBase):
-
- mydir = TestBase.compute_mydir(__file__)
-
- @skipIf(bugnumber="llvm.org/PR36714")
- @add_test_categories(['pyapi'])
- def test_value_cast_with_virtual_inheritance(self):
- """Test SBValue::Cast(SBType) API for C++ types with virtual inheritance."""
- self.build(dictionary=self.d_virtual)
- self.setTearDownCleanup(dictionary=self.d_virtual)
- self.do_sbvalue_cast(self.exe_name)
-
- @add_test_categories(['pyapi'])
- def test_value_cast_with_regular_inheritance(self):
- """Test SBValue::Cast(SBType) API for C++ types with regular inheritance."""
- self.build(dictionary=self.d_regular)
- self.setTearDownCleanup(dictionary=self.d_regular)
- self.do_sbvalue_cast(self.exe_name)
-
- def setUp(self):
- # Call super's setUp().
- TestBase.setUp(self)
-
- # Find the line number to break for main.c.
- self.source = 'sbvalue-cast.cpp'
- self.line = line_number(self.source, '// Set breakpoint here.')
- self.exe_name = self.testMethodName
- self.d_virtual = {
- 'CXX_SOURCES': self.source,
- 'EXE': self.exe_name,
- 'CFLAGS_EXTRAS': '-DDO_VIRTUAL_INHERITANCE'}
- self.d_regular = {'CXX_SOURCES': self.source, 'EXE': self.exe_name}
-
- def do_sbvalue_cast(self, exe_name):
- """Test SBValue::Cast(SBType) API for C++ types."""
- exe = self.getBuildArtifact(exe_name)
-
- # Create a target from the debugger.
-
- target = self.dbg.CreateTarget(exe)
- self.assertTrue(target, VALID_TARGET)
-
- # Set up our breakpoints:
-
- breakpoint = target.BreakpointCreateByLocation(self.source, self.line)
- self.assertTrue(breakpoint, VALID_BREAKPOINT)
-
- # 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)
-
- # Find DerivedA and DerivedB types.
- typeA = target.FindFirstType('DerivedA')
- typeB = target.FindFirstType('DerivedB')
- self.DebugSBType(typeA)
- self.DebugSBType(typeB)
- self.assertTrue(typeA)
- self.assertTrue(typeB)
- error = lldb.SBError()
-
- # First stop is for DerivedA instance.
- threads = lldbutil.get_threads_stopped_at_breakpoint(
- process, breakpoint)
- self.assertTrue(len(threads) == 1)
- thread = threads[0]
- frame0 = thread.GetFrameAtIndex(0)
-
- tellerA = frame0.FindVariable('teller', lldb.eNoDynamicValues)
- self.DebugSBValue(tellerA)
- self.assertTrue(tellerA.GetChildMemberWithName(
- 'm_base_val').GetValueAsUnsigned(error, 0) == 20)
-
- if self.TraceOn():
- for child in tellerA:
- print("child name:", child.GetName())
- print(child)
-
- # Call SBValue.Cast() to obtain instanceA.
- instanceA = tellerA.Cast(typeA.GetPointerType())
- self.DebugSBValue(instanceA)
-
- # Iterate through all the children and print their values.
- if self.TraceOn():
- for child in instanceA:
- print("child name:", child.GetName())
- print(child)
- a_member_val = instanceA.GetChildMemberWithName('m_a_val')
- self.DebugSBValue(a_member_val)
- self.assertTrue(a_member_val.GetValueAsUnsigned(error, 0) == 10)
-
- # Second stop is for DerivedB instance.
- threads = lldbutil.continue_to_breakpoint(process, breakpoint)
- self.assertTrue(len(threads) == 1)
- thread = threads[0]
- frame0 = thread.GetFrameAtIndex(0)
-
- tellerB = frame0.FindVariable('teller', lldb.eNoDynamicValues)
- self.DebugSBValue(tellerB)
- self.assertTrue(tellerB.GetChildMemberWithName(
- 'm_base_val').GetValueAsUnsigned(error, 0) == 12)
-
- if self.TraceOn():
- for child in tellerB:
- print("child name:", child.GetName())
- print(child)
-
- # Call SBValue.Cast() to obtain instanceB.
- instanceB = tellerB.Cast(typeB.GetPointerType())
- self.DebugSBValue(instanceB)
-
- # Iterate through all the children and print their values.
- if self.TraceOn():
- for child in instanceB:
- print("child name:", child.GetName())
- print(child)
- b_member_val = instanceB.GetChildMemberWithName('m_b_val')
- self.DebugSBValue(b_member_val)
- self.assertTrue(b_member_val.GetValueAsUnsigned(error, 0) == 36)
diff --git a/packages/Python/lldbsuite/test/lang/cpp/dynamic-value/TestDynamicValue.py b/packages/Python/lldbsuite/test/lang/cpp/dynamic-value/TestDynamicValue.py
deleted file mode 100644
index acda4261b113..000000000000
--- a/packages/Python/lldbsuite/test/lang/cpp/dynamic-value/TestDynamicValue.py
+++ /dev/null
@@ -1,253 +0,0 @@
-"""
-Use lldb Python API to test dynamic values in C++
-"""
-
-from __future__ import print_function
-
-
-import os
-import time
-import re
-import lldb
-from lldbsuite.test.decorators import *
-from lldbsuite.test.lldbtest import *
-from lldbsuite.test import lldbutil
-
-
-class DynamicValueTestCase(TestBase):
-
- mydir = TestBase.compute_mydir(__file__)
-
- def setUp(self):
- # Call super's setUp().
- TestBase.setUp(self)
-
- # Find the line number to break for main.c.
-
- self.do_something_line = line_number(
- 'pass-to-base.cpp', '// Break here in doSomething.')
- self.main_first_call_line = line_number(
- 'pass-to-base.cpp',
- '// Break here and get real addresses of myB and otherB.')
- self.main_second_call_line = line_number(
- 'pass-to-base.cpp', '// Break here and get real address of reallyA.')
-
- @add_test_categories(['pyapi'])
- @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24663")
- def test_get_dynamic_vals(self):
- """Test fetching C++ dynamic values from pointers & references."""
- self.build(dictionary=self.getBuildFlags())
- exe = self.getBuildArtifact("a.out")
-
- # Create a target from the debugger.
-
- target = self.dbg.CreateTarget(exe)
- self.assertTrue(target, VALID_TARGET)
-
- # Set up our breakpoints:
-
- do_something_bpt = target.BreakpointCreateByLocation(
- 'pass-to-base.cpp', self.do_something_line)
- self.assertTrue(do_something_bpt,
- VALID_BREAKPOINT)
-
- first_call_bpt = target.BreakpointCreateByLocation(
- 'pass-to-base.cpp', self.main_first_call_line)
- self.assertTrue(first_call_bpt,
- VALID_BREAKPOINT)
-
- second_call_bpt = target.BreakpointCreateByLocation(
- 'pass-to-base.cpp', self.main_second_call_line)
- self.assertTrue(second_call_bpt,
- VALID_BREAKPOINT)
-
- # 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)
-
- threads = lldbutil.get_threads_stopped_at_breakpoint(
- process, first_call_bpt)
- self.assertTrue(len(threads) == 1)
- thread = threads[0]
-
- frame = thread.GetFrameAtIndex(0)
-
- # Now find the dynamic addresses of myB and otherB so we can compare them
- # with the dynamic values we get in doSomething:
-
- use_dynamic = lldb.eDynamicCanRunTarget
- no_dynamic = lldb.eNoDynamicValues
-
- myB = frame.FindVariable('myB', no_dynamic)
- self.assertTrue(myB)
- myB_loc = int(myB.GetLocation(), 16)
-
- otherB = frame.FindVariable('otherB', no_dynamic)
- self.assertTrue(otherB)
- otherB_loc = int(otherB.GetLocation(), 16)
-
- # Okay now run to doSomething:
-
- threads = lldbutil.continue_to_breakpoint(process, do_something_bpt)
- self.assertTrue(len(threads) == 1)
- thread = threads[0]
-
- frame = thread.GetFrameAtIndex(0)
-
- # Get "this" using FindVariable:
-
- this_static = frame.FindVariable('this', no_dynamic)
- this_dynamic = frame.FindVariable('this', use_dynamic)
- self.examine_value_object_of_this_ptr(
- this_static, this_dynamic, myB_loc)
-
- # Now make sure that the "GetDynamicValue" works:
- # This doesn't work currently because we can't get dynamic values from
- # ConstResult objects.
- fetched_dynamic_value = this_static.GetDynamicValue(use_dynamic)
- self.examine_value_object_of_this_ptr(
- this_static, fetched_dynamic_value, myB_loc)
-
- # And conversely that the GetDynamicValue() interface also works:
- fetched_static_value = this_dynamic.GetStaticValue()
- self.examine_value_object_of_this_ptr(
- fetched_static_value, this_dynamic, myB_loc)
-
- # Get "this" using FindValue, make sure that works too:
- this_static = frame.FindValue(
- 'this', lldb.eValueTypeVariableArgument, no_dynamic)
- this_dynamic = frame.FindValue(
- 'this', lldb.eValueTypeVariableArgument, use_dynamic)
- self.examine_value_object_of_this_ptr(
- this_static, this_dynamic, myB_loc)
-
- # Get "this" using the EvaluateExpression:
- this_static = frame.EvaluateExpression('this', False)
- this_dynamic = frame.EvaluateExpression('this', True)
- self.examine_value_object_of_this_ptr(
- this_static, this_dynamic, myB_loc)
-
- # The "frame var" code uses another path to get into children, so let's
- # make sure that works as well:
-
- self.expect(
- 'frame var -d run-target --ptr-depth=2 --show-types anotherA.m_client_A',
- 'frame var finds its way into a child member',
- patterns=['\(B \*\)'])
-
- # Now make sure we also get it right for a reference as well:
-
- anotherA_static = frame.FindVariable('anotherA', False)
- self.assertTrue(anotherA_static)
- anotherA_static_addr = int(anotherA_static.GetValue(), 16)
-
- anotherA_dynamic = frame.FindVariable('anotherA', True)
- self.assertTrue(anotherA_dynamic)
- anotherA_dynamic_addr = int(anotherA_dynamic.GetValue(), 16)
- anotherA_dynamic_typename = anotherA_dynamic.GetTypeName()
- self.assertTrue(anotherA_dynamic_typename.find('B') != -1)
-
- self.assertTrue(anotherA_dynamic_addr < anotherA_static_addr)
-
- anotherA_m_b_value_dynamic = anotherA_dynamic.GetChildMemberWithName(
- 'm_b_value', True)
- self.assertTrue(anotherA_m_b_value_dynamic)
- anotherA_m_b_val = int(anotherA_m_b_value_dynamic.GetValue(), 10)
- self.assertTrue(anotherA_m_b_val == 300)
-
- anotherA_m_b_value_static = anotherA_static.GetChildMemberWithName(
- 'm_b_value', True)
- self.assertFalse(anotherA_m_b_value_static)
-
- # Okay, now continue again, and when we hit the second breakpoint in
- # main
-
- threads = lldbutil.continue_to_breakpoint(process, second_call_bpt)
- self.assertTrue(len(threads) == 1)
- thread = threads[0]
-
- frame = thread.GetFrameAtIndex(0)
- reallyA_value = frame.FindVariable('reallyA', False)
- self.assertTrue(reallyA_value)
- reallyA_loc = int(reallyA_value.GetLocation(), 16)
-
- # Finally continue to doSomething again, and make sure we get the right value for anotherA,
- # which this time around is just an "A".
-
- threads = lldbutil.continue_to_breakpoint(process, do_something_bpt)
- self.assertTrue(len(threads) == 1)
- thread = threads[0]
-
- frame = thread.GetFrameAtIndex(0)
- anotherA_value = frame.FindVariable('anotherA', True)
- self.assertTrue(anotherA_value)
- anotherA_loc = int(anotherA_value.GetValue(), 16)
- self.assertTrue(anotherA_loc == reallyA_loc)
- self.assertTrue(anotherA_value.GetTypeName().find('B') == -1)
-
- def examine_value_object_of_this_ptr(
- self, this_static, this_dynamic, dynamic_location):
- # Get "this" as its static value
- self.assertTrue(this_static)
- this_static_loc = int(this_static.GetValue(), 16)
-
- # Get "this" as its dynamic value
-
- self.assertTrue(this_dynamic)
- this_dynamic_typename = this_dynamic.GetTypeName()
- self.assertTrue(this_dynamic_typename.find('B') != -1)
- this_dynamic_loc = int(this_dynamic.GetValue(), 16)
-
- # Make sure we got the right address for "this"
-
- self.assertTrue(this_dynamic_loc == dynamic_location)
-
- # And that the static address is greater than the dynamic one
-
- self.assertTrue(this_static_loc > this_dynamic_loc)
-
- # Now read m_b_value which is only in the dynamic value:
-
- use_dynamic = lldb.eDynamicCanRunTarget
- no_dynamic = lldb.eNoDynamicValues
-
- this_dynamic_m_b_value = this_dynamic.GetChildMemberWithName(
- 'm_b_value', use_dynamic)
- self.assertTrue(this_dynamic_m_b_value)
-
- m_b_value = int(this_dynamic_m_b_value.GetValue(), 0)
- self.assertTrue(m_b_value == 10)
-
- # Make sure it is not in the static version
-
- this_static_m_b_value = this_static.GetChildMemberWithName(
- 'm_b_value', no_dynamic)
- self.assertFalse(this_static_m_b_value)
-
- # Okay, now let's make sure that we can get the dynamic type of a child
- # element:
-
- contained_auto_ptr = this_dynamic.GetChildMemberWithName(
- 'm_client_A', use_dynamic)
- self.assertTrue(contained_auto_ptr)
- contained_b = contained_auto_ptr.GetChildMemberWithName(
- '_M_ptr', use_dynamic)
- if not contained_b:
- contained_b = contained_auto_ptr.GetChildMemberWithName(
- '__ptr_', use_dynamic)
- self.assertTrue(contained_b)
-
- contained_b_static = contained_auto_ptr.GetChildMemberWithName(
- '_M_ptr', no_dynamic)
- if not contained_b_static:
- contained_b_static = contained_auto_ptr.GetChildMemberWithName(
- '__ptr_', no_dynamic)
- self.assertTrue(contained_b_static)
-
- contained_b_addr = int(contained_b.GetValue(), 16)
- contained_b_static_addr = int(contained_b_static.GetValue(), 16)
-
- self.assertTrue(contained_b_addr < contained_b_static_addr)
diff --git a/packages/Python/lldbsuite/test/lang/cpp/dynamic-value/pass-to-base.cpp b/packages/Python/lldbsuite/test/lang/cpp/dynamic-value/pass-to-base.cpp
deleted file mode 100644
index 2bccf3303823..000000000000
--- a/packages/Python/lldbsuite/test/lang/cpp/dynamic-value/pass-to-base.cpp
+++ /dev/null
@@ -1,69 +0,0 @@
-#include <stdio.h>
-#include <memory>
-
-class Extra
-{
-public:
- Extra (int in_one, int in_two) : m_extra_one(in_one), m_extra_two(in_two) {}
-
-private:
- int m_extra_one;
- int m_extra_two;
-};
-
-class A
-{
-public:
- A(int value) : m_a_value (value) {}
- A(int value, A* client_A) : m_a_value (value), m_client_A (client_A) {}
-
- virtual ~A() {}
-
- virtual void
- doSomething (A &anotherA)
- {
- printf ("In A %p doing something with %d.\n", this, m_a_value);
- int tmp_value = anotherA.Value();
- printf ("Also have another A at %p: %d.\n", &anotherA, tmp_value); // Break here in doSomething.
- }
-
- int
- Value()
- {
- return m_a_value;
- }
-
-private:
- int m_a_value;
- std::auto_ptr<A> m_client_A;
-};
-
-class B : public Extra, public virtual A
-{
-public:
- B (int b_value, int a_value) : Extra(b_value, a_value), A(a_value), m_b_value(b_value) {}
- B (int b_value, int a_value, A *client_A) : Extra(b_value, a_value), A(a_value, client_A), m_b_value(b_value) {}
-
- virtual ~B () {}
-
-private:
- int m_b_value;
-};
-
-static A* my_global_A_ptr;
-
-int
-main (int argc, char **argv)
-{
- my_global_A_ptr = new B (100, 200);
- B myB (10, 20, my_global_A_ptr);
- B *second_fake_A_ptr = new B (150, 250);
- B otherB (300, 400, second_fake_A_ptr);
-
- myB.doSomething(otherB); // Break here and get real addresses of myB and otherB.
-
- A reallyA (500);
- myB.doSomething (reallyA); // Break here and get real address of reallyA.
-
- return 0;
-}
diff --git a/packages/Python/lldbsuite/test/lang/cpp/dynamic-value/sbvalue-cast.cpp b/packages/Python/lldbsuite/test/lang/cpp/dynamic-value/sbvalue-cast.cpp
deleted file mode 100644
index 00fd7dad438c..000000000000
--- a/packages/Python/lldbsuite/test/lang/cpp/dynamic-value/sbvalue-cast.cpp
+++ /dev/null
@@ -1,80 +0,0 @@
-//===-- sbvalue-cast.cpp ----------------------------------------*- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-#ifdef DO_VIRTUAL_INHERITANCE
-#define VIRTUAL virtual
-#else
-#define VIRTUAL
-#endif
-
-#include <stdio.h>
-
-class Base
-{
-public:
- Base(int val) : m_base_val (val) {}
- virtual ~Base() {}
-
- virtual void
- forcast(int input) {
- int future_val = m_base_val + input * 1;
- printf("Forcasting %d\n", future_val);
- }
-
-protected:
- int m_base_val;
-};
-
-class DerivedA : public VIRTUAL Base
-{
-public:
- DerivedA(int val) : Base(val*2), m_a_val(val) {
- printf("DerivedA::ctor()->\n");
- printf("m_base_val=%d\n", m_base_val);
- printf("m_a_val=%d\n", m_a_val);
- }
- virtual ~DerivedA() {}
-
-private:
- int m_a_val;
-};
-
-class DerivedB : public VIRTUAL Base
-{
-public:
- DerivedB(int val) : Base(val), m_b_val(val*3) {
- printf("DerivedB::ctor()->\n");
- printf("m_base_val=%d\n", m_base_val);
- printf("m_b_val=%d\n", m_b_val);
- }
- virtual ~DerivedB() {}
-
- virtual void
- forcast(int input) {
- int future_val = m_b_val + input * 2;
- printf("Forcasting %d\n", future_val);
- }
-
-private:
- int m_b_val;
-};
-
-int
-main(int argc, char **argv)
-{
- DerivedA* dA = new DerivedA(10);
- DerivedB* dB = new DerivedB(12);
- Base *array[2] = {dA, dB};
- Base *teller = NULL;
- for (int i = 0; i < 2; ++i) {
- teller = array[i];
- teller->forcast(i); // Set breakpoint here.
- }
-
- return 0;
-}