Support building on Android arm aarch64 x86 x86_64

1. Add cmake support in CMakeLists.txt according to https://developer.android.com/ndk/guides/other_build_systems

2. Resolve symbols errors

3. Backport fixes from 438ed42311

   > QEMU relies on two optimization for ppc64 and arm:
   >
   > 1. if(0) /* optimized code */
   > 2. assert(0); /* optimized code */
   >
   > But the assert on mingw32 doesn't have noreturn attribute which prevents
   > the second optimization and some code is reverted to the original code
   > to fit in the first optimization.
   >
   > The assert implementation is copied from glib as qemu did.

   Unfortunately, NDK also doesn't have an assert implementation qemu prefers.
This commit is contained in:
mio
2021-10-06 04:42:44 +08:00
parent 04f538e151
commit ae1b6ad89b
27 changed files with 62 additions and 15 deletions

View File

@@ -143,8 +143,8 @@ static void cp_reg_check_reset(gpointer key, gpointer value, gpointer opaque)
cp_reg_reset(key, value, opaque);
#ifndef NDEBUG
newvalue = read_raw_cp_reg(&cpu->env, ri);
#endif
assert(oldvalue == newvalue);
#endif
}
static void arm_cpu_reset(CPUState *dev)
@@ -919,7 +919,9 @@ void arm_cpu_realizefn(struct uc_struct *uc, CPUState *dev)
* Presence of EL2 itself is ARM_FEATURE_EL2, and of the
* Security Extensions is ARM_FEATURE_EL3.
*/
#ifndef NDEBUG
assert(no_aa32 || cpu_isar_feature(aa32_arm_div, cpu));
#endif
set_feature(env, ARM_FEATURE_LPAE);
set_feature(env, ARM_FEATURE_V7);
}
@@ -945,7 +947,9 @@ void arm_cpu_realizefn(struct uc_struct *uc, CPUState *dev)
if (arm_feature(env, ARM_FEATURE_V6)) {
set_feature(env, ARM_FEATURE_V5);
if (!arm_feature(env, ARM_FEATURE_M)) {
#ifndef NDEBUG
assert(no_aa32 || cpu_isar_feature(aa32_jazelle, cpu));
#endif
set_feature(env, ARM_FEATURE_AUXCR);
}
}