diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2017-04-16 16:01:22 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2017-04-16 16:01:22 +0000 |
commit | 71d5a2540a98c81f5bcaeb48805e0e2881f530ef (patch) | |
tree | 5343938942df402b49ec7300a1c25a2d4ccd5821 /tools/obj2yaml/elf2yaml.cpp | |
parent | 31bbf64f3a4974a2d6c8b3b27ad2f519caf74057 (diff) |
Diffstat (limited to 'tools/obj2yaml/elf2yaml.cpp')
-rw-r--r-- | tools/obj2yaml/elf2yaml.cpp | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/tools/obj2yaml/elf2yaml.cpp b/tools/obj2yaml/elf2yaml.cpp index 697ab79d3b50..9f9ef99265dc 100644 --- a/tools/obj2yaml/elf2yaml.cpp +++ b/tools/obj2yaml/elf2yaml.cpp @@ -228,10 +228,18 @@ std::error_code ELFDumper<ELFT>::dumpRelocation(const RelT *Rel, return errorToErrorCode(StrTabOrErr.takeError()); StringRef StrTab = *StrTabOrErr; - Expected<StringRef> NameOrErr = Sym->getName(StrTab); - if (!NameOrErr) - return errorToErrorCode(NameOrErr.takeError()); - R.Symbol = NameOrErr.get(); + if (Sym) { + Expected<StringRef> NameOrErr = Sym->getName(StrTab); + if (!NameOrErr) + return errorToErrorCode(NameOrErr.takeError()); + R.Symbol = NameOrErr.get(); + } else { + // We have some edge cases of relocations without a symbol associated, + // e.g. an object containing the invalid (according to the System V + // ABI) R_X86_64_NONE reloc. Create a symbol with an empty name instead + // of crashing. + R.Symbol = ""; + } return obj2yaml_error::success; } |