From 0b3979707c09e058442c22d046b326ce244edda1 Mon Sep 17 00:00:00 2001 From: Andrew Hsieh Date: Mon, 11 Jun 2012 17:03:18 +0800 Subject: 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 --- tcg/tcg.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'tcg') 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"); -- cgit v1.1