aboutsummaryrefslogtreecommitdiff
path: root/include/lldb/Symbol/CompileUnit.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/lldb/Symbol/CompileUnit.h')
-rw-r--r--include/lldb/Symbol/CompileUnit.h862
1 files changed, 425 insertions, 437 deletions
diff --git a/include/lldb/Symbol/CompileUnit.h b/include/lldb/Symbol/CompileUnit.h
index 2f596f89ec5f..8465f3bb5777 100644
--- a/include/lldb/Symbol/CompileUnit.h
+++ b/include/lldb/Symbol/CompileUnit.h
@@ -10,13 +10,13 @@
#ifndef liblldb_CompUnit_h_
#define liblldb_CompUnit_h_
-#include "lldb/lldb-enumerations.h"
-#include "lldb/Symbol/DebugMacros.h"
-#include "lldb/Symbol/Function.h"
#include "lldb/Core/FileSpecList.h"
#include "lldb/Core/ModuleChild.h"
#include "lldb/Core/Stream.h"
#include "lldb/Core/UserID.h"
+#include "lldb/Symbol/DebugMacros.h"
+#include "lldb/Symbol/Function.h"
+#include "lldb/lldb-enumerations.h"
namespace lldb_private {
//----------------------------------------------------------------------
@@ -32,445 +32,433 @@ namespace lldb_private {
/// variables, support file list (include files and inlined source
/// files), and a line table.
//----------------------------------------------------------------------
-class CompileUnit :
- public std::enable_shared_from_this<CompileUnit>,
- public ModuleChild,
- public FileSpec,
- public UserID,
- public SymbolContextScope
-{
+class CompileUnit : public std::enable_shared_from_this<CompileUnit>,
+ public ModuleChild,
+ public FileSpec,
+ public UserID,
+ public SymbolContextScope {
public:
- //------------------------------------------------------------------
- /// Construct with a module, path, UID and language.
- ///
- /// Initialize the compile unit given the owning \a module, a path
- /// to convert into a FileSpec, the SymbolFile plug-in supplied
- /// \a uid, and the source language type.
- ///
- /// @param[in] module
- /// The parent module that owns this compile unit. This value
- /// must be a valid pointer value.
- ///
- /// @param[in] user_data
- /// User data where the SymbolFile parser can store data.
- ///
- /// @param[in] pathname
- /// The path to the source file for this compile unit.
- ///
- /// @param[in] uid
- /// The user ID of the compile unit. This value is supplied by
- /// the SymbolFile plug-in and should be a value that allows
- /// the SymbolFile plug-in to easily locate and parse additional
- /// information for the compile unit.
- ///
- /// @param[in] language
- /// A language enumeration type that describes the main language
- /// of this compile unit.
- ///
- /// @param[in] is_optimized
- /// A value that can initialized with eLazyBoolYes, eLazyBoolNo
- /// or eLazyBoolCalculate. If set to eLazyBoolCalculate, then
- /// an extra call into SymbolVendor will be made to calculate if
- /// the compile unit is optimized will be made when
- /// CompileUnit::GetIsOptimized() is called.
- ///
- /// @see lldb::LanguageType
- //------------------------------------------------------------------
- CompileUnit(const lldb::ModuleSP &module_sp, void *user_data, const char *pathname, lldb::user_id_t uid,
- lldb::LanguageType language, lldb_private::LazyBool is_optimized);
-
- //------------------------------------------------------------------
- /// Construct with a module, file spec, UID and language.
- ///
- /// Initialize the compile unit given the owning \a module, a path
- /// to convert into a FileSpec, the SymbolFile plug-in supplied
- /// \a uid, and the source language type.
- ///
- /// @param[in] module
- /// The parent module that owns this compile unit. This value
- /// must be a valid pointer value.
- ///
- /// @param[in] user_data
- /// User data where the SymbolFile parser can store data.
- ///
- /// @param[in] file_spec
- /// The file specification for the source file of this compile
- /// unit.
- ///
- /// @param[in] uid
- /// The user ID of the compile unit. This value is supplied by
- /// the SymbolFile plug-in and should be a value that allows
- /// the plug-in to easily locate and parse
- /// additional information for the compile unit.
- ///
- /// @param[in] language
- /// A language enumeration type that describes the main language
- /// of this compile unit.
- ///
- /// @param[in] is_optimized
- /// A value that can initialized with eLazyBoolYes, eLazyBoolNo
- /// or eLazyBoolCalculate. If set to eLazyBoolCalculate, then
- /// an extra call into SymbolVendor will be made to calculate if
- /// the compile unit is optimized will be made when
- /// CompileUnit::GetIsOptimized() is called.
- ///
- /// @see lldb::LanguageType
- //------------------------------------------------------------------
- CompileUnit(const lldb::ModuleSP &module_sp, void *user_data, const FileSpec &file_spec, lldb::user_id_t uid,
- lldb::LanguageType language, lldb_private::LazyBool is_optimized);
-
- //------------------------------------------------------------------
- /// Destructor
- //------------------------------------------------------------------
- ~CompileUnit() override;
-
- //------------------------------------------------------------------
- /// Add a function to this compile unit.
- ///
- /// Typically called by the SymbolFile plug-ins as they partially
- /// parse the debug information.
- ///
- /// @param[in] function_sp
- /// A shared pointer to the Function object.
- //------------------------------------------------------------------
- void
- AddFunction(lldb::FunctionSP& function_sp);
-
- //------------------------------------------------------------------
- /// @copydoc SymbolContextScope::CalculateSymbolContext(SymbolContext*)
- ///
- /// @see SymbolContextScope
- //------------------------------------------------------------------
- void
- CalculateSymbolContext(SymbolContext* sc) override;
-
- lldb::ModuleSP
- CalculateSymbolContextModule() override;
-
- CompileUnit *
- CalculateSymbolContextCompileUnit() override;
-
- //------------------------------------------------------------------
- /// @copydoc SymbolContextScope::DumpSymbolContext(Stream*)
- ///
- /// @see SymbolContextScope
- //------------------------------------------------------------------
- void
- DumpSymbolContext(Stream *s) override;
-
- lldb::LanguageType
- GetLanguage();
-
- void
- SetLanguage(lldb::LanguageType language)
- {
- m_flags.Set(flagsParsedLanguage);
- m_language = language;
- }
-
- void
- GetDescription(Stream *s, lldb::DescriptionLevel level) const;
-
- //------------------------------------------------------------------
- /// Get a shared pointer to a function in this compile unit by
- /// index.
- ///
- /// Typically called when iterating though all functions in a
- /// compile unit after all functions have been parsed. This provides
- /// raw access to the function shared pointer list and will not
- /// cause the SymbolFile plug-in to parse any unparsed functions.
- ///
- /// @param[in] idx
- /// An index into the function list.
- ///
- /// @return
- /// A shared pointer to a function that might contain a NULL
- /// Function class pointer.
- //------------------------------------------------------------------
- lldb::FunctionSP
- GetFunctionAtIndex (size_t idx);
-
- //------------------------------------------------------------------
- /// Dump the compile unit contents to the stream \a s.
- ///
- /// @param[in] s
- /// The stream to which to dump the object description.
- ///
- /// @param[in] show_context
- /// If \b true, variables will dump their symbol context
- /// information.
- //------------------------------------------------------------------
- void
- Dump (Stream *s, bool show_context) const;
-
- //------------------------------------------------------------------
- /// Find the line entry by line and optional inlined file spec.
- ///
- /// Finds the first line entry that has an index greater than
- /// \a start_idx that matches \a line. If \a file_spec_ptr
- /// is NULL, then the search matches line entries whose file matches
- /// the file for the compile unit. If \a file_spec_ptr is
- /// not NULL, line entries must match the specified file spec (for
- /// inlined line table entries).
- ///
- /// Multiple calls to this function can find all entries that match
- /// a given file and line by starting with \a start_idx equal to zero,
- /// and calling this function back with the return value + 1.
- ///
- /// @param[in] start_idx
- /// The zero based index at which to start looking for matches.
- ///
- /// @param[in] line
- /// The line number to search for.
- ///
- /// @param[in] file_spec_ptr
- /// If non-NULL search for entries that match this file spec,
- /// else if NULL, search for line entries that match the compile
- /// unit file.
- ///
- /// @param[in] exact
- /// If \btrue match only if there is a line table entry for this line number.
- /// If \bfalse, find the line table entry equal to or after this line number.
- ///
- /// @param[out] line_entry
- /// If non-NULL, a copy of the line entry that was found.
- ///
- /// @return
- /// The zero based index of a matching line entry, or UINT32_MAX
- /// if no matching line entry is found.
- //------------------------------------------------------------------
- uint32_t
- FindLineEntry (uint32_t start_idx,
- uint32_t line,
- const FileSpec* file_spec_ptr,
- bool exact,
- LineEntry *line_entry);
-
- //------------------------------------------------------------------
- /// Get the line table for the compile unit.
- ///
- /// Called by clients and the SymbolFile plug-in. The SymbolFile
- /// plug-ins use this function to determine if the line table has
- /// be parsed yet. Clients use this function to get the line table
- /// from a compile unit.
- ///
- /// @return
- /// The line table object pointer, or NULL if this line table
- /// hasn't been parsed yet.
- //------------------------------------------------------------------
- LineTable*
- GetLineTable ();
-
- DebugMacros*
- GetDebugMacros ();
-
- //------------------------------------------------------------------
- /// Get the compile unit's support file list.
- ///
- /// The support file list is used by the line table, and any objects
- /// that have valid Declaration objects.
- ///
- /// @return
- /// A support file list object.
- //------------------------------------------------------------------
- FileSpecList&
- GetSupportFiles ();
-
- //------------------------------------------------------------------
- /// Get the compile unit's imported module list.
- ///
- /// This reports all the imports that the compile unit made,
- /// including the current module.
- ///
- /// @return
- /// A list of imported module names.
- //------------------------------------------------------------------
- const std::vector<ConstString> &
- GetImportedModules ();
-
- //------------------------------------------------------------------
- /// Get the SymbolFile plug-in user data.
- ///
- /// SymbolFile plug-ins can store user data to internal state or
- /// objects to quickly allow them to parse more information for a
- /// given object.
- ///
- /// @return
- /// The user data stored with the CompileUnit when it was
- /// constructed.
- //------------------------------------------------------------------
- void *
- GetUserData () const;
-
- //------------------------------------------------------------------
- /// Get the variable list for a compile unit.
- ///
- /// Called by clients to get the variable list for a compile unit.
- /// The variable list will contain all global and static variables
- /// that were defined at the compile unit level.
- ///
- /// @param[in] can_create
- /// If \b true, the variable list will be parsed on demand. If
- /// \b false, the current variable list will be returned even
- /// if it contains a NULL VariableList object (typically
- /// called by dumping routines that want to display only what
- /// has currently been parsed).
- ///
- /// @return
- /// A shared pointer to a variable list, that can contain NULL
- /// VariableList pointer if there are no global or static
- /// variables.
- //------------------------------------------------------------------
- lldb::VariableListSP
- GetVariableList (bool can_create);
-
- //------------------------------------------------------------------
- /// Finds a function by user ID.
- ///
- /// Typically used by SymbolFile plug-ins when partially parsing
- /// the debug information to see if the function has been parsed
- /// yet.
- ///
- /// @param[in] uid
- /// The user ID of the function to find. This value is supplied
- /// by the SymbolFile plug-in and should be a value that
- /// allows the plug-in to easily locate and parse additional
- /// information in the function.
- ///
- /// @return
- /// A shared pointer to the function object that might contain
- /// a NULL Function pointer.
- //------------------------------------------------------------------
- lldb::FunctionSP
- FindFunctionByUID (lldb::user_id_t uid);
-
- //------------------------------------------------------------------
- /// Set the line table for the compile unit.
- ///
- /// Called by the SymbolFile plug-in when if first parses the line
- /// table and hands ownership of the line table to this object. The
- /// compile unit owns the line table object and will delete the
- /// object when it is deleted.
- ///
- /// @param[in] line_table
- /// A line table object pointer that this object now owns.
- //------------------------------------------------------------------
- void
- SetLineTable(LineTable* line_table);
-
- void
- SetDebugMacros(const DebugMacrosSP &debug_macros);
-
- //------------------------------------------------------------------
- /// Set accessor for the variable list.
- ///
- /// Called by the SymbolFile plug-ins after they have parsed the
- /// variable lists and are ready to hand ownership of the list over
- /// to this object.
- ///
- /// @param[in] variable_list_sp
- /// A shared pointer to a VariableList.
- //------------------------------------------------------------------
- void
- SetVariableList (lldb::VariableListSP& variable_list_sp);
-
- //------------------------------------------------------------------
- /// Resolve symbol contexts by file and line.
- ///
- /// Given a file in \a file_spec, and a line number, find all
- /// instances and append them to the supplied symbol context list
- /// \a sc_list.
- ///
- /// @param[in] file_spec
- /// A file specification. If \a file_spec contains no directory
- /// information, only the basename will be used when matching
- /// contexts. If the directory in \a file_spec is valid, a
- /// complete file specification match will be performed.
- ///
- /// @param[in] line
- /// The line number to match against the compile unit's line
- /// tables.
- ///
- /// @param[in] check_inlines
- /// If \b true this function will also match any inline
- /// file and line matches. If \b false, the compile unit's
- /// file specification must match \a file_spec for any matches
- /// to be returned.
- ///
- /// @param[in] exact
- /// If true, only resolve the context if \a line exists in the line table.
- /// If false, resolve the context to the closest line greater than \a line
- /// in the line table.
- ///
- /// @param[in] resolve_scope
- /// For each matching line entry, this bitfield indicates what
- /// values within each SymbolContext that gets added to \a
- /// sc_list will be resolved. See the SymbolContext::Scope
- /// enumeration for a list of all available bits that can be
- /// resolved. Only SymbolContext entries that can be resolved
- /// using a LineEntry base address will be able to be resolved.
- ///
- /// @param[out] sc_list
- /// A SymbolContext list class that will get any matching
- /// entries appended to.
- ///
- /// @return
- /// The number of new matches that were added to \a sc_list.
- ///
- /// @see enum SymbolContext::Scope
- //------------------------------------------------------------------
- uint32_t
- ResolveSymbolContext (const FileSpec& file_spec,
- uint32_t line,
- bool check_inlines,
- bool exact,
- uint32_t resolve_scope,
- SymbolContextList &sc_list);
-
-
- //------------------------------------------------------------------
- /// Get whether compiler optimizations were enabled for this compile unit
- ///
- /// "optimized" means that the debug experience may be difficult
- /// for the user to understand. Variables may not be available when
- /// the developer would expect them, stepping through the source lines
- /// in the function may appear strange, etc.
- ///
- /// @return
- /// Returns 'true' if this compile unit was compiled with
- /// optimization. 'false' indicates that either the optimization
- /// is unknown, or this compile unit was built without optimization.
- //------------------------------------------------------------------
- bool
- GetIsOptimized ();
+ //------------------------------------------------------------------
+ /// Construct with a module, path, UID and language.
+ ///
+ /// Initialize the compile unit given the owning \a module, a path
+ /// to convert into a FileSpec, the SymbolFile plug-in supplied
+ /// \a uid, and the source language type.
+ ///
+ /// @param[in] module
+ /// The parent module that owns this compile unit. This value
+ /// must be a valid pointer value.
+ ///
+ /// @param[in] user_data
+ /// User data where the SymbolFile parser can store data.
+ ///
+ /// @param[in] pathname
+ /// The path to the source file for this compile unit.
+ ///
+ /// @param[in] uid
+ /// The user ID of the compile unit. This value is supplied by
+ /// the SymbolFile plug-in and should be a value that allows
+ /// the SymbolFile plug-in to easily locate and parse additional
+ /// information for the compile unit.
+ ///
+ /// @param[in] language
+ /// A language enumeration type that describes the main language
+ /// of this compile unit.
+ ///
+ /// @param[in] is_optimized
+ /// A value that can initialized with eLazyBoolYes, eLazyBoolNo
+ /// or eLazyBoolCalculate. If set to eLazyBoolCalculate, then
+ /// an extra call into SymbolVendor will be made to calculate if
+ /// the compile unit is optimized will be made when
+ /// CompileUnit::GetIsOptimized() is called.
+ ///
+ /// @see lldb::LanguageType
+ //------------------------------------------------------------------
+ CompileUnit(const lldb::ModuleSP &module_sp, void *user_data,
+ const char *pathname, lldb::user_id_t uid,
+ lldb::LanguageType language, lldb_private::LazyBool is_optimized);
+
+ //------------------------------------------------------------------
+ /// Construct with a module, file spec, UID and language.
+ ///
+ /// Initialize the compile unit given the owning \a module, a path
+ /// to convert into a FileSpec, the SymbolFile plug-in supplied
+ /// \a uid, and the source language type.
+ ///
+ /// @param[in] module
+ /// The parent module that owns this compile unit. This value
+ /// must be a valid pointer value.
+ ///
+ /// @param[in] user_data
+ /// User data where the SymbolFile parser can store data.
+ ///
+ /// @param[in] file_spec
+ /// The file specification for the source file of this compile
+ /// unit.
+ ///
+ /// @param[in] uid
+ /// The user ID of the compile unit. This value is supplied by
+ /// the SymbolFile plug-in and should be a value that allows
+ /// the plug-in to easily locate and parse
+ /// additional information for the compile unit.
+ ///
+ /// @param[in] language
+ /// A language enumeration type that describes the main language
+ /// of this compile unit.
+ ///
+ /// @param[in] is_optimized
+ /// A value that can initialized with eLazyBoolYes, eLazyBoolNo
+ /// or eLazyBoolCalculate. If set to eLazyBoolCalculate, then
+ /// an extra call into SymbolVendor will be made to calculate if
+ /// the compile unit is optimized will be made when
+ /// CompileUnit::GetIsOptimized() is called.
+ ///
+ /// @see lldb::LanguageType
+ //------------------------------------------------------------------
+ CompileUnit(const lldb::ModuleSP &module_sp, void *user_data,
+ const FileSpec &file_spec, lldb::user_id_t uid,
+ lldb::LanguageType language, lldb_private::LazyBool is_optimized);
+
+ //------------------------------------------------------------------
+ /// Destructor
+ //------------------------------------------------------------------
+ ~CompileUnit() override;
+
+ //------------------------------------------------------------------
+ /// Add a function to this compile unit.
+ ///
+ /// Typically called by the SymbolFile plug-ins as they partially
+ /// parse the debug information.
+ ///
+ /// @param[in] function_sp
+ /// A shared pointer to the Function object.
+ //------------------------------------------------------------------
+ void AddFunction(lldb::FunctionSP &function_sp);
+
+ //------------------------------------------------------------------
+ /// @copydoc SymbolContextScope::CalculateSymbolContext(SymbolContext*)
+ ///
+ /// @see SymbolContextScope
+ //------------------------------------------------------------------
+ void CalculateSymbolContext(SymbolContext *sc) override;
+
+ lldb::ModuleSP CalculateSymbolContextModule() override;
+
+ CompileUnit *CalculateSymbolContextCompileUnit() override;
+
+ //------------------------------------------------------------------
+ /// @copydoc SymbolContextScope::DumpSymbolContext(Stream*)
+ ///
+ /// @see SymbolContextScope
+ //------------------------------------------------------------------
+ void DumpSymbolContext(Stream *s) override;
+
+ lldb::LanguageType GetLanguage();
+
+ void SetLanguage(lldb::LanguageType language) {
+ m_flags.Set(flagsParsedLanguage);
+ m_language = language;
+ }
+
+ void GetDescription(Stream *s, lldb::DescriptionLevel level) const;
+
+ //------------------------------------------------------------------
+ /// Get a shared pointer to a function in this compile unit by
+ /// index.
+ ///
+ /// Typically called when iterating though all functions in a
+ /// compile unit after all functions have been parsed. This provides
+ /// raw access to the function shared pointer list and will not
+ /// cause the SymbolFile plug-in to parse any unparsed functions.
+ ///
+ /// @param[in] idx
+ /// An index into the function list.
+ ///
+ /// @return
+ /// A shared pointer to a function that might contain a NULL
+ /// Function class pointer.
+ //------------------------------------------------------------------
+ lldb::FunctionSP GetFunctionAtIndex(size_t idx);
+
+ //------------------------------------------------------------------
+ /// Dump the compile unit contents to the stream \a s.
+ ///
+ /// @param[in] s
+ /// The stream to which to dump the object description.
+ ///
+ /// @param[in] show_context
+ /// If \b true, variables will dump their symbol context
+ /// information.
+ //------------------------------------------------------------------
+ void Dump(Stream *s, bool show_context) const;
+
+ //------------------------------------------------------------------
+ /// Find the line entry by line and optional inlined file spec.
+ ///
+ /// Finds the first line entry that has an index greater than
+ /// \a start_idx that matches \a line. If \a file_spec_ptr
+ /// is NULL, then the search matches line entries whose file matches
+ /// the file for the compile unit. If \a file_spec_ptr is
+ /// not NULL, line entries must match the specified file spec (for
+ /// inlined line table entries).
+ ///
+ /// Multiple calls to this function can find all entries that match
+ /// a given file and line by starting with \a start_idx equal to zero,
+ /// and calling this function back with the return value + 1.
+ ///
+ /// @param[in] start_idx
+ /// The zero based index at which to start looking for matches.
+ ///
+ /// @param[in] line
+ /// The line number to search for.
+ ///
+ /// @param[in] file_spec_ptr
+ /// If non-NULL search for entries that match this file spec,
+ /// else if NULL, search for line entries that match the compile
+ /// unit file.
+ ///
+ /// @param[in] exact
+ /// If \btrue match only if there is a line table entry for this line
+ /// number.
+ /// If \bfalse, find the line table entry equal to or after this line
+ /// number.
+ ///
+ /// @param[out] line_entry
+ /// If non-NULL, a copy of the line entry that was found.
+ ///
+ /// @return
+ /// The zero based index of a matching line entry, or UINT32_MAX
+ /// if no matching line entry is found.
+ //------------------------------------------------------------------
+ uint32_t FindLineEntry(uint32_t start_idx, uint32_t line,
+ const FileSpec *file_spec_ptr, bool exact,
+ LineEntry *line_entry);
+
+ //------------------------------------------------------------------
+ /// Get the line table for the compile unit.
+ ///
+ /// Called by clients and the SymbolFile plug-in. The SymbolFile
+ /// plug-ins use this function to determine if the line table has
+ /// be parsed yet. Clients use this function to get the line table
+ /// from a compile unit.
+ ///
+ /// @return
+ /// The line table object pointer, or NULL if this line table
+ /// hasn't been parsed yet.
+ //------------------------------------------------------------------
+ LineTable *GetLineTable();
+
+ DebugMacros *GetDebugMacros();
+
+ //------------------------------------------------------------------
+ /// Get the compile unit's support file list.
+ ///
+ /// The support file list is used by the line table, and any objects
+ /// that have valid Declaration objects.
+ ///
+ /// @return
+ /// A support file list object.
+ //------------------------------------------------------------------
+ FileSpecList &GetSupportFiles();
+
+ //------------------------------------------------------------------
+ /// Get the compile unit's imported module list.
+ ///
+ /// This reports all the imports that the compile unit made,
+ /// including the current module.
+ ///
+ /// @return
+ /// A list of imported module names.
+ //------------------------------------------------------------------
+ const std::vector<ConstString> &GetImportedModules();
+
+ //------------------------------------------------------------------
+ /// Get the SymbolFile plug-in user data.
+ ///
+ /// SymbolFile plug-ins can store user data to internal state or
+ /// objects to quickly allow them to parse more information for a
+ /// given object.
+ ///
+ /// @return
+ /// The user data stored with the CompileUnit when it was
+ /// constructed.
+ //------------------------------------------------------------------
+ void *GetUserData() const;
+
+ //------------------------------------------------------------------
+ /// Get the variable list for a compile unit.
+ ///
+ /// Called by clients to get the variable list for a compile unit.
+ /// The variable list will contain all global and static variables
+ /// that were defined at the compile unit level.
+ ///
+ /// @param[in] can_create
+ /// If \b true, the variable list will be parsed on demand. If
+ /// \b false, the current variable list will be returned even
+ /// if it contains a NULL VariableList object (typically
+ /// called by dumping routines that want to display only what
+ /// has currently been parsed).
+ ///
+ /// @return
+ /// A shared pointer to a variable list, that can contain NULL
+ /// VariableList pointer if there are no global or static
+ /// variables.
+ //------------------------------------------------------------------
+ lldb::VariableListSP GetVariableList(bool can_create);
+
+ //------------------------------------------------------------------
+ /// Finds a function by user ID.
+ ///
+ /// Typically used by SymbolFile plug-ins when partially parsing
+ /// the debug information to see if the function has been parsed
+ /// yet.
+ ///
+ /// @param[in] uid
+ /// The user ID of the function to find. This value is supplied
+ /// by the SymbolFile plug-in and should be a value that
+ /// allows the plug-in to easily locate and parse additional
+ /// information in the function.
+ ///
+ /// @return
+ /// A shared pointer to the function object that might contain
+ /// a NULL Function pointer.
+ //------------------------------------------------------------------
+ lldb::FunctionSP FindFunctionByUID(lldb::user_id_t uid);
+
+ //------------------------------------------------------------------
+ /// Set the line table for the compile unit.
+ ///
+ /// Called by the SymbolFile plug-in when if first parses the line
+ /// table and hands ownership of the line table to this object. The
+ /// compile unit owns the line table object and will delete the
+ /// object when it is deleted.
+ ///
+ /// @param[in] line_table
+ /// A line table object pointer that this object now owns.
+ //------------------------------------------------------------------
+ void SetLineTable(LineTable *line_table);
+
+ void SetDebugMacros(const DebugMacrosSP &debug_macros);
+
+ //------------------------------------------------------------------
+ /// Set accessor for the variable list.
+ ///
+ /// Called by the SymbolFile plug-ins after they have parsed the
+ /// variable lists and are ready to hand ownership of the list over
+ /// to this object.
+ ///
+ /// @param[in] variable_list_sp
+ /// A shared pointer to a VariableList.
+ //------------------------------------------------------------------
+ void SetVariableList(lldb::VariableListSP &variable_list_sp);
+
+ //------------------------------------------------------------------
+ /// Resolve symbol contexts by file and line.
+ ///
+ /// Given a file in \a file_spec, and a line number, find all
+ /// instances and append them to the supplied symbol context list
+ /// \a sc_list.
+ ///
+ /// @param[in] file_spec
+ /// A file specification. If \a file_spec contains no directory
+ /// information, only the basename will be used when matching
+ /// contexts. If the directory in \a file_spec is valid, a
+ /// complete file specification match will be performed.
+ ///
+ /// @param[in] line
+ /// The line number to match against the compile unit's line
+ /// tables.
+ ///
+ /// @param[in] check_inlines
+ /// If \b true this function will also match any inline
+ /// file and line matches. If \b false, the compile unit's
+ /// file specification must match \a file_spec for any matches
+ /// to be returned.
+ ///
+ /// @param[in] exact
+ /// If true, only resolve the context if \a line exists in the line table.
+ /// If false, resolve the context to the closest line greater than \a line
+ /// in the line table.
+ ///
+ /// @param[in] resolve_scope
+ /// For each matching line entry, this bitfield indicates what
+ /// values within each SymbolContext that gets added to \a
+ /// sc_list will be resolved. See the SymbolContext::Scope
+ /// enumeration for a list of all available bits that can be
+ /// resolved. Only SymbolContext entries that can be resolved
+ /// using a LineEntry base address will be able to be resolved.
+ ///
+ /// @param[out] sc_list
+ /// A SymbolContext list class that will get any matching
+ /// entries appended to.
+ ///
+ /// @return
+ /// The number of new matches that were added to \a sc_list.
+ ///
+ /// @see enum SymbolContext::Scope
+ //------------------------------------------------------------------
+ uint32_t ResolveSymbolContext(const FileSpec &file_spec, uint32_t line,
+ bool check_inlines, bool exact,
+ uint32_t resolve_scope,
+ SymbolContextList &sc_list);
+
+ //------------------------------------------------------------------
+ /// Get whether compiler optimizations were enabled for this compile unit
+ ///
+ /// "optimized" means that the debug experience may be difficult
+ /// for the user to understand. Variables may not be available when
+ /// the developer would expect them, stepping through the source lines
+ /// in the function may appear strange, etc.
+ ///
+ /// @return
+ /// Returns 'true' if this compile unit was compiled with
+ /// optimization. 'false' indicates that either the optimization
+ /// is unknown, or this compile unit was built without optimization.
+ //------------------------------------------------------------------
+ bool GetIsOptimized();
protected:
- void *m_user_data; ///< User data for the SymbolFile parser to store information into.
- lldb::LanguageType m_language; ///< The programming language enumeration value.
- Flags m_flags; ///< Compile unit flags that help with partial parsing.
- std::vector<lldb::FunctionSP> m_functions; ///< The sparsely populated list of shared pointers to functions
- ///< that gets populated as functions get partially parsed.
- std::vector<ConstString> m_imported_modules; ///< All modules, including the current module, imported by this
- ///< compile unit.
- FileSpecList m_support_files; ///< Files associated with this compile unit's line table and declarations.
- std::unique_ptr<LineTable> m_line_table_ap; ///< Line table that will get parsed on demand.
- DebugMacrosSP m_debug_macros_sp; ///< Debug macros that will get parsed on demand.
- lldb::VariableListSP m_variables; ///< Global and static variable list that will get parsed on demand.
- lldb_private::LazyBool m_is_optimized; /// eLazyBoolYes if this compile unit was compiled with optimization.
+ void *m_user_data; ///< User data for the SymbolFile parser to store
+ ///information into.
+ lldb::LanguageType
+ m_language; ///< The programming language enumeration value.
+ Flags m_flags; ///< Compile unit flags that help with partial parsing.
+ std::vector<lldb::FunctionSP> m_functions; ///< The sparsely populated list of
+ ///shared pointers to functions
+ ///< that gets populated as functions get partially parsed.
+ std::vector<ConstString> m_imported_modules; ///< All modules, including the
+ ///current module, imported by
+ ///this
+ ///< compile unit.
+ FileSpecList m_support_files; ///< Files associated with this compile unit's
+ ///line table and declarations.
+ std::unique_ptr<LineTable>
+ m_line_table_ap; ///< Line table that will get parsed on demand.
+ DebugMacrosSP
+ m_debug_macros_sp; ///< Debug macros that will get parsed on demand.
+ lldb::VariableListSP m_variables; ///< Global and static variable list that
+ ///will get parsed on demand.
+ lldb_private::LazyBool m_is_optimized; /// eLazyBoolYes if this compile unit
+ /// was compiled with optimization.
private:
- enum
- {
- flagsParsedAllFunctions = (1u << 0), ///< Have we already parsed all our functions
- flagsParsedVariables = (1u << 1), ///< Have we already parsed globals and statics?
- flagsParsedSupportFiles = (1u << 2), ///< Have we already parsed the support files for this compile unit?
- flagsParsedLineTable = (1u << 3), ///< Have we parsed the line table already?
- flagsParsedLanguage = (1u << 4), ///< Have we parsed the language already?
- flagsParsedImportedModules = (1u << 5), ///< Have we parsed the imported modules already?
- flagsParsedDebugMacros = (1u << 6) ///< Have we parsed the debug macros already?
- };
-
- DISALLOW_COPY_AND_ASSIGN (CompileUnit);
+ enum {
+ flagsParsedAllFunctions =
+ (1u << 0), ///< Have we already parsed all our functions
+ flagsParsedVariables =
+ (1u << 1), ///< Have we already parsed globals and statics?
+ flagsParsedSupportFiles = (1u << 2), ///< Have we already parsed the support
+ ///files for this compile unit?
+ flagsParsedLineTable =
+ (1u << 3), ///< Have we parsed the line table already?
+ flagsParsedLanguage = (1u << 4), ///< Have we parsed the language already?
+ flagsParsedImportedModules =
+ (1u << 5), ///< Have we parsed the imported modules already?
+ flagsParsedDebugMacros =
+ (1u << 6) ///< Have we parsed the debug macros already?
+ };
+
+ DISALLOW_COPY_AND_ASSIGN(CompileUnit);
};
} // namespace lldb_private