aboutsummaryrefslogtreecommitdiffstats
path: root/tcg
diff options
context:
space:
mode:
authorAndrew Hsieh <andrewhsieh@google.com>2012-06-11 17:03:18 +0800
committerAndrew Hsieh <andrewhsieh@google.com>2012-06-12 11:01:46 +0800
commit0b3979707c09e058442c22d046b326ce244edda1 (patch)
treeedb8492d6181a99db7a38337ee2239c06d97661e /tcg
parent32167ca6cd795b619f4327d83f643a0805735ead (diff)
downloadexternal_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.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/tcg/tcg.c b/tcg/tcg.c
index 5882f00..66529f5 100644
--- a/tcg/tcg.c
+++ b/tcg/tcg.c
@@ -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");