Skip to content

Commit cdb3381

Browse files
Merge pull request #10818 from adrian-prantl/151330005-6.2
[lldb] Make private type reflection metadata available from the file …
2 parents 2210f33 + 56244a1 commit cdb3381

File tree

5 files changed

+47
-0
lines changed

5 files changed

+47
-0
lines changed

lldb/source/Plugins/LanguageRuntime/Swift/LLDBMemoryReader.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -605,6 +605,19 @@ LLDBMemoryReader::getFileAddressAndModuleForTaggedAddress(
605605
return {{file_address, module}};
606606
}
607607

608+
std::optional<swift::reflection::RemoteAddress>
609+
LLDBMemoryReader::resolveRemoteAddress(
610+
swift::reflection::RemoteAddress address) const {
611+
std::optional<Address> lldb_address =
612+
LLDBMemoryReader::resolveRemoteAddress(address.getAddressData());
613+
if (!lldb_address)
614+
return {};
615+
lldb::addr_t addr = lldb_address->GetLoadAddress(&m_process.GetTarget());
616+
if (addr != LLDB_INVALID_ADDRESS)
617+
return swift::reflection::RemoteAddress(addr);
618+
return {};
619+
}
620+
608621
std::optional<Address>
609622
LLDBMemoryReader::resolveRemoteAddress(uint64_t address) const {
610623
Log *log(GetLog(LLDBLog::Types));

lldb/source/Plugins/LanguageRuntime/Swift/LLDBMemoryReader.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,9 @@ class LLDBMemoryReader : public swift::remote::MemoryReader {
7777
resolvePointer(swift::remote::RemoteAddress address,
7878
uint64_t readValue) override;
7979

80+
std::optional<swift::remote::RemoteAddress>
81+
resolveRemoteAddress(swift::remote::RemoteAddress address) const override;
82+
8083
bool readBytes(swift::remote::RemoteAddress address, uint8_t *dest,
8184
uint64_t size) override;
8285

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
SWIFT_SOURCES := main.swift
2+
include Makefile.rules
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import lldb
2+
from lldbsuite.test.lldbtest import *
3+
from lldbsuite.test.decorators import *
4+
import lldbsuite.test.lldbutil as lldbutil
5+
6+
class TestSwiftObservation(TestBase):
7+
NO_DEBUG_INFO_TESTCASE = True
8+
@swiftTest
9+
def test(self):
10+
"""Test that types with private discriminators read from the file cache work"""
11+
self.build()
12+
lldbutil.run_to_source_breakpoint(self, 'break here',
13+
lldb.SBFileSpec('main.swift'))
14+
# FIXME: Private discriminators are UUIDs in DWARF and pointers
15+
# in Reflection metafdata, making tham not comparable.
16+
# rdar://74374120
17+
self.expect("settings set symbols.swift-validate-typesystem false")
18+
self.expect("settings set target.experimental.swift-read-metadata-from-file-cache true")
19+
r = self.frame().FindVariable("r")
20+
extent = r.GetChildAtIndex(0)
21+
self.assertEqual(extent.GetName(), "extent")
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import Observation
2+
3+
func f() {
4+
let r = ObservationRegistrar()
5+
print("break here")
6+
}
7+
8+
f()

0 commit comments

Comments
 (0)