mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-12 02:33:33 +00:00
Annotate BumpPtrAllocator for MemorySanitizer.
This change adds MemorySanitizer annotations to BumpPtrAllocator to improve report quality. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@174051 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
e22df330a3
commit
ea2d8780e9
@ -54,6 +54,7 @@ check_include_file(ndir.h HAVE_NDIR_H)
|
||||
if( NOT PURE_WINDOWS )
|
||||
check_include_file(pthread.h HAVE_PTHREAD_H)
|
||||
endif()
|
||||
check_include_file(sanitizer/msan_interface.h HAVE_SANITIZER_MSAN_INTERFACE_H)
|
||||
check_include_file(setjmp.h HAVE_SETJMP_H)
|
||||
check_include_file(signal.h HAVE_SIGNAL_H)
|
||||
check_include_file(stdint.h HAVE_STDINT_H)
|
||||
|
@ -468,6 +468,9 @@
|
||||
/* Define to 1 if the system has the type `u_int64_t'. */
|
||||
#cmakedefine HAVE_U_INT64_T ${HAVE_U_INT64_T}
|
||||
|
||||
/* Define to 1 if you have the <sanitizer/msan_interface.h> header file. */
|
||||
#cmakedefine HAVE_SANITIZER_MSAN_INTERFACE_H ${HAVE_SANITIZER_MSAN_INTERFACE_H}
|
||||
|
||||
/* Define to 1 if you have the <valgrind/valgrind.h> header file. */
|
||||
#cmakedefine HAVE_VALGRIND_VALGRIND_H ${HAVE_VALGRIND_VALGRIND_H}
|
||||
|
||||
|
@ -15,6 +15,8 @@
|
||||
#ifndef LLVM_SUPPORT_COMPILER_H
|
||||
#define LLVM_SUPPORT_COMPILER_H
|
||||
|
||||
#include "llvm/Config/config.h"
|
||||
|
||||
#ifndef __has_feature
|
||||
# define __has_feature(x) 0
|
||||
#endif
|
||||
@ -293,4 +295,20 @@
|
||||
# define LLVM_FUNCTION_NAME __func__
|
||||
#endif
|
||||
|
||||
/// \macro LLVM_ENABLE_MSAN_ANNOTATIONS
|
||||
/// \brief Are MemorySanitizer annotations available.
|
||||
#if defined(HAVE_SANITIZER_MSAN_INTERFACE_H)
|
||||
# include <sanitizer/msan_interface.h>
|
||||
#else
|
||||
# define __msan_allocated_memory(p, size)
|
||||
#endif
|
||||
|
||||
/// \macro LLVM_MEMORY_SANITIZER_BUILD
|
||||
/// \brief Whether LLVM itself is built with MemorySanitizer instrumentation.
|
||||
#if __has_feature(memory_sanitizer)
|
||||
# define LLVM_MEMORY_SANITIZER_BUILD 1
|
||||
#else
|
||||
# define LLVM_MEMORY_SANITIZER_BUILD 0
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
@ -12,6 +12,7 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "llvm/Support/Allocator.h"
|
||||
#include "llvm/Support/Compiler.h"
|
||||
#include "llvm/Support/DataTypes.h"
|
||||
#include "llvm/Support/Memory.h"
|
||||
#include "llvm/Support/Recycler.h"
|
||||
@ -102,6 +103,10 @@ void *BumpPtrAllocator::Allocate(size_t Size, size_t Alignment) {
|
||||
// Check if we can hold it.
|
||||
if (Ptr + Size <= End) {
|
||||
CurPtr = Ptr + Size;
|
||||
// Update the allocation point of this memory block in MemorySanitizer.
|
||||
// Without this, MemorySanitizer reports for values originating from it will
|
||||
// point to the allocation point of the entire slab.
|
||||
__msan_allocated_memory(Ptr, Size);
|
||||
return Ptr;
|
||||
}
|
||||
|
||||
@ -117,6 +122,7 @@ void *BumpPtrAllocator::Allocate(size_t Size, size_t Alignment) {
|
||||
|
||||
Ptr = AlignPtr((char*)(NewSlab + 1), Alignment);
|
||||
assert((uintptr_t)Ptr + Size <= (uintptr_t)NewSlab + NewSlab->Size);
|
||||
__msan_allocated_memory(Ptr, Size);
|
||||
return Ptr;
|
||||
}
|
||||
|
||||
@ -125,6 +131,7 @@ void *BumpPtrAllocator::Allocate(size_t Size, size_t Alignment) {
|
||||
Ptr = AlignPtr(CurPtr, Alignment);
|
||||
CurPtr = Ptr + Size;
|
||||
assert(CurPtr <= End && "Unable to allocate memory!");
|
||||
__msan_allocated_memory(Ptr, Size);
|
||||
return Ptr;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user