Squashed 'third_party/allwpilib/' content from commit b0167e633

Change-Id: I5653017a690eec1917e8fff9017195d8af307926
git-subtree-dir: third_party/allwpilib
git-subtree-split: b0167e6337135545e7053acb89dd5726accc7dec
diff --git a/wpiutil/src/main/native/windows/StackTrace.cpp b/wpiutil/src/main/native/windows/StackTrace.cpp
new file mode 100644
index 0000000..86bbdff
--- /dev/null
+++ b/wpiutil/src/main/native/windows/StackTrace.cpp
@@ -0,0 +1,45 @@
+/*----------------------------------------------------------------------------*/
+/* Copyright (c) 2008-2019 FIRST. All Rights Reserved.                        */
+/* Open Source Software - may be modified and shared by FRC teams. The code   */
+/* must be accompanied by the FIRST BSD license file in the root directory of */
+/* the project.                                                               */
+/*----------------------------------------------------------------------------*/
+
+#include "wpi/StackTrace.h"
+
+#include "StackWalker.h"
+#include "wpi/ConvertUTF.h"
+#include "wpi/SmallString.h"
+
+namespace {
+class StackTraceWalker : public StackWalker {
+ public:
+  explicit StackTraceWalker(std::string& output) : m_output(output) {}
+
+  void OnOutput(LPCTSTR szText) override;
+
+ private:
+  std::string& m_output;
+};
+}  // namespace
+
+void StackTraceWalker::OnOutput(LPCTSTR szText) {
+#ifdef _UNICODE
+  wpi::SmallString<128> utf8;
+  wpi::sys::windows::UTF16ToUTF8(szText, wcslen(szText), utf8);
+  m_output.append(utf8.data(), utf8.size());
+#else
+  m_output.append(szText);
+#endif
+}
+
+namespace wpi {
+
+std::string GetStackTrace(int offset) {
+  // TODO: implement offset
+  std::string output;
+  StackTraceWalker walker(output);
+  return output;
+}
+
+}  // namespace wpi