[compiler-rt] r206178 - [asan] added internal flag mmap_limit_mb
Hans Wennborg
hans at chromium.org
Mon Apr 14 09:41:51 PDT 2014
Hi Kostya,
On Mon, Apr 14, 2014 at 7:51 AM, Kostya Serebryany <kcc at google.com> wrote:
> Author: kcc
> Date: Mon Apr 14 09:51:01 2014
> New Revision: 206178
>
> URL: http://llvm.org/viewvc/llvm-project?rev=206178&view=rev
> Log:
> [asan] added internal flag mmap_limit_mb
>
[...]
> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc (original)
> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc Mon Apr 14 09:51:01 2014
> @@ -244,6 +244,24 @@ char *StripModuleName(const char *module
> return internal_strdup(short_module_name);
> }
>
> +static atomic_uintptr_t g_total_mmaped;
> +
> +void IncreaseTotalMmap(uptr size) {
> + if (!common_flags()->mmap_limit_mb) return;
> + uptr total_mmaped =
> + atomic_fetch_add(&g_total_mmaped, size, memory_order_relaxed) + size;
I'm getting a build error here with MSVC:
E:\b\build\slave\Chromium_Win_Clang\build\src\third_party\llvm\projects\compiler-rt\lib\sanitizer_common\sanitizer_common.cc(252)
: error C2664: '__sanitizer::u32
__sanitizer::atomic_fetch_add(volatile __sanitizer::atomic_uint32_t
*,__sanitizer::u32,__sanitizer::memory_order)' : cannot convert
argument 1 from '__sanitizer::atomic_uintptr_t *' to 'volatile
__sanitizer::atomic_uint32_t *'
Types pointed to are unrelated; conversion requires
reinterpret_cast, C-style cast or function-style cast
> + if ((total_mmaped >> 20) > common_flags()->mmap_limit_mb) {
> + // Since for now mmap_limit_mb is not a user-facing flag, just CHECK.
> + common_flags()->mmap_limit_mb = 0; // Allow mmap in CHECK.
> + CHECK_LT(total_mmaped >> 20, common_flags()->mmap_limit_mb);
> + }
> +}
> +
> +void DecreaseTotalMmap(uptr size) {
> + if (!common_flags()->mmap_limit_mb) return;
> + atomic_fetch_sub(&g_total_mmaped, size, memory_order_relaxed);
And:
E:\b\build\slave\Chromium_Win_Clang\build\src\third_party\llvm\projects\compiler-rt\lib\sanitizer_common\sanitizer_common.cc(262)
: error C2664: '__sanitizer::u32
__sanitizer::atomic_fetch_sub(volatile __sanitizer::atomic_uint32_t
*,__sanitizer::u32,__sanitizer::memory_order)' : cannot convert
argument 1 from '__sanitizer::atomic_uintptr_t *' to 'volatile
__sanitizer::atomic_uint32_t *'
Types pointed to are unrelated; conversion requires
reinterpret_cast, C-style cast or function-style cast
More information about the llvm-commits
mailing list