[Lldb-commits] [lldb] r165726 - in /lldb/trunk/source/Expression: IRDynamicChecks.cpp IRForTarget.cpp IRInterpreter.cpp

Micah Villmow villmow at gmail.com
Thu Oct 11 10:21:42 PDT 2012


Author: mvillmow
Date: Thu Oct 11 12:21:41 2012
New Revision: 165726

URL: http://llvm.org/viewvc/llvm-project?rev=165726&view=rev
Log:
Add in the first iteration of support for llvm/clang/lldb to allow variable per address space pointer sizes to be optimized correctly.

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

Modified: lldb/trunk/source/Expression/IRDynamicChecks.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Expression/IRDynamicChecks.cpp?rev=165726&r1=165725&r2=165726&view=diff
==============================================================================
--- lldb/trunk/source/Expression/IRDynamicChecks.cpp (original)
+++ lldb/trunk/source/Expression/IRDynamicChecks.cpp Thu Oct 11 12:21:41 2012
@@ -280,7 +280,7 @@
     llvm::Value *BuildPointerValidatorFunc(lldb::addr_t start_address)
     {
         IntegerType *intptr_ty = llvm::Type::getIntNTy(m_module.getContext(),
-                                                             (m_module.getPointerSize() == llvm::Module::Pointer64) ? 64 : 32);
+                                                             (m_module.getPointerSize(0) == llvm::Module::Pointer64) ? 64 : 32);
         
         llvm::Type *param_array[1];
         
@@ -307,7 +307,7 @@
     llvm::Value *BuildObjectCheckerFunc(lldb::addr_t start_address)
     {
         IntegerType *intptr_ty = llvm::Type::getIntNTy(m_module.getContext(),
-                                                       (m_module.getPointerSize() == llvm::Module::Pointer64) ? 64 : 32);
+                                                       (m_module.getPointerSize(0) == llvm::Module::Pointer64) ? 64 : 32);
         
         llvm::Type *param_array[2];
         

Modified: lldb/trunk/source/Expression/IRForTarget.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Expression/IRForTarget.cpp?rev=165726&r1=165725&r2=165726&view=diff
==============================================================================
--- lldb/trunk/source/Expression/IRForTarget.cpp (original)
+++ lldb/trunk/source/Expression/IRForTarget.cpp Thu Oct 11 12:21:41 2012
@@ -300,8 +300,9 @@
 IRForTarget::BuildFunctionPointer (llvm::Type *type,
                                    uint64_t ptr)
 {
+    unsigned AS = type->isPointerTy() ? cast<PointerType>(type)->getAddressSpace: 0;
     IntegerType *intptr_ty = Type::getIntNTy(m_module->getContext(),
-                                             (m_module->getPointerSize() == Module::Pointer64) ? 64 : 32);
+                                             (m_module->getPointerSize(AS) == Module::Pointer64) ? 64 : 32);
     PointerType *fun_ptr_ty = PointerType::getUnqual(type);
     Constant *fun_addr_int = ConstantInt::get(intptr_ty, ptr, false);
     return ConstantExpr::getIntToPtr(fun_addr_int, fun_ptr_ty);
@@ -840,7 +841,8 @@
     
     Type *i8_ptr_ty = Type::getInt8PtrTy(m_module->getContext());
     IntegerType *intptr_ty = Type::getIntNTy(m_module->getContext(),
-                                                   (m_module->getPointerSize() == Module::Pointer64) ? 64 : 32);
+                                                   (m_module->getPointerSize(ns_str->getType()->getAddressSpace())
+                                                    == Module::Pointer64) ? 64 : 32);
     Type *i32_ty = Type::getInt32Ty(m_module->getContext());
     Type *i8_ty = Type::getInt8Ty(m_module->getContext());
     
@@ -1271,10 +1273,11 @@
         ArrayRef<Type *> srN_arg_types(type_array, 1);
         
         llvm::Type *srN_type = FunctionType::get(sel_ptr_type, srN_arg_types, false);
+        unsigned AS = srN_type->isPointerTy() ? cast<PointerType>(srN_type)->getAddressSpace() : 0;
         
         // Build the constant containing the pointer to the function
         IntegerType *intptr_ty = Type::getIntNTy(m_module->getContext(),
-                                                 (m_module->getPointerSize() == Module::Pointer64) ? 64 : 32);
+                                                 (m_module->getPointerSize(AS) == Module::Pointer64) ? 64 : 32);
         PointerType *srN_ptr_ty = PointerType::getUnqual(srN_type);
         Constant *srN_addr_int = ConstantInt::get(intptr_ty, sel_registerName_addr, false);
         m_sel_registerName = ConstantExpr::getIntToPtr(srN_addr_int, srN_ptr_ty);
@@ -1724,9 +1727,9 @@
         log->Printf("Found \"%s\" at 0x%llx", name.GetCString(), symbol_addr);
     
     Type *symbol_type = symbol->getType();
-    
+    unsigned AS = symbol_type->isPointerTy() ? cast<PointerType>(symbol_type)->getAddressSpace() : 0;
     IntegerType *intptr_ty = Type::getIntNTy(m_module->getContext(),
-                                             (m_module->getPointerSize() == Module::Pointer64) ? 64 : 32);
+                                             (m_module->getPointerSize(AS) == Module::Pointer64) ? 64 : 32);
     
     Constant *symbol_addr_int = ConstantInt::get(intptr_ty, symbol_addr, false);
     
@@ -1807,7 +1810,8 @@
         return false;
     
     IntegerType *intptr_ty = Type::getIntNTy(m_module->getContext(),
-                                             (m_module->getPointerSize() == Module::Pointer64) ? 64 : 32);
+                                             (m_module->getPointerSize(global_variable->getAddressSpace())
+                                              == Module::Pointer64) ? 64 : 32);
     
     Constant *class_addr = ConstantInt::get(intptr_ty, (uint64_t)class_ptr);
     Constant *class_bitcast = ConstantExpr::getIntToPtr(class_addr, load_instruction->getType());
@@ -2577,8 +2581,9 @@
 {
     lldb::LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_EXPRESSIONS));
     
+    unsigned AS = type->isPointerTy() ? cast<PointerType>(type)->getAddressSpace() : 0;
     IntegerType *intptr_ty = Type::getIntNTy(m_module->getContext(),
-                                             (m_module->getPointerSize() == Module::Pointer64) ? 64 : 32);
+                                             (m_module->getPointerSize(AS) == Module::Pointer64) ? 64 : 32);
     
     llvm::Constant *offset_int = ConstantInt::get(intptr_ty, offset);
     
@@ -2618,8 +2623,9 @@
     if (!allocation)
         return false;
     
+    unsigned AS = 0;
     IntegerType *intptr_ty = Type::getIntNTy(m_module->getContext(),
-                                             (m_module->getPointerSize() == Module::Pointer64) ? 64 : 32);
+                                             (m_module->getPointerSize(AS) == Module::Pointer64) ? 64 : 32);
     
     Constant *relocated_addr = ConstantInt::get(intptr_ty, (uint64_t)allocation);
     Constant *relocated_bitcast = ConstantExpr::getIntToPtr(relocated_addr, llvm::Type::getInt8PtrTy(m_module->getContext()));

Modified: lldb/trunk/source/Expression/IRInterpreter.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Expression/IRInterpreter.cpp?rev=165726&r1=165725&r2=165726&view=diff
==============================================================================
--- lldb/trunk/source/Expression/IRInterpreter.cpp (original)
+++ lldb/trunk/source/Expression/IRInterpreter.cpp Thu Oct 11 12:21:41 2012
@@ -205,7 +205,7 @@
         m_decl_map(decl_map)
     {
         m_byte_order = (target_data.isLittleEndian() ? lldb::eByteOrderLittle : lldb::eByteOrderBig);
-        m_addr_byte_size = (target_data.getPointerSize());
+        m_addr_byte_size = (target_data.getPointerSize(0));
     }
     
     Region Malloc (size_t size, size_t align)





More information about the lldb-commits mailing list