Skip to content

Commit 557e393

Browse files
[WIP] Reflection
1 parent 5c5c1dc commit 557e393

File tree

4 files changed

+485
-2
lines changed

4 files changed

+485
-2
lines changed

include/swift/Remote/MemoryReader.h

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,28 @@ class MemoryReader {
9595
return true;
9696
}
9797

98+
bool readULEB128(RemoteAddress &address, uint64_t *dest) {
99+
uint64_t value = 0;
100+
uint32_t shift = 0;
101+
uint8_t byte;
102+
do {
103+
if (!readBytes(address, &byte, 1))
104+
return false;
105+
uint64_t slice = byte & 0x7F;
106+
if (LLVM_UNLIKELY(shift >= 63) &&
107+
((shift == 63 && (slice << shift >> shift) != slice) ||
108+
(shift > 63 && slice != 0))) {
109+
// too big for uint64
110+
return false;
111+
}
112+
value += slice << shift;
113+
shift += 7;
114+
address += 1;
115+
} while (byte >= 0x80);
116+
*dest = value;
117+
return true;
118+
}
119+
98120
template <typename T>
99121
ReadObjResult<T> readObj(RemoteAddress address) {
100122
auto bytes = readBytes(address, sizeof(T));

0 commit comments

Comments
 (0)