forked from OSchip/llvm-project
[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
This commit is contained in:
parent
c5d68ca1c8
commit
4135abca89
|
@ -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
|
||||
|
||||
|
|
|
@ -76,6 +76,12 @@ public:
|
|||
/// 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);
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -37,3 +37,14 @@ class SectionAPITestCase(TestBase):
|
|||
|
||||
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)
|
||||
|
|
|
@ -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
|
Loading…
Reference in New Issue