Author: David M. Lary Date: 2022-07-12T12:18:38+02:00 New Revision: 1e3ee766bb580ead0a482f213255d334f9af8276
URL: https://github.com/llvm/llvm-project/commit/1e3ee766bb580ead0a482f213255d334f9af8276 DIFF: https://github.com/llvm/llvm-project/commit/1e3ee766bb580ead0a482f213255d334f9af8276.diff LOG: [lldb] add SBSection.alignment to python bindings This commit adds SBSection.GetAlignment(), and SBSection.alignment as a python property to lldb. Reviewed By: clayborg, JDevlieghere, labath Differential Revision: https://reviews.llvm.org/D128069 Added: lldb/test/API/python_api/section/aligned.yaml Modified: lldb/bindings/interface/SBSection.i lldb/include/lldb/API/SBSection.h lldb/source/API/SBSection.cpp lldb/test/API/python_api/section/TestSectionAPI.py Removed: ################################################################################ diff --git a/lldb/bindings/interface/SBSection.i b/lldb/bindings/interface/SBSection.i index b86d4e99c5ea0..a138d81825b53 100644 --- a/lldb/bindings/interface/SBSection.i +++ b/lldb/bindings/interface/SBSection.i @@ -105,6 +105,9 @@ public: uint32_t GetTargetByteSize (); + uint32_t + GetAlignment (); + bool GetDescription (lldb::SBStream &description); @@ -138,6 +141,7 @@ public: data = property(GetSectionData, None, doc='''A read only property that returns an lldb object that represents the bytes for this section (lldb.SBData) for this section.''') type = property(GetSectionType, None, doc='''A read only property that returns an lldb enumeration value (see enumerations that start with "lldb.eSectionType") that represents the type of this section (code, data, etc.).''') target_byte_size = property(GetTargetByteSize, None, doc='''A read only property that returns the size of a target byte represented by this section as a number of host bytes.''') + alignment = property(GetAlignment, None, doc='''A read only property that returns the alignment of this section as a number of host bytes.''') %} #endif diff --git a/lldb/include/lldb/API/SBSection.h b/lldb/include/lldb/API/SBSection.h index d722dbe4ff1fb..94c6614ecfa99 100644 --- a/lldb/include/lldb/API/SBSection.h +++ b/lldb/include/lldb/API/SBSection.h @@ -76,6 +76,12 @@ class LLDB_API SBSection { /// The number of host (8-bit) bytes needed to hold a target byte uint32_t GetTargetByteSize(); + /// Return the alignment of the section in bytes + /// + /// \return + /// The alignment of the section in bytes + uint32_t GetAlignment(); + bool operator==(const lldb::SBSection &rhs); bool operator!=(const lldb::SBSection &rhs); diff --git a/lldb/source/API/SBSection.cpp b/lldb/source/API/SBSection.cpp index 733e0db0b5bad..3a9cf20e484a5 100644 --- a/lldb/source/API/SBSection.cpp +++ b/lldb/source/API/SBSection.cpp @@ -242,6 +242,15 @@ uint32_t SBSection::GetTargetByteSize() { return 0; } +uint32_t SBSection::GetAlignment() { + LLDB_INSTRUMENT_VA(this); + + SectionSP section_sp(GetSP()); + if (section_sp.get()) + return (1 << section_sp->GetLog2Align()); + return 0; +} + bool SBSection::operator==(const SBSection &rhs) { LLDB_INSTRUMENT_VA(this, rhs); diff --git a/lldb/test/API/python_api/section/TestSectionAPI.py b/lldb/test/API/python_api/section/TestSectionAPI.py index 51a003701924d..ab9ae56238c8b 100644 --- a/lldb/test/API/python_api/section/TestSectionAPI.py +++ b/lldb/test/API/python_api/section/TestSectionAPI.py @@ -37,3 +37,14 @@ def test_get_target_byte_size(self): self.assertIsNotNone(data_section) self.assertEqual(data_section.target_byte_size, 1) + + def test_get_alignment(self): + exe = self.getBuildArtifact("aligned.out") + self.yaml2obj("aligned.yaml", exe) + target = self.dbg.CreateTarget(exe) + self.assertTrue(target, VALID_TARGET) + + # exe contains a single section aligned to 0x1000 + section = target.modules[0].sections[0] + self.assertEqual(section.GetAlignment(), 0x1000) + self.assertEqual(section.alignment, 0x1000) diff --git a/lldb/test/API/python_api/section/aligned.yaml b/lldb/test/API/python_api/section/aligned.yaml new file mode 100644 index 0000000000000..f96d48419c197 --- /dev/null +++ b/lldb/test/API/python_api/section/aligned.yaml @@ -0,0 +1,14 @@ +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_EXEC + Machine: EM_X86_64 + Entry: 0x0000000000400000 +Sections: + - Name: .text1 + Type: SHT_PROGBITS + Flags: [ SHF_ALLOC, SHF_EXECINSTR ] + Address: 0x0000000000400000 + AddressAlign: 0x0000000000001000 + Size: 0xb0 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits