Skip to content

Commit

Permalink
build: add --enable-asan with builtin leakcheck
Browse files Browse the repository at this point in the history
PR-URL: #2376
Reviewed-By: Fedor Indutny <fedor@indutny.com>
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
  • Loading branch information
skomski authored and rvagg committed Sep 6, 2015
1 parent 609db5a commit 101db80
Show file tree
Hide file tree
Showing 5 changed files with 46 additions and 3 deletions.
22 changes: 20 additions & 2 deletions common.gypi
Original file line number Diff line number Diff line change
Expand Up @@ -173,16 +173,34 @@
},
'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': [
Expand Down
6 changes: 6 additions & 0 deletions configure
Original file line number Diff line number Diff line change
Expand Up @@ -335,6 +335,11 @@ parser.add_option('--xcode',
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',
Expand Down Expand Up @@ -707,6 +712,7 @@ def configure_node(o):
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
Expand Down
8 changes: 8 additions & 0 deletions src/node.cc
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,10 @@
#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>
Expand Down Expand Up @@ -3967,6 +3971,10 @@ static void StartNodeInstance(void* arg) {
instance_data->set_exit_code(exit_code);
RunAtExit(env);

#if defined(LEAK_SANITIZER)
__lsan_do_leak_check();
#endif

env->Dispose();
env = nullptr;
}
Expand Down
9 changes: 8 additions & 1 deletion test/sequential/test-child-process-emfile.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,11 @@ if (common.isWindows) {
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;
Expand All @@ -27,3 +29,8 @@ proc.on('error', common.mustCall(function(err) {

// '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());
}
4 changes: 4 additions & 0 deletions tools/lsan_suppressions.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# Usage: LSAN_OPTIONS=suppressions=`pwd`/tools/lsan_suppressions.txt make check

# Suppress small (intentional) leaks in glibc
leak:libc.so

0 comments on commit 101db80

Please sign in to comment.