[compiler-rt] r366105 - [sanitizers][windows][mingw32] Mingw32 RTL fixes
Azhar Mohammed via llvm-commits
llvm-commits at lists.llvm.org
Mon Jul 15 14:35:05 PDT 2019
This change is causing the sanitizer lint checks to fail:
[81/95] Running lint check for sanitizer sources...
<>FAILED: lib/CMakeFiles/SanitizerLintCheck
cd /Users/buildslave/jenkins/workspace/clang-stage1-configure-RA/clang-build/tools/clang/runtime/compiler-rt-bins/lib && env LLVM_CHECKOUT=/Users/buildslave/jenkins/workspace/clang-stage1-configure-RA/llvm SILENT=1 TMPDIR= PYTHON_EXECUTABLE=/usr/local/bin/python2.7 COMPILER_RT=/Users/buildslave/jenkins/workspace/clang-stage1-configure-RA/llvm/projects/compiler-rt /Users/buildslave/jenkins/workspace/clang-stage1-configure-RA/llvm/projects/compiler-rt/lib/sanitizer_common/scripts/check_lint.sh
/Users/buildslave/jenkins/workspace/clang-stage1-configure-RA/llvm/projects/compiler-rt/lib/asan/asan_malloc_win.cc:345: Lines should be <= 80 characters long [whitespace/line_length] [2]
> On Jul 15, 2019, at 11:42 AM, Matthew G McGovern via llvm-commits <llvm-commits at lists.llvm.org> wrote:
>
> Author: mcgov
> Date: Mon Jul 15 11:42:14 2019
> New Revision: 366105
>
> URL: http://llvm.org/viewvc/llvm-project?rev=366105&view=rev
> Log:
> [sanitizers][windows][mingw32] Mingw32 RTL fixes
> RTL interception broke mingw32, this should fix those builds by
> removing dependency on windows.h
>
> reviewed in https://reviews.llvm.org/D64694
>
> Modified:
> compiler-rt/trunk/lib/asan/asan_malloc_win.cc
>
> Modified: compiler-rt/trunk/lib/asan/asan_malloc_win.cc
> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_malloc_win.cc?rev=366105&r1=366104&r2=366105&view=diff
> ==============================================================================
> --- compiler-rt/trunk/lib/asan/asan_malloc_win.cc (original)
> +++ compiler-rt/trunk/lib/asan/asan_malloc_win.cc Mon Jul 15 11:42:14 2019
> @@ -14,17 +14,12 @@
> #include "sanitizer_common/sanitizer_allocator_interface.h"
> #include "sanitizer_common/sanitizer_platform.h"
> #if SANITIZER_WINDOWS
> -// Need to include defintions for windows heap api functions,
> -// these assume windows.h will also be included. This definition
> -// fixes an error that's thrown if you only include heapapi.h
> -#if defined(_M_IX86)
> -#define _X86_
> -#elif defined(_M_AMD64)
> -#define _AMD64_
> -#else
> -#error "Missing arch or unsupported platform for Windows."
> -#endif
> -#include <heapapi.h>
> +#include "asan_allocator.h"
> +#include "asan_interceptors.h"
> +#include "asan_internal.h"
> +#include "asan_stack.h"
> +#include "interception/interception.h"
> +#include <stddef.h>
>
> // Intentionally not including windows.h here, to avoid the risk of
> // pulling in conflicting declarations of these functions. (With mingw-w64,
> @@ -34,6 +29,9 @@ typedef void *HANDLE;
> typedef const void *LPCVOID;
> typedef void *LPVOID;
>
> +typedef unsigned long DWORD;
> +constexpr unsigned long HEAP_ZERO_MEMORY = 0x00000008;
> +constexpr unsigned long HEAP_REALLOC_IN_PLACE_ONLY = 0x00000010;
> constexpr unsigned long HEAP_ALLOCATE_SUPPORTED_FLAGS = (HEAP_ZERO_MEMORY);
> constexpr unsigned long HEAP_ALLOCATE_UNSUPPORTED_FLAGS =
> (~HEAP_ALLOCATE_SUPPORTED_FLAGS);
> @@ -45,13 +43,16 @@ constexpr unsigned long HEAP_REALLOC_SUP
> constexpr unsigned long HEAP_REALLOC_UNSUPPORTED_FLAGS =
> (~HEAP_ALLOCATE_SUPPORTED_FLAGS);
>
> -#include "asan_allocator.h"
> -#include "asan_interceptors.h"
> -#include "asan_internal.h"
> -#include "asan_stack.h"
> -#include "interception/interception.h"
>
> -#include <stddef.h>
> +extern "C" {
> +LPVOID WINAPI HeapAlloc(HANDLE hHeap, DWORD dwFlags, size_t dwBytes);
> +LPVOID WINAPI HeapReAlloc(HANDLE hHeap, DWORD dwFlags, LPVOID lpMem,
> + size_t dwBytes);
> +BOOL WINAPI HeapFree(HANDLE hHeap, DWORD dwFlags, LPVOID lpMem);
> +size_t WINAPI HeapSize(HANDLE hHeap, DWORD dwFlags, LPCVOID lpMem);
> +
> +BOOL WINAPI HeapValidate(HANDLE hHeap, DWORD dwFlags, LPCVOID lpMem);
> +}
>
> using namespace __asan; // NOLINT
>
> @@ -160,7 +161,7 @@ void *_recalloc(void *p, size_t n, size_
> size_t old_size = _msize(p);
> void *new_alloc = malloc(size);
> if (new_alloc) {
> - REAL(memcpy)(new_alloc, p, Min(size, old_size));
> + REAL(memcpy)(new_alloc, p, Min<size_t>(size, old_size));
> if (old_size < size)
> REAL(memset)(((u8 *)new_alloc) + old_size, 0, size - old_size);
> free(p);
> @@ -206,7 +207,7 @@ int _CrtSetReportMode(int, int) {
> #define OWNED_BY_RTL(heap, memory) \
> (!__sanitizer_get_ownership(memory) && HeapValidate(heap, 0, memory))
>
> -INTERCEPTOR_WINAPI(SIZE_T, HeapSize, HANDLE hHeap, DWORD dwFlags,
> +INTERCEPTOR_WINAPI(size_t, HeapSize, HANDLE hHeap, DWORD dwFlags,
> LPCVOID lpMem) {
> // If the RTL allocators are hooked we need to check whether the ASAN
> // allocator owns the pointer we're about to use. Allocations occur before
> @@ -224,7 +225,7 @@ INTERCEPTOR_WINAPI(SIZE_T, HeapSize, HAN
> }
>
> INTERCEPTOR_WINAPI(LPVOID, HeapAlloc, HANDLE hHeap, DWORD dwFlags,
> - SIZE_T dwBytes) {
> + size_t dwBytes) {
> // If the ASAN runtime is not initialized, or we encounter an unsupported
> // flag, fall back to the original allocator.
> if (flags()->windows_hook_rtl_allocators) {
> @@ -269,14 +270,14 @@ INTERCEPTOR_WINAPI(BOOL, HeapFree, HANDL
> }
>
> namespace __asan {
> -using AllocFunction = LPVOID(WINAPI *)(HANDLE, DWORD, SIZE_T);
> -using ReAllocFunction = LPVOID(WINAPI *)(HANDLE, DWORD, LPVOID, SIZE_T);
> -using SizeFunction = SIZE_T(WINAPI *)(HANDLE, DWORD, LPVOID);
> +using AllocFunction = LPVOID(WINAPI *)(HANDLE, DWORD, size_t);
> +using ReAllocFunction = LPVOID(WINAPI *)(HANDLE, DWORD, LPVOID, size_t);
> +using SizeFunction = size_t(WINAPI *)(HANDLE, DWORD, LPVOID);
> using FreeFunction = BOOL(WINAPI *)(HANDLE, DWORD, LPVOID);
>
> void *SharedReAlloc(ReAllocFunction reallocFunc, SizeFunction heapSizeFunc,
> FreeFunction freeFunc, AllocFunction allocFunc,
> - HANDLE hHeap, DWORD dwFlags, LPVOID lpMem, SIZE_T dwBytes) {
> + HANDLE hHeap, DWORD dwFlags, LPVOID lpMem, size_t dwBytes) {
> CHECK(reallocFunc && heapSizeFunc && freeFunc && allocFunc);
> GET_STACK_TRACE_MALLOC;
> GET_CURRENT_PC_BP_SP;
> @@ -317,7 +318,7 @@ void *SharedReAlloc(ReAllocFunction real
> replacement_alloc = asan_malloc(dwBytes, &stack);
> if (replacement_alloc) {
> size_t old_size = heapSizeFunc(hHeap, dwFlags, lpMem);
> - if (old_size == ((SIZE_T)0) - 1) {
> + if (old_size == ((size_t)0) - 1) {
> asan_free(replacement_alloc, &stack, FROM_MALLOC);
> return nullptr;
> }
> @@ -341,7 +342,7 @@ void *SharedReAlloc(ReAllocFunction real
> size_t old_usable_size = 0;
> if (replacement_alloc) {
> old_usable_size = asan_malloc_usable_size(lpMem, pc, bp);
> - REAL(memcpy)(replacement_alloc, lpMem, min(dwBytes, old_usable_size));
> + REAL(memcpy)(replacement_alloc, lpMem, Min<size_t>(dwBytes, old_usable_size));
> asan_free(lpMem, &stack, FROM_MALLOC);
> }
> return replacement_alloc;
> @@ -388,7 +389,7 @@ void *SharedReAlloc(ReAllocFunction real
> } // namespace __asan
>
> INTERCEPTOR_WINAPI(LPVOID, HeapReAlloc, HANDLE hHeap, DWORD dwFlags,
> - LPVOID lpMem, SIZE_T dwBytes) {
> + LPVOID lpMem, size_t dwBytes) {
> return SharedReAlloc(REAL(HeapReAlloc), (SizeFunction)REAL(HeapSize),
> REAL(HeapFree), REAL(HeapAlloc), hHeap, dwFlags, lpMem,
> dwBytes);
> @@ -399,28 +400,27 @@ INTERCEPTOR_WINAPI(LPVOID, HeapReAlloc,
> // allocations with detours and their definitions are unlikely to change.
> // Comments in /minkernel/ntos/rtl/heappublic.c indicate that these functions
> // are part of the heap's public interface.
> -typedef ULONG LOGICAL;
> +typedef unsigned long LOGICAL;
>
> // This function is documented as part of the Driver Development Kit but *not*
> // the Windows Development Kit.
> -NTSYSAPI LOGICAL RtlFreeHeap(PVOID HeapHandle, ULONG Flags,
> - _Frees_ptr_opt_ PVOID BaseAddress);
> +LOGICAL RtlFreeHeap(void* HeapHandle, DWORD Flags,
> + void* BaseAddress);
>
> // This function is documented as part of the Driver Development Kit but *not*
> // the Windows Development Kit.
> -NTSYSAPI PVOID RtlAllocateHeap(PVOID HeapHandle, ULONG Flags, SIZE_T Size);
> +void* RtlAllocateHeap(void* HeapHandle, DWORD Flags, size_t Size);
>
> // This function is completely undocumented.
> -PVOID
> -RtlReAllocateHeap(PVOID HeapHandle, ULONG Flags, PVOID BaseAddress,
> - SIZE_T Size);
> +void*
> +RtlReAllocateHeap(void* HeapHandle, DWORD Flags, void* BaseAddress,
> + size_t Size);
>
> // This function is completely undocumented.
> -SIZE_T
> -RtlSizeHeap(PVOID HeapHandle, ULONG Flags, PVOID BaseAddress);
> +size_t RtlSizeHeap(void* HeapHandle, DWORD Flags, void* BaseAddress);
>
> -INTERCEPTOR_WINAPI(SIZE_T, RtlSizeHeap, HANDLE HeapHandle, ULONG Flags,
> - PVOID BaseAddress) {
> +INTERCEPTOR_WINAPI(size_t, RtlSizeHeap, HANDLE HeapHandle, DWORD Flags,
> + void* BaseAddress) {
> if (!flags()->windows_hook_rtl_allocators ||
> UNLIKELY(!asan_inited || OWNED_BY_RTL(HeapHandle, BaseAddress))) {
> return REAL(RtlSizeHeap)(HeapHandle, Flags, BaseAddress);
> @@ -430,8 +430,8 @@ INTERCEPTOR_WINAPI(SIZE_T, RtlSizeHeap,
> return asan_malloc_usable_size(BaseAddress, pc, bp);
> }
>
> -INTERCEPTOR_WINAPI(BOOL, RtlFreeHeap, HANDLE HeapHandle, ULONG Flags,
> - PVOID BaseAddress) {
> +INTERCEPTOR_WINAPI(BOOL, RtlFreeHeap, HANDLE HeapHandle, DWORD Flags,
> + void* BaseAddress) {
> // Heap allocations happen before this function is hooked, so we must fall
> // back to the original function if the pointer is not from the ASAN heap, or
> // unsupported flags are provided.
> @@ -445,8 +445,8 @@ INTERCEPTOR_WINAPI(BOOL, RtlFreeHeap, HA
> return true;
> }
>
> -INTERCEPTOR_WINAPI(PVOID, RtlAllocateHeap, HANDLE HeapHandle, DWORD Flags,
> - SIZE_T Size) {
> +INTERCEPTOR_WINAPI(void*, RtlAllocateHeap, HANDLE HeapHandle, DWORD Flags,
> + size_t Size) {
> // If the ASAN runtime is not initialized, or we encounter an unsupported
> // flag, fall back to the original allocator.
> if (!flags()->windows_hook_rtl_allocators ||
> @@ -467,8 +467,8 @@ INTERCEPTOR_WINAPI(PVOID, RtlAllocateHea
> return p;
> }
>
> -INTERCEPTOR_WINAPI(PVOID, RtlReAllocateHeap, HANDLE HeapHandle, ULONG Flags,
> - PVOID BaseAddress, SIZE_T Size) {
> +INTERCEPTOR_WINAPI(void*, RtlReAllocateHeap, HANDLE HeapHandle, DWORD Flags,
> + void* BaseAddress, size_t Size) {
> // If it's actually a heap block which was allocated before the ASAN runtime
> // came up, use the real RtlFreeHeap function.
> if (!flags()->windows_hook_rtl_allocators)
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190715/23f27543/attachment.html>
More information about the llvm-commits
mailing list