Skip to content
2 changes: 1 addition & 1 deletion compiler-rt/lib/sanitizer_common/sanitizer_common.h
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,7 @@ bool IsAccessibleMemoryRange(uptr beg, uptr size);
// Returns true if we can read a memory range starting at `src`, and copies
// content into `dest`.
bool TryMemCpy(void *dest, const void *src, uptr n);
// Copies accesible memory, and zero fill the rest.
// Copies accessible memory, and zero fill the rest.
void MemCpyAccessible(void *dest, const void *src, uptr n);

// Error report formatting.
Expand Down
14 changes: 7 additions & 7 deletions compiler-rt/lib/sanitizer_common/sanitizer_common_libcdep.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -230,18 +230,18 @@ void MemCpyAccessible(void *dest, const void *src, uptr n) {
uptr e = reinterpret_cast<uptr>(src) + n;
uptr e_down = RoundDownTo(e, page_size);

auto copy_or_zero = [dest, src](uptr b, uptr e) {
uptr d = reinterpret_cast<uptr>(dest) + (b - reinterpret_cast<uptr>(src));
if (!TryMemCpy(reinterpret_cast<void *>(d), reinterpret_cast<void *>(b),
e - b))
internal_memset(reinterpret_cast<void *>(d), 0, e - b);
const uptr off = reinterpret_cast<uptr>(dest) - b;

auto copy_or_zero = [off](uptr beg, uptr end) {
void *d = reinterpret_cast<void *>(beg + off);
const uptr size = end - beg;
if (!TryMemCpy(d, reinterpret_cast<void *>(beg), size))
internal_memset(d, 0, size);
};

copy_or_zero(b, b_up);

for (uptr p = b_up; p < e_down; p += page_size)
copy_or_zero(p, p + page_size);

copy_or_zero(e_down, e);
}

Expand Down
Loading