diff options
-rw-r--r-- | Makefile | 4 | ||||
-rw-r--r-- | main/Makefile.am | 4 | ||||
-rw-r--r-- | main/build/MacOSX/monostub.m | 21 |
3 files changed, 29 insertions, 0 deletions
@@ -122,6 +122,10 @@ run-gdb: run-gdb-64: cd main && $(MAKE) run-gdb-64 + +run-leaks: + cd main && $(MAKE) run-leaks + test: cd main && $(MAKE) test assembly=$(assembly) diff --git a/main/Makefile.am b/main/Makefile.am index 940789d60f..766272b14e 100644 --- a/main/Makefile.am +++ b/main/Makefile.am @@ -128,6 +128,10 @@ endif run-bundle: $(PROGRAM) LANG= LC_ALL= $(MD_LAUNCH_SETUP) $(MD_LAUNCH_EXTRA_ENV) $(MD_BIN_PATH)/MonoDevelop --no-redirect + +run-leaks: $(PROGRAM) + DYLD_FORCE_FLAT_NAMESPACE=1 DYLD_INSERT_LIBRARIES=`pwd`/build/bin/libgobject-tracker.dylib LANG= LC_ALL= $(MD_LAUNCH_SETUP) $(MD_LAUNCH_EXTRA_ENV) $(MD_BIN_PATH)/MonoDevelop --no-redirect + run-64: run-sgen-64 run-boehm: runmd diff --git a/main/build/MacOSX/monostub.m b/main/build/MacOSX/monostub.m index d6296755f0..826ebe9915 100644 --- a/main/build/MacOSX/monostub.m +++ b/main/build/MacOSX/monostub.m @@ -19,6 +19,7 @@ typedef int (* mono_main) (int argc, char **argv); typedef void (* mono_free) (void *ptr); typedef char * (* mono_get_runtime_build_info) (void); +typedef void (* gobject_tracker_init) (void *libmono); void *libmono; @@ -231,6 +232,24 @@ correct_locale(void) setenv("LANGUAGE", [preferredLanguage UTF8String], 1); } +static void +try_load_gobject_tracker (void *libmono, char *entry_executable) +{ + void *gobject_tracker; + NSString *entryExecutable = [[NSString alloc] initWithUTF8String: entry_executable]; + NSString *binDir = [entryExecutable stringByDeletingLastPathComponent]; + NSString *libgobjectPath = [binDir stringByAppendingPathComponent: @"libgobject-tracker.dylib"]; + gobject_tracker = dlopen ((char *)[libgobjectPath UTF8String], RTLD_GLOBAL); + if (gobject_tracker) { + gobject_tracker_init _gobject_tracker_init = (gobject_tracker_init) dlsym (gobject_tracker, "gobject_tracker_init"); + if (_gobject_tracker_init) { + _gobject_tracker_init (libmono); + printf ("Loaded gobject tracker\n"); + return; + } + } +} + int main (int argc, char **argv) { //clock_t start = clock(); @@ -330,6 +349,8 @@ int main (int argc, char **argv) exit_with_message ((char *)[msg UTF8String], argv[0]); } + try_load_gobject_tracker (libmono, argv [0]); + mono_main _mono_main = (mono_main) dlsym (libmono, "mono_main"); if (!_mono_main) { fprintf (stderr, "Could not load mono_main(): %s\n", dlerror ()); |