Merge pull request #5317 from alexrp/master
authorAlex Rønne Petersen <alex@alexrp.com>
Tue, 8 Aug 2017 06:55:11 +0000 (08:55 +0200)
committerGitHub <noreply@github.com>
Tue, 8 Aug 2017 06:55:11 +0000 (08:55 +0200)
[profiler] Some profiler API improvements.

1  2 
mono/mini/mini.h

diff --combined mono/mini/mini.h
index 6d90abbd973af8cbc55408ece2ea5c4dea9a3246,f0d1bb7fc525f44f146c3fa2190a127a833a4031..9c6b71195f6d31104d14eb4b9734c7a3d01b423f
@@@ -552,7 -552,7 +552,7 @@@ extern MonoMethodDesc *mono_break_at_bb
  extern int mono_break_at_bb_bb_num;
  extern gboolean mono_verify_all;
  extern gboolean mono_do_x86_stack_align;
 -extern const char *mono_build_date;
 +extern MONO_API const char *mono_build_date;
  extern gboolean mono_do_signal_chaining;
  extern gboolean mono_do_crash_chaining;
  extern MONO_API gboolean mono_use_llvm;
@@@ -1920,8 -1920,11 +1920,11 @@@ typedef struct 
        MonoProfilerCallInstrumentationFlags prof_flags;
  } MonoCompile;
  
+ #define MONO_CFG_PROFILE(cfg, flag) \
+       G_UNLIKELY ((cfg)->prof_flags & MONO_PROFILER_CALL_INSTRUMENTATION_ ## flag)
  #define MONO_CFG_PROFILE_CALL_CONTEXT(cfg) \
-       ((cfg)->prof_flags & (MONO_PROFILER_CALL_INSTRUMENTATION_PROLOGUE_CONTEXT | MONO_PROFILER_CALL_INSTRUMENTATION_EPILOGUE_CONTEXT))
+       (MONO_CFG_PROFILE (cfg, ENTER_CONTEXT) || MONO_CFG_PROFILE (cfg, LEAVE_CONTEXT))
  
  typedef enum {
        MONO_CFG_HAS_ALLOCA = 1 << 0,
@@@ -2357,8 -2360,12 +2360,12 @@@ MonoDomain* mini_ini
  void        mini_cleanup                   (MonoDomain *domain);
  MONO_API MonoDebugOptions *mini_get_debug_options   (void);
  MONO_API gboolean    mini_parse_debug_option (const char *option);
+ /* profiler support */
  void        mini_add_profiler_argument (const char *desc);
- void        mini_profiler_emit_instrumentation_call (MonoCompile *cfg, void *func, gboolean entry, MonoInst **ret, MonoType *rtype);
+ void        mini_profiler_emit_enter (MonoCompile *cfg);
+ void        mini_profiler_emit_leave (MonoCompile *cfg, MonoInst *ret);
+ void        mini_profiler_emit_tail_call (MonoCompile *cfg, MonoMethod *target);
  void        mini_profiler_context_enable (void);
  gpointer    mini_profiler_context_get_this (MonoProfilerCallContext *ctx);
  gpointer    mini_profiler_context_get_argument (MonoProfilerCallContext *ctx, guint32 pos);
@@@ -2767,6 -2774,7 +2774,6 @@@ void      mono_arch_free_jit_tls_dat
  void      mono_arch_fill_argument_info          (MonoCompile *cfg);
  void      mono_arch_allocate_vars               (MonoCompile *m);
  int       mono_arch_get_argument_info           (MonoMethodSignature *csig, int param_count, MonoJitArgumentInfo *arg_info);
 -gboolean  mono_arch_print_tree                                (MonoInst *tree, int arity);
  void      mono_arch_emit_call                   (MonoCompile *cfg, MonoCallInst *call);
  void      mono_arch_emit_outarg_vt              (MonoCompile *cfg, MonoInst *ins, MonoInst *src);
  void      mono_arch_emit_setret                 (MonoCompile *cfg, MonoMethod *method, MonoInst *val);