[llvm] r289689 - Prepare PrettyStackTrace for LLDB adoption

David Blaikie via llvm-commits llvm-commits at lists.llvm.org
Mon Dec 19 20:02:00 PST 2016


test case (possibly a unit test) for PrettyStackTraceFormat::Prett
yStackTraceFormat?

On Wed, Dec 14, 2016 at 11:20 AM Sean Callanan via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

> Author: spyffe
> Date: Wed Dec 14 13:09:43 2016
> New Revision: 289689
>
> URL: http://llvm.org/viewvc/llvm-project?rev=289689&view=rev
> Log:
> Prepare PrettyStackTrace for LLDB adoption
>
> This patch fixes the linkage for __crashtracer_info__, making it have the
> proper mangling (extern "C") and linkage (private extern).
> It also adds a new PrettyStackTrace type, allowing LLDB to adopt this
> instead of Host::SetCrashDescriptionWithFormat().
>
> Without this patch, CrashTracer on macOS won't pick up pretty stack traces
> from any LLVM client.
> An LLDB commit adopting this API will follow shortly.
>
> Differential Revision: https://reviews.llvm.org/D27683
>
> Modified:
>     llvm/trunk/include/llvm/Support/PrettyStackTrace.h
>     llvm/trunk/lib/Support/PrettyStackTrace.cpp
>
> Modified: llvm/trunk/include/llvm/Support/PrettyStackTrace.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/PrettyStackTrace.h?rev=289689&r1=289688&r2=289689&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Support/PrettyStackTrace.h (original)
> +++ llvm/trunk/include/llvm/Support/PrettyStackTrace.h Wed Dec 14 13:09:43
> 2016
> @@ -16,6 +16,7 @@
>  #ifndef LLVM_SUPPORT_PRETTYSTACKTRACE_H
>  #define LLVM_SUPPORT_PRETTYSTACKTRACE_H
>
> +#include "llvm/ADT/SmallVector.h"
>  #include "llvm/Support/Compiler.h"
>
>  namespace llvm {
> @@ -55,6 +56,16 @@ namespace llvm {
>      void print(raw_ostream &OS) const override;
>    };
>
> +  /// PrettyStackTraceFormat - This object prints a string (which may use
> +  /// printf-style formatting but should not contain newlines) to the
> stream
> +  /// as the stack trace when a crash occurs.
> +  class PrettyStackTraceFormat : public PrettyStackTraceEntry {
> +    llvm::SmallVector<char, 32> Str;
> +  public:
> +    PrettyStackTraceFormat(const char *Format, ...);
> +    void print(raw_ostream &OS) const override;
> +  };
> +
>    /// PrettyStackTraceProgram - This object prints a specified program
> arguments
>    /// to the stream as the stack trace when a crash occurs.
>    class PrettyStackTraceProgram : public PrettyStackTraceEntry {
>
> Modified: llvm/trunk/lib/Support/PrettyStackTrace.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/PrettyStackTrace.cpp?rev=289689&r1=289688&r2=289689&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Support/PrettyStackTrace.cpp (original)
> +++ llvm/trunk/lib/Support/PrettyStackTrace.cpp Wed Dec 14 13:09:43 2016
> @@ -88,12 +88,12 @@ struct crashreporter_annotations_t gCRAn
>          __attribute__((section("__DATA,"
> CRASHREPORTER_ANNOTATIONS_SECTION)))
>          = { CRASHREPORTER_ANNOTATIONS_VERSION, 0, 0, 0, 0, 0, 0 };
>  }
> -#elif defined (__APPLE__) && HAVE_CRASHREPORTER_INFO
> -static const char *__crashreporter_info__ = 0;
> +#elif defined(__APPLE__) && HAVE_CRASHREPORTER_INFO
> +extern "C" const char *__crashreporter_info__
> +    __attribute__((visibility("hidden"))) = 0;
>  asm(".desc ___crashreporter_info__, 0x10");
>  #endif
>
> -
>  /// CrashHandler - This callback is run if a fatal signal is delivered to
> the
>  /// process, it prints the pretty stack trace.
>  static void CrashHandler(void *) {
> @@ -141,10 +141,26 @@ PrettyStackTraceEntry::~PrettyStackTrace
>  #endif
>  }
>
> -void PrettyStackTraceString::print(raw_ostream &OS) const {
> -  OS << Str << "\n";
> +void PrettyStackTraceString::print(raw_ostream &OS) const { OS << Str <<
> "\n"; }
> +
> +PrettyStackTraceFormat::PrettyStackTraceFormat(const char *Format, ...) {
> +  va_list AP;
> +  va_start(AP, Format);
> +  const int SizeOrError = vsnprintf(nullptr, 0, Format, AP);
> +  va_end(AP);
> +  if (SizeOrError < 0) {
> +    return;
> +  }
> +
> +  const int Size = SizeOrError + 1; // '\0'
> +  Str.resize(Size);
> +  va_start(AP, Format);
> +  vsnprintf(Str.data(), Size, Format, AP);
> +  va_end(AP);
>  }
>
> +void PrettyStackTraceFormat::print(raw_ostream &OS) const { OS << Str <<
> "\n"; }
> +
>  void PrettyStackTraceProgram::print(raw_ostream &OS) const {
>    OS << "Program arguments: ";
>    // Print the argument list.
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20161220/bf51d266/attachment.html>


More information about the llvm-commits mailing list