[Lldb-commits] [lldb] r158236 - in /lldb/trunk/source/Expression: ClangExpressionParser.cpp IRForTarget.cpp

Sean Callanan scallanan at apple.com
Fri Jun 8 15:20:41 PDT 2012


Author: spyffe
Date: Fri Jun  8 17:20:41 2012
New Revision: 158236

URL: http://llvm.org/viewvc/llvm-project?rev=158236&view=rev
Log:
Minor fixes for ARM/iOS targets:

- On iOS, we select the "apcs-gnu" ABI to match
  what libraries expect.

- Literals are now allocated at their preferred
  alignment, eliminating many alignment crashes.

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

Modified: lldb/trunk/source/Expression/ClangExpressionParser.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Expression/ClangExpressionParser.cpp?rev=158236&r1=158235&r2=158236&view=diff
==============================================================================
--- lldb/trunk/source/Expression/ClangExpressionParser.cpp (original)
+++ lldb/trunk/source/Expression/ClangExpressionParser.cpp Fri Jun  8 17:20:41 2012
@@ -300,6 +300,9 @@
     {
         m_compiler->getTargetOpts().Triple = llvm::sys::getDefaultTargetTriple();
     }
+    
+    if (m_compiler->getTargetOpts().Triple.find("ios") != std::string::npos)
+        m_compiler->getTargetOpts().ABI = "apcs-gnu";
         
     // 3. Set up various important bits of infrastructure.
     m_compiler->createDiagnostics(0, 0);

Modified: lldb/trunk/source/Expression/IRForTarget.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Expression/IRForTarget.cpp?rev=158236&r1=158235&r2=158236&view=diff
==============================================================================
--- lldb/trunk/source/Expression/IRForTarget.cpp (original)
+++ lldb/trunk/source/Expression/IRForTarget.cpp Fri Jun  8 17:20:41 2012
@@ -1551,6 +1551,12 @@
     llvm::Type *initializer_type = initializer->getType();
     
     size_t size = m_target_data->getTypeAllocSize(initializer_type);
+    size_t align = m_target_data->getPrefTypeAlignment(initializer_type);
+    
+    const size_t mask = (align - 1);
+    uint64_t aligned_offset = (offset + mask) & ~mask;
+    m_data_allocator->GetStream().PutNHex8(aligned_offset - offset, 0);
+    offset = aligned_offset;
     
     lldb_private::DataBufferHeap data(size, '\0');
     
@@ -2060,6 +2066,7 @@
         llvm::Instruction *inst = *user_iter;
 
         ConstantFP *operand_constant_fp = dyn_cast<ConstantFP>(operand_val);
+        Type *operand_type = operand_constant_fp->getType();
         
         if (operand_constant_fp)
         {
@@ -2105,6 +2112,13 @@
             
             uint64_t offset = m_data_allocator->GetStream().GetSize();
             
+            size_t align = m_target_data->getPrefTypeAlignment(operand_type);
+            
+            const size_t mask = (align - 1);
+            uint64_t aligned_offset = (offset + mask) & ~mask;
+            m_data_allocator->GetStream().PutNHex8(aligned_offset - offset, 0);
+            offset = aligned_offset;
+            
             m_data_allocator->GetStream().Write(data.GetBytes(), operand_data_size);
             
             llvm::Type *fp_ptr_ty = operand_constant_fp->getType()->getPointerTo();





More information about the lldb-commits mailing list