diff options
| author | Rui Ueyama <ruiu@google.com> | 2015-03-28 00:47:13 +0000 |
|---|---|---|
| committer | Rui Ueyama <ruiu@google.com> | 2015-03-28 00:47:13 +0000 |
| commit | 483f05f49b6bcf54bcc12047761617fa71d946b3 (patch) | |
| tree | d7720b96304577b16d23e422e1405b59bc696b8c | |
| parent | bea7dfbc5e8f464506e18556aed7738a0be7c419 (diff) | |
| download | bcm5719-llvm-483f05f49b6bcf54bcc12047761617fa71d946b3.tar.gz bcm5719-llvm-483f05f49b6bcf54bcc12047761617fa71d946b3.zip | |
ELF: Do less if HAVE_CXXABI_H is not defined.
If HAVE_CXXABI_H is not defined, this function is the identity function.
Because HAVE_CXXABI_H did not protect the entire function, it did
extra stuffs before returning the argument.
The new code calls fewer functions. This should help developers understand
this piece of code.
llvm-svn: 233460
| -rw-r--r-- | lld/lib/ReaderWriter/ELF/ELFLinkingContext.cpp | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/lld/lib/ReaderWriter/ELF/ELFLinkingContext.cpp b/lld/lib/ReaderWriter/ELF/ELFLinkingContext.cpp index 03332399e0a..42a544e29fb 100644 --- a/lld/lib/ReaderWriter/ELF/ELFLinkingContext.cpp +++ b/lld/lib/ReaderWriter/ELF/ELFLinkingContext.cpp @@ -219,6 +219,7 @@ void ELFLinkingContext::notifySymbolTableCoalesce(const Atom *existingAtom, } std::string ELFLinkingContext::demangle(StringRef symbolName) const { +#if defined(HAVE_CXXABI_H) if (!demangleSymbols()) return symbolName; @@ -226,21 +227,20 @@ std::string ELFLinkingContext::demangle(StringRef symbolName) const { if (!symbolName.startswith("_Z")) return symbolName; -#if defined(HAVE_CXXABI_H) SmallString<256> symBuff; StringRef nullTermSym = Twine(symbolName).toNullTerminatedStringRef(symBuff); const char *cstr = nullTermSym.data(); int status; char *demangled = abi::__cxa_demangle(cstr, nullptr, nullptr, &status); - if (demangled != NULL) { - std::string result(demangled); - // __cxa_demangle() always uses a malloc'ed buffer to return the result. - free(demangled); - return result; - } -#endif - + if (demangled == NULL) + return symbolName; + std::string result(demangled); + // __cxa_demangle() always uses a malloc'ed buffer to return the result. + free(demangled); + return result; +#else return symbolName; +#endif } void ELFLinkingContext::setUndefinesResolver(std::unique_ptr<File> resolver) { |

