summaryrefslogtreecommitdiff
path: root/gcc/asan.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/asan.cc')
-rw-r--r--gcc/asan.cc14
1 files changed, 9 insertions, 5 deletions
diff --git a/gcc/asan.cc b/gcc/asan.cc
index 7c57cbca99c..ef59b77ebc2 100644
--- a/gcc/asan.cc
+++ b/gcc/asan.cc
@@ -1497,10 +1497,14 @@ asan_redzone_buffer::emit_redzone_byte (HOST_WIDE_INT offset,
HOST_WIDE_INT off
= m_prev_offset + ASAN_SHADOW_GRANULARITY * m_shadow_bytes.length ();
if (off == offset)
+ /* Consecutive shadow memory byte. */;
+ else if (offset < m_prev_offset + (HOST_WIDE_INT) (ASAN_SHADOW_GRANULARITY
+ * RZ_BUFFER_SIZE)
+ && !m_shadow_bytes.is_empty ())
{
- /* Consecutive shadow memory byte. */
- m_shadow_bytes.safe_push (value);
- flush_if_full ();
+ /* Shadow memory byte with a small gap. */
+ for (; off < offset; off += ASAN_SHADOW_GRANULARITY)
+ m_shadow_bytes.safe_push (0);
}
else
{
@@ -1521,9 +1525,9 @@ asan_redzone_buffer::emit_redzone_byte (HOST_WIDE_INT offset,
m_shadow_mem = adjust_address (m_shadow_mem, VOIDmode,
diff >> ASAN_SHADOW_SHIFT);
m_prev_offset = offset;
- m_shadow_bytes.safe_push (value);
- flush_if_full ();
}
+ m_shadow_bytes.safe_push (value);
+ flush_if_full ();
}
/* Emit RTX emission of the content of the buffer. */