- if(dbg_hlp)
- {
- /* debug help is already loaded */
- return 0;
- }
-
- /* allocation */
- dbg_hlp = xbt_new0(s_xbt_debug_hlp_t,1);
-
- if(!dbg_hlp)
- return ENOMEM;
-
- /* load the library */
- dbg_hlp->instance = LoadLibraryA("Dbghelp.dll");
-
- if(!(dbg_hlp->instance))
- {
- free(dbg_hlp);
- dbg_hlp = NULL;
- return (int)GetLastError();
- }
-
- /* get the pointers to debug help library exported functions */
-
- if(!((dbg_hlp->sym_initialize) = (xbt_pfn_sym_initialize_t)GetProcAddress(dbg_hlp->instance,"SymInitialize")))
- {
- FreeLibrary(dbg_hlp->instance);
- free(dbg_hlp);
- dbg_hlp = NULL;
- return (int)GetLastError();
- }
-
- if(!((dbg_hlp->sym_cleanup) = (xbt_pfn_sym_cleanup_t)GetProcAddress(dbg_hlp->instance,"SymCleanup")))
- {
- FreeLibrary(dbg_hlp->instance);
- free(dbg_hlp);
- dbg_hlp = NULL;
- return (int)GetLastError();
- }
-
- if(!((dbg_hlp->sym_function_table_access) = (xbt_pfn_sym_function_table_access_t)GetProcAddress(dbg_hlp->instance,"SymFunctionTableAccess")))
- {
- FreeLibrary(dbg_hlp->instance);
- free(dbg_hlp);
- dbg_hlp = NULL;
- return (int)GetLastError();
- }
-
- if(!((dbg_hlp->sym_get_line_from_addr) = (xbt_pfn_sym_get_line_from_addr_t)GetProcAddress(dbg_hlp->instance,"SymGetLineFromAddr")))
- {
- FreeLibrary(dbg_hlp->instance);
- free(dbg_hlp);
- dbg_hlp = NULL;
- return (int)GetLastError();
- }
-
- if(!((dbg_hlp->sym_get_module_base) = (xbt_pfn_sym_get_module_base_t)GetProcAddress(dbg_hlp->instance,"SymGetModuleBase")))
- {
- FreeLibrary(dbg_hlp->instance);
- free(dbg_hlp);
- dbg_hlp = NULL;
- return (int)GetLastError();
- }
-
- if(!((dbg_hlp->sym_get_options) = (xbt_pfn_sym_get_options_t)GetProcAddress(dbg_hlp->instance,"SymGetOptions")))
- {
- FreeLibrary(dbg_hlp->instance);
- free(dbg_hlp);
- dbg_hlp = NULL;
- return (int)GetLastError();
- }
-
- if(!((dbg_hlp->sym_get_sym_from_addr) = (xbt_pfn_sym_get_sym_from_addr_t)GetProcAddress(dbg_hlp->instance,"SymGetSymFromAddr")))
- {
- FreeLibrary(dbg_hlp->instance);
- free(dbg_hlp);
- dbg_hlp = NULL;
- return (int)GetLastError();
- }
-
- if(!((dbg_hlp->sym_set_options) = (xbt_pfn_sym_set_options_t)GetProcAddress(dbg_hlp->instance,"SymSetOptions")))
- {
- FreeLibrary(dbg_hlp->instance);
- free(dbg_hlp);
- dbg_hlp = NULL;
- return (int)GetLastError();
- }
-
- if(!((dbg_hlp->stack_walk) = (xbt_pfn_stack_walk_t)GetProcAddress(dbg_hlp->instance,"StackWalk")))
- {
- FreeLibrary(dbg_hlp->instance);
- free(dbg_hlp);
- dbg_hlp = NULL;
- return (int)GetLastError();
- }
-
- dbg_hlp->process_handle = process_handle;
-
- (*(dbg_hlp->sym_set_options))((*(dbg_hlp->sym_get_options))() | SYMOPT_LOAD_LINES | SYMOPT_DEFERRED_LOADS);
-
- if(!(*(dbg_hlp->sym_initialize))(dbg_hlp->process_handle,0,1))
- {
- FreeLibrary(dbg_hlp->instance);
- free(dbg_hlp);
- dbg_hlp = NULL;
- return (int)GetLastError();
- }
-
-
- return 0;
+ if (dbg_hlp) {
+ /* debug help is already loaded */
+ return 0;
+ }
+
+ /* allocation */
+ dbg_hlp = xbt_new0(s_xbt_debug_hlp_t, 1);
+
+ /* load the library */
+ dbg_hlp->instance = LoadLibraryA("Dbghelp.dll");
+
+ if (!(dbg_hlp->instance)) {
+ free(dbg_hlp);
+ dbg_hlp = NULL;
+ return (int) GetLastError();
+ }
+
+ /* get the pointers to debug help library exported functions */
+
+ if (!
+ ((dbg_hlp->sym_initialize) =
+ (xbt_pfn_sym_initialize_t) GetProcAddress(dbg_hlp->instance,
+ "SymInitialize"))) {
+ FreeLibrary(dbg_hlp->instance);
+ free(dbg_hlp);
+ dbg_hlp = NULL;
+ return (int) GetLastError();
+ }
+
+ if (!
+ ((dbg_hlp->sym_cleanup) =
+ (xbt_pfn_sym_cleanup_t) GetProcAddress(dbg_hlp->instance,
+ "SymCleanup"))) {
+ FreeLibrary(dbg_hlp->instance);
+ free(dbg_hlp);
+ dbg_hlp = NULL;
+ return (int) GetLastError();
+ }
+
+ if (!
+ ((dbg_hlp->sym_function_table_access) =
+ (xbt_pfn_sym_function_table_access_t) GetProcAddress(dbg_hlp->instance,
+ "SymFunctionTableAccess")))
+ {
+ FreeLibrary(dbg_hlp->instance);
+ free(dbg_hlp);
+ dbg_hlp = NULL;
+ return (int) GetLastError();
+ }
+
+ if (!
+ ((dbg_hlp->sym_get_line_from_addr) =
+ (xbt_pfn_sym_get_line_from_addr_t) GetProcAddress(dbg_hlp->instance,
+ "SymGetLineFromAddr")))
+ {
+ FreeLibrary(dbg_hlp->instance);
+ free(dbg_hlp);
+ dbg_hlp = NULL;
+ return (int) GetLastError();
+ }
+
+ if (!
+ ((dbg_hlp->sym_get_module_base) =
+ (xbt_pfn_sym_get_module_base_t) GetProcAddress(dbg_hlp->instance,
+ "SymGetModuleBase"))) {
+ FreeLibrary(dbg_hlp->instance);
+ free(dbg_hlp);
+ dbg_hlp = NULL;
+ return (int) GetLastError();
+ }
+
+ if (!
+ ((dbg_hlp->sym_get_options) =
+ (xbt_pfn_sym_get_options_t) GetProcAddress(dbg_hlp->instance,
+ "SymGetOptions"))) {
+ FreeLibrary(dbg_hlp->instance);
+ free(dbg_hlp);
+ dbg_hlp = NULL;
+ return (int) GetLastError();
+ }
+
+ if (!
+ ((dbg_hlp->sym_get_sym_from_addr) =
+ (xbt_pfn_sym_get_sym_from_addr_t) GetProcAddress(dbg_hlp->instance,
+ "SymGetSymFromAddr")))
+ {
+ FreeLibrary(dbg_hlp->instance);
+ free(dbg_hlp);
+ dbg_hlp = NULL;
+ return (int) GetLastError();
+ }
+
+ if (!
+ ((dbg_hlp->sym_set_options) =
+ (xbt_pfn_sym_set_options_t) GetProcAddress(dbg_hlp->instance,
+ "SymSetOptions"))) {
+ FreeLibrary(dbg_hlp->instance);
+ free(dbg_hlp);
+ dbg_hlp = NULL;
+ return (int) GetLastError();
+ }
+
+ if (!
+ ((dbg_hlp->stack_walk) =
+ (xbt_pfn_stack_walk_t) GetProcAddress(dbg_hlp->instance,
+ "StackWalk"))) {
+ FreeLibrary(dbg_hlp->instance);
+ free(dbg_hlp);
+ dbg_hlp = NULL;
+ return (int) GetLastError();
+ }
+
+ dbg_hlp->process_handle = process_handle;
+
+ (*(dbg_hlp->sym_set_options)) ((*(dbg_hlp->sym_get_options)) () |
+ SYMOPT_LOAD_LINES | SYMOPT_DEFERRED_LOADS);
+
+ if (!(*(dbg_hlp->sym_initialize)) (dbg_hlp->process_handle, 0, 1)) {
+ FreeLibrary(dbg_hlp->instance);
+ free(dbg_hlp);
+ dbg_hlp = NULL;
+ return (int) GetLastError();
+ }
+
+
+ return 0;