[Lldb-commits] [lldb] r225547 - Fix issues with LLDB's interpreter and MS ABI guard variables.

Zachary Turner zturner at google.com
Fri Jan 9 13:12:22 PST 2015


Author: zturner
Date: Fri Jan  9 15:12:22 2015
New Revision: 225547

URL: http://llvm.org/viewvc/llvm-project?rev=225547&view=rev
Log:
Fix issues with LLDB's interpreter and MS ABI guard variables.

MS ABI guard variables end with @4IA, so this patch teaches the
interpreter about that.  Additionally, there was an issue with
TurnGuardLoadIntoZero which was causing some guard uses of a
variable to be missed.  This fixes that by calling
Instruction::replaceAllUsesWith() instead of trying to replicate
that function.

Modified:
    lldb/trunk/source/Expression/IRForTarget.cpp

Modified: lldb/trunk/source/Expression/IRForTarget.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Expression/IRForTarget.cpp?rev=225547&r1=225546&r2=225547&view=diff
==============================================================================
--- lldb/trunk/source/Expression/IRForTarget.cpp (original)
+++ lldb/trunk/source/Expression/IRForTarget.cpp Fri Jan  9 15:12:22 2015
@@ -2043,8 +2043,12 @@ static bool isGuardVariableRef(Value *V)
 
     GlobalVariable *GV = dyn_cast<GlobalVariable>(Old);
 
-    if (!GV || !GV->hasName() || !GV->getName().startswith("_ZGV"))
+    if (!GV || !GV->hasName() ||
+        (!GV->getName().startswith("_ZGV") && // Itanium ABI guard variable
+         !GV->getName().endswith("@4IA")))    // Microsoft ABI guard variable
+    {
         return false;
+    }
 
     return true;
 }
@@ -2052,20 +2056,8 @@ static bool isGuardVariableRef(Value *V)
 void
 IRForTarget::TurnGuardLoadIntoZero(llvm::Instruction* guard_load)
 {
-    Constant* zero(ConstantInt::get(Type::getInt8Ty(m_module->getContext()), 0, true));
-
-    for (llvm::User *u : guard_load->users())
-    {
-        if (isa<Constant>(u))
-        {
-            // do nothing for the moment
-        }
-        else
-        {
-            u->replaceUsesOfWith(guard_load, zero);
-        }
-    }
-
+    Constant *zero(Constant::getNullValue(guard_load->getType()));
+    guard_load->replaceAllUsesWith(zero);
     guard_load->eraseFromParent();
 }
 





More information about the lldb-commits mailing list