[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