aboutsummaryrefslogtreecommitdiffstats
path: root/qemu-common.h
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 /qemu-common.h
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 'qemu-common.h')
-rw-r--r--qemu-common.h16
1 files changed, 16 insertions, 0 deletions
diff --git a/qemu-common.h b/qemu-common.h
index 79ac779..097e1fc 100644
--- a/qemu-common.h
+++ b/qemu-common.h
@@ -408,4 +408,20 @@ typedef enum DisplayType
#define CLAMP_MAC_TIMEOUT(to) ((void)0)
#endif // _DARWIN_C_SOURCE
+#if defined(__clang__) || defined(__llvm__)
+/* Clang and llvm-gcc don't support global register variable (GRV).
+ Clang issues compile-time error for GRV. llvm-gcc accepts GRV (because
+ its front-end is gcc) but ignores it in the llvm-based back-end.
+ Undefining GRV decl to allow external/qemu and the rest of Android
+ to compile. But emulator built w/o GRV support will not function
+ correctly. User will be greeted with an error message (issued
+ in tcg/tcg.c) when emulator built this way is launched.
+ */
+#define SUPPORT_GLOBAL_REGISTER_VARIABLE 0
+#define GLOBAL_REGISTER_VARIABLE_DECL
+#else
+#define SUPPORT_GLOBAL_REGISTER_VARIABLE 1
+#define GLOBAL_REGISTER_VARIABLE_DECL register
+#endif /* __clang__ || __llvm__ */
+
#endif