From e2f7a744f1821606a0c375ca0cfa1f1817cad9a7 Mon Sep 17 00:00:00 2001
From: Logan Chien <loganchien@google.com>
Date: Mon, 3 Sep 2012 18:23:31 +0800
Subject: [PATCH] Split Android to two cases.

Split llvm::Triple::Android into llvm::Triple::Android
and llvm::Triple::AndroidEABI, so that the result of
isEABI("i686-linux-android") won't be true.
---
 include/llvm/ADT/Triple.h                          |    9 ++++++++-
 lib/Support/Triple.cpp                             |    2 ++
 .../Instrumentation/AddressSanitizer.cpp           |    2 +-
 3 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/include/llvm/ADT/Triple.h b/include/llvm/ADT/Triple.h
index ab1f0da..60f4d88 100644
--- a/include/llvm/ADT/Triple.h
+++ b/include/llvm/ADT/Triple.h
@@ -110,7 +110,8 @@ public:
     GNUEABIHF,
     EABI,
     MachO,
-    Android
+    Android,
+    AndroidEABI
   };
 
 private:
@@ -322,6 +323,12 @@ public:
     return getEnvironment() == Triple::MachO || isOSDarwin();
   }
 
+  /// \brief Test whether the environment is Android.
+  bool isEnvironmentAndroid() const {
+    return (getEnvironment() == Triple::Android ||
+            getEnvironment() == Triple::AndroidEABI);
+  }
+
   /// @}
   /// @name Mutators
   /// @{
diff --git a/lib/Support/Triple.cpp b/lib/Support/Triple.cpp
index d1dc7c8..afdc54b 100644
--- a/lib/Support/Triple.cpp
+++ b/lib/Support/Triple.cpp
@@ -140,6 +140,7 @@ const char *Triple::getEnvironmentTypeName(EnvironmentType Kind) {
   case EABI: return "eabi";
   case MachO: return "macho";
   case Android: return "android";
+  case AndroidEABI: return "androideabi";
   }
 
   llvm_unreachable("Invalid EnvironmentType!");
@@ -307,6 +308,7 @@ static Triple::EnvironmentType parseEnvironment(StringRef EnvironmentName) {
     .StartsWith("gnueabi", Triple::GNUEABI)
     .StartsWith("gnu", Triple::GNU)
     .StartsWith("macho", Triple::MachO)
+    .StartsWith("androideabi", Triple::AndroidEABI)
     .StartsWith("android", Triple::Android)
     .Default(Triple::UnknownEnvironment);
 }
diff --git a/lib/Transforms/Instrumentation/AddressSanitizer.cpp b/lib/Transforms/Instrumentation/AddressSanitizer.cpp
index 42f21d2..6433190 100644
--- a/lib/Transforms/Instrumentation/AddressSanitizer.cpp
+++ b/lib/Transforms/Instrumentation/AddressSanitizer.cpp
@@ -774,7 +774,7 @@ bool AddressSanitizer::runOnModule(Module &M) {
                             /*hasSideEffects=*/true);
 
   llvm::Triple targetTriple(M.getTargetTriple());
-  bool isAndroid = targetTriple.getEnvironment() == llvm::Triple::Android;
+  bool isAndroid = targetTriple.isEnvironmentAndroid();
 
   MappingOffset = isAndroid ? kDefaultShadowOffsetAndroid :
     (LongSize == 32 ? kDefaultShadowOffset32 : kDefaultShadowOffset64);
-- 
1.7.7.3

