summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGreg Clayton <gclayton@apple.com>2010-12-07 05:40:31 +0000
committerGreg Clayton <gclayton@apple.com>2010-12-07 05:40:31 +0000
commitbbdabce2f79af1334d2627c80c136b2a5bfb48b9 (patch)
tree8802a60eda6d0e6c6fd7e5d08e6680ac2ddb53f5
parent0d71c4f564fc0e6635b18d111e8a416d5efe4113 (diff)
downloadbcm5719-llvm-bbdabce2f79af1334d2627c80c136b2a5bfb48b9.tar.gz
bcm5719-llvm-bbdabce2f79af1334d2627c80c136b2a5bfb48b9.zip
Added symbol table access through the module for now. We might need to expose
a SBSymtab class, but for now, we expose the symbols through the module. llvm-svn: 121112
-rw-r--r--lldb/include/lldb/API/SBModule.h6
-rw-r--r--lldb/include/lldb/API/SBSymbol.h4
-rw-r--r--lldb/source/API/SBModule.cpp33
-rw-r--r--lldb/source/API/SBSymbol.cpp7
4 files changed, 49 insertions, 1 deletions
diff --git a/lldb/include/lldb/API/SBModule.h b/lldb/include/lldb/API/SBModule.h
index 5d8e5320fb8..60a68870fd5 100644
--- a/lldb/include/lldb/API/SBModule.h
+++ b/lldb/include/lldb/API/SBModule.h
@@ -59,6 +59,12 @@ public:
bool
GetDescription (lldb::SBStream &description);
+ size_t
+ GetNumSymbols ();
+
+ SBSymbol
+ GetSymbolAtIndex (size_t idx);
+
private:
friend class SBSymbolContext;
friend class SBTarget;
diff --git a/lldb/include/lldb/API/SBSymbol.h b/lldb/include/lldb/API/SBSymbol.h
index 3ac9dfe6ddf..e4bf74b2764 100644
--- a/lldb/include/lldb/API/SBSymbol.h
+++ b/lldb/include/lldb/API/SBSymbol.h
@@ -62,9 +62,13 @@ protected:
private:
friend class SBFrame;
+ friend class SBModule;
friend class SBSymbolContext;
SBSymbol (lldb_private::Symbol *lldb_object_ptr);
+
+ void
+ SetSymbol (lldb_private::Symbol *lldb_object_ptr);
lldb_private::Symbol *m_opaque_ptr;
};
diff --git a/lldb/source/API/SBModule.cpp b/lldb/source/API/SBModule.cpp
index 7120e590daa..0a5c8aaacc3 100644
--- a/lldb/source/API/SBModule.cpp
+++ b/lldb/source/API/SBModule.cpp
@@ -181,3 +181,36 @@ SBModule::GetDescription (SBStream &description)
return true;
}
+
+size_t
+SBModule::GetNumSymbols ()
+{
+ if (m_opaque_sp)
+ {
+ ObjectFile *obj_file = m_opaque_sp->GetObjectFile();
+ if (obj_file)
+ {
+ Symtab *symtab = obj_file->GetSymtab();
+ if (symtab)
+ return symtab->GetNumSymbols();
+ }
+ }
+ return 0;
+}
+
+SBSymbol
+SBModule::GetSymbolAtIndex (size_t idx)
+{
+ SBSymbol sb_symbol;
+ if (m_opaque_sp)
+ {
+ ObjectFile *obj_file = m_opaque_sp->GetObjectFile();
+ if (obj_file)
+ {
+ Symtab *symtab = obj_file->GetSymtab();
+ if (symtab)
+ sb_symbol.SetSymbol(symtab->SymbolAtIndex (idx));
+ }
+ }
+ return sb_symbol;
+}
diff --git a/lldb/source/API/SBSymbol.cpp b/lldb/source/API/SBSymbol.cpp
index e8281a1b193..64416d0856f 100644
--- a/lldb/source/API/SBSymbol.cpp
+++ b/lldb/source/API/SBSymbol.cpp
@@ -41,12 +41,17 @@ SBSymbol::operator = (const SBSymbol &rhs)
return *this;
}
-
SBSymbol::~SBSymbol ()
{
m_opaque_ptr = NULL;
}
+void
+SBSymbol::SetSymbol (lldb_private::Symbol *lldb_object_ptr)
+{
+ m_opaque_ptr = lldb_object_ptr;
+}
+
bool
SBSymbol::IsValid () const
{
OpenPOWER on IntegriCloud