diff options
author | Andrew Hsieh <andrewhsieh@google.com> | 2012-06-11 17:03:18 +0800 |
---|---|---|
committer | Andrew Hsieh <andrewhsieh@google.com> | 2012-06-12 11:01:46 +0800 |
commit | 0b3979707c09e058442c22d046b326ce244edda1 (patch) | |
tree | edb8492d6181a99db7a38337ee2239c06d97661e /tcg | |
parent | 32167ca6cd795b619f4327d83f643a0805735ead (diff) | |
download | external_qemu-0b3979707c09e058442c22d046b326ce244edda1.zip external_qemu-0b3979707c09e058442c22d046b326ce244edda1.tar.gz external_qemu-0b3979707c09e058442c22d046b326ce244edda1.tar.bz2 |
Force emulator to quit if it's built w/o global register variable support
Clang and llvm-gcc don't support global register variable (GRV) crucial
to emulator (where a register is reserved to point to target architecture
state for better code-gen). Clang and llvm-gcc are provided in recent
Xcode to replace the original gcc with GRV support. MacOSX developers
may accidentally install newer Xcode and break emulator.
This CL allows emulator (and the rest of Android tree) to build but forces
emulator to quit if it's built w/o GRV support. Developers build
Android tree with clang or llvm-gcc can still get good system image,
but they have to use emulators built the other way or from SDKs to run it.
Related CL & bug entry:
https://android-review.googlesource.com/#/c/33011
http://code.google.com/p/android/issues/detail?id=32577
Change-Id: Ia585dd7bf9783e2ff4c114b4f0ec20b89684ab57
Diffstat (limited to 'tcg')
-rw-r--r-- | tcg/tcg.c | 9 |
1 files changed, 9 insertions, 0 deletions
@@ -2030,6 +2030,15 @@ static inline int tcg_gen_code_common(TCGContext *s, uint8_t *gen_code_buf, unsigned int tpc2gpc_index = 0; #endif // CONFIG_MEMCHECK +#if !SUPPORT_GLOBAL_REGISTER_VARIABLE + printf("ERROR: This emulator is built by compiler without global register variable\n" + "support! Emulator reserves a register to point to target architecture state\n" + "for better code generation. LLVM-based compilers such as clang and llvm-gcc\n" + "currently don't support global register variable. Please see\n" + "http://source.android.com/source/initializing.html for detail.\n\n"); + tcg_abort(); +#endif + #ifdef DEBUG_DISAS if (unlikely(qemu_loglevel_mask(CPU_LOG_TB_OP))) { qemu_log("OP:\n"); |