Skip to content

Commit 487b92f

Browse files
committed
Revert "[asan] Use InternalMmapVector for error_message_buffer, reallocate when the size of error_message_buffer is not enough"
This reverts commit 37e6da6.
1 parent 37e6da6 commit 487b92f

File tree

1 file changed

+16
-13
lines changed

1 file changed

+16
-13
lines changed

compiler-rt/lib/asan/asan_report.cpp

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@ namespace __asan {
3232

3333
// -------------------- User-specified callbacks ----------------- {{{1
3434
static void (*error_report_callback)(const char*);
35-
static InternalMmapVector<char> *error_message_buffer = nullptr;
35+
static char *error_message_buffer = nullptr;
36+
static uptr error_message_buffer_pos = 0;
3637
static Mutex error_message_buf_mutex;
3738
static const unsigned kAsanBuggyPcPoolSize = 25;
3839
static __sanitizer::atomic_uintptr_t AsanBuggyPcPool[kAsanBuggyPcPoolSize];
@@ -41,15 +42,17 @@ void AppendToErrorMessageBuffer(const char *buffer) {
4142
Lock l(&error_message_buf_mutex);
4243
if (!error_message_buffer) {
4344
error_message_buffer =
44-
new (GetGlobalLowLevelAllocator()) InternalMmapVector<char>();
45-
error_message_buffer->reserve(kErrorMessageBufferSize);
46-
error_message_buffer->push_back('\0');
45+
(char*)MmapOrDieQuietly(kErrorMessageBufferSize, __func__);
46+
error_message_buffer_pos = 0;
4747
}
48-
uptr error_message_buffer_len = error_message_buffer->size() - 1;
49-
uptr buffer_len = internal_strlen(buffer);
50-
error_message_buffer->resize(error_message_buffer_len + buffer_len + 1);
51-
internal_memcpy(error_message_buffer->data() + error_message_buffer_len,
52-
buffer, buffer_len + 1);
48+
uptr length = internal_strlen(buffer);
49+
RAW_CHECK(kErrorMessageBufferSize >= error_message_buffer_pos);
50+
uptr remaining = kErrorMessageBufferSize - error_message_buffer_pos;
51+
internal_strncpy(error_message_buffer + error_message_buffer_pos,
52+
buffer, remaining);
53+
error_message_buffer[kErrorMessageBufferSize - 1] = '\0';
54+
// FIXME: reallocate the buffer instead of truncating the message.
55+
error_message_buffer_pos += Min(remaining, length);
5356
}
5457

5558
// ---------------------- Helper functions ----------------------- {{{1
@@ -155,14 +158,14 @@ class ScopedInErrorReport {
155158

156159
// Copy the message buffer so that we could start logging without holding a
157160
// lock that gets acquired during printing.
158-
InternalScopedString buffer_copy;
161+
InternalMmapVector<char> buffer_copy(kErrorMessageBufferSize);
159162
{
160163
Lock l(&error_message_buf_mutex);
161-
buffer_copy.Append(error_message_buffer->data());
164+
internal_memcpy(buffer_copy.data(),
165+
error_message_buffer, kErrorMessageBufferSize);
162166
// Clear error_message_buffer so that if we find other errors
163167
// we don't re-log this error.
164-
error_message_buffer->clear();
165-
error_message_buffer->push_back('\0');
168+
error_message_buffer_pos = 0;
166169
}
167170

168171
LogFullErrorReport(buffer_copy.data());

0 commit comments

Comments
 (0)