Just curious, is this related to the dump I sent you a while back?

On Thu, May 26, 2016 at 5:23 PM Greg Clayton via lldb-commits <
lldb-commits@lists.llvm.org> wrote:

> Author: gclayton
> Date: Thu May 26 19:17:18 2016
> New Revision: 270941
>
> URL: http://llvm.org/viewvc/llvm-project?rev=270941&view=rev
> Log:
> Add a new "lldb" log channel named "demangle". If we have crashes that are
> related to demangling, we now can enable this logging and we will be able
> to reproduce demangler crashes (usually due to overflowing the stack)
> without needing someone's project.
>
> <rdar://problem/25221899>
>
> Modified:
>     lldb/trunk/include/lldb/Core/Logging.h
>     lldb/trunk/source/Core/Logging.cpp
>     lldb/trunk/source/Core/Mangled.cpp
>
> Modified: lldb/trunk/include/lldb/Core/Logging.h
> URL:
> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Core/Logging.h?rev=270941&r1=270940&r2=270941&view=diff
>
> ==============================================================================
> --- lldb/trunk/include/lldb/Core/Logging.h (original)
> +++ lldb/trunk/include/lldb/Core/Logging.h Thu May 26 19:17:18 2016
> @@ -49,6 +49,7 @@
>  #define LIBLLDB_LOG_JIT_LOADER          (1u << 27)
>  #define LIBLLDB_LOG_LANGUAGE            (1u << 28)
>  #define LIBLLDB_LOG_DATAFORMATTERS      (1u << 29)
> +#define LIBLLDB_LOG_DEMANGLE            (1u << 30)
>  #define LIBLLDB_LOG_ALL                 (UINT32_MAX)
>  #define LIBLLDB_LOG_DEFAULT             (LIBLLDB_LOG_PROCESS
> |\
>                                           LIBLLDB_LOG_THREAD
>  |\
>
> Modified: lldb/trunk/source/Core/Logging.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/Logging.cpp?rev=270941&r1=270940&r2=270941&view=diff
>
> ==============================================================================
> --- lldb/trunk/source/Core/Logging.cpp (original)
> +++ lldb/trunk/source/Core/Logging.cpp Thu May 26 19:17:18 2016
> @@ -150,6 +150,7 @@ lldb_private::DisableLog (const char **c
>                  else if (0 == ::strcasecmp(arg, "jit"))         flag_bits
> &= ~LIBLLDB_LOG_JIT_LOADER;
>                  else if (0 == ::strcasecmp(arg, "language"))    flag_bits
> &= ~LIBLLDB_LOG_LANGUAGE;
>                  else if (0 == ::strncasecmp(arg, "formatters", 10))
>  flag_bits &= ~LIBLLDB_LOG_DATAFORMATTERS;
> +                else if (0 == ::strncasecmp(arg, "demangle", 8))
> flag_bits &= ~LIBLLDB_LOG_DEMANGLE;
>                  else
>                  {
>                      feedback_strm->Printf ("error:  unrecognized log
> category '%s'\n", arg);
> @@ -225,6 +226,7 @@ lldb_private::EnableLog (StreamSP &log_s
>              else if (0 == ::strcasecmp(arg, "jit"))         flag_bits |=
> LIBLLDB_LOG_JIT_LOADER;
>              else if (0 == ::strcasecmp(arg, "language"))    flag_bits |=
> LIBLLDB_LOG_LANGUAGE;
>              else if (0 == ::strncasecmp(arg, "formatters", 10))
>  flag_bits |= LIBLLDB_LOG_DATAFORMATTERS;
> +            else if (0 == ::strncasecmp(arg, "demangle", 8))
> flag_bits |= LIBLLDB_LOG_DEMANGLE;
>              else
>              {
>                  feedback_strm->Printf("error: unrecognized log category
> '%s'\n", arg);
> @@ -251,6 +253,7 @@ lldb_private::ListLogCategories (Stream
>                   "  communication - log communication activities\n"
>                   "  connection - log connection details\n"
>                   "  default - enable the default set of logging
> categories for liblldb\n"
> +                 "  demangle - log mangled names to catch demangler
> crashes\n"
>                   "  dyld - log shared library related activities\n"
>                   "  events - log broadcaster, listener and event queue
> activities\n"
>                   "  expr - log expressions\n"
>
> Modified: lldb/trunk/source/Core/Mangled.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/Mangled.cpp?rev=270941&r1=270940&r2=270941&view=diff
>
> ==============================================================================
> --- lldb/trunk/source/Core/Mangled.cpp (original)
> +++ lldb/trunk/source/Core/Mangled.cpp Thu May 26 19:17:18 2016
> @@ -34,6 +34,8 @@
>  #include "llvm/ADT/DenseMap.h"
>
>  #include "lldb/Core/ConstString.h"
> +#include "lldb/Core/Log.h"
> +#include "lldb/Core/Logging.h"
>  #include "lldb/Core/Mangled.h"
>  #include "lldb/Core/RegularExpression.h"
>  #include "lldb/Core/Stream.h"
> @@ -271,6 +273,8 @@ Mangled::GetDemangledName (lldb::Languag
>                              "Mangled::GetDemangledName (m_mangled = %s)",
>                              m_mangled.GetCString());
>
> +        Log *log = lldb_private::GetLogIfAllCategoriesSet
> (LIBLLDB_LOG_DEMANGLE);
> +
>          // Don't bother running anything that isn't mangled
>          const char *mangled_name = m_mangled.GetCString();
>          ManglingScheme
> mangling_scheme{cstring_mangling_scheme(mangled_name)};
> @@ -285,6 +289,8 @@ Mangled::GetDemangledName (lldb::Languag
>                  case eManglingSchemeMSVC:
>                  {
>  #if defined(_MSC_VER)
> +                    if (log)
> +                        log->Printf("demangle msvc: %s", mangled_name);
>                      const size_t demangled_length = 2048;
>                      demangled_name = static_cast<char
> *>(::malloc(demangled_length));
>                      ::ZeroMemory(demangled_name, demangled_length);
> @@ -295,6 +301,14 @@ Mangled::GetDemangledName (lldb::Languag
>                              UNDNAME_NO_MEMBER_TYPE         | // Strip
> virtual, static, etc specifiers
>                              UNDNAME_NO_MS_KEYWORDS           // Strip all
> MS extension keywords
>                          );
> +                    if (log)
> +                    {
> +                        if (demangled_name && demangled_name[0])
> +                            log->Printf("demangled msvc: %s -> \"%s\"",
> mangled_name, demangled_name);
> +                        else
> +                            log->Printf("demangled msvc: %s -> error:
> 0x%" PRIx64, mangled_name, result);
> +                    }
> +
>                      if (result == 0)
>                      {
>                          free(demangled_name);
> @@ -306,6 +320,8 @@ Mangled::GetDemangledName (lldb::Languag
>                  case eManglingSchemeItanium:
>                  {
>  #ifdef LLDB_USE_BUILTIN_DEMANGLER
> +                    if (log)
> +                        log->Printf("demangle itanium: %s", mangled_name);
>                      // Try to use the fast-path demangler first for the
>                      // performance win, falling back to the full
> demangler only
>                      // when necessary
> @@ -315,6 +331,13 @@ Mangled::GetDemangledName (lldb::Languag
>  #else
>                      demangled_name = abi::__cxa_demangle(mangled_name,
> NULL, NULL, NULL);
>  #endif
> +                    if (log)
> +                    {
> +                        if (demangled_name)
> +                            log->Printf("demangled itanium: %s ->
> \"%s\"", mangled_name, demangled_name);
> +                        else
> +                            log->Printf("demangled itanium: %s -> error:
> failed to demangle", mangled_name);
> +                    }
>                      break;
>                  }
>                  case eManglingSchemeNone:
>
>
> _______________________________________________
> lldb-commits mailing list
> lldb-commits@lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
>
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to