diff options
Diffstat (limited to 'llvm/tools/dsymutil/MachODebugMapParser.cpp')
-rw-r--r-- | llvm/tools/dsymutil/MachODebugMapParser.cpp | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/llvm/tools/dsymutil/MachODebugMapParser.cpp b/llvm/tools/dsymutil/MachODebugMapParser.cpp index 16b95b55670..c58545aec99 100644 --- a/llvm/tools/dsymutil/MachODebugMapParser.cpp +++ b/llvm/tools/dsymutil/MachODebugMapParser.cpp @@ -197,11 +197,14 @@ void MachODebugMapParser::loadCurrentObjectFileSymbols() { CurrentObjectAddresses.clear(); for (auto Sym : CurrentObjectHolder.Get().symbols()) { - StringRef Name; + uint64_t Addr; - if (Sym.getAddress(Addr) || Addr == UnknownAddress || Sym.getName(Name)) + if (Sym.getAddress(Addr) || Addr == UnknownAddress) + continue; + ErrorOr<StringRef> Name = Sym.getName(); + if (!Name) continue; - CurrentObjectAddresses[Name] = Addr; + CurrentObjectAddresses[*Name] = Addr; } } @@ -225,7 +228,6 @@ void MachODebugMapParser::loadMainBinarySymbols() { // Skip undefined and STAB entries. if ((Type & SymbolRef::ST_Debug) || (Type & SymbolRef::ST_Unknown)) continue; - StringRef Name; uint64_t Addr; // The only symbols of interest are the global variables. These // are the only ones that need to be queried because the address @@ -233,8 +235,13 @@ void MachODebugMapParser::loadMainBinarySymbols() { // addresses should be fetched for the debug map. if (Sym.getAddress(Addr) || Addr == UnknownAddress || !(Sym.getFlags() & SymbolRef::SF_Global) || Sym.getSection(Section) || - Section->isText() || Sym.getName(Name) || Name.size() == 0 || - Name[0] == '\0') + Section->isText()) + continue; + ErrorOr<StringRef> NameOrErr = Sym.getName(); + if (!NameOrErr) + continue; + StringRef Name = *NameOrErr; + if (Name.size() == 0 || Name[0] == '\0') continue; MainBinarySymbolAddresses[Name] = Addr; } |