[PATCH] D27683: Prepare PrettyStackTrace for LLDB adoption

Sean Callanan via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Dec 13 14:39:31 PST 2016


spyffe retitled this revision from "Fix the linkage for __crashtracer_info__" to "Prepare PrettyStackTrace for LLDB adoption".
spyffe updated the summary for this revision.
spyffe updated this revision to Diff 81304.

Repository:
  rL LLVM

https://reviews.llvm.org/D27683

Files:
  include/llvm/Support/PrettyStackTrace.h
  lib/Support/PrettyStackTrace.cpp


Index: lib/Support/PrettyStackTrace.cpp
===================================================================
--- lib/Support/PrettyStackTrace.cpp
+++ lib/Support/PrettyStackTrace.cpp
@@ -89,7 +89,7 @@
         = { CRASHREPORTER_ANNOTATIONS_VERSION, 0, 0, 0, 0, 0, 0 };
 }
 #elif defined (__APPLE__) && HAVE_CRASHREPORTER_INFO
-static const char *__crashreporter_info__ = 0;
+extern "C" const char *__crashreporter_info__ __attribute__((visibility("hidden"))) = 0;
 asm(".desc ___crashreporter_info__, 0x10");
 #endif
 
@@ -145,6 +145,28 @@
   OS << Str << "\n";
 }
 
+PrettyStackTraceFormat::PrettyStackTraceFormat(const char *format, ...) {
+  va_list ap;
+
+  va_start(ap, format);
+  const int size_or_error = vsnprintf(nullptr, 0, format, ap);
+  va_end(ap);
+
+  if (size_or_error < 0) {
+    return;
+  }
+
+  const int size = size_or_error + 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.
Index: include/llvm/Support/PrettyStackTrace.h
===================================================================
--- include/llvm/Support/PrettyStackTrace.h
+++ include/llvm/Support/PrettyStackTrace.h
@@ -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 @@
     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 {


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D27683.81304.patch
Type: text/x-patch
Size: 2288 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20161213/3cc76b54/attachment.bin>


More information about the cfe-commits mailing list