[sanitizer] Make InternalScopedBuffer::size() behavior similar to vector.
llvm-svn: 331612
This commit is contained in:
parent
c882014f43
commit
20f49662f6
|
@ -216,7 +216,8 @@ static void ProcessThreads(SuspendedThreadsList const &suspended_threads,
|
||||||
Frontier *frontier) {
|
Frontier *frontier) {
|
||||||
InternalScopedBuffer<uptr> registers(suspended_threads.RegisterCount());
|
InternalScopedBuffer<uptr> registers(suspended_threads.RegisterCount());
|
||||||
uptr registers_begin = reinterpret_cast<uptr>(registers.data());
|
uptr registers_begin = reinterpret_cast<uptr>(registers.data());
|
||||||
uptr registers_end = registers_begin + registers.size();
|
uptr registers_end =
|
||||||
|
reinterpret_cast<uptr>(registers.data() + registers.size());
|
||||||
for (uptr i = 0; i < suspended_threads.ThreadCount(); i++) {
|
for (uptr i = 0; i < suspended_threads.ThreadCount(); i++) {
|
||||||
tid_t os_id = static_cast<tid_t>(suspended_threads.GetThreadID(i));
|
tid_t os_id = static_cast<tid_t>(suspended_threads.GetThreadID(i));
|
||||||
LOG_THREADS("Processing thread %d.\n", os_id);
|
LOG_THREADS("Processing thread %d.\n", os_id);
|
||||||
|
|
|
@ -165,7 +165,7 @@ class InternalScopedBuffer {
|
||||||
~InternalScopedBuffer() { UnmapOrDie(ptr_, cnt_ * sizeof(T)); }
|
~InternalScopedBuffer() { UnmapOrDie(ptr_, cnt_ * sizeof(T)); }
|
||||||
T &operator[](uptr i) { return ptr_[i]; }
|
T &operator[](uptr i) { return ptr_[i]; }
|
||||||
T *data() { return ptr_; }
|
T *data() { return ptr_; }
|
||||||
uptr size() { return cnt_ * sizeof(T); }
|
uptr size() { return cnt_; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
T *ptr_;
|
T *ptr_;
|
||||||
|
|
|
@ -958,9 +958,8 @@ bool ThreadLister::error() { return error_; }
|
||||||
bool ThreadLister::GetDirectoryEntries() {
|
bool ThreadLister::GetDirectoryEntries() {
|
||||||
CHECK_GE(descriptor_, 0);
|
CHECK_GE(descriptor_, 0);
|
||||||
CHECK_NE(error_, true);
|
CHECK_NE(error_, true);
|
||||||
bytes_read_ = internal_getdents(descriptor_,
|
bytes_read_ = internal_getdents(
|
||||||
(struct linux_dirent *)buffer_.data(),
|
descriptor_, (struct linux_dirent *)buffer_.data(), buffer_.size());
|
||||||
buffer_.size());
|
|
||||||
if (internal_iserror(bytes_read_)) {
|
if (internal_iserror(bytes_read_)) {
|
||||||
Report("Can't read directory entries from /proc/%d/task.\n", pid_);
|
Report("Can't read directory entries from /proc/%d/task.\n", pid_);
|
||||||
error_ = true;
|
error_ = true;
|
||||||
|
|
|
@ -814,10 +814,10 @@ TEST(Allocator, ScopedBuffer) {
|
||||||
const int kSize = 512;
|
const int kSize = 512;
|
||||||
{
|
{
|
||||||
InternalScopedBuffer<int> int_buf(kSize);
|
InternalScopedBuffer<int> int_buf(kSize);
|
||||||
EXPECT_EQ(sizeof(int) * kSize, int_buf.size()); // NOLINT
|
EXPECT_EQ((uptr)kSize, int_buf.size()); // NOLINT
|
||||||
}
|
}
|
||||||
InternalScopedBuffer<char> char_buf(kSize);
|
InternalScopedBuffer<char> char_buf(kSize);
|
||||||
EXPECT_EQ(sizeof(char) * kSize, char_buf.size()); // NOLINT
|
EXPECT_EQ((uptr)kSize, char_buf.size()); // NOLINT
|
||||||
internal_memset(char_buf.data(), 'c', kSize);
|
internal_memset(char_buf.data(), 'c', kSize);
|
||||||
for (int i = 0; i < kSize; i++) {
|
for (int i = 0; i < kSize; i++) {
|
||||||
EXPECT_EQ('c', char_buf[i]);
|
EXPECT_EQ('c', char_buf[i]);
|
||||||
|
|
|
@ -172,7 +172,7 @@ static void MapRodata() {
|
||||||
// volatile to prevent insertion of memset
|
// volatile to prevent insertion of memset
|
||||||
for (volatile u64 *p = marker.data(); p < marker.data() + kMarkerSize; p++)
|
for (volatile u64 *p = marker.data(); p < marker.data() + kMarkerSize; p++)
|
||||||
*p = kShadowRodata;
|
*p = kShadowRodata;
|
||||||
internal_write(fd, marker.data(), marker.size());
|
internal_write(fd, marker.data(), marker.size() * sizeof(u64));
|
||||||
// Map the file into memory.
|
// Map the file into memory.
|
||||||
uptr page = internal_mmap(0, GetPageSizeCached(), PROT_READ | PROT_WRITE,
|
uptr page = internal_mmap(0, GetPageSizeCached(), PROT_READ | PROT_WRITE,
|
||||||
MAP_PRIVATE | MAP_ANONYMOUS, fd, 0);
|
MAP_PRIVATE | MAP_ANONYMOUS, fd, 0);
|
||||||
|
@ -191,8 +191,9 @@ static void MapRodata() {
|
||||||
// Assume it's .rodata
|
// Assume it's .rodata
|
||||||
char *shadow_start = (char *)MemToShadow(segment.start);
|
char *shadow_start = (char *)MemToShadow(segment.start);
|
||||||
char *shadow_end = (char *)MemToShadow(segment.end);
|
char *shadow_end = (char *)MemToShadow(segment.end);
|
||||||
for (char *p = shadow_start; p < shadow_end; p += marker.size()) {
|
for (char *p = shadow_start; p < shadow_end;
|
||||||
internal_mmap(p, Min<uptr>(marker.size(), shadow_end - p),
|
p += marker.size() * sizeof(u64)) {
|
||||||
|
internal_mmap(p, Min<uptr>(marker.size() * sizeof(u64), shadow_end - p),
|
||||||
PROT_READ, MAP_PRIVATE | MAP_FIXED, fd, 0);
|
PROT_READ, MAP_PRIVATE | MAP_FIXED, fd, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue