diff options
author | Greg Clayton <gclayton@apple.com> | 2013-02-28 18:09:18 +0000 |
---|---|---|
committer | Greg Clayton <gclayton@apple.com> | 2013-02-28 18:09:18 +0000 |
commit | 7170f3fc54b611974a1deebbe0f2a26d39ea6959 (patch) | |
tree | 78caf47701bf01c2f85e0094ba66da1a9ba8180d | |
parent | d0c6e7b0385e54384e4ab79382f2927b3bdd04af (diff) | |
download | bcm5719-llvm-7170f3fc54b611974a1deebbe0f2a26d39ea6959.tar.gz bcm5719-llvm-7170f3fc54b611974a1deebbe0f2a26d39ea6959.zip |
Made lldb.cpp build with clang 5.0.
Also removed the use of llvm::raw_string_ostream as it wasn't needed.
Also fixed a crasher that could occur when the following line returned a C string tied to a local variable:
return OS.str().c_str();
I am guessing "static std::string buf;" was supposed to get assigned to "OS.str()" and then have "buf.c_str()" returned.
Modified the non-apple version code to cache its value and not recompute the version every time.
llvm-svn: 176274
-rw-r--r-- | lldb/source/lldb.cpp | 102 |
1 files changed, 57 insertions, 45 deletions
diff --git a/lldb/source/lldb.cpp b/lldb/source/lldb.cpp index 7bc2c4e04c5..fc2c5b1d472 100644 --- a/lldb/source/lldb.cpp +++ b/lldb/source/lldb.cpp @@ -7,8 +7,6 @@ // //===----------------------------------------------------------------------===// -#include "clang/Basic/Version.h" - #include "lldb/lldb-python.h" #include "lldb/lldb-private.h" @@ -25,7 +23,6 @@ #include "lldb/Target/Thread.h" #include "llvm/ADT/StringRef.h" -#include "llvm/Support/raw_ostream.h" #include "Plugins/ABI/MacOSX-i386/ABIMacOSX_i386.h" #include "Plugins/ABI/MacOSX-arm/ABIMacOSX_arm.h" @@ -80,26 +77,6 @@ using namespace lldb; using namespace lldb_private; -namespace { - -std::string getLLDBRevision() { -#ifdef LLDB_REVISION - return LLDB_REVISION; -#else - return ""; -#endif -} - -std::string getLLDBRepository() { -#ifdef LLDB_REPOSITORY - return LLDB_REPOSITORY; -#else - return ""; -#endif -} - -} - void lldb_private::Initialize () { @@ -250,6 +227,30 @@ lldb_private::Terminate () #if defined (__APPLE__) extern "C" const double liblldb_coreVersionNumber; +#else + +#include "clang/Basic/Version.h" + +static const char * +GetLLDBRevision() +{ +#ifdef LLDB_REVISION + return LLDB_REVISION; +#else + return NULL; +#endif +} + +static const char * +GetLLDBRepository() +{ +#ifdef LLDB_REPOSITORY + return LLDB_REPOSITORY; +#else + return NULL; +#endif +} + #endif const char * @@ -263,30 +264,41 @@ lldb_private::GetVersion () return g_version_string; #else // On Linux/FreeBSD/Windows, report a version number in the same style as the clang tool. - static std::string buf; - llvm::raw_string_ostream OS(buf); - OS << "lldb version " CLANG_VERSION_STRING " "; - - std::string lldb_repo = getLLDBRepository(); - if (lldb_repo.length() > 0) - OS << "(" << lldb_repo; - - std::string lldb_rev = getLLDBRevision(); - if (lldb_rev.length() > 0) - OS << " revision " << lldb_rev; - - std::string clang_rev = clang::getClangRevision(); - if (clang_rev.length() > 0) - OS << " clang revision " << clang_rev; - - std::string llvm_rev = clang::getLLVMRevision(); - if (llvm_rev.length() > 0) - OS << " llvm revision " << llvm_rev; + static std::string g_version_str; + if (g_version_str.empty()) + { + g_version_str += "lldb version "; + g_version_str += CLANG_VERSION_STRING; + const char * lldb_repo = GetLLDBRepository(); + if (lldb_repo) + { + g_version_str += " ("; + g_version_str += lldb_repo; + } - if (lldb_repo.length() > 0) - OS << ")"; + const char *lldb_rev = GetLLDBRevision(); + if (lldb_rev) + { + g_version_str += " revision "; + g_version_str += lldb_rev; + } + std::string clang_rev (clang::getClangRevision()); + if (clang_rev.length() > 0) + { + g_version_str += " clang revision "; + g_version_str += clang_rev; + } + std::string llvm_rev (clang::getLLVMRevision()); + if (llvm_rev.length() > 0) + { + g_version_str += " llvm revision "; + g_version_str += llvm_rev; + } - return OS.str().c_str(); + if (lldb_repo) + g_version_str += ")"; + } + return g_version_str.c_str(); #endif } |