@@ -31,6 +31,57 @@ void SetupProcessObject(Environment*, int, const char* const*, int,
3131 const char * const *);
3232}
3333
34+ // Force all builtin modules to be referenced so they can actually run their
35+ // DSO constructors, see http://git.io/DRIqCg.
36+ #if defined(OS_WIN)
37+ #define REFERENCE_MODULE (name ) \
38+ __pragma (comment (linker, " /export:_register_" #name))
39+ #else
40+ #define REFERENCE_MODULE (name ) \
41+ extern " C" void _register_ ## name (void ); \
42+ void (*fp_register_ ## name)(void ) = _register_ ## name
43+ #endif
44+ // Node's builtin modules.
45+ REFERENCE_MODULE (cares_wrap);
46+ REFERENCE_MODULE (fs_event_wrap);
47+ REFERENCE_MODULE (buffer);
48+ REFERENCE_MODULE (contextify);
49+ REFERENCE_MODULE (crypto);
50+ REFERENCE_MODULE (fs);
51+ REFERENCE_MODULE (http_parser);
52+ REFERENCE_MODULE (os);
53+ REFERENCE_MODULE (v8);
54+ REFERENCE_MODULE (zlib);
55+ REFERENCE_MODULE (pipe_wrap);
56+ REFERENCE_MODULE (process_wrap);
57+ REFERENCE_MODULE (signal_wrap);
58+ REFERENCE_MODULE (smalloc);
59+ REFERENCE_MODULE (spawn_sync);
60+ REFERENCE_MODULE (tcp_wrap);
61+ REFERENCE_MODULE (timer_wrap);
62+ REFERENCE_MODULE (tls_wrap);
63+ REFERENCE_MODULE (tty_wrap);
64+ REFERENCE_MODULE (udp_wrap);
65+ REFERENCE_MODULE (uv);
66+ // Atom Shell's builtin modules.
67+ REFERENCE_MODULE (atom_browser_app);
68+ REFERENCE_MODULE (atom_browser_auto_updater);
69+ REFERENCE_MODULE (atom_browser_dialog);
70+ REFERENCE_MODULE (atom_browser_menu);
71+ REFERENCE_MODULE (atom_browser_power_monitor);
72+ REFERENCE_MODULE (atom_browser_protocol);
73+ REFERENCE_MODULE (atom_browser_tray);
74+ REFERENCE_MODULE (atom_browser_window);
75+ REFERENCE_MODULE (atom_common_clipboard);
76+ REFERENCE_MODULE (atom_common_crash_reporter);
77+ REFERENCE_MODULE (atom_common_id_weak_map);
78+ REFERENCE_MODULE (atom_common_screen);
79+ REFERENCE_MODULE (atom_common_shell);
80+ REFERENCE_MODULE (atom_common_v8_util);
81+ REFERENCE_MODULE (atom_renderer_ipc);
82+ REFERENCE_MODULE (atom_renderer_web_view);
83+ #undef REFERENCE_MODULE
84+
3485namespace atom {
3586
3687namespace {
0 commit comments