1061da546Spatrick //===-- SWIG Interface for SBCompileUnit ------------------------*- C++ -*-===// 2061da546Spatrick // 3061da546Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4061da546Spatrick // See https://llvm.org/LICENSE.txt for license information. 5061da546Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6061da546Spatrick // 7061da546Spatrick //===----------------------------------------------------------------------===// 8061da546Spatrick 9061da546Spatrick namespace lldb { 10061da546Spatrick 11061da546Spatrick %feature("docstring", 12061da546Spatrick "Represents a compilation unit, or compiled source file. 13061da546Spatrick 14be691f3bSpatrick SBCompileUnit supports line entry iteration. For example,:: 15061da546Spatrick 16061da546Spatrick # Now get the SBSymbolContext from this frame. We want everything. :-) 17061da546Spatrick context = frame0.GetSymbolContext(lldb.eSymbolContextEverything) 18061da546Spatrick ... 19061da546Spatrick 20061da546Spatrick compileUnit = context.GetCompileUnit() 21061da546Spatrick 22061da546Spatrick for lineEntry in compileUnit: 23061da546Spatrick print('line entry: %s:%d' % (str(lineEntry.GetFileSpec()), 24061da546Spatrick lineEntry.GetLine())) 25061da546Spatrick print('start addr: %s' % str(lineEntry.GetStartAddress())) 26061da546Spatrick print('end addr: %s' % str(lineEntry.GetEndAddress())) 27061da546Spatrick 28be691f3bSpatrick produces: :: 29061da546Spatrick 30061da546Spatrick line entry: /Volumes/data/lldb/svn/trunk/test/python_api/symbol-context/main.c:20 31061da546Spatrick start addr: a.out[0x100000d98] 32061da546Spatrick end addr: a.out[0x100000da3] 33061da546Spatrick line entry: /Volumes/data/lldb/svn/trunk/test/python_api/symbol-context/main.c:21 34061da546Spatrick start addr: a.out[0x100000da3] 35061da546Spatrick end addr: a.out[0x100000da9] 36061da546Spatrick line entry: /Volumes/data/lldb/svn/trunk/test/python_api/symbol-context/main.c:22 37061da546Spatrick start addr: a.out[0x100000da9] 38061da546Spatrick end addr: a.out[0x100000db6] 39061da546Spatrick line entry: /Volumes/data/lldb/svn/trunk/test/python_api/symbol-context/main.c:23 40061da546Spatrick start addr: a.out[0x100000db6] 41061da546Spatrick end addr: a.out[0x100000dbc] 42061da546Spatrick ... 43061da546Spatrick 44be691f3bSpatrick See also :py:class:`SBSymbolContext` and :py:class:`SBLineEntry`" 45061da546Spatrick ) SBCompileUnit; 46061da546Spatrick class SBCompileUnit 47061da546Spatrick { 48061da546Spatrick public: 49061da546Spatrick 50061da546Spatrick SBCompileUnit (); 51061da546Spatrick 52061da546Spatrick SBCompileUnit (const lldb::SBCompileUnit &rhs); 53061da546Spatrick 54061da546Spatrick ~SBCompileUnit (); 55061da546Spatrick 56061da546Spatrick bool 57061da546Spatrick IsValid () const; 58061da546Spatrick 59061da546Spatrick explicit operator bool() const; 60061da546Spatrick 61061da546Spatrick lldb::SBFileSpec 62061da546Spatrick GetFileSpec () const; 63061da546Spatrick 64061da546Spatrick uint32_t 65061da546Spatrick GetNumLineEntries () const; 66061da546Spatrick 67061da546Spatrick lldb::SBLineEntry 68061da546Spatrick GetLineEntryAtIndex (uint32_t idx) const; 69061da546Spatrick 70*f6aab3d8Srobert %feature("docstring", " 71*f6aab3d8Srobert Get the index for a provided line entry in this compile unit. 72*f6aab3d8Srobert 73*f6aab3d8Srobert @param[in] line_entry 74*f6aab3d8Srobert The SBLineEntry object for which we are looking for the index. 75*f6aab3d8Srobert 76*f6aab3d8Srobert @param[in] exact 77*f6aab3d8Srobert An optional boolean defaulting to false that ensures that the provided 78*f6aab3d8Srobert line entry has a perfect match in the compile unit. 79*f6aab3d8Srobert 80*f6aab3d8Srobert @return 81*f6aab3d8Srobert The index of the user-provided line entry. UINT32_MAX if the line entry 82*f6aab3d8Srobert was not found in the compile unit.") FindLineEntryIndex; 83*f6aab3d8Srobert uint32_t 84*f6aab3d8Srobert FindLineEntryIndex (lldb::SBLineEntry &line_entry, bool exact = false) const; 85*f6aab3d8Srobert 86061da546Spatrick uint32_t 87061da546Spatrick FindLineEntryIndex (uint32_t start_idx, 88061da546Spatrick uint32_t line, 89061da546Spatrick lldb::SBFileSpec *inline_file_spec) const; 90061da546Spatrick 91061da546Spatrick uint32_t 92061da546Spatrick FindLineEntryIndex (uint32_t start_idx, 93061da546Spatrick uint32_t line, 94061da546Spatrick lldb::SBFileSpec *inline_file_spec, 95061da546Spatrick bool exact) const; 96061da546Spatrick 97061da546Spatrick SBFileSpec 98061da546Spatrick GetSupportFileAtIndex (uint32_t idx) const; 99061da546Spatrick 100061da546Spatrick uint32_t 101061da546Spatrick GetNumSupportFiles () const; 102061da546Spatrick 103061da546Spatrick uint32_t 104061da546Spatrick FindSupportFileIndex (uint32_t start_idx, const SBFileSpec &sb_file, bool full); 105061da546Spatrick 106061da546Spatrick %feature("docstring", " 107061da546Spatrick Get all types matching type_mask from debug info in this 108061da546Spatrick compile unit. 109061da546Spatrick 110061da546Spatrick @param[in] type_mask 111061da546Spatrick A bitfield that consists of one or more bits logically OR'ed 112061da546Spatrick together from the lldb::TypeClass enumeration. This allows 113061da546Spatrick you to request only structure types, or only class, struct 114061da546Spatrick and union types. Passing in lldb::eTypeClassAny will return 115061da546Spatrick all types found in the debug information for this compile 116061da546Spatrick unit. 117061da546Spatrick 118061da546Spatrick @return 119061da546Spatrick A list of types in this compile unit that match type_mask") GetTypes; 120061da546Spatrick lldb::SBTypeList 121061da546Spatrick GetTypes (uint32_t type_mask = lldb::eTypeClassAny); 122061da546Spatrick 123061da546Spatrick lldb::LanguageType 124061da546Spatrick GetLanguage (); 125061da546Spatrick 126061da546Spatrick bool 127061da546Spatrick GetDescription (lldb::SBStream &description); 128061da546Spatrick 129061da546Spatrick bool 130061da546Spatrick operator == (const lldb::SBCompileUnit &rhs) const; 131061da546Spatrick 132061da546Spatrick bool 133061da546Spatrick operator != (const lldb::SBCompileUnit &rhs) const; 134061da546Spatrick 135061da546Spatrick STRING_EXTENSION(SBCompileUnit) 136061da546Spatrick 137061da546Spatrick #ifdef SWIGPYTHON 138061da546Spatrick %pythoncode %{ 139061da546Spatrick def __iter__(self): 140061da546Spatrick '''Iterate over all line entries in a lldb.SBCompileUnit object.''' 141061da546Spatrick return lldb_iter(self, 'GetNumLineEntries', 'GetLineEntryAtIndex') 142061da546Spatrick 143061da546Spatrick def __len__(self): 144061da546Spatrick '''Return the number of line entries in a lldb.SBCompileUnit 145061da546Spatrick object.''' 146061da546Spatrick return self.GetNumLineEntries() 147061da546Spatrick 148061da546Spatrick file = property(GetFileSpec, None, doc='''A read only property that returns the same result an lldb object that represents the source file (lldb.SBFileSpec) for the compile unit.''') 149061da546Spatrick num_line_entries = property(GetNumLineEntries, None, doc='''A read only property that returns the number of line entries in a compile unit as an integer.''') 150061da546Spatrick %} 151061da546Spatrick #endif 152061da546Spatrick }; 153061da546Spatrick 154061da546Spatrick } // namespace lldb 155