X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmini%2Fxdebug.c;h=167b2b9e2b74b4702849aa58139508437c3ccfc8;hb=be8962df9cf1ec031056136404a20c8cbcd974a9;hp=f32deb0cc045cb53f15f7cebcf75ff35c77f685f;hpb=8298b36af4f1ed3d37d350fc77bbf01c50082d0d;p=mono.git diff --git a/mono/mini/xdebug.c b/mono/mini/xdebug.c index f32deb0cc04..167b2b9e2b7 100644 --- a/mono/mini/xdebug.c +++ b/mono/mini/xdebug.c @@ -51,6 +51,8 @@ #include "image-writer.h" #include "dwarfwriter.h" +#include "mono/utils/mono-compiler.h" + #define USE_GDB_JIT_INTERFACE /* The recommended gdb macro is: */ @@ -95,27 +97,30 @@ struct jit_descriptor struct jit_code_entry *first_entry; }; +/* GDB puts a breakpoint in this function. */ +void MONO_NEVER_INLINE __jit_debug_register_code(void); -#ifdef _MSC_VER -#define MONO_NOINLINE __declspec (noinline) -#else -#define MONO_NOINLINE __attribute__((noinline)) -#endif +#if !defined(MONO_LLVM_LOADED) && defined(ENABLE_LLVM) && !defined(MONO_CROSS_COMPILE) -/* GDB puts a breakpoint in this function. */ -void MONO_NOINLINE __jit_debug_register_code(void); +/* LLVM already defines these */ -/* Make sure to specify the version statically, because the - debugger may check the version before we can set it. */ -struct jit_descriptor __jit_debug_descriptor = { 1, 0, 0, 0 }; +extern struct jit_descriptor __jit_debug_descriptor; + +#else /* gcc seems to inline/eliminate calls to noinline functions, thus the asm () */ -void MONO_NOINLINE __jit_debug_register_code(void) { +void MONO_NEVER_INLINE __jit_debug_register_code(void) { #if defined(__GNUC__) asm (""); #endif } +/* Make sure to specify the version statically, because the + debugger may check the version before we can set it. */ +struct jit_descriptor __jit_debug_descriptor = { 1, 0, 0, 0 }; + +#endif + static MonoImageWriter *xdebug_w; static MonoDwarfWriter *xdebug_writer; static FILE *xdebug_fp, *il_file; @@ -124,7 +129,7 @@ static int il_file_line_index; static GHashTable *xdebug_syms; void -mono_xdebug_init (char *options) +mono_xdebug_init (const char *options) { MonoImageWriter *w; char **args, **ptr; @@ -157,13 +162,13 @@ mono_xdebug_init (char *options) img_writer_emit_start (w); - xdebug_writer = mono_dwarf_writer_create (w, il_file, 0, TRUE); + xdebug_writer = mono_dwarf_writer_create (w, il_file, 0, TRUE, TRUE); /* Emit something so the file has a text segment */ img_writer_emit_section_change (w, ".text", 0); img_writer_emit_string (w, ""); - mono_dwarf_writer_emit_base_info (xdebug_writer, mono_unwind_get_cie_program ()); + mono_dwarf_writer_emit_base_info (xdebug_writer, "JITted code", mono_unwind_get_cie_program ()); } static void @@ -180,9 +185,9 @@ xdebug_begin_emit (MonoImageWriter **out_w, MonoDwarfWriter **out_dw) if (!il_file) il_file = fopen ("xdb.il", "w"); - dw = mono_dwarf_writer_create (w, il_file, il_file_line_index, FALSE); + dw = mono_dwarf_writer_create (w, il_file, il_file_line_index, FALSE, TRUE); - mono_dwarf_writer_emit_base_info (dw, mono_unwind_get_cie_program ()); + mono_dwarf_writer_emit_base_info (dw, "JITted code", mono_unwind_get_cie_program ()); *out_w = w; *out_dw = dw; @@ -284,8 +289,8 @@ mono_save_xdebug_info (MonoCompile *cfg) xdebug_method_count ++; - dmji = mono_debug_find_method (cfg->jit_info->method, mono_domain_get ());; - mono_dwarf_writer_emit_method (xdebug_writer, cfg, cfg->jit_info->method, NULL, NULL, cfg->jit_info->code_start, cfg->jit_info->code_size, cfg->args, cfg->locals, cfg->unwind_ops, dmji); + dmji = mono_debug_find_method (jinfo_get_method (cfg->jit_info), mono_domain_get ());; + mono_dwarf_writer_emit_method (xdebug_writer, cfg, jinfo_get_method (cfg->jit_info), NULL, NULL, cfg->jit_info->code_start, cfg->jit_info->code_size, cfg->args, cfg->locals, cfg->unwind_ops, dmji); mono_debug_free_method_jit_info (dmji); #if 0 @@ -313,8 +318,8 @@ mono_save_xdebug_info (MonoCompile *cfg) return; mono_loader_lock (); - dmji = mono_debug_find_method (cfg->jit_info->method, mono_domain_get ());; - mono_dwarf_writer_emit_method (xdebug_writer, cfg, cfg->jit_info->method, NULL, NULL, cfg->jit_info->code_start, cfg->jit_info->code_size, cfg->args, cfg->locals, cfg->unwind_ops, dmji); + dmji = mono_debug_find_method (jinfo_get_method (cfg->jit_info), mono_domain_get ()); + mono_dwarf_writer_emit_method (xdebug_writer, cfg, jinfo_get_method (cfg->jit_info), NULL, NULL, cfg->jit_info->code_start, cfg->jit_info->code_size, cfg->args, cfg->locals, cfg->unwind_ops, dmji); mono_debug_free_method_jit_info (dmji); fflush (xdebug_fp); mono_loader_unlock (); @@ -359,7 +364,7 @@ mono_save_trampoline_xdebug_info (MonoTrampInfo *info) #else /* !defined(DISABLE_AOT) && !defined(DISABLE_JIT) */ void -mono_xdebug_init (char *options) +mono_xdebug_init (const char *options) { }