aboutsummaryrefslogtreecommitdiff
path: root/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp')
-rw-r--r--lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp18
1 files changed, 13 insertions, 5 deletions
diff --git a/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp b/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
index 079fd90..4aa85a9 100644
--- a/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
+++ b/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
@@ -2235,11 +2235,11 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
LLDB_LOG(log, "Parsing symbol table for {0}", file_name);
Progress progress("Parsing symbol table", file_name);
- llvm::MachO::symtab_command symtab_load_command = {0, 0, 0, 0, 0, 0};
llvm::MachO::linkedit_data_command function_starts_load_command = {0, 0, 0, 0};
llvm::MachO::linkedit_data_command exports_trie_load_command = {0, 0, 0, 0};
llvm::MachO::dyld_info_command dyld_info = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
llvm::MachO::dysymtab_command dysymtab = m_dysymtab;
+ SymtabCommandLargeOffsets symtab_load_command;
// The data element of type bool indicates that this entry is thumb
// code.
typedef AddressDataArray<lldb::addr_t, bool, 100> FunctionStarts;
@@ -2276,12 +2276,20 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
// Watch for the symbol table load command
switch (lc.cmd) {
case LC_SYMTAB:
+ // struct symtab_command {
+ // uint32_t cmd; /* LC_SYMTAB */
+ // uint32_t cmdsize; /* sizeof(struct symtab_command) */
+ // uint32_t symoff; /* symbol table offset */
+ // uint32_t nsyms; /* number of symbol table entries */
+ // uint32_t stroff; /* string table offset */
+ // uint32_t strsize; /* string table size in bytes */
+ // };
symtab_load_command.cmd = lc.cmd;
symtab_load_command.cmdsize = lc.cmdsize;
- // Read in the rest of the symtab load command
- if (m_data.GetU32(&offset, &symtab_load_command.symoff, 4) ==
- nullptr) // fill in symoff, nsyms, stroff, strsize fields
- return;
+ symtab_load_command.symoff = m_data.GetU32(&offset);
+ symtab_load_command.nsyms = m_data.GetU32(&offset);
+ symtab_load_command.stroff = m_data.GetU32(&offset);
+ symtab_load_command.strsize = m_data.GetU32(&offset);
break;
case LC_DYLD_INFO: