1cac9c5f9SGreg Clayton //===-- SBSection.cpp -------------------------------------------*- C++ -*-===//
2cac9c5f9SGreg Clayton //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6cac9c5f9SGreg Clayton //
7cac9c5f9SGreg Clayton //===----------------------------------------------------------------------===//
8cac9c5f9SGreg Clayton 
9cac9c5f9SGreg Clayton #include "lldb/API/SBSection.h"
10baf5664fSJonas Devlieghere #include "SBReproducerPrivate.h"
11cac9c5f9SGreg Clayton #include "lldb/API/SBStream.h"
12fed39aa6SGreg Clayton #include "lldb/API/SBTarget.h"
13cac9c5f9SGreg Clayton #include "lldb/Core/Module.h"
14d9dc52dcSGreg Clayton #include "lldb/Core/Section.h"
151f746071SGreg Clayton #include "lldb/Symbol/ObjectFile.h"
16666cc0b2SZachary Turner #include "lldb/Utility/DataBuffer.h"
17666cc0b2SZachary Turner #include "lldb/Utility/DataExtractor.h"
18bf9a7730SZachary Turner #include "lldb/Utility/StreamString.h"
19cac9c5f9SGreg Clayton 
20cac9c5f9SGreg Clayton using namespace lldb;
21cac9c5f9SGreg Clayton using namespace lldb_private;
22cac9c5f9SGreg Clayton 
23baf5664fSJonas Devlieghere SBSection::SBSection() : m_opaque_wp() {
24baf5664fSJonas Devlieghere   LLDB_RECORD_CONSTRUCTOR_NO_ARGS(SBSection);
25baf5664fSJonas Devlieghere }
26cac9c5f9SGreg Clayton 
27baf5664fSJonas Devlieghere SBSection::SBSection(const SBSection &rhs) : m_opaque_wp(rhs.m_opaque_wp) {
28baf5664fSJonas Devlieghere   LLDB_RECORD_CONSTRUCTOR(SBSection, (const lldb::SBSection &), rhs);
29baf5664fSJonas Devlieghere }
30cac9c5f9SGreg Clayton 
31b9c1b51eSKate Stone SBSection::SBSection(const lldb::SectionSP &section_sp)
32b9c1b51eSKate Stone     : m_opaque_wp() // Don't init with section_sp otherwise this will throw if
33b9c1b51eSKate Stone                     // section_sp doesn't contain a valid Section *
34cac9c5f9SGreg Clayton {
35e72dfb32SGreg Clayton   if (section_sp)
36e72dfb32SGreg Clayton     m_opaque_wp = section_sp;
37cac9c5f9SGreg Clayton }
38cac9c5f9SGreg Clayton 
39b9c1b51eSKate Stone const SBSection &SBSection::operator=(const SBSection &rhs) {
40baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(const lldb::SBSection &,
41baf5664fSJonas Devlieghere                      SBSection, operator=,(const lldb::SBSection &), rhs);
42baf5664fSJonas Devlieghere 
43e72dfb32SGreg Clayton   m_opaque_wp = rhs.m_opaque_wp;
44*306809f2SJonas Devlieghere   return LLDB_RECORD_RESULT(*this);
45cac9c5f9SGreg Clayton }
46cac9c5f9SGreg Clayton 
47b9c1b51eSKate Stone SBSection::~SBSection() {}
48cac9c5f9SGreg Clayton 
49b9c1b51eSKate Stone bool SBSection::IsValid() const {
50baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBSection, IsValid);
517f5237bcSPavel Labath   return this->operator bool();
527f5237bcSPavel Labath }
537f5237bcSPavel Labath SBSection::operator bool() const {
547f5237bcSPavel Labath   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBSection, operator bool);
55baf5664fSJonas Devlieghere 
56e72dfb32SGreg Clayton   SectionSP section_sp(GetSP());
57e72dfb32SGreg Clayton   return section_sp && section_sp->GetModule().get() != NULL;
58cac9c5f9SGreg Clayton }
59cac9c5f9SGreg Clayton 
60b9c1b51eSKate Stone const char *SBSection::GetName() {
61baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(const char *, SBSection, GetName);
62baf5664fSJonas Devlieghere 
63e72dfb32SGreg Clayton   SectionSP section_sp(GetSP());
64e72dfb32SGreg Clayton   if (section_sp)
65e72dfb32SGreg Clayton     return section_sp->GetName().GetCString();
66f644ddf4SGreg Clayton   return NULL;
67f644ddf4SGreg Clayton }
68f644ddf4SGreg Clayton 
69b9c1b51eSKate Stone lldb::SBSection SBSection::GetParent() {
70baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::SBSection, SBSection, GetParent);
71baf5664fSJonas Devlieghere 
721d4c5406SGreg Clayton   lldb::SBSection sb_section;
731d4c5406SGreg Clayton   SectionSP section_sp(GetSP());
74b9c1b51eSKate Stone   if (section_sp) {
751d4c5406SGreg Clayton     SectionSP parent_section_sp(section_sp->GetParent());
761d4c5406SGreg Clayton     if (parent_section_sp)
771d4c5406SGreg Clayton       sb_section.SetSP(parent_section_sp);
781d4c5406SGreg Clayton   }
79baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_section);
801d4c5406SGreg Clayton }
811d4c5406SGreg Clayton 
82b9c1b51eSKate Stone lldb::SBSection SBSection::FindSubSection(const char *sect_name) {
83baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBSection, SBSection, FindSubSection, (const char *),
84baf5664fSJonas Devlieghere                      sect_name);
85baf5664fSJonas Devlieghere 
86cac9c5f9SGreg Clayton   lldb::SBSection sb_section;
87b9c1b51eSKate Stone   if (sect_name) {
88e72dfb32SGreg Clayton     SectionSP section_sp(GetSP());
89b9c1b51eSKate Stone     if (section_sp) {
90cac9c5f9SGreg Clayton       ConstString const_sect_name(sect_name);
91b9c1b51eSKate Stone       sb_section.SetSP(
92b9c1b51eSKate Stone           section_sp->GetChildren().FindSectionByName(const_sect_name));
93e72dfb32SGreg Clayton     }
94cac9c5f9SGreg Clayton   }
95baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_section);
96cac9c5f9SGreg Clayton }
97cac9c5f9SGreg Clayton 
98b9c1b51eSKate Stone size_t SBSection::GetNumSubSections() {
99baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(size_t, SBSection, GetNumSubSections);
100baf5664fSJonas Devlieghere 
101e72dfb32SGreg Clayton   SectionSP section_sp(GetSP());
102e72dfb32SGreg Clayton   if (section_sp)
103e72dfb32SGreg Clayton     return section_sp->GetChildren().GetSize();
104cac9c5f9SGreg Clayton   return 0;
105cac9c5f9SGreg Clayton }
106cac9c5f9SGreg Clayton 
107b9c1b51eSKate Stone lldb::SBSection SBSection::GetSubSectionAtIndex(size_t idx) {
108baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBSection, SBSection, GetSubSectionAtIndex, (size_t),
109baf5664fSJonas Devlieghere                      idx);
110baf5664fSJonas Devlieghere 
111cac9c5f9SGreg Clayton   lldb::SBSection sb_section;
112e72dfb32SGreg Clayton   SectionSP section_sp(GetSP());
113e72dfb32SGreg Clayton   if (section_sp)
114e72dfb32SGreg Clayton     sb_section.SetSP(section_sp->GetChildren().GetSectionAtIndex(idx));
115baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_section);
116cac9c5f9SGreg Clayton }
117cac9c5f9SGreg Clayton 
118b9c1b51eSKate Stone lldb::SectionSP SBSection::GetSP() const { return m_opaque_wp.lock(); }
119cac9c5f9SGreg Clayton 
120b9c1b51eSKate Stone void SBSection::SetSP(const lldb::SectionSP &section_sp) {
121e72dfb32SGreg Clayton   m_opaque_wp = section_sp;
122cac9c5f9SGreg Clayton }
123cac9c5f9SGreg Clayton 
124b9c1b51eSKate Stone lldb::addr_t SBSection::GetFileAddress() {
125baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::addr_t, SBSection, GetFileAddress);
126baf5664fSJonas Devlieghere 
127cac9c5f9SGreg Clayton   lldb::addr_t file_addr = LLDB_INVALID_ADDRESS;
128e72dfb32SGreg Clayton   SectionSP section_sp(GetSP());
129e72dfb32SGreg Clayton   if (section_sp)
130e72dfb32SGreg Clayton     return section_sp->GetFileAddress();
131cac9c5f9SGreg Clayton   return file_addr;
132cac9c5f9SGreg Clayton }
133cac9c5f9SGreg Clayton 
134b9c1b51eSKate Stone lldb::addr_t SBSection::GetLoadAddress(lldb::SBTarget &sb_target) {
135baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::addr_t, SBSection, GetLoadAddress,
136baf5664fSJonas Devlieghere                      (lldb::SBTarget &), sb_target);
137baf5664fSJonas Devlieghere 
138fed39aa6SGreg Clayton   TargetSP target_sp(sb_target.GetSP());
139b9c1b51eSKate Stone   if (target_sp) {
140fed39aa6SGreg Clayton     SectionSP section_sp(GetSP());
141fed39aa6SGreg Clayton     if (section_sp)
142fed39aa6SGreg Clayton       return section_sp->GetLoadBaseAddress(target_sp.get());
143fed39aa6SGreg Clayton   }
144fed39aa6SGreg Clayton   return LLDB_INVALID_ADDRESS;
145fed39aa6SGreg Clayton }
146fed39aa6SGreg Clayton 
147b9c1b51eSKate Stone lldb::addr_t SBSection::GetByteSize() {
148baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::addr_t, SBSection, GetByteSize);
149baf5664fSJonas Devlieghere 
150e72dfb32SGreg Clayton   SectionSP section_sp(GetSP());
151e72dfb32SGreg Clayton   if (section_sp)
152e72dfb32SGreg Clayton     return section_sp->GetByteSize();
153cac9c5f9SGreg Clayton   return 0;
154cac9c5f9SGreg Clayton }
155cac9c5f9SGreg Clayton 
156b9c1b51eSKate Stone uint64_t SBSection::GetFileOffset() {
157baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(uint64_t, SBSection, GetFileOffset);
158baf5664fSJonas Devlieghere 
159e72dfb32SGreg Clayton   SectionSP section_sp(GetSP());
160b9c1b51eSKate Stone   if (section_sp) {
161e72dfb32SGreg Clayton     ModuleSP module_sp(section_sp->GetModule());
162b9c1b51eSKate Stone     if (module_sp) {
163e72dfb32SGreg Clayton       ObjectFile *objfile = module_sp->GetObjectFile();
164cac9c5f9SGreg Clayton       if (objfile)
1655ce9c565SGreg Clayton         return objfile->GetFileOffset() + section_sp->GetFileOffset();
166cac9c5f9SGreg Clayton     }
167cac9c5f9SGreg Clayton   }
168e72dfb32SGreg Clayton   return UINT64_MAX;
169cac9c5f9SGreg Clayton }
170cac9c5f9SGreg Clayton 
171b9c1b51eSKate Stone uint64_t SBSection::GetFileByteSize() {
172baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(uint64_t, SBSection, GetFileByteSize);
173baf5664fSJonas Devlieghere 
174e72dfb32SGreg Clayton   SectionSP section_sp(GetSP());
175e72dfb32SGreg Clayton   if (section_sp)
176e72dfb32SGreg Clayton     return section_sp->GetFileSize();
177cac9c5f9SGreg Clayton   return 0;
178cac9c5f9SGreg Clayton }
179cac9c5f9SGreg Clayton 
180baf5664fSJonas Devlieghere SBData SBSection::GetSectionData() {
181baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::SBData, SBSection, GetSectionData);
182baf5664fSJonas Devlieghere 
183baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(GetSectionData(0, UINT64_MAX));
184baf5664fSJonas Devlieghere }
185d9dc52dcSGreg Clayton 
186b9c1b51eSKate Stone SBData SBSection::GetSectionData(uint64_t offset, uint64_t size) {
187baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBData, SBSection, GetSectionData,
188baf5664fSJonas Devlieghere                      (uint64_t, uint64_t), offset, size);
189baf5664fSJonas Devlieghere 
190cac9c5f9SGreg Clayton   SBData sb_data;
191e72dfb32SGreg Clayton   SectionSP section_sp(GetSP());
192b9c1b51eSKate Stone   if (section_sp) {
193e72dfb32SGreg Clayton     const uint64_t sect_file_size = section_sp->GetFileSize();
194b9c1b51eSKate Stone     if (sect_file_size > 0) {
195e72dfb32SGreg Clayton       ModuleSP module_sp(section_sp->GetModule());
196b9c1b51eSKate Stone       if (module_sp) {
197e72dfb32SGreg Clayton         ObjectFile *objfile = module_sp->GetObjectFile();
198b9c1b51eSKate Stone         if (objfile) {
199b9c1b51eSKate Stone           const uint64_t sect_file_offset =
200b9c1b51eSKate Stone               objfile->GetFileOffset() + section_sp->GetFileOffset();
201cac9c5f9SGreg Clayton           const uint64_t file_offset = sect_file_offset + offset;
202cac9c5f9SGreg Clayton           uint64_t file_size = size;
203b9c1b51eSKate Stone           if (file_size == UINT64_MAX) {
204e72dfb32SGreg Clayton             file_size = section_sp->GetByteSize();
205cac9c5f9SGreg Clayton             if (file_size > offset)
206cac9c5f9SGreg Clayton               file_size -= offset;
207cac9c5f9SGreg Clayton             else
208cac9c5f9SGreg Clayton               file_size = 0;
209cac9c5f9SGreg Clayton           }
21087e403aaSJonas Devlieghere           auto data_buffer_sp = FileSystem::Instance().CreateDataBuffer(
2117f6a7a37SZachary Turner               objfile->GetFileSpec().GetPath(), file_size, file_offset);
212b9c1b51eSKate Stone           if (data_buffer_sp && data_buffer_sp->GetByteSize() > 0) {
213b9c1b51eSKate Stone             DataExtractorSP data_extractor_sp(
214b9c1b51eSKate Stone                 new DataExtractor(data_buffer_sp, objfile->GetByteOrder(),
215cac9c5f9SGreg Clayton                                   objfile->GetAddressByteSize()));
216cac9c5f9SGreg Clayton 
217cac9c5f9SGreg Clayton             sb_data.SetOpaque(data_extractor_sp);
218cac9c5f9SGreg Clayton           }
219cac9c5f9SGreg Clayton         }
220cac9c5f9SGreg Clayton       }
221cac9c5f9SGreg Clayton     }
222cac9c5f9SGreg Clayton   }
223baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_data);
224cac9c5f9SGreg Clayton }
225cac9c5f9SGreg Clayton 
226b9c1b51eSKate Stone SectionType SBSection::GetSectionType() {
227baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::SectionType, SBSection, GetSectionType);
228baf5664fSJonas Devlieghere 
229e72dfb32SGreg Clayton   SectionSP section_sp(GetSP());
230e72dfb32SGreg Clayton   if (section_sp.get())
231e72dfb32SGreg Clayton     return section_sp->GetType();
232cac9c5f9SGreg Clayton   return eSectionTypeInvalid;
233cac9c5f9SGreg Clayton }
234cac9c5f9SGreg Clayton 
235baf5664fSJonas Devlieghere uint32_t SBSection::GetPermissions() const {
236baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(uint32_t, SBSection, GetPermissions);
237baf5664fSJonas Devlieghere 
2383c7f0709SAbhishek Aggarwal   SectionSP section_sp(GetSP());
2393c7f0709SAbhishek Aggarwal   if (section_sp)
2403c7f0709SAbhishek Aggarwal     return section_sp->GetPermissions();
2413c7f0709SAbhishek Aggarwal   return 0;
2423c7f0709SAbhishek Aggarwal }
2433c7f0709SAbhishek Aggarwal 
244b9c1b51eSKate Stone uint32_t SBSection::GetTargetByteSize() {
245baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBSection, GetTargetByteSize);
246baf5664fSJonas Devlieghere 
247c928de3eSMatthew Gardiner   SectionSP section_sp(GetSP());
248c928de3eSMatthew Gardiner   if (section_sp.get())
249c928de3eSMatthew Gardiner     return section_sp->GetTargetByteSize();
250c928de3eSMatthew Gardiner   return 0;
251c928de3eSMatthew Gardiner }
252cac9c5f9SGreg Clayton 
253b9c1b51eSKate Stone bool SBSection::operator==(const SBSection &rhs) {
254baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBSection, operator==,(const lldb::SBSection &),
255baf5664fSJonas Devlieghere                      rhs);
256baf5664fSJonas Devlieghere 
257e72dfb32SGreg Clayton   SectionSP lhs_section_sp(GetSP());
258e72dfb32SGreg Clayton   SectionSP rhs_section_sp(rhs.GetSP());
259e72dfb32SGreg Clayton   if (lhs_section_sp && rhs_section_sp)
260e72dfb32SGreg Clayton     return lhs_section_sp == rhs_section_sp;
261cac9c5f9SGreg Clayton   return false;
262cac9c5f9SGreg Clayton }
263cac9c5f9SGreg Clayton 
264b9c1b51eSKate Stone bool SBSection::operator!=(const SBSection &rhs) {
265baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBSection, operator!=,(const lldb::SBSection &),
266baf5664fSJonas Devlieghere                      rhs);
267baf5664fSJonas Devlieghere 
268e72dfb32SGreg Clayton   SectionSP lhs_section_sp(GetSP());
269e72dfb32SGreg Clayton   SectionSP rhs_section_sp(rhs.GetSP());
270e72dfb32SGreg Clayton   return lhs_section_sp != rhs_section_sp;
271cac9c5f9SGreg Clayton }
272cac9c5f9SGreg Clayton 
273b9c1b51eSKate Stone bool SBSection::GetDescription(SBStream &description) {
274baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBSection, GetDescription, (lldb::SBStream &),
275baf5664fSJonas Devlieghere                      description);
276baf5664fSJonas Devlieghere 
277da7bc7d0SGreg Clayton   Stream &strm = description.ref();
278da7bc7d0SGreg Clayton 
279e72dfb32SGreg Clayton   SectionSP section_sp(GetSP());
280b9c1b51eSKate Stone   if (section_sp) {
281e72dfb32SGreg Clayton     const addr_t file_addr = section_sp->GetFileAddress();
282b9c1b51eSKate Stone     strm.Printf("[0x%16.16" PRIx64 "-0x%16.16" PRIx64 ") ", file_addr,
283b9c1b51eSKate Stone                 file_addr + section_sp->GetByteSize());
284e72dfb32SGreg Clayton     section_sp->DumpName(&strm);
285b9c1b51eSKate Stone   } else {
286da7bc7d0SGreg Clayton     strm.PutCString("No value");
287cac9c5f9SGreg Clayton   }
288cac9c5f9SGreg Clayton 
289cac9c5f9SGreg Clayton   return true;
290cac9c5f9SGreg Clayton }
291ae211eceSMichal Gorny 
292ae211eceSMichal Gorny namespace lldb_private {
293ae211eceSMichal Gorny namespace repro {
294ae211eceSMichal Gorny 
295ae211eceSMichal Gorny template <>
296ae211eceSMichal Gorny void RegisterMethods<SBSection>(Registry &R) {
297ae211eceSMichal Gorny   LLDB_REGISTER_CONSTRUCTOR(SBSection, ());
298ae211eceSMichal Gorny   LLDB_REGISTER_CONSTRUCTOR(SBSection, (const lldb::SBSection &));
299ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(const lldb::SBSection &,
300ae211eceSMichal Gorny                        SBSection, operator=,(const lldb::SBSection &));
301ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(bool, SBSection, IsValid, ());
302ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(bool, SBSection, operator bool, ());
303ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(const char *, SBSection, GetName, ());
304ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBSection, SBSection, GetParent, ());
305ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBSection, SBSection, FindSubSection,
306ae211eceSMichal Gorny                        (const char *));
307ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(size_t, SBSection, GetNumSubSections, ());
308ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBSection, SBSection, GetSubSectionAtIndex,
309ae211eceSMichal Gorny                        (size_t));
310ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::addr_t, SBSection, GetFileAddress, ());
311ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::addr_t, SBSection, GetLoadAddress,
312ae211eceSMichal Gorny                        (lldb::SBTarget &));
313ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::addr_t, SBSection, GetByteSize, ());
314ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(uint64_t, SBSection, GetFileOffset, ());
315ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(uint64_t, SBSection, GetFileByteSize, ());
316ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBData, SBSection, GetSectionData, ());
317ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBData, SBSection, GetSectionData,
318ae211eceSMichal Gorny                        (uint64_t, uint64_t));
319ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SectionType, SBSection, GetSectionType, ());
320ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(uint32_t, SBSection, GetPermissions, ());
321ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(uint32_t, SBSection, GetTargetByteSize, ());
322ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBSection, operator==,(const lldb::SBSection &));
323ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBSection, operator!=,(const lldb::SBSection &));
324ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBSection, GetDescription, (lldb::SBStream &));
325ae211eceSMichal Gorny }
326ae211eceSMichal Gorny 
327ae211eceSMichal Gorny }
328ae211eceSMichal Gorny }
329