From 54d1751b24bfa99fbdba3744c6c06d2484898a3c Mon Sep 17 00:00:00 2001 From: Zoltan Varga Date: Tue, 19 Nov 2013 17:14:32 +0100 Subject: [PATCH] [sdb] Move the setup of the sdb invoke LMF structure to an arch-specific function mono_arch_init_lmf_ext (). --- mono/mini/debugger-agent.c | 34 +--------------------------------- mono/mini/mini-amd64.c | 9 +++++++++ mono/mini/mini-arm.c | 9 +++++++++ mono/mini/mini-mips.c | 9 +++++++++ mono/mini/mini-ppc.c | 9 +++++++++ mono/mini/mini-s390x.c | 17 +++++++++++++++++ mono/mini/mini-x86.c | 9 +++++++++ mono/mini/mini.h | 1 + 8 files changed, 64 insertions(+), 33 deletions(-) diff --git a/mono/mini/debugger-agent.c b/mono/mini/debugger-agent.c index e9c136b7686..01ea5eb97bf 100755 --- a/mono/mini/debugger-agent.c +++ b/mono/mini/debugger-agent.c @@ -6313,39 +6313,7 @@ do_invoke_method (DebuggerTlsData *tls, Buffer *buf, InvokeData *invoke, guint8 /* Setup our lmf */ memset (&ext, 0, sizeof (ext)); -#ifdef TARGET_AMD64 - ext.lmf.previous_lmf = *(lmf_addr); - /* Mark that this is a MonoLMFExt */ - ext.lmf.previous_lmf = (gpointer)(((gssize)ext.lmf.previous_lmf) | 2); - ext.lmf.rsp = (gssize)&ext; -#elif defined(TARGET_X86) - ext.lmf.previous_lmf = (gsize)*(lmf_addr); - /* Mark that this is a MonoLMFExt */ - ext.lmf.previous_lmf = (gsize)(gpointer)(((gssize)ext.lmf.previous_lmf) | 2); - ext.lmf.ebp = (gssize)&ext; -#elif defined(TARGET_ARM) - ext.lmf.previous_lmf = *(lmf_addr); - /* Mark that this is a MonoLMFExt */ - ext.lmf.previous_lmf = (gpointer)(((gssize)ext.lmf.previous_lmf) | 2); - ext.lmf.sp = (gssize)&ext; -#elif defined(TARGET_POWERPC) - ext.lmf.previous_lmf = *(lmf_addr); - /* Mark that this is a MonoLMFExt */ - ext.lmf.previous_lmf = (gpointer)(((gssize)ext.lmf.previous_lmf) | 2); - ext.lmf.ebp = (gssize)&ext; -#elif defined(TARGET_S390X) - ext.lmf.previous_lmf = *(lmf_addr); - /* Mark that this is a MonoLMFExt */ - ext.lmf.previous_lmf = (gpointer)(((gssize)ext.lmf.previous_lmf) | 2); - ext.lmf.ebp = (gssize)&ext; -#elif defined(TARGET_MIPS) - ext.lmf.previous_lmf = *(lmf_addr); - /* Mark that this is a MonoLMFExt */ - ext.lmf.previous_lmf = (gpointer)(((gssize)ext.lmf.previous_lmf) | 2); - ext.lmf.iregs [mips_sp] = (gssize)&ext; -#else - g_assert_not_reached (); -#endif + mono_arch_init_lmf_ext (&ext, *lmf_addr); ext.debugger_invoke = TRUE; memcpy (&ext.ctx, &invoke->ctx, sizeof (MonoContext)); diff --git a/mono/mini/mini-amd64.c b/mono/mini/mini-amd64.c index dcacca0509e..991f54517cb 100644 --- a/mono/mini/mini-amd64.c +++ b/mono/mini/mini-amd64.c @@ -8743,4 +8743,13 @@ mono_arch_get_seq_point_info (MonoDomain *domain, guint8 *code) return info; } +void +mono_arch_init_lmf_ext (MonoLMFExt *ext, gpointer prev_lmf) +{ + ext->lmf.previous_lmf = prev_lmf; + /* Mark that this is a MonoLMFExt */ + ext->lmf.previous_lmf = (gpointer)(((gssize)ext->lmf.previous_lmf) | 2); + ext->lmf.rsp = (gssize)ext; +} + #endif diff --git a/mono/mini/mini-arm.c b/mono/mini/mini-arm.c index e6ac571b556..f9549a8baad 100644 --- a/mono/mini/mini-arm.c +++ b/mono/mini/mini-arm.c @@ -6573,6 +6573,15 @@ mono_arch_get_seq_point_info (MonoDomain *domain, guint8 *code) return info; } +void +mono_arch_init_lmf_ext (MonoLMFExt *ext, gpointer prev_lmf) +{ + ext->lmf.previous_lmf = prev_lmf; + /* Mark that this is a MonoLMFExt */ + ext->lmf.previous_lmf = (gpointer)(((gssize)ext->lmf.previous_lmf) | 2); + ext->lmf.sp = (gssize)ext; +} + /* * mono_arch_set_target: * diff --git a/mono/mini/mini-mips.c b/mono/mini/mini-mips.c index c219458d679..8b20cb05b4a 100644 --- a/mono/mini/mini-mips.c +++ b/mono/mini/mini-mips.c @@ -6151,4 +6151,13 @@ mono_arch_get_seq_point_info (MonoDomain *domain, guint8 *code) return NULL; } +void +mono_arch_init_lmf_ext (MonoLMFExt *ext, gpointer prev_lmf) +{ + ext->lmf.previous_lmf = prev_lmf; + /* Mark that this is a MonoLMFExt */ + ext->lmf.previous_lmf = (gpointer)(((gssize)ext->lmf.previous_lmf) | 2); + ext->lmf.iregs [mips_sp] = (gssize)ext; +} + #endif /* MONO_ARCH_SOFT_DEBUG_SUPPORTED */ diff --git a/mono/mini/mini-ppc.c b/mono/mini/mini-ppc.c index 4405b9e9059..6a1d7187a85 100644 --- a/mono/mini/mini-ppc.c +++ b/mono/mini/mini-ppc.c @@ -5956,4 +5956,13 @@ mono_arch_get_seq_point_info (MonoDomain *domain, guint8 *code) return NULL; } +void +mono_arch_init_lmf_ext (MonoLMFExt *ext, gpointer prev_lmf) +{ + ext->lmf.previous_lmf = prev_lmf; + /* Mark that this is a MonoLMFExt */ + ext->lmf.previous_lmf = (gpointer)(((gssize)ext->lmf.previous_lmf) | 2); + ext->lmf.ebp = (gssize)ext; +} + #endif diff --git a/mono/mini/mini-s390x.c b/mono/mini/mini-s390x.c index cc2a055e78d..8936fb30619 100644 --- a/mono/mini/mini-s390x.c +++ b/mono/mini/mini-s390x.c @@ -6384,6 +6384,23 @@ mono_arch_get_seq_point_info (MonoDomain *domain, guint8 *code) return NULL; } +/*------------------------------------------------------------------*/ +/* */ +/* Name - mono_arch_init_lmf_ext. */ +/* */ +/* Function - */ +/* */ +/*------------------------------------------------------------------*/ + +void +mono_arch_init_lmf_ext (MonoLMFExt *ext, gpointer prev_lmf) +{ + ext->lmf.previous_lmf = prev_lmf; + /* Mark that this is a MonoLMFExt */ + ext->lmf.previous_lmf = (gpointer)(((gssize)ext->lmf.previous_lmf) | 2); + ext->lmf.ebp = (gssize)ext; +} + /*========================= End of Function ========================*/ #endif diff --git a/mono/mini/mini-x86.c b/mono/mini/mini-x86.c index 639dc3f0c15..a25e5c75aa8 100755 --- a/mono/mini/mini-x86.c +++ b/mono/mini/mini-x86.c @@ -6807,6 +6807,15 @@ mono_arch_get_seq_point_info (MonoDomain *domain, guint8 *code) return NULL; } +void +mono_arch_init_lmf_ext (MonoLMFExt *ext, gpointer prev_lmf) +{ + ext->lmf.previous_lmf = (gsize)prev_lmf; + /* Mark that this is a MonoLMFExt */ + ext->lmf.previous_lmf = (gsize)(gpointer)(((gssize)ext->lmf.previous_lmf) | 2); + ext->lmf.ebp = (gssize)ext; +} + #endif #if defined(MONOTOUCH) || defined(MONO_EXTENSIONS) diff --git a/mono/mini/mini.h b/mono/mini/mini.h index bca6d796e85..5c21b13347d 100644 --- a/mono/mini/mini.h +++ b/mono/mini/mini.h @@ -2317,6 +2317,7 @@ void mono_arch_skip_breakpoint (MonoContext *ctx, MonoJitInfo * void mono_arch_skip_single_step (MonoContext *ctx) MONO_INTERNAL; gpointer mono_arch_get_seq_point_info (MonoDomain *domain, guint8 *code) MONO_INTERNAL; void mono_arch_setup_resume_sighandler_ctx (MonoContext *ctx, gpointer func) MONO_INTERNAL; +void mono_arch_init_lmf_ext (MonoLMFExt *ext, gpointer prev_lmf) MONO_INTERNAL; #endif #ifdef USE_JUMP_TABLES -- 2.25.1