Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormonojenkins <jo.shields+jenkins@xamarin.com>2019-09-04 23:31:19 +0300
committerLarry Ewing <lewing@xamarin.com>2019-09-04 23:31:19 +0300
commit7af64d1ebe9e9ee305cdae8ec5995c9521cbcf19 (patch)
tree6b4b3156bc86605519848c3e1b5eac475f2d0084
parent2c3aeaf3780de7392a0d3cbe4dcf86846eb4dffa (diff)
[2019-06] [android] remove text relocations in AOT/arm32 (#16660)
* Revert "[aot] partial revert of #14043 (#14135)" This reverts commit 223e0bd78d0531eb7b58edb1286e1c545c65f57a. * Revert "[aot] change method table generation so that it works for larger assemblies on ARM (#14043)" This reverts commit 9ff3b0d65ee401616ac08fe43530d7a27bbe5902.
-rw-r--r--mono/mini/aot-compiler.c19
-rw-r--r--mono/mini/aot-runtime.c7
2 files changed, 2 insertions, 24 deletions
diff --git a/mono/mini/aot-compiler.c b/mono/mini/aot-compiler.c
index 49df0641036..84a4a0842bd 100644
--- a/mono/mini/aot-compiler.c
+++ b/mono/mini/aot-compiler.c
@@ -1595,21 +1595,6 @@ arch_emit_direct_call (MonoAotCompile *acfg, const char *target, gboolean extern
g_assert_not_reached ();
#endif
}
-
-static void
-arch_emit_label_address (MonoAotCompile *acfg, const char *target, gboolean external_call, gboolean thumb, MonoJumpInfo *ji, int *call_size)
-{
-#if defined(TARGET_ARM) && defined(TARGET_ANDROID)
- /* binutils ld does not support branch islands on arm32 */
- if (!thumb) {
- emit_unset_mode (acfg);
- fprintf (acfg->fp, "ldr pc,=%s\n", target);
- fprintf (acfg->fp, ".ltorg\n");
- *call_size = 8;
- } else
-#endif
- arch_emit_direct_call (acfg, target, external_call, thumb, ji, call_size);
-}
#endif
/*
@@ -9958,9 +9943,9 @@ emit_code (MonoAotCompile *acfg)
int call_size;
if (!ignore_cfg (acfg->cfgs [i])) {
- arch_emit_label_address (acfg, acfg->cfgs [i]->asm_symbol, FALSE, acfg->thumb_mixed && acfg->cfgs [i]->compile_llvm, NULL, &call_size);
+ arch_emit_direct_call (acfg, acfg->cfgs [i]->asm_symbol, FALSE, acfg->thumb_mixed && acfg->cfgs [i]->compile_llvm, NULL, &call_size);
} else {
- arch_emit_label_address (acfg, symbol, FALSE, FALSE, NULL, &call_size);
+ arch_emit_direct_call (acfg, symbol, FALSE, FALSE, NULL, &call_size);
}
#endif
}
diff --git a/mono/mini/aot-runtime.c b/mono/mini/aot-runtime.c
index 38fedfdf2fd..386754d1ff6 100644
--- a/mono/mini/aot-runtime.c
+++ b/mono/mini/aot-runtime.c
@@ -1939,11 +1939,6 @@ get_call_table_entry (void *table, int index)
guint32 ins;
gint32 offset;
- ins_addr = (guint32 *)table + (index * 2);
- if ((guint32) *ins_addr == (guint32 ) 0xe51ff004) { // ldr pc, =<label>
- return *((char **) (ins_addr + 1));
- }
-
ins_addr = (guint32*)table + index;
ins = *ins_addr;
if ((ins >> ARMCOND_SHIFT) == ARMCOND_NV) {
@@ -1951,8 +1946,6 @@ get_call_table_entry (void *table, int index)
offset = (((int)(((ins & 0xffffff) << 1) | ((ins >> 24) & 0x1))) << 7) >> 7;
return (char*)ins_addr + (offset * 2) + 8 + 1;
} else {
- g_assert ((ins >> ARMCOND_SHIFT) == ARMCOND_AL);
- /* bl */
offset = (((int)ins & 0xffffff) << 8) >> 8;
return (char*)ins_addr + (offset * 4) + 8;
}