fune/mozglue/build/AsanOptions.cpp
Narcis Beleuzu 7eae8c1064 Backed out 16 changesets (bug 1770944) as req by asuth.
Backed out changeset 61af32f40777 (bug 1770944)
Backed out changeset 4ff0c45db93b (bug 1770944)
Backed out changeset 8a217eff7bcd (bug 1770944)
Backed out changeset 6435f48c96bf (bug 1770944)
Backed out changeset 0d2432765ca0 (bug 1770944)
Backed out changeset 58e02566db85 (bug 1770944)
Backed out changeset 0a8c4c2460ee (bug 1770944)
Backed out changeset 9416bafd9982 (bug 1770944)
Backed out changeset 79de4f83fe2e (bug 1770944)
Backed out changeset 63ac518aceb0 (bug 1770944)
Backed out changeset 14952f872b77 (bug 1770944)
Backed out changeset f65e0967ad75 (bug 1770944)
Backed out changeset bd53c42038f7 (bug 1770944)
Backed out changeset 36c378ba8212 (bug 1770944)
Backed out changeset 9ba54ab06348 (bug 1770944)
Backed out changeset fb5a54b3cbe9 (bug 1770944)
2024-02-23 21:11:08 +02:00

197 lines
7.9 KiB
C++

/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "mozilla/Attributes.h"
#ifndef _MSC_VER // Not supported by clang-cl yet
// When running with AddressSanitizer, we need to explicitly set some
// options specific to our codebase to prevent errors during runtime.
// To override these, set the ASAN_OPTIONS environment variable.
//
// Currently, these are:
//
// allow_user_segv_handler=1 - Tell ASan to allow our code to use its
// own SIGSEGV handlers. This is required by ASM.js internally.
//
// alloc_dealloc_mismatch=0 - Disable alloc-dealloc mismatch checking
// in ASan. This is required because we define our own new/delete
// operators that are backed by malloc/free. If one of them gets inlined
// while the other doesn't, ASan will report false positives.
//
// detect_leaks=0 - Disable LeakSanitizer. This is required because
// otherwise leak checking will be enabled for various building and
// testing executables where we don't care much about leaks.
//
// allocator_may_return_null=1 - Tell ASan to return NULL when an allocation
// fails instead of aborting the program. This allows us to handle failing
// allocations the same way we would handle them with a regular allocator and
// also uncovers potential bugs that might occur in these situations.
//
// max_malloc_fill_size - Tell ASan to initialize memory to a certain value
// when it is allocated. This option specifies the maximum allocation size
// for which ASan should still initialize the memory. The value we specify
// here is exactly 256MiB.
//
// max_free_fill_size - Similar to max_malloc_fill_size, tell ASan to
// overwrite memory with a certain value when it is freed. Again, the value
// here specifies the maximum allocation size, larger allocations will
// skipped.
//
// malloc_fill_byte / free_fill_byte - These values specify the byte values
// used to initialize/overwrite memory in conjunction with the previous
// options max_malloc_fill_size and max_free_fill_size. The values used here
// are 0xe4 and 0xe5 to match the kAllocPoison and kAllocJunk constants used
// by mozjemalloc.
//
// malloc_context_size - This value specifies how many stack frames are
// stored for each malloc and free call. Since Firefox can have lots of deep
// stacks with allocations, we limit the default size here further to save
// some memory.
//
// fast_unwind_on_check - Use the fast (frame-pointer-based) stack unwinder
// for internal CHECK failures. The slow unwinder doesn't work on Android.
//
// fast_unwind_on_fatal - Use the fast (frame-pointer-based) stack unwinder
// to print fatal error reports. The slow unwinder doesn't work on Android.
//
// detect_stack_use_after_return=0 - Work around bug 1768099.
//
// intercept_tls_get_addr=0 - Work around
// https://github.com/google/sanitizers/issues/1322 (bug 1635327).
//
// !! Note: __asan_default_options is not used on Android! (bug 1576213)
// These should be updated in:
// mobile/android/geckoview/src/asan/resources/lib/*/wrap.sh
//
extern "C" MOZ_ASAN_IGNORE const char* __asan_default_options() {
return "allow_user_segv_handler=1:alloc_dealloc_mismatch=0:detect_leaks=0"
# ifdef MOZ_ASAN_REPORTER
":malloc_context_size=20"
# endif
# ifdef __ANDROID__
":fast_unwind_on_check=1:fast_unwind_on_fatal=1"
# endif
":max_free_fill_size=268435456:max_malloc_fill_size=268435456"
":malloc_fill_byte=228:free_fill_byte=229"
":handle_sigill=1"
":allocator_may_return_null=1"
":detect_stack_use_after_return=0"
":intercept_tls_get_addr=0";
}
// !!! Please do not add suppressions for new leaks in Gecko code, unless they
// are intentional !!!
extern "C" const char* __lsan_default_suppressions() {
return "# Add your suppressions below\n"
// LSan runs with a shallow stack depth and no debug symbols, so some
// small intentional leaks in system libraries show up with this. You
// do not want this enabled when running locally with a deep stack, as
// it can catch too much.
"leak:libc.so\n"
// nsComponentManagerImpl intentionally leaks factory entries, and
// probably some other stuff.
"leak:nsComponentManagerImpl\n"
// Bug 981220 - Pixman fails to free TLS memory.
"leak:pixman_implementation_lookup_composite\n"
// Bug 987918 - Font shutdown leaks when CLEANUP_MEMORY is not enabled.
"leak:libfontconfig.so\n"
"leak:libfreetype.so\n"
"leak:GI___strdup\n"
// The symbol is really __GI___strdup, but if you have the leading _,
// it doesn't suppress it.
// xdg_mime_init() is leaked by Gtk3 library
"leak:xdg_mime_init\n"
// Bug 1078015 - If the process terminates during a PR_Sleep, LSAN
// detects a leak
"leak:PR_Sleep\n"
// Bug 1363976 - Stylo holds some global data alive forever.
"leak:style::global_style_data\n"
"leak:style::sharing::SHARING_CACHE_KEY\n"
"leak:style::bloom::BLOOM_KEY\n"
//
// Many leaks only affect some test suites. The suite annotations are
// not checked.
//
// Bug 979928 - WebRTC leaks in different mochitest suites.
"leak:NR_reg_init\n"
// nr_reg_local_init should be redundant with NR_reg_init, but on
// Aurora we get fewer stack frames for some reason.
"leak:nr_reg_local_init\n"
"leak:r_log_register\n"
"leak:nr_reg_set\n"
// This is a one-time leak in mochitest-bc, so it is probably okay to
// ignore.
"leak:GlobalPrinters::InitializeGlobalPrinters\n"
"leak:nsPSPrinterList::GetPrinterList\n"
// Bug 1028456 - Various NSPR fd-related leaks in different mochitest
// suites.
"leak:_PR_Getfd\n"
// Bug 1028483 - The XML parser sometimes leaks an object. Mostly
// happens in toolkit/components/thumbnails.
"leak:processInternalEntity\n"
// Bug 1187421 - NSS does not always free the error stack in different
// mochitest suites.
"leak:nss_ClearErrorStack\n"
// Bug 1602689 - leak at mozilla::NotNull, RacyRegisteredThread,
// RegisteredThread::RegisteredThread, mozilla::detail::UniqueSelector
"leak:RegisteredThread::RegisteredThread\n"
//
// Leaks with system libraries in their stacks. These show up across a
// number of tests. Better symbols and disabling fast stackwalking may
// help diagnose these.
//
"leak:libcairo.so\n"
// https://github.com/OpenPrinting/cups/pull/317
"leak:libcups.so\n"
"leak:libdl.so\n"
"leak:libdricore.so\n"
"leak:libdricore9.2.1.so\n"
"leak:libGL.so\n"
"leak:libEGL_mesa.so\n"
"leak:libglib-2.0.so\n"
"leak:libglsl.so\n"
"leak:libp11-kit.so\n"
"leak:libpixman-1.so\n"
"leak:libpulse.so\n"
// lubpulsecommon 1.1 is Ubuntu 12.04
"leak:libpulsecommon-1.1.so\n"
// lubpulsecommon 1.1 is Ubuntu 16.04
"leak:libpulsecommon-8.0.so\n"
"leak:libresolv.so\n"
"leak:libstdc++.so\n"
"leak:libXrandr.so\n"
"leak:libX11.so\n"
"leak:pthread_setspecific_internal\n"
"leak:swrast_dri.so\n"
"leak:js::frontend::BytecodeEmitter:\n"
"leak:js::frontend::GeneralParser\n"
"leak:js::frontend::Parse\n"
"leak:xpc::CIGSHelper\n"
"leak:mozJSModuleLoader\n"
"leak:mozilla::xpcom::ConstructJSMComponent\n"
"leak:XPCWrappedNativeJSOps\n"
// End of suppressions.
; // Please keep this semicolon.
}
#endif // _MSC_VER