diff options
author | monojenkins <jo.shields+jenkins@xamarin.com> | 2019-09-04 23:31:19 +0300 |
---|---|---|
committer | Larry Ewing <lewing@xamarin.com> | 2019-09-04 23:31:19 +0300 |
commit | 7af64d1ebe9e9ee305cdae8ec5995c9521cbcf19 (patch) | |
tree | 6b4b3156bc86605519848c3e1b5eac475f2d0084 | |
parent | 2c3aeaf3780de7392a0d3cbe4dcf86846eb4dffa (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.c | 19 | ||||
-rw-r--r-- | mono/mini/aot-runtime.c | 7 |
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; } |