[Lldb-commits] [lldb] r219782 - Improve the handling of kalimba ELF file section type recognition.

Matthew Gardiner mg11 at csr.com
Wed Oct 15 01:21:55 PDT 2014


Author: mg11
Date: Wed Oct 15 03:21:54 2014
New Revision: 219782

URL: http://llvm.org/viewvc/llvm-project?rev=219782&view=rev
Log:
Improve the handling of kalimba ELF file section type recognition.

Recognise the SHT_NOBITS property in kalimba ELF, and determine this to be
of type zerofilled. Subsequently recognise this type to represent bytes
on the target's DATA address space, and therefore be sized accordingly.


Modified:
    lldb/trunk/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp

Modified: lldb/trunk/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp?rev=219782&r1=219781&r2=219782&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp (original)
+++ lldb/trunk/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp Wed Oct 15 03:21:54 2014
@@ -291,7 +291,6 @@ subTypeFromElfHeader(const elf::ELFHeade
         LLDB_INVALID_CPUTYPE;
 }
 
-//! brief kalimbaSectionType
 //! The kalimba toolchain identifies a code section as being
 //! one with the SHT_PROGBITS set in the section sh_type and the top
 //! bit in the 32-bit address field set.
@@ -300,16 +299,24 @@ kalimbaSectionType(
     const elf::ELFHeader& header,
     const elf::ELFSectionHeader& sect_hdr)
 {
-    if (
-        llvm::ELF::EM_CSR_KALIMBA != header.e_machine ||
-        llvm::ELF::SHT_PROGBITS != sect_hdr.sh_type)
+    if (llvm::ELF::EM_CSR_KALIMBA != header.e_machine)
     {
         return eSectionTypeOther;
     }
 
-    const lldb::addr_t KAL_CODE_BIT = 1 << 31;
-    return KAL_CODE_BIT & sect_hdr.sh_addr ?
-         eSectionTypeCode  : eSectionTypeData;
+    if (llvm::ELF::SHT_NOBITS == sect_hdr.sh_type)
+    {
+        return eSectionTypeZeroFill;
+    }
+
+    if (llvm::ELF::SHT_PROGBITS == sect_hdr.sh_type)
+    {
+        const lldb::addr_t KAL_CODE_BIT = 1 << 31;
+        return KAL_CODE_BIT & sect_hdr.sh_addr ?
+             eSectionTypeCode  : eSectionTypeData;
+    }
+
+    return eSectionTypeOther;
 }
 
 // Arbitrary constant used as UUID prefix for core files.
@@ -1626,7 +1633,7 @@ ObjectFileELF::CreateSections(SectionLis
             }
 
             const uint32_t target_bytes_size =
-                eSectionTypeData == sect_type ? 
+                (eSectionTypeData == sect_type || eSectionTypeZeroFill == sect_type) ? 
                 m_arch_spec.GetDataByteSize() :
                     eSectionTypeCode == sect_type ?
                     m_arch_spec.GetCodeByteSize() : 1;





More information about the lldb-commits mailing list