},
'msvs_disabled_warnings': [4351, 4355, 4800],
'conditions': [
- ['asan != 0', {
+ ['asan == 1 and OS != "mac"', {
'cflags+': [
'-fno-omit-frame-pointer',
'-fsanitize=address',
- '-w', # http://crbug.com/162783
+ '-DLEAK_SANITIZER'
],
'cflags_cc+': [ '-gline-tables-only' ],
'cflags!': [ '-fomit-frame-pointer' ],
'ldflags': [ '-fsanitize=address' ],
}],
+ ['asan == 1 and OS == "mac"', {
+ 'xcode_settings': {
+ 'OTHER_CFLAGS+': [
+ '-fno-omit-frame-pointer',
+ '-gline-tables-only',
+ '-fsanitize=address',
+ '-DLEAK_SANITIZER'
+ ],
+ 'OTHER_CFLAGS!': [
+ '-fomit-frame-pointer',
+ ],
+ },
+ 'target_conditions': [
+ ['_type!="static_library"', {
+ 'xcode_settings': {'OTHER_LDFLAGS': ['-fsanitize=address']},
+ }],
+ ],
+ }],
['OS == "win"', {
'msvs_cygwin_shell': 0, # prevent actions from trying to use cygwin
'defines': [
dest='use_xcode',
help='generate build files for use with xcode')
+parser.add_option('--enable-asan',
+ action='store_true',
+ dest='enable_asan',
+ help='build with asan')
+
parser.add_option('--enable-static',
action='store_true',
dest='enable_static',
if options.linked_module:
o['variables']['library_files'] = options.linked_module
+ o['variables']['asan'] = int(options.enable_asan or 0)
def configure_library(lib, output):
shared_lib = 'shared_' + lib
#include <string.h>
#include <sys/types.h>
+#if defined(LEAK_SANITIZER)
+#include <sanitizer/lsan_interface.h>
+#endif
+
#if defined(_MSC_VER)
#include <direct.h>
#include <io.h>
instance_data->set_exit_code(exit_code);
RunAtExit(env);
+#if defined(LEAK_SANITIZER)
+ __lsan_do_leak_check();
+#endif
+
env->Dispose();
env = nullptr;
}
return;
}
+var openFds = [];
+
for (;;) {
try {
- fs.openSync(__filename, 'r');
+ openFds.push(fs.openSync(__filename, 'r'));
} catch (err) {
assert(err.code === 'EMFILE' || err.code === 'ENFILE');
break;
// 'exit' should not be emitted, the process was never spawned.
proc.on('exit', assert.fail);
+
+// close one fd for LSan
+if (openFds.length >= 1) {
+ fs.closeSync(openFds.pop());
+}
--- /dev/null
+# Usage: LSAN_OPTIONS=suppressions=`pwd`/tools/lsan_suppressions.txt make check
+
+# Suppress small (intentional) leaks in glibc
+leak:libc.so