summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRui Ueyama <ruiu@google.com>2015-03-28 00:47:13 +0000
committerRui Ueyama <ruiu@google.com>2015-03-28 00:47:13 +0000
commit483f05f49b6bcf54bcc12047761617fa71d946b3 (patch)
treed7720b96304577b16d23e422e1405b59bc696b8c
parentbea7dfbc5e8f464506e18556aed7738a0be7c419 (diff)
downloadbcm5719-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.cpp18
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) {
OpenPOWER on IntegriCloud