[libcxx-commits] [libcxx] WIP - [libc++][debugging] P2546R5: Debugging support (PR #81447)

Hristo Hristov via libcxx-commits libcxx-commits at lists.llvm.org
Tue Mar 19 01:43:47 PDT 2024


https://github.com/H-G-Hristov updated https://github.com/llvm/llvm-project/pull/81447

>From 2d9756739a228de91989ee3e4900930522fe0dd5 Mon Sep 17 00:00:00 2001
From: Zingam <zingam at outlook.com>
Date: Sat, 13 Jan 2024 12:41:46 +0200
Subject: [PATCH 01/40] [libc++][debugging] P2546R5: Debugging Support

Implements (partially): https://wg21.link/P0543R3
- https://eel.is/c++draft/debugging
---
 libcxx/docs/Status/Cxx2cPapers.csv            |   2 +-
 libcxx/include/CMakeLists.txt                 |   1 +
 libcxx/include/__config                       |   5 +
 libcxx/include/__std_clang_module             |   1 +
 libcxx/include/debugging                      |  44 +++
 libcxx/modules/CMakeLists.txt                 |   1 +
 libcxx/modules/std.cppm.in                    |   1 +
 libcxx/modules/std/debugging.inc              |  17 +
 libcxx/src/CMakeLists.txt                     |   1 +
 libcxx/src/debugging.cpp                      | 324 ++++++++++++++++++
 .../debugging.version.compile.pass.cpp        |  71 ++++
 .../utilities/debugging/breakpoint.pass.cpp   |  24 ++
 .../breakpoint_if_debugging.pass.cpp          |  24 ++
 .../debugging/is_debugger_present.pass.cpp    |  24 ++
 .../generate_feature_test_macro_components.py |   2 +-
 15 files changed, 540 insertions(+), 2 deletions(-)
 create mode 100644 libcxx/include/debugging
 create mode 100644 libcxx/modules/std/debugging.inc
 create mode 100644 libcxx/src/debugging.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/debugging.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/utilities/debugging/breakpoint.pass.cpp
 create mode 100644 libcxx/test/std/utilities/debugging/breakpoint_if_debugging.pass.cpp
 create mode 100644 libcxx/test/std/utilities/debugging/is_debugger_present.pass.cpp

diff --git a/libcxx/docs/Status/Cxx2cPapers.csv b/libcxx/docs/Status/Cxx2cPapers.csv
index 4a5443dea115c8..072778974bed85 100644
--- a/libcxx/docs/Status/Cxx2cPapers.csv
+++ b/libcxx/docs/Status/Cxx2cPapers.csv
@@ -29,7 +29,7 @@
 "","","","","","",""
 "`P0543R3 <https://wg21.link/P0543R3>`__","LWG","Saturation arithmetic","Kona November 2023","|Complete|","18.0",""
 "`P2407R5 <https://wg21.link/P2407R5>`__","LWG","Freestanding Library: Partial Classes","Kona November 2023","","",""
-"`P2546R5 <https://wg21.link/P2546R5>`__","LWG","Debugging Support","Kona November 2023","","",""
+"`P2546R5 <https://wg21.link/P2546R5>`__","LWG","Debugging Support","Kona November 2023","|Partial|","19.0",""
 "`P2905R2 <https://wg21.link/P2905R2>`__","LWG","Runtime format strings","Kona November 2023","|Complete|","18.0","|format| |DR|"
 "`P2918R2 <https://wg21.link/P2918R2>`__","LWG","Runtime format strings II","Kona November 2023","|Complete|","18.0","|format|"
 "`P2909R4 <https://wg21.link/P2909R4>`__","LWG","Fix formatting of code units as integers (Dude, where’s my ``char``?)","Kona November 2023","|Complete|","18.0","|format| |DR|"
diff --git a/libcxx/include/CMakeLists.txt b/libcxx/include/CMakeLists.txt
index 6ed8d21d98a15a..d2958dbb38e8e1 100644
--- a/libcxx/include/CMakeLists.txt
+++ b/libcxx/include/CMakeLists.txt
@@ -903,6 +903,7 @@ set(files
   cuchar
   cwchar
   cwctype
+  debugging
   deque
   errno.h
   exception
diff --git a/libcxx/include/__config b/libcxx/include/__config
index 11e13e0c24986a..cf7ce449be378d 100644
--- a/libcxx/include/__config
+++ b/libcxx/include/__config
@@ -450,6 +450,7 @@ _LIBCPP_HARDENING_MODE_DEBUG
 #    define _LIBCPP_HAS_NO_EXPERIMENTAL_STOP_TOKEN
 #    define _LIBCPP_HAS_NO_INCOMPLETE_TZDB
 #    define _LIBCPP_HAS_NO_EXPERIMENTAL_SYNCSTREAM
+#    define _LIBCPP_HAS_NO_INCOMPLETE_DEBUGGING
 #  endif
 
 // Need to detect which libc we're using if we're on Linux.
@@ -1515,6 +1516,10 @@ __sanitizer_verify_double_ended_contiguous_container(const void*, const void*, c
 #    define _LIBCPP_HAS_EXPLICIT_THIS_PARAMETER
 #  endif
 
+#  if defined(__APPLE__) || defined(__linux__) || defined (_WIN32)
+#    define _LIBCPP_HAS_DEBUGGING
+#  endif
+
 #endif // __cplusplus
 
 #endif // _LIBCPP___CONFIG
diff --git a/libcxx/include/__std_clang_module b/libcxx/include/__std_clang_module
index 18d6ce6b46c1f6..7dcee53c68b399 100644
--- a/libcxx/include/__std_clang_module
+++ b/libcxx/include/__std_clang_module
@@ -81,6 +81,7 @@
 #if !defined(_LIBCPP_HAS_NO_WIDE_CHARACTERS)
 #  include <cwctype>
 #endif
+#include <debugging>
 #include <deque>
 #include <errno.h>
 #include <exception>
diff --git a/libcxx/include/debugging b/libcxx/include/debugging
new file mode 100644
index 00000000000000..07d6b45db30175
--- /dev/null
+++ b/libcxx/include/debugging
@@ -0,0 +1,44 @@
+// -*- C++ -*-
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef _LIBCPP_DEBUGGING
+#define _LIBCPP_DEBUGGING
+
+/*
+// all freestanding
+namespace std {
+  // [debugging.utility], utility
+  void breakpoint() noexcept;
+  void breakpoint_if_debugging() noexcept;
+  bool is_debugger_present() noexcept;
+}
+*/
+
+#include <__config>
+#include <version>
+
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
+#  pragma GCC system_header
+#endif
+
+_LIBCPP_BEGIN_NAMESPACE_STD
+
+#if _LIBCPP_STD_VER >= 26
+
+_LIBCPP_EXPORTED_FROM_ABI void breakpoint() noexcept;
+
+_LIBCPP_EXPORTED_FROM_ABI void breakpoint_if_debugging() noexcept;
+
+_LIBCPP_EXPORTED_FROM_ABI bool is_debugger_present() noexcept;
+
+#endif // _LIBCPP_STD_VER >= 26
+
+_LIBCPP_END_NAMESPACE_STD
+
+#endif // _LIBCPP_DEBUGGING
diff --git a/libcxx/modules/CMakeLists.txt b/libcxx/modules/CMakeLists.txt
index 0dea8cfca94ac3..bfafdc9f4fe242 100644
--- a/libcxx/modules/CMakeLists.txt
+++ b/libcxx/modules/CMakeLists.txt
@@ -37,6 +37,7 @@ set(LIBCXX_MODULE_STD_SOURCES
   std/cuchar.inc
   std/cwchar.inc
   std/cwctype.inc
+  std/debugging.inc
   std/deque.inc
   std/exception.inc
   std/execution.inc
diff --git a/libcxx/modules/std.cppm.in b/libcxx/modules/std.cppm.in
index b8d89130aae989..0fb465f49301d1 100644
--- a/libcxx/modules/std.cppm.in
+++ b/libcxx/modules/std.cppm.in
@@ -65,6 +65,7 @@ module;
 #if !defined(_LIBCPP_HAS_NO_WIDE_CHARACTERS)
 #  include <cwctype>
 #endif
+#include <debugging>
 #include <deque>
 #include <exception>
 #include <execution>
diff --git a/libcxx/modules/std/debugging.inc b/libcxx/modules/std/debugging.inc
new file mode 100644
index 00000000000000..a65890d8e8167a
--- /dev/null
+++ b/libcxx/modules/std/debugging.inc
@@ -0,0 +1,17 @@
+// -*- C++ -*-
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+export namespace std {
+#if _LIBCPP_STD_VER >= 26
+  // [debugging.utility], utility
+  using stgd::breakpoint;
+  using stgd::breakpoint_if_debugging;
+  using stgd::is_debugger_present;
+#endif
+} // namespace std
diff --git a/libcxx/src/CMakeLists.txt b/libcxx/src/CMakeLists.txt
index 1110a79ddcacd5..fbe496f8719439 100644
--- a/libcxx/src/CMakeLists.txt
+++ b/libcxx/src/CMakeLists.txt
@@ -10,6 +10,7 @@ set(LIBCXX_SOURCES
   chrono.cpp
   error_category.cpp
   exception.cpp
+  debugging.cpp
   filesystem/filesystem_clock.cpp
   filesystem/filesystem_error.cpp
   filesystem/path_parser.h
diff --git a/libcxx/src/debugging.cpp b/libcxx/src/debugging.cpp
new file mode 100644
index 00000000000000..738addc5e0c9bb
--- /dev/null
+++ b/libcxx/src/debugging.cpp
@@ -0,0 +1,324 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include <__config>
+#include <debugging>
+
+#if defined(_LIBCPP_WIN32API)
+#  define WIN32_LEAN_AND_MEAN
+#  define NOMINMAX
+#  include <windows.h>
+#elif defined(__APPLE__)
+#  include <stdbool.h>
+#  include <sys/sysctl.h>
+#  include <sys/types.h>
+#  include <unistd.h>
+#elif defined(__linux__)
+#  include <csignal>
+#  include <fstream>
+#  include <regex>
+#  include <sstream>
+#  include <string>
+// Linux
+#endif
+
+_LIBCPP_BEGIN_NAMESPACE_STD
+
+namespace __impl {
+
+// Linux
+//   https://docs.kernel.org/filesystems/proc.html
+//   https://stackoverflow.com/a/49079078
+//   https://linuxsecurity.com/features/anti-debugging-for-noobs-part-1
+//   https://linuxsecurity.com/features/hacker-s-corner-complete-guide-to-anti-debugging-in-linux-part-2
+//   https://linuxsecurity.com/features/hacker-s-corner-complete-guide-to-anti-debugging-in-linux-part-3
+
+// macOS
+//   https://developer.apple.com/library/archive/qa/qa1361/_index.html
+//   https://ladydebug.com/blog/2020/09/02/isdebuggerpresent-for-mac-osx/
+//   https://github.com/freebsd/freebsd-src/blob/7f3184ba797452703904d33377dada5f0f8eae96/sys/sys/proc.h#L822
+
+#if defined(_LIBCPP_WIN32API)
+
+void __breakpoint() noexcept { void DebugBreak(); }
+
+bool __is_debugger_present() noexcept { return IsDebuggerPresent(); }
+
+#elif defined(__APPLE__) || defined(__FreeBSD__)
+
+// TODO
+void __breakpoint() {
+#  ifdef _LIBCPP_HARDENING_MODE_DEBUG
+#    if __has_builtin(__builtin_debugtrap)
+  __builtin_debugtrap();
+#    else
+  raise(SIGTRAP);
+#    endif
+#  endif
+}
+
+bool __is_debugger_present() noexcept {
+  // Technical Q&A QA1361: Detecting the Debugger
+  // https://github.com/freebsd/freebsd-src/blob/7f3184ba797452703904d33377dada5f0f8eae96/sys/sys/proc.h#L822
+
+  int junk;
+  int mib[4];
+  struct kinfo_proc info;
+  size_t size;
+
+  // Initialize the flags so that, if sysctl fails for some bizarre
+  // reason, we get a predictable result.
+
+  info.kp_proc.p_flag = 0;
+
+  // Initialize mib, which tells sysctl the info we want, in this case
+  // we're looking for information about a specific process ID.
+
+  mib[0] = CTL_KERN;
+  mib[1] = KERN_PROC;
+  mib[2] = KERN_PROC_PID;
+  mib[3] = getpid();
+
+  // Call sysctl.
+
+  size = sizeof(info);
+  junk = sysctl(mib, sizeof(mib) / sizeof(*mib), &info, &size, NULL, 0);
+  _LIBCPP_ASSERT_INTERNAL(junk == 0, "'sysctl' runtime error");
+
+  // We're being debugged if the P_TRACED flag is set.
+
+  return ((info.kp_proc.p_flag & P_TRACED) != 0);
+}
+
+#elif defined(__linux__)
+
+void __breakpoint() noexcept {
+#  if defined SIGTRAP
+  raise(SIGTRAP);
+#  else
+  raise(SIGABRT);
+#  endif
+}
+
+bool __is_debugger_present() noexcept {
+  // https://docs.kernel.org/filesystems/proc.html
+
+  try {
+    // Get the status information of a process by reading the file /proc/PID/status.
+    // The link 'self' points to the process reading the file system.
+    ifstream status_file{"/proc/self/status"};
+    if (!status_file.is_open())
+      return false;
+#  if 0
+    // string line;
+    // while (std::getline(status_file, line)) {
+    for (string line; std::getline(status_file, line);) {
+      istringstream ss{line};
+      string field;
+      string value;
+
+      ss >> field >> value;
+
+      // TracerPid - PID of process tracing this process (0 if not, or the tracer is outside of the current pid
+      // namespace).
+      if ((field == "TracerPid:") && (value != "0")) {
+        return true;
+      }
+    }
+#  elif 0
+    std::string line;
+    while (status_file >> line) {
+      if (line == "TracerPid:") {
+        int pid;
+        status_file >> pid;
+        return pid != 0;
+      }
+      std::getline(status_file, line);
+    }
+#  else
+    // This is too slow
+    const regex reg_ex{R"(^TracerPid:\s+(.+)$)"};
+    smatch match;
+    string line;
+    while (std::getline(status_file, line)) {
+      if (regex_match(line, match, reg_ex)) {
+        if (match[1] != "0") [[likely]]
+          return true;
+        return false;
+      }
+    }
+#  endif
+  } catch (...) {
+    return false;
+  }
+
+  return false;
+}
+
+#else
+#  define __LIBCPP_DEBUGGER_NOT_IMPLEMENTED 1
+#endif
+
+} // namespace __impl
+
+_LIBCPP_EXPORTED_FROM_ABI void breakpoint() noexcept {
+#ifdef __LIBCPP_DEBUGGER_NOT_IMPLEMENTED
+  _LIBCPP_ASSERT_INTERNAL(false, "'std::is_debugger_present' is not implemented on this platform.");
+#else
+  __impl::__breakpoint();
+#endif
+}
+
+_LIBCPP_EXPORTED_FROM_ABI void breakpoint_if_debugging() noexcept {
+#ifdef __LIBCPP_DEBUGGER_NOT_IMPLEMENTED
+  _LIBCPP_ASSERT_INTERNAL(false, "'std::breakpoint_if_debugging' is not implemented on this platform.");
+#else
+  if (__impl::__is_debugger_present())
+    __impl::__breakpoint();
+#endif
+}
+
+_LIBCPP_EXPORTED_FROM_ABI bool is_debugger_present() noexcept {
+#ifdef __LIBCPP_DEBUGGER_NOT_IMPLEMENTED
+  _LIBCPP_ASSERT_INTERNAL(false, "'std::is_debugger_present' is not implemented on this platform.");
+  return false;
+#else
+  return __impl::__is_debugger_present();
+#endif
+}
+
+#if 0
+#  include <regex>
+#  include <sstream>
+#  include <string>
+
+static std::string status_file_str = R"(
+Name:	file:// Content
+Umask:	0002
+State:	R (running)
+Tgid:	84655
+Ngid:	0
+Pid:	84655
+PPid:	3287
+TracerPid:	0
+Uid:	1000	1000	1000	1000
+Gid:	1000	1000	1000	1000
+FDSize:	512
+Groups:	4 24 27 30 46 122 134 135 1000 
+NStgid:	84655
+NSpid:	84655
+NSpgid:	1923
+NSsid:	1923
+Kthread:	0
+VmPeak:	 2387520 kB
+VmSize:	 2387520 kB
+VmLck:	       0 kB
+VmPin:	       0 kB
+VmHWM:	   71680 kB
+VmRSS:	   71680 kB
+RssAnon:	   11904 kB
+RssFile:	   58752 kB
+RssShmem:	    1024 kB
+VmData:	   30796 kB
+VmStk:	     148 kB
+VmExe:	     700 kB
+VmLib:	  115052 kB
+VmPTE:	     420 kB
+VmSwap:	       0 kB
+HugetlbPages:	       0 kB
+CoreDumping:	0
+THP_enabled:	1
+untag_mask:	0xffffffffffffffff
+Threads:	21
+SigQ:	0/30009
+SigPnd:	0000000000000000
+ShdPnd:	0000000000000000
+SigBlk:	0000000000000000
+SigIgn:	0000000000011002
+SigCgt:	0000000f408004f8
+CapInh:	0000000000000000
+CapPrm:	0000000000000000
+CapEff:	0000000000000000
+CapBnd:	000001ffffffffff
+CapAmb:	0000000000000000
+NoNewPrivs:	1
+Seccomp:	2
+Seccomp_filters:	3
+Speculation_Store_Bypass:	thread vulnerable
+SpeculationIndirectBranch:	conditional enabled
+Cpus_allowed:	ff
+Cpus_allowed_list:	0-7
+Mems_allowed:	00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001
+Mems_allowed_list:	0
+voluntary_ctxt_switches:	31
+nonvoluntary_ctxt_switches:	18
+)";
+
+static void DebuggerPresent01(benchmark::State& state) {
+  // Code before the loop is not measured
+  std::istringstream status_file{status_file_str};
+  
+  for (auto _ : state) {
+    for (std::string line; std::getline(status_file, line);) {
+      std::istringstream ss{line};
+      std::string field;
+      std::string value;
+      ss >> field >> value;
+      if ((field == "TracerPid:") && (value != "0")) {
+        goto DP01;
+      }
+    }
+  }
+DP01:
+}
+BENCHMARK(DebuggerPresent01);
+
+static void DebuggerPresent02(benchmark::State& state) {
+  // Code before the loop is not measured
+  std::istringstream status_file{status_file_str};
+  
+  for (auto _ : state) {
+    std::string line;
+    while (status_file >> line) {
+      if (line == "TracerPid:") {
+        int pid;
+        status_file >> pid;
+        auto a = pid != 0;
+        benchmark::DoNotOptimize(a);
+        goto DP02;
+      }
+      std::getline(status_file, line);
+    }
+DP02:
+  }
+}
+BENCHMARK(DebuggerPresent02);
+
+static void DebuggerPresent03(benchmark::State& state) {
+  // Code before the loop is not measured
+  std::istringstream status_file{status_file_str};
+  
+  for (auto _ : state) {
+    std::smatch match;
+    std::string line;
+    const std::regex reg_ex{R"(^TracerPid:\s+(.+)$)"};
+    while (std::getline(status_file, line)) {
+      if (std::regex_match(line, match, reg_ex)) {
+        if (match[1] != "0") [[likely]]
+          goto DP03;
+        goto DP03;
+      }
+    }
+DP03:
+  }
+}
+BENCHMARK(DebuggerPresent03);
+
+#endif
+
+_LIBCPP_END_NAMESPACE_STD
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/debugging.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/debugging.version.compile.pass.cpp
new file mode 100644
index 00000000000000..a22b404a634fd2
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/debugging.version.compile.pass.cpp
@@ -0,0 +1,71 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// WARNING: This test was generated by generate_feature_test_macro_components.py
+// and should not be edited manually.
+//
+// clang-format off
+
+// <debugging>
+
+// Test the feature test macros defined by <debugging>
+
+/*  Constant               Value
+    __cpp_lib_debugging    202311L [C++26]
+*/
+
+#include <debugging>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+# ifdef __cpp_lib_debugging
+#   error "__cpp_lib_debugging should not be defined before c++26"
+# endif
+
+#elif TEST_STD_VER == 14
+
+# ifdef __cpp_lib_debugging
+#   error "__cpp_lib_debugging should not be defined before c++26"
+# endif
+
+#elif TEST_STD_VER == 17
+
+# ifdef __cpp_lib_debugging
+#   error "__cpp_lib_debugging should not be defined before c++26"
+# endif
+
+#elif TEST_STD_VER == 20
+
+# ifdef __cpp_lib_debugging
+#   error "__cpp_lib_debugging should not be defined before c++26"
+# endif
+
+#elif TEST_STD_VER == 23
+
+# ifdef __cpp_lib_debugging
+#   error "__cpp_lib_debugging should not be defined before c++26"
+# endif
+
+#elif TEST_STD_VER > 23
+
+# if !defined(_LIBCPP_VERSION)
+#   ifndef __cpp_lib_debugging
+#     error "__cpp_lib_debugging should be defined in c++26"
+#   endif
+#   if __cpp_lib_debugging != 202311L
+#     error "__cpp_lib_debugging should have the value 202311L in c++26"
+#   endif
+# else // _LIBCPP_VERSION
+#   ifdef __cpp_lib_debugging
+#     error "__cpp_lib_debugging should not be defined because it is unimplemented in libc++!"
+#   endif
+# endif
+
+#endif // TEST_STD_VER > 23
+
diff --git a/libcxx/test/std/utilities/debugging/breakpoint.pass.cpp b/libcxx/test/std/utilities/debugging/breakpoint.pass.cpp
new file mode 100644
index 00000000000000..7389600fa191ee
--- /dev/null
+++ b/libcxx/test/std/utilities/debugging/breakpoint.pass.cpp
@@ -0,0 +1,24 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// UNSUPPORTED: c++03, c++11, c++14, c++17, c++20, c++23
+
+// <debugging>
+
+// void breakpoint() noexcept;
+
+#include <cassert>
+#include <debugging>
+
+void test() { static_assert(noexcept(breakpoint())); }
+
+int main(int, char**) {
+  test();
+
+  return 0;
+}
diff --git a/libcxx/test/std/utilities/debugging/breakpoint_if_debugging.pass.cpp b/libcxx/test/std/utilities/debugging/breakpoint_if_debugging.pass.cpp
new file mode 100644
index 00000000000000..453ba9155b2236
--- /dev/null
+++ b/libcxx/test/std/utilities/debugging/breakpoint_if_debugging.pass.cpp
@@ -0,0 +1,24 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// UNSUPPORTED: c++03, c++11, c++14, c++17, c++20, c++23
+
+// <debugging>
+
+// void breakpoint_if_debugging() noexcept;
+
+#include <cassert>
+#include <debugging>
+
+void test() { static_assert(noexcept(breakpoint_if_debugging())); }
+
+int main(int, char**) {
+  test();
+
+  return 0;
+}
diff --git a/libcxx/test/std/utilities/debugging/is_debugger_present.pass.cpp b/libcxx/test/std/utilities/debugging/is_debugger_present.pass.cpp
new file mode 100644
index 00000000000000..88b271de9ce79d
--- /dev/null
+++ b/libcxx/test/std/utilities/debugging/is_debugger_present.pass.cpp
@@ -0,0 +1,24 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// UNSUPPORTED: c++03, c++11, c++14, c++17, c++20, c++23
+
+// <debugging>
+
+// bool is_debugger_present() noexcept;
+
+#include <cassert>
+#include <debugging>
+
+void test() { static_assert(noexcept(is_debugger_present())); }
+
+int main(int, char**) {
+  test();
+
+  return 0;
+}
diff --git a/libcxx/utils/generate_feature_test_macro_components.py b/libcxx/utils/generate_feature_test_macro_components.py
index c55f5c7d19004a..02f30000cc7412 100755
--- a/libcxx/utils/generate_feature_test_macro_components.py
+++ b/libcxx/utils/generate_feature_test_macro_components.py
@@ -401,7 +401,7 @@ def add_version_header(tc):
             "name": "__cpp_lib_debugging",
             "values": {"c++26": 202311},  # P2546R5 Debugging Support
             "headers": ["debugging"],
-            "unimplemented": True,
+            "unimplemented": True, # Implemented on Linux, macOS, Windows
         },
         {
             "name": "__cpp_lib_destroying_delete",

>From fb4846eeec26495b825bd54c8f6bb236d792c81d Mon Sep 17 00:00:00 2001
From: Zingam <zingam at outlook.com>
Date: Tue, 23 Jan 2024 10:19:32 +0200
Subject: [PATCH 02/40] Cleanup

---
 libcxx/src/debugging.cpp | 249 ++++++---------------------------------
 1 file changed, 38 insertions(+), 211 deletions(-)

diff --git a/libcxx/src/debugging.cpp b/libcxx/src/debugging.cpp
index 738addc5e0c9bb..75fbb186e386fd 100644
--- a/libcxx/src/debugging.cpp
+++ b/libcxx/src/debugging.cpp
@@ -13,45 +13,30 @@
 #  define WIN32_LEAN_AND_MEAN
 #  define NOMINMAX
 #  include <windows.h>
-#elif defined(__APPLE__)
-#  include <stdbool.h>
+#elif defined(__APPLE__) || defined(__FreeBSD__)
+#  include <csignal>
 #  include <sys/sysctl.h>
 #  include <sys/types.h>
 #  include <unistd.h>
 #elif defined(__linux__)
 #  include <csignal>
 #  include <fstream>
-#  include <regex>
 #  include <sstream>
 #  include <string>
-// Linux
 #endif
 
 _LIBCPP_BEGIN_NAMESPACE_STD
 
 namespace __impl {
 
-// Linux
-//   https://docs.kernel.org/filesystems/proc.html
-//   https://stackoverflow.com/a/49079078
-//   https://linuxsecurity.com/features/anti-debugging-for-noobs-part-1
-//   https://linuxsecurity.com/features/hacker-s-corner-complete-guide-to-anti-debugging-in-linux-part-2
-//   https://linuxsecurity.com/features/hacker-s-corner-complete-guide-to-anti-debugging-in-linux-part-3
-
-// macOS
-//   https://developer.apple.com/library/archive/qa/qa1361/_index.html
-//   https://ladydebug.com/blog/2020/09/02/isdebuggerpresent-for-mac-osx/
-//   https://github.com/freebsd/freebsd-src/blob/7f3184ba797452703904d33377dada5f0f8eae96/sys/sys/proc.h#L822
+// breakpoint()
 
 #if defined(_LIBCPP_WIN32API)
 
 void __breakpoint() noexcept { void DebugBreak(); }
 
-bool __is_debugger_present() noexcept { return IsDebuggerPresent(); }
+#elif defined(__APPLE__) || defined(__FreeBSD__) || defined(__linux__)
 
-#elif defined(__APPLE__) || defined(__FreeBSD__)
-
-// TODO
 void __breakpoint() {
 #  ifdef _LIBCPP_HARDENING_MODE_DEBUG
 #    if __has_builtin(__builtin_debugtrap)
@@ -62,9 +47,28 @@ void __breakpoint() {
 #  endif
 }
 
+#else
+
+void __breakpoint() noexcept {
+  _LIBCPP_ASSERT_INTERNAL(false, "'std::breakpoint()' is not implemented on this platform.");
+  return false;
+}
+
+#endif
+
+// is_debugger_present()
+
+#if defined(_LIBC_WIN32API)
+
+bool __is_debugger_present() noexcept { return IsDebuggerPresent(); }
+
+#elif defined(__APPLE__) || defined(__FreeBSD__)
+
+// TODO
+
 bool __is_debugger_present() noexcept {
   // Technical Q&A QA1361: Detecting the Debugger
-  // https://github.com/freebsd/freebsd-src/blob/7f3184ba797452703904d33377dada5f0f8eae96/sys/sys/proc.h#L822
+  // https://developer.apple.com/library/archive/qa/qa1361/_index.html
 
   int junk;
   int mib[4];
@@ -91,20 +95,13 @@ bool __is_debugger_present() noexcept {
   _LIBCPP_ASSERT_INTERNAL(junk == 0, "'sysctl' runtime error");
 
   // We're being debugged if the P_TRACED flag is set.
+  // https://github.com/freebsd/freebsd-src/blob/7f3184ba797452703904d33377dada5f0f8eae96/sys/sys/proc.h#L822
 
   return ((info.kp_proc.p_flag & P_TRACED) != 0);
 }
 
 #elif defined(__linux__)
 
-void __breakpoint() noexcept {
-#  if defined SIGTRAP
-  raise(SIGTRAP);
-#  else
-  raise(SIGABRT);
-#  endif
-}
-
 bool __is_debugger_present() noexcept {
   // https://docs.kernel.org/filesystems/proc.html
 
@@ -114,45 +111,16 @@ bool __is_debugger_present() noexcept {
     ifstream status_file{"/proc/self/status"};
     if (!status_file.is_open())
       return false;
-#  if 0
-    // string line;
-    // while (std::getline(status_file, line)) {
-    for (string line; std::getline(status_file, line);) {
-      istringstream ss{line};
-      string field;
-      string value;
-
-      ss >> field >> value;
-
-      // TracerPid - PID of process tracing this process (0 if not, or the tracer is outside of the current pid
-      // namespace).
-      if ((field == "TracerPid:") && (value != "0")) {
-        return true;
-      }
-    }
-#  elif 0
-    std::string line;
-    while (status_file >> line) {
-      if (line == "TracerPid:") {
+
+    std::string token;
+    while (status_file >> token) {
+      if (token == "TracerPid:") {
         int pid;
         status_file >> pid;
         return pid != 0;
       }
-      std::getline(status_file, line);
-    }
-#  else
-    // This is too slow
-    const regex reg_ex{R"(^TracerPid:\s+(.+)$)"};
-    smatch match;
-    string line;
-    while (std::getline(status_file, line)) {
-      if (regex_match(line, match, reg_ex)) {
-        if (match[1] != "0") [[likely]]
-          return true;
-        return false;
-      }
+      std::getline(status_file, token);
     }
-#  endif
   } catch (...) {
     return false;
   }
@@ -161,164 +129,23 @@ bool __is_debugger_present() noexcept {
 }
 
 #else
-#  define __LIBCPP_DEBUGGER_NOT_IMPLEMENTED 1
+
+bool __is_debugger_present() noexcept {
+  _LIBCPP_ASSERT_INTERNAL(false, "'std::is_debugger_present()' is not implemented on this platform.");
+  return false;
+}
+
 #endif
 
 } // namespace __impl
 
-_LIBCPP_EXPORTED_FROM_ABI void breakpoint() noexcept {
-#ifdef __LIBCPP_DEBUGGER_NOT_IMPLEMENTED
-  _LIBCPP_ASSERT_INTERNAL(false, "'std::is_debugger_present' is not implemented on this platform.");
-#else
-  __impl::__breakpoint();
-#endif
-}
+_LIBCPP_EXPORTED_FROM_ABI void breakpoint() noexcept { __impl::__breakpoint(); }
 
 _LIBCPP_EXPORTED_FROM_ABI void breakpoint_if_debugging() noexcept {
-#ifdef __LIBCPP_DEBUGGER_NOT_IMPLEMENTED
-  _LIBCPP_ASSERT_INTERNAL(false, "'std::breakpoint_if_debugging' is not implemented on this platform.");
-#else
   if (__impl::__is_debugger_present())
     __impl::__breakpoint();
-#endif
 }
 
-_LIBCPP_EXPORTED_FROM_ABI bool is_debugger_present() noexcept {
-#ifdef __LIBCPP_DEBUGGER_NOT_IMPLEMENTED
-  _LIBCPP_ASSERT_INTERNAL(false, "'std::is_debugger_present' is not implemented on this platform.");
-  return false;
-#else
-  return __impl::__is_debugger_present();
-#endif
-}
-
-#if 0
-#  include <regex>
-#  include <sstream>
-#  include <string>
-
-static std::string status_file_str = R"(
-Name:	file:// Content
-Umask:	0002
-State:	R (running)
-Tgid:	84655
-Ngid:	0
-Pid:	84655
-PPid:	3287
-TracerPid:	0
-Uid:	1000	1000	1000	1000
-Gid:	1000	1000	1000	1000
-FDSize:	512
-Groups:	4 24 27 30 46 122 134 135 1000 
-NStgid:	84655
-NSpid:	84655
-NSpgid:	1923
-NSsid:	1923
-Kthread:	0
-VmPeak:	 2387520 kB
-VmSize:	 2387520 kB
-VmLck:	       0 kB
-VmPin:	       0 kB
-VmHWM:	   71680 kB
-VmRSS:	   71680 kB
-RssAnon:	   11904 kB
-RssFile:	   58752 kB
-RssShmem:	    1024 kB
-VmData:	   30796 kB
-VmStk:	     148 kB
-VmExe:	     700 kB
-VmLib:	  115052 kB
-VmPTE:	     420 kB
-VmSwap:	       0 kB
-HugetlbPages:	       0 kB
-CoreDumping:	0
-THP_enabled:	1
-untag_mask:	0xffffffffffffffff
-Threads:	21
-SigQ:	0/30009
-SigPnd:	0000000000000000
-ShdPnd:	0000000000000000
-SigBlk:	0000000000000000
-SigIgn:	0000000000011002
-SigCgt:	0000000f408004f8
-CapInh:	0000000000000000
-CapPrm:	0000000000000000
-CapEff:	0000000000000000
-CapBnd:	000001ffffffffff
-CapAmb:	0000000000000000
-NoNewPrivs:	1
-Seccomp:	2
-Seccomp_filters:	3
-Speculation_Store_Bypass:	thread vulnerable
-SpeculationIndirectBranch:	conditional enabled
-Cpus_allowed:	ff
-Cpus_allowed_list:	0-7
-Mems_allowed:	00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001
-Mems_allowed_list:	0
-voluntary_ctxt_switches:	31
-nonvoluntary_ctxt_switches:	18
-)";
-
-static void DebuggerPresent01(benchmark::State& state) {
-  // Code before the loop is not measured
-  std::istringstream status_file{status_file_str};
-  
-  for (auto _ : state) {
-    for (std::string line; std::getline(status_file, line);) {
-      std::istringstream ss{line};
-      std::string field;
-      std::string value;
-      ss >> field >> value;
-      if ((field == "TracerPid:") && (value != "0")) {
-        goto DP01;
-      }
-    }
-  }
-DP01:
-}
-BENCHMARK(DebuggerPresent01);
-
-static void DebuggerPresent02(benchmark::State& state) {
-  // Code before the loop is not measured
-  std::istringstream status_file{status_file_str};
-  
-  for (auto _ : state) {
-    std::string line;
-    while (status_file >> line) {
-      if (line == "TracerPid:") {
-        int pid;
-        status_file >> pid;
-        auto a = pid != 0;
-        benchmark::DoNotOptimize(a);
-        goto DP02;
-      }
-      std::getline(status_file, line);
-    }
-DP02:
-  }
-}
-BENCHMARK(DebuggerPresent02);
-
-static void DebuggerPresent03(benchmark::State& state) {
-  // Code before the loop is not measured
-  std::istringstream status_file{status_file_str};
-  
-  for (auto _ : state) {
-    std::smatch match;
-    std::string line;
-    const std::regex reg_ex{R"(^TracerPid:\s+(.+)$)"};
-    while (std::getline(status_file, line)) {
-      if (std::regex_match(line, match, reg_ex)) {
-        if (match[1] != "0") [[likely]]
-          goto DP03;
-        goto DP03;
-      }
-    }
-DP03:
-  }
-}
-BENCHMARK(DebuggerPresent03);
-
-#endif
+_LIBCPP_EXPORTED_FROM_ABI bool is_debugger_present() noexcept { return __impl::__is_debugger_present(); }
 
 _LIBCPP_END_NAMESPACE_STD

>From 016fccd8914d5fdc4af38db25eb0cd7a2c2cb9bd Mon Sep 17 00:00:00 2001
From: Zingam <zingam at outlook.com>
Date: Tue, 23 Jan 2024 11:25:28 +0200
Subject: [PATCH 03/40] Implementation: Apple, FreeBSD, Linux, Windows

---
 libcxx/src/debugging.cpp | 45 +++++++++++++++++-----------------------
 1 file changed, 19 insertions(+), 26 deletions(-)

diff --git a/libcxx/src/debugging.cpp b/libcxx/src/debugging.cpp
index 75fbb186e386fd..eee0234a21c682 100644
--- a/libcxx/src/debugging.cpp
+++ b/libcxx/src/debugging.cpp
@@ -27,8 +27,6 @@
 
 _LIBCPP_BEGIN_NAMESPACE_STD
 
-namespace __impl {
-
 // breakpoint()
 
 #if defined(_LIBCPP_WIN32API)
@@ -38,23 +36,21 @@ void __breakpoint() noexcept { void DebugBreak(); }
 #elif defined(__APPLE__) || defined(__FreeBSD__) || defined(__linux__)
 
 void __breakpoint() {
-#  ifdef _LIBCPP_HARDENING_MODE_DEBUG
-#    if __has_builtin(__builtin_debugtrap)
+#  if __has_builtin(__builtin_debugtrap)
   __builtin_debugtrap();
-#    else
+#  else
   raise(SIGTRAP);
-#    endif
 #  endif
 }
 
 #else
 
 void __breakpoint() noexcept {
-  _LIBCPP_ASSERT_INTERNAL(false, "'std::breakpoint()' is not implemented on this platform.");
+  static_assert(false, "'std::breakpoint()' is not implemented on this platform.");
   return false;
 }
 
-#endif
+#endif // defined(_LIBCPP_WIN32API)
 
 // is_debugger_present()
 
@@ -64,8 +60,6 @@ bool __is_debugger_present() noexcept { return IsDebuggerPresent(); }
 
 #elif defined(__APPLE__) || defined(__FreeBSD__)
 
-// TODO
-
 bool __is_debugger_present() noexcept {
   // Technical Q&A QA1361: Detecting the Debugger
   // https://developer.apple.com/library/archive/qa/qa1361/_index.html
@@ -109,19 +103,20 @@ bool __is_debugger_present() noexcept {
     // Get the status information of a process by reading the file /proc/PID/status.
     // The link 'self' points to the process reading the file system.
     ifstream status_file{"/proc/self/status"};
-    if (!status_file.is_open())
+    if (!status_file.is_open()) {
+      _LIBCPP_ASSERT_INTERNAL(false, "Could not open '/proc/self/status' for reading.");
       return false;
+    }
 
-    std::string token;
-    while (status_file >> token) {
-      if (token == "TracerPid:") {
-        int pid;
-        status_file >> pid;
-        return pid != 0;
+    const string tracerPid{"TracerPid"};
+    for (string line; getline(status_file, line);) {
+      if (line.starts_with(tracerPid)) {
+        string value = line.substr(tracerPid.size() + 1);
+        return stoll(value) != 0;
       }
-      std::getline(status_file, token);
     }
   } catch (...) {
+    _LIBCPP_ASSERT_INTERNAL(false, "Failed to read '/proc/self/status'.");
     return false;
   }
 
@@ -131,21 +126,19 @@ bool __is_debugger_present() noexcept {
 #else
 
 bool __is_debugger_present() noexcept {
-  _LIBCPP_ASSERT_INTERNAL(false, "'std::is_debugger_present()' is not implemented on this platform.");
+  static_assert(false, "'std::is_debugger_present()' is not implemented on this platform.");
   return false;
 }
 
-#endif
-
-} // namespace __impl
+#endif // defined(_LIBCPP_WIN32API)
 
-_LIBCPP_EXPORTED_FROM_ABI void breakpoint() noexcept { __impl::__breakpoint(); }
+_LIBCPP_EXPORTED_FROM_ABI void breakpoint() noexcept { __breakpoint(); }
 
 _LIBCPP_EXPORTED_FROM_ABI void breakpoint_if_debugging() noexcept {
-  if (__impl::__is_debugger_present())
-    __impl::__breakpoint();
+  if (__is_debugger_present())
+    __breakpoint();
 }
 
-_LIBCPP_EXPORTED_FROM_ABI bool is_debugger_present() noexcept { return __impl::__is_debugger_present(); }
+_LIBCPP_EXPORTED_FROM_ABI bool is_debugger_present() noexcept { return __is_debugger_present(); }
 
 _LIBCPP_END_NAMESPACE_STD

>From 3a3c73f7d438da99c788e1cd9807be8072c60ab4 Mon Sep 17 00:00:00 2001
From: Zingam <zingam at outlook.com>
Date: Tue, 23 Jan 2024 14:40:31 +0200
Subject: [PATCH 04/40] Implementation: Linux

... the new implementation is 3-4x faster than the previous one.
---
 libcxx/src/debugging.cpp | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/libcxx/src/debugging.cpp b/libcxx/src/debugging.cpp
index eee0234a21c682..615139f51f154c 100644
--- a/libcxx/src/debugging.cpp
+++ b/libcxx/src/debugging.cpp
@@ -21,7 +21,6 @@
 #elif defined(__linux__)
 #  include <csignal>
 #  include <fstream>
-#  include <sstream>
 #  include <string>
 #endif
 
@@ -108,15 +107,17 @@ bool __is_debugger_present() noexcept {
       return false;
     }
 
-    const string tracerPid{"TracerPid"};
-    for (string line; getline(status_file, line);) {
-      if (line.starts_with(tracerPid)) {
-        string value = line.substr(tracerPid.size() + 1);
-        return stoll(value) != 0;
+    std::string token;
+    while (status_file >> token) {
+      if (token == "TracerPid:") {
+        int pid;
+        status_file >> pid;
+        return pid != 0;
       }
+      std::getline(status_file, token);
     }
   } catch (...) {
-    _LIBCPP_ASSERT_INTERNAL(false, "Failed to read '/proc/self/status'.");
+    _LIBCPP_ASSERT_INTERNAL(false, "Failed to parse '/proc/self/status'.");
     return false;
   }
 

>From 68e3403e7908512e2d3bc3e6800cfe5e9c92c6fb Mon Sep 17 00:00:00 2001
From: Zingam <zingam at outlook.com>
Date: Tue, 23 Jan 2024 15:00:26 +0200
Subject: [PATCH 05/40] Implementation: Apple

---
 libcxx/src/debugging.cpp | 36 +++++++++++++++++-------------------
 1 file changed, 17 insertions(+), 19 deletions(-)

diff --git a/libcxx/src/debugging.cpp b/libcxx/src/debugging.cpp
index 615139f51f154c..2b19761513fb6c 100644
--- a/libcxx/src/debugging.cpp
+++ b/libcxx/src/debugging.cpp
@@ -14,6 +14,7 @@
 #  define NOMINMAX
 #  include <windows.h>
 #elif defined(__APPLE__) || defined(__FreeBSD__)
+#  include <array>
 #  include <csignal>
 #  include <sys/sysctl.h>
 #  include <sys/types.h>
@@ -59,35 +60,31 @@ bool __is_debugger_present() noexcept { return IsDebuggerPresent(); }
 
 #elif defined(__APPLE__) || defined(__FreeBSD__)
 
+// Returns true if the current process is being debugged (either
+// running under the debugger or has a debugger attached post facto).
 bool __is_debugger_present() noexcept {
   // Technical Q&A QA1361: Detecting the Debugger
   // https://developer.apple.com/library/archive/qa/qa1361/_index.html
 
-  int junk;
-  int mib[4];
-  struct kinfo_proc info;
-  size_t size;
+  // Initialize mib, which tells 'sysctl' to fetch the information about the current process.
 
-  // Initialize the flags so that, if sysctl fails for some bizarre
-  // reason, we get a predictable result.
-
-  info.kp_proc.p_flag = 0;
+  array mib{CTL_KERN, KERN_PROC, KERN_PROC_PID, ::getpid()};
 
-  // Initialize mib, which tells sysctl the info we want, in this case
-  // we're looking for information about a specific process ID.
+  // Initialize the flags so that, if 'sysctl' fails for some bizarre
+  // reason, we get a predictable result.
 
-  mib[0] = CTL_KERN;
-  mib[1] = KERN_PROC;
-  mib[2] = KERN_PROC_PID;
-  mib[3] = getpid();
+  struct kinfo_proc info {};
 
   // Call sysctl.
+  // https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man3/sysctl.3.html
 
-  size = sizeof(info);
-  junk = sysctl(mib, sizeof(mib) / sizeof(*mib), &info, &size, NULL, 0);
-  _LIBCPP_ASSERT_INTERNAL(junk == 0, "'sysctl' runtime error");
+  size_t info_size = sizeof(info);
+  if (::sysctl(mib.data(), mib.size(), &info, &info_size, nullptr, 0) != 0) {
+    _LIBCPP_ASSERT_INTERNAL(false, "'sysctl' runtime error");
+    return false;
+  }
 
-  // We're being debugged if the P_TRACED flag is set.
+  // If the process is being debugged if the 'P_TRACED' flag is set.
   // https://github.com/freebsd/freebsd-src/blob/7f3184ba797452703904d33377dada5f0f8eae96/sys/sys/proc.h#L822
 
   return ((info.kp_proc.p_flag & P_TRACED) != 0);
@@ -109,12 +106,13 @@ bool __is_debugger_present() noexcept {
 
     std::string token;
     while (status_file >> token) {
+      // If the process is being debugged "TracerPid"'s value is non-zero.
       if (token == "TracerPid:") {
         int pid;
         status_file >> pid;
         return pid != 0;
       }
-      std::getline(status_file, token);
+      getline(status_file, token);
     }
   } catch (...) {
     _LIBCPP_ASSERT_INTERNAL(false, "Failed to parse '/proc/self/status'.");

>From e429500aab0e7c53117b1a8bf67aff00c6b7f4f5 Mon Sep 17 00:00:00 2001
From: Zingam <zingam at outlook.com>
Date: Wed, 24 Jan 2024 11:13:38 +0200
Subject: [PATCH 06/40] Updated Feature Test Macro (FTM)

---
 libcxx/docs/FeatureTestMacroTable.rst         |  2 +-
 libcxx/include/__config                       |  2 +-
 libcxx/include/debugging                      |  4 +--
 libcxx/include/version                        |  4 ++-
 libcxx/modules/std/debugging.inc              |  2 +-
 libcxx/src/debugging.cpp                      | 35 ++++++++-----------
 .../debugging.version.compile.pass.cpp        |  6 ++--
 .../version.version.compile.pass.cpp          |  6 ++--
 .../generate_feature_test_macro_components.py |  3 +-
 9 files changed, 31 insertions(+), 33 deletions(-)

diff --git a/libcxx/docs/FeatureTestMacroTable.rst b/libcxx/docs/FeatureTestMacroTable.rst
index b213f430aa5922..5ff51d0c70231f 100644
--- a/libcxx/docs/FeatureTestMacroTable.rst
+++ b/libcxx/docs/FeatureTestMacroTable.rst
@@ -402,7 +402,7 @@ Status
     --------------------------------------------------- -----------------
     ``__cpp_lib_copyable_function``                     *unimplemented*
     --------------------------------------------------- -----------------
-    ``__cpp_lib_debugging``                             *unimplemented*
+    ``__cpp_lib_debugging``                             ``202311L``
     --------------------------------------------------- -----------------
     ``__cpp_lib_freestanding_algorithm``                *unimplemented*
     --------------------------------------------------- -----------------
diff --git a/libcxx/include/__config b/libcxx/include/__config
index cf7ce449be378d..d0e36b1bc1d358 100644
--- a/libcxx/include/__config
+++ b/libcxx/include/__config
@@ -1516,7 +1516,7 @@ __sanitizer_verify_double_ended_contiguous_container(const void*, const void*, c
 #    define _LIBCPP_HAS_EXPLICIT_THIS_PARAMETER
 #  endif
 
-#  if defined(__APPLE__) || defined(__linux__) || defined (_WIN32)
+#  if (defined(__APPLE__) || defined(__FreeBSD__) || defined(__linux__) || defined (_WIN32)) && !defined(__PICOLIBC__)
 #    define _LIBCPP_HAS_DEBUGGING
 #  endif
 
diff --git a/libcxx/include/debugging b/libcxx/include/debugging
index 07d6b45db30175..8bf608b0ddf00e 100644
--- a/libcxx/include/debugging
+++ b/libcxx/include/debugging
@@ -29,7 +29,7 @@ namespace std {
 
 _LIBCPP_BEGIN_NAMESPACE_STD
 
-#if _LIBCPP_STD_VER >= 26
+#if _LIBCPP_STD_VER >= 26 && defined(_LIBCPP_HAS_DEBUGGING) && !defined(_LIBCPP_HAS_NO_INCOMPLETE_DEBUGGING)
 
 _LIBCPP_EXPORTED_FROM_ABI void breakpoint() noexcept;
 
@@ -37,7 +37,7 @@ _LIBCPP_EXPORTED_FROM_ABI void breakpoint_if_debugging() noexcept;
 
 _LIBCPP_EXPORTED_FROM_ABI bool is_debugger_present() noexcept;
 
-#endif // _LIBCPP_STD_VER >= 26
+#endif
 
 _LIBCPP_END_NAMESPACE_STD
 
diff --git a/libcxx/include/version b/libcxx/include/version
index 3bd296e34aa4e3..8310209e9c9212 100644
--- a/libcxx/include/version
+++ b/libcxx/include/version
@@ -492,7 +492,9 @@ __cpp_lib_within_lifetime                               202306L <type_traits>
 # define __cpp_lib_bind_front                           202306L
 # define __cpp_lib_bitset                               202306L
 // # define __cpp_lib_copyable_function                    202306L
-// # define __cpp_lib_debugging                            202311L
+# if _LIBCPP_STD_VER >= 26 && defined(_LIBCPP_HAS_DEBUGGING) && !defined(_LIBCPP_HAS_NO_INCOMPLETE_DEBUGGING)
+#   define __cpp_lib_debugging                          202311L
+# endif
 // # define __cpp_lib_freestanding_algorithm               202311L
 // # define __cpp_lib_freestanding_array                   202311L
 // # define __cpp_lib_freestanding_cstring                 202306L
diff --git a/libcxx/modules/std/debugging.inc b/libcxx/modules/std/debugging.inc
index a65890d8e8167a..000b2ae7fe633a 100644
--- a/libcxx/modules/std/debugging.inc
+++ b/libcxx/modules/std/debugging.inc
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 
 export namespace std {
-#if _LIBCPP_STD_VER >= 26
+#if _LIBCPP_STD_VER >= 26 && defined(_LIBCPP_HAS_DEBUGGING) && !defined(_LIBCPP_HAS_NO_INCOMPLETE_DEBUGGING)
   // [debugging.utility], utility
   using stgd::breakpoint;
   using stgd::breakpoint_if_debugging;
diff --git a/libcxx/src/debugging.cpp b/libcxx/src/debugging.cpp
index 2b19761513fb6c..fccd6f8c397502 100644
--- a/libcxx/src/debugging.cpp
+++ b/libcxx/src/debugging.cpp
@@ -95,28 +95,23 @@ bool __is_debugger_present() noexcept {
 bool __is_debugger_present() noexcept {
   // https://docs.kernel.org/filesystems/proc.html
 
-  try {
-    // Get the status information of a process by reading the file /proc/PID/status.
-    // The link 'self' points to the process reading the file system.
-    ifstream status_file{"/proc/self/status"};
-    if (!status_file.is_open()) {
-      _LIBCPP_ASSERT_INTERNAL(false, "Could not open '/proc/self/status' for reading.");
-      return false;
-    }
+  // Get the status information of a process by reading the file /proc/PID/status.
+  // The link 'self' points to the process reading the file system.
+  ifstream status_file{"/proc/self/status"};
+  if (!status_file.is_open()) {
+    _LIBCPP_ASSERT_INTERNAL(false, "Could not open '/proc/self/status' for reading.");
+    return false;
+  }
 
-    std::string token;
-    while (status_file >> token) {
-      // If the process is being debugged "TracerPid"'s value is non-zero.
-      if (token == "TracerPid:") {
-        int pid;
-        status_file >> pid;
-        return pid != 0;
-      }
-      getline(status_file, token);
+  std::string token;
+  while (status_file >> token) {
+    // If the process is being debugged "TracerPid"'s value is non-zero.
+    if (token == "TracerPid:") {
+      int pid;
+      status_file >> pid;
+      return pid != 0;
     }
-  } catch (...) {
-    _LIBCPP_ASSERT_INTERNAL(false, "Failed to parse '/proc/self/status'.");
-    return false;
+    getline(status_file, token);
   }
 
   return false;
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/debugging.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/debugging.version.compile.pass.cpp
index a22b404a634fd2..9eb39a26a87116 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/debugging.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/debugging.version.compile.pass.cpp
@@ -54,16 +54,16 @@
 
 #elif TEST_STD_VER > 23
 
-# if !defined(_LIBCPP_VERSION)
+# if TEST_STD_VER >= 26 && defined(_LIBCPP_HAS_DEBUGGING) && !defined(_LIBCPP_HAS_NO_INCOMPLETE_DEBUGGING)
 #   ifndef __cpp_lib_debugging
 #     error "__cpp_lib_debugging should be defined in c++26"
 #   endif
 #   if __cpp_lib_debugging != 202311L
 #     error "__cpp_lib_debugging should have the value 202311L in c++26"
 #   endif
-# else // _LIBCPP_VERSION
+# else
 #   ifdef __cpp_lib_debugging
-#     error "__cpp_lib_debugging should not be defined because it is unimplemented in libc++!"
+#     error "__cpp_lib_debugging should not be defined when the requirement 'TEST_STD_VER >= 26 && defined(_LIBCPP_HAS_DEBUGGING) && !defined(_LIBCPP_HAS_NO_INCOMPLETE_DEBUGGING)' is not met!"
 #   endif
 # endif
 
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/version.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/version.version.compile.pass.cpp
index 5501587915ffa0..424aabfc57beb3 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/version.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/version.version.compile.pass.cpp
@@ -6333,16 +6333,16 @@
 #   error "__cpp_lib_coroutine should have the value 201902L in c++26"
 # endif
 
-# if !defined(_LIBCPP_VERSION)
+# if TEST_STD_VER >= 26 && defined(_LIBCPP_HAS_DEBUGGING) && !defined(_LIBCPP_HAS_NO_INCOMPLETE_DEBUGGING)
 #   ifndef __cpp_lib_debugging
 #     error "__cpp_lib_debugging should be defined in c++26"
 #   endif
 #   if __cpp_lib_debugging != 202311L
 #     error "__cpp_lib_debugging should have the value 202311L in c++26"
 #   endif
-# else // _LIBCPP_VERSION
+# else
 #   ifdef __cpp_lib_debugging
-#     error "__cpp_lib_debugging should not be defined because it is unimplemented in libc++!"
+#     error "__cpp_lib_debugging should not be defined when the requirement 'TEST_STD_VER >= 26 && defined(_LIBCPP_HAS_DEBUGGING) && !defined(_LIBCPP_HAS_NO_INCOMPLETE_DEBUGGING)' is not met!"
 #   endif
 # endif
 
diff --git a/libcxx/utils/generate_feature_test_macro_components.py b/libcxx/utils/generate_feature_test_macro_components.py
index 02f30000cc7412..12111d3ff58807 100755
--- a/libcxx/utils/generate_feature_test_macro_components.py
+++ b/libcxx/utils/generate_feature_test_macro_components.py
@@ -401,7 +401,8 @@ def add_version_header(tc):
             "name": "__cpp_lib_debugging",
             "values": {"c++26": 202311},  # P2546R5 Debugging Support
             "headers": ["debugging"],
-            "unimplemented": True, # Implemented on Linux, macOS, Windows
+            "test_suite_guard": "TEST_STD_VER >= 26 && defined(_LIBCPP_HAS_DEBUGGING) && !defined(_LIBCPP_HAS_NO_INCOMPLETE_DEBUGGING)",
+            "libcxx_guard": "_LIBCPP_STD_VER >= 26 && defined(_LIBCPP_HAS_DEBUGGING) && !defined(_LIBCPP_HAS_NO_INCOMPLETE_DEBUGGING)",
         },
         {
             "name": "__cpp_lib_destroying_delete",

>From 04c94959c22a47aac5747b88eabf8d591a5ced8d Mon Sep 17 00:00:00 2001
From: Zingam <zingam at outlook.com>
Date: Wed, 24 Jan 2024 11:17:47 +0200
Subject: [PATCH 07/40] Simplified guards and fixed tests

---
 libcxx/include/__config                       |  3 +-
 libcxx/include/debugging                      |  2 +-
 libcxx/include/version                        |  2 +-
 libcxx/modules/std/debugging.inc              |  2 +-
 .../debugging.version.compile.pass.cpp        |  4 +-
 .../version.version.compile.pass.cpp          |  4 +-
 .../utilities/debugging/breakpoint.pass.cpp   | 45 ++++++++++++++++++-
 .../breakpoint_if_debugging.pass.cpp          | 12 ++++-
 .../debugging/is_debugger_present.pass.cpp    |  9 +++-
 ...debugger_present.with_debugger_lldb.sh.cpp | 40 +++++++++++++++++
 .../generate_feature_test_macro_components.py |  4 +-
 libcxx/utils/libcxx/test/features.py          | 42 +++++++++++++++++
 12 files changed, 156 insertions(+), 13 deletions(-)
 create mode 100644 libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_lldb.sh.cpp

diff --git a/libcxx/include/__config b/libcxx/include/__config
index d0e36b1bc1d358..64901114f77112 100644
--- a/libcxx/include/__config
+++ b/libcxx/include/__config
@@ -1516,7 +1516,8 @@ __sanitizer_verify_double_ended_contiguous_container(const void*, const void*, c
 #    define _LIBCPP_HAS_EXPLICIT_THIS_PARAMETER
 #  endif
 
-#  if (defined(__APPLE__) || defined(__FreeBSD__) || defined(__linux__) || defined (_WIN32)) && !defined(__PICOLIBC__)
+#  if (defined(__APPLE__) || defined(__FreeBSD__) || defined(__linux__) || defined(_WIN32)) &&                         \
+      !defined(__PICOLIBC__) && !defined(_LIBCPP_HAS_NO_INCOMPLETE_DEBUGGING)
 #    define _LIBCPP_HAS_DEBUGGING
 #  endif
 
diff --git a/libcxx/include/debugging b/libcxx/include/debugging
index 8bf608b0ddf00e..686ce7c861fa7e 100644
--- a/libcxx/include/debugging
+++ b/libcxx/include/debugging
@@ -29,7 +29,7 @@ namespace std {
 
 _LIBCPP_BEGIN_NAMESPACE_STD
 
-#if _LIBCPP_STD_VER >= 26 && defined(_LIBCPP_HAS_DEBUGGING) && !defined(_LIBCPP_HAS_NO_INCOMPLETE_DEBUGGING)
+#if _LIBCPP_STD_VER >= 26 && defined(_LIBCPP_HAS_DEBUGGING)
 
 _LIBCPP_EXPORTED_FROM_ABI void breakpoint() noexcept;
 
diff --git a/libcxx/include/version b/libcxx/include/version
index 8310209e9c9212..ff138f5b34dd21 100644
--- a/libcxx/include/version
+++ b/libcxx/include/version
@@ -492,7 +492,7 @@ __cpp_lib_within_lifetime                               202306L <type_traits>
 # define __cpp_lib_bind_front                           202306L
 # define __cpp_lib_bitset                               202306L
 // # define __cpp_lib_copyable_function                    202306L
-# if _LIBCPP_STD_VER >= 26 && defined(_LIBCPP_HAS_DEBUGGING) && !defined(_LIBCPP_HAS_NO_INCOMPLETE_DEBUGGING)
+# if _LIBCPP_STD_VER >= 26 && defined(_LIBCPP_HAS_DEBUGGING)
 #   define __cpp_lib_debugging                          202311L
 # endif
 // # define __cpp_lib_freestanding_algorithm               202311L
diff --git a/libcxx/modules/std/debugging.inc b/libcxx/modules/std/debugging.inc
index 000b2ae7fe633a..e8f8dd13f88ba6 100644
--- a/libcxx/modules/std/debugging.inc
+++ b/libcxx/modules/std/debugging.inc
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 
 export namespace std {
-#if _LIBCPP_STD_VER >= 26 && defined(_LIBCPP_HAS_DEBUGGING) && !defined(_LIBCPP_HAS_NO_INCOMPLETE_DEBUGGING)
+#if _LIBCPP_STD_VER >= 26 && defined(_LIBCPP_HAS_DEBUGGING)
   // [debugging.utility], utility
   using stgd::breakpoint;
   using stgd::breakpoint_if_debugging;
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/debugging.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/debugging.version.compile.pass.cpp
index 9eb39a26a87116..b18646321094cb 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/debugging.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/debugging.version.compile.pass.cpp
@@ -54,7 +54,7 @@
 
 #elif TEST_STD_VER > 23
 
-# if TEST_STD_VER >= 26 && defined(_LIBCPP_HAS_DEBUGGING) && !defined(_LIBCPP_HAS_NO_INCOMPLETE_DEBUGGING)
+# if TEST_STD_VER >= 26 && defined(_LIBCPP_HAS_DEBUGGING)
 #   ifndef __cpp_lib_debugging
 #     error "__cpp_lib_debugging should be defined in c++26"
 #   endif
@@ -63,7 +63,7 @@
 #   endif
 # else
 #   ifdef __cpp_lib_debugging
-#     error "__cpp_lib_debugging should not be defined when the requirement 'TEST_STD_VER >= 26 && defined(_LIBCPP_HAS_DEBUGGING) && !defined(_LIBCPP_HAS_NO_INCOMPLETE_DEBUGGING)' is not met!"
+#     error "__cpp_lib_debugging should not be defined when the requirement 'TEST_STD_VER >= 26 && defined(_LIBCPP_HAS_DEBUGGING)' is not met!"
 #   endif
 # endif
 
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/version.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/version.version.compile.pass.cpp
index 424aabfc57beb3..38030f30ca5f81 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/version.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/version.version.compile.pass.cpp
@@ -6333,7 +6333,7 @@
 #   error "__cpp_lib_coroutine should have the value 201902L in c++26"
 # endif
 
-# if TEST_STD_VER >= 26 && defined(_LIBCPP_HAS_DEBUGGING) && !defined(_LIBCPP_HAS_NO_INCOMPLETE_DEBUGGING)
+# if TEST_STD_VER >= 26 && defined(_LIBCPP_HAS_DEBUGGING)
 #   ifndef __cpp_lib_debugging
 #     error "__cpp_lib_debugging should be defined in c++26"
 #   endif
@@ -6342,7 +6342,7 @@
 #   endif
 # else
 #   ifdef __cpp_lib_debugging
-#     error "__cpp_lib_debugging should not be defined when the requirement 'TEST_STD_VER >= 26 && defined(_LIBCPP_HAS_DEBUGGING) && !defined(_LIBCPP_HAS_NO_INCOMPLETE_DEBUGGING)' is not met!"
+#     error "__cpp_lib_debugging should not be defined when the requirement 'TEST_STD_VER >= 26 && defined(_LIBCPP_HAS_DEBUGGING)' is not met!"
 #   endif
 # endif
 
diff --git a/libcxx/test/std/utilities/debugging/breakpoint.pass.cpp b/libcxx/test/std/utilities/debugging/breakpoint.pass.cpp
index 7389600fa191ee..f27a01dab5a25e 100644
--- a/libcxx/test/std/utilities/debugging/breakpoint.pass.cpp
+++ b/libcxx/test/std/utilities/debugging/breakpoint.pass.cpp
@@ -7,6 +7,7 @@
 //===----------------------------------------------------------------------===//
 
 // UNSUPPORTED: c++03, c++11, c++14, c++17, c++20, c++23
+// XFAIL: LIBCXX-AIX-FIXME, LIBCXX-PICOLIBC-FIXME
 
 // <debugging>
 
@@ -15,7 +16,49 @@
 #include <cassert>
 #include <debugging>
 
-void test() { static_assert(noexcept(breakpoint())); }
+// Test with debugger attached:
+
+// LLDB command: `lldb "breakpoint.pass" -o run -o detach -o quit`
+// GDB command:  `gdb breakpoint.pass -ex run -ex detach -ex quit --silent`
+
+//
+// Sample LLDB output:
+//
+// Process 43162 launched: '/home/llvm-dev/Projects/llvm-project/build/breakpoint.pass' (x86_64)
+// Process 43162 stopped
+// * thread #1, name = 'breakpoint.pass', stop reason = signal SIGTRAP
+//     frame #0: 0x00007ffff7eb27e5 libc++.so.1`std::__1::__breakpoint() at debugging.cpp:44:1
+//    41  	#  else
+//    42  	  raise(SIGTRAP);
+//    43  	#  endif
+// -> 44  	}
+//    45
+//    46  	#else
+//    47
+// (lldb) detach
+// Process 43162 detached
+// (lldb) quit
+
+//
+// Sample GDB ouput:
+//
+// Reading symbols from breakpoint.pass..
+// Starting program: /home/llvm-dev/Projects/llvm-project/build/breakpoint.pass
+// [Thread debugging using libthread_db enabled]
+// Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
+
+// Program received signal SIGTRAP, Trace/breakpoint trap.
+// std::__1::__breakpoint () at /home/llvm-dev/Projects/llvm-project/libcxx/src/debugging.cpp:44
+// warning: Source file is more recent than executable.
+// 44	}
+// Detaching from program: /home/llvm-dev/Projects/llvm-project/build/breakpoint.pass, process 53887
+// [Inferior 1 (process 53887) detached]
+
+void test() {
+  static_assert(noexcept(std::breakpoint()));
+
+  std::breakpoint();
+}
 
 int main(int, char**) {
   test();
diff --git a/libcxx/test/std/utilities/debugging/breakpoint_if_debugging.pass.cpp b/libcxx/test/std/utilities/debugging/breakpoint_if_debugging.pass.cpp
index 453ba9155b2236..6bd6a479235bd9 100644
--- a/libcxx/test/std/utilities/debugging/breakpoint_if_debugging.pass.cpp
+++ b/libcxx/test/std/utilities/debugging/breakpoint_if_debugging.pass.cpp
@@ -7,6 +7,7 @@
 //===----------------------------------------------------------------------===//
 
 // UNSUPPORTED: c++03, c++11, c++14, c++17, c++20, c++23
+// XFAIL: LIBCXX-AIX-FIXME, LIBCXX-PICOLIBC-FIXME
 
 // <debugging>
 
@@ -15,7 +16,16 @@
 #include <cassert>
 #include <debugging>
 
-void test() { static_assert(noexcept(breakpoint_if_debugging())); }
+// Test with debugger attached:
+
+// LLDB command: `lldb "breakpoint_if_debugging.pass" -o run -o detach -o quit`
+// GDB command:  `gdb breakpoint_if_debugging.pass -ex run -ex detach -ex quit --silent`
+
+void test() {
+  static_assert(noexcept(std::breakpoint_if_debugging()));
+
+  std::breakpoint_if_debugging();
+}
 
 int main(int, char**) {
   test();
diff --git a/libcxx/test/std/utilities/debugging/is_debugger_present.pass.cpp b/libcxx/test/std/utilities/debugging/is_debugger_present.pass.cpp
index 88b271de9ce79d..79c541922572ba 100644
--- a/libcxx/test/std/utilities/debugging/is_debugger_present.pass.cpp
+++ b/libcxx/test/std/utilities/debugging/is_debugger_present.pass.cpp
@@ -7,6 +7,7 @@
 //===----------------------------------------------------------------------===//
 
 // UNSUPPORTED: c++03, c++11, c++14, c++17, c++20, c++23
+// XFAIL: LIBCXX-AIX-FIXME, LIBCXX-PICOLIBC-FIXME
 
 // <debugging>
 
@@ -15,7 +16,13 @@
 #include <cassert>
 #include <debugging>
 
-void test() { static_assert(noexcept(is_debugger_present())); }
+// Test without debugger.
+
+void test() {
+  static_assert(noexcept(std::is_debugger_present()));
+
+  assert(!std::is_debugger_present());
+}
 
 int main(int, char**) {
   test();
diff --git a/libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_lldb.sh.cpp b/libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_lldb.sh.cpp
new file mode 100644
index 00000000000000..2da2246fe6fac9
--- /dev/null
+++ b/libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_lldb.sh.cpp
@@ -0,0 +1,40 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// UNSUPPORTED: c++03, c++11, c++14, c++17, c++20, c++23
+// XFAIL: LIBCXX-AIX-FIXME, LIBCXX-PICOLIBC-FIXME
+// UNSUPPORTED: gcc
+
+// RUN: %{cxx} %{flags} %s -o %t.exe %{compile_flags} -g %{link_flags}
+// RUN: %{lldb} %t.exe -o run -o detach -o quit
+// RUN: %{gdb} %t.exe -ex run -ex detach -ex quit --silent
+
+// <debugging>
+
+// bool is_debugger_present() noexcept;
+
+#include <cassert>
+#include <debugging>
+#include <cstdlib>
+
+// Test with debugger attached:
+
+// LLDB command: `lldb "is_debugger_present.pass" -o run -o detach -o quit`
+// GDB command:  `gdb is_debugger_present.pass -ex run -ex detach -ex quit --silent`
+
+void test() {
+  static_assert(noexcept(std::is_debugger_present()));
+
+  assert(std::is_debugger_present());
+}
+
+int main(int, char**) {
+  test();
+
+  return 0;
+}
diff --git a/libcxx/utils/generate_feature_test_macro_components.py b/libcxx/utils/generate_feature_test_macro_components.py
index 12111d3ff58807..ccb33f712d27d0 100755
--- a/libcxx/utils/generate_feature_test_macro_components.py
+++ b/libcxx/utils/generate_feature_test_macro_components.py
@@ -401,8 +401,8 @@ def add_version_header(tc):
             "name": "__cpp_lib_debugging",
             "values": {"c++26": 202311},  # P2546R5 Debugging Support
             "headers": ["debugging"],
-            "test_suite_guard": "TEST_STD_VER >= 26 && defined(_LIBCPP_HAS_DEBUGGING) && !defined(_LIBCPP_HAS_NO_INCOMPLETE_DEBUGGING)",
-            "libcxx_guard": "_LIBCPP_STD_VER >= 26 && defined(_LIBCPP_HAS_DEBUGGING) && !defined(_LIBCPP_HAS_NO_INCOMPLETE_DEBUGGING)",
+            "test_suite_guard": "TEST_STD_VER >= 26 && defined(_LIBCPP_HAS_DEBUGGING)",
+            "libcxx_guard": "_LIBCPP_STD_VER >= 26 && defined(_LIBCPP_HAS_DEBUGGING)",
         },
         {
             "name": "__cpp_lib_destroying_delete",
diff --git a/libcxx/utils/libcxx/test/features.py b/libcxx/utils/libcxx/test/features.py
index 307d35349f3a46..5084b60de7a841 100644
--- a/libcxx/utils/libcxx/test/features.py
+++ b/libcxx/utils/libcxx/test/features.py
@@ -493,6 +493,48 @@ def _getAndroidDeviceApi(cfg):
     ),
 ]
 
+# Detect whether LLDB is on the system, has Python scripting and supports
+# adding breakpoint commands. If so add a substitution to access it.
+def check_lldb(cfg):
+    lldb_path = shutil.which("lldb")
+    if lldb_path is None:
+        return False
+
+#     # Check that we can set breakpoint commands.
+#     test_src = """
+# try:
+#   debugger = lldb.SBDebugger.Create()
+#   # Block until target process exits.
+#   debugger.SetAsync(False)
+#   # target = debugger.CreateTarget()
+# except AttributeError:
+#   sys.exit(1)
+# #sys.exit()
+# """
+
+#     try:
+#         stdout = subprocess.check_output(
+#             [lldb_path, "-o", f"script {test_src}", "--batch"],
+#             stderr=subprocess.DEVNULL,
+#             universal_newlines=True,
+#         )
+#     except subprocess.CalledProcessError:
+#         # We can't set breakpoint commands
+#         return False
+
+#     # Check we actually ran the Python
+#     return not "Python scripting is not supported" in stdout
+    return True # TODO: Remove this line
+
+
+DEFAULT_FEATURES += [
+    Feature(
+        name="host-has-lldb-with-python",
+        when=check_lldb,
+        actions=[AddSubstitution("%{lldb}", lambda cfg: shutil.which("lldb"))],
+    )
+]
+
 # Detect whether GDB is on the system, has Python scripting and supports
 # adding breakpoint commands. If so add a substitution to access it.
 def check_gdb(cfg):

>From af703e779829fd5c5e16c1e00a5e2166ca4742f2 Mon Sep 17 00:00:00 2001
From: Zingam <zingam at outlook.com>
Date: Wed, 24 Jan 2024 22:35:48 +0200
Subject: [PATCH 08/40] WIP: LLDB python script

---
 .../breakpoint.with_debugger_lldb.py          | 14 +++++++
 ...p => breakpoint.with_debugger_lldb.sh.cpp} |  8 ++++
 .../breakpoint_if_debugging.pass.cpp          |  5 +--
 ...int_if_debugging.with_debugger_lldb.sh.cpp | 40 +++++++++++++++++++
 .../is_debugger_present.with_debugger_lldb.py | 10 +++++
 ...debugger_present.with_debugger_lldb.sh.cpp |  1 +
 6 files changed, 74 insertions(+), 4 deletions(-)
 create mode 100644 libcxx/test/std/utilities/debugging/breakpoint.with_debugger_lldb.py
 rename libcxx/test/std/utilities/debugging/{breakpoint.pass.cpp => breakpoint.with_debugger_lldb.sh.cpp} (86%)
 create mode 100644 libcxx/test/std/utilities/debugging/breakpoint_if_debugging.with_debugger_lldb.sh.cpp
 create mode 100644 libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_lldb.py

diff --git a/libcxx/test/std/utilities/debugging/breakpoint.with_debugger_lldb.py b/libcxx/test/std/utilities/debugging/breakpoint.with_debugger_lldb.py
new file mode 100644
index 00000000000000..41af51bc13a19b
--- /dev/null
+++ b/libcxx/test/std/utilities/debugging/breakpoint.with_debugger_lldb.py
@@ -0,0 +1,14 @@
+# ===----------------------------------------------------------------------===##
+#
+# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+# See https://llvm.org/LICENSE.txt for license information.
+# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+#
+# ===----------------------------------------------------------------------===##
+
+import lldb
+
+# https://lldb.llvm.org/use/python-reference.html#running-a-python-script-when-a-breakpoint-gets-hit
+
+def breakpoint_function_wrapper(frame, bp_loc, internal_dict):
+   # Your code goes here
diff --git a/libcxx/test/std/utilities/debugging/breakpoint.pass.cpp b/libcxx/test/std/utilities/debugging/breakpoint.with_debugger_lldb.sh.cpp
similarity index 86%
rename from libcxx/test/std/utilities/debugging/breakpoint.pass.cpp
rename to libcxx/test/std/utilities/debugging/breakpoint.with_debugger_lldb.sh.cpp
index f27a01dab5a25e..2c753b05592e37 100644
--- a/libcxx/test/std/utilities/debugging/breakpoint.pass.cpp
+++ b/libcxx/test/std/utilities/debugging/breakpoint.with_debugger_lldb.sh.cpp
@@ -8,6 +8,12 @@
 
 // UNSUPPORTED: c++03, c++11, c++14, c++17, c++20, c++23
 // XFAIL: LIBCXX-AIX-FIXME, LIBCXX-PICOLIBC-FIXME
+// UNSUPPORTED: gcc
+// UNSUPPORTED: android
+
+// RUN: %{cxx} %{flags} %s -o %t.exe %{compile_flags} -g %{link_flags}
+// RUN: %{lldb} %t.exe -o run -o detach -o quit
+// RUN: %{gdb} %t.exe -ex run -ex detach -ex quit --silent
 
 // <debugging>
 
@@ -54,6 +60,8 @@
 // Detaching from program: /home/llvm-dev/Projects/llvm-project/build/breakpoint.pass, process 53887
 // [Inferior 1 (process 53887) detached]
 
+// https://lldb.llvm.org/use/python-reference.html#running-a-python-script-when-a-breakpoint-gets-hit
+
 void test() {
   static_assert(noexcept(std::breakpoint()));
 
diff --git a/libcxx/test/std/utilities/debugging/breakpoint_if_debugging.pass.cpp b/libcxx/test/std/utilities/debugging/breakpoint_if_debugging.pass.cpp
index 6bd6a479235bd9..6f3a85498efbf6 100644
--- a/libcxx/test/std/utilities/debugging/breakpoint_if_debugging.pass.cpp
+++ b/libcxx/test/std/utilities/debugging/breakpoint_if_debugging.pass.cpp
@@ -16,10 +16,7 @@
 #include <cassert>
 #include <debugging>
 
-// Test with debugger attached:
-
-// LLDB command: `lldb "breakpoint_if_debugging.pass" -o run -o detach -o quit`
-// GDB command:  `gdb breakpoint_if_debugging.pass -ex run -ex detach -ex quit --silent`
+// Test without debugger.
 
 void test() {
   static_assert(noexcept(std::breakpoint_if_debugging()));
diff --git a/libcxx/test/std/utilities/debugging/breakpoint_if_debugging.with_debugger_lldb.sh.cpp b/libcxx/test/std/utilities/debugging/breakpoint_if_debugging.with_debugger_lldb.sh.cpp
new file mode 100644
index 00000000000000..2fe76aa8e1b3e2
--- /dev/null
+++ b/libcxx/test/std/utilities/debugging/breakpoint_if_debugging.with_debugger_lldb.sh.cpp
@@ -0,0 +1,40 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// UNSUPPORTED: c++03, c++11, c++14, c++17, c++20, c++23
+// XFAIL: LIBCXX-AIX-FIXME, LIBCXX-PICOLIBC-FIXME
+// UNSUPPORTED: gcc
+// UNSUPPORTED: android
+
+// RUN: %{cxx} %{flags} %s -o %t.exe %{compile_flags} -g %{link_flags}
+// RUN: %{lldb} %t.exe -o run -o detach -o quit
+// RUN: %{gdb} %t.exe -ex run -ex detach -ex quit --silent
+
+// <debugging>
+
+// void breakpoint_if_debugging() noexcept;
+
+#include <cassert>
+#include <debugging>
+
+// Test with debugger attached:
+
+// LLDB command: `lldb "breakpoint_if_debugging.pass" -o run -o detach -o quit`
+// GDB command:  `gdb breakpoint_if_debugging.pass -ex run -ex detach -ex quit --silent`
+
+void test() {
+  static_assert(noexcept(std::breakpoint_if_debugging()));
+
+  std::breakpoint_if_debugging();
+}
+
+int main(int, char**) {
+  test();
+
+  return 0;
+}
diff --git a/libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_lldb.py b/libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_lldb.py
new file mode 100644
index 00000000000000..61979b9a6e53d9
--- /dev/null
+++ b/libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_lldb.py
@@ -0,0 +1,10 @@
+# ===----------------------------------------------------------------------===##
+#
+# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+# See https://llvm.org/LICENSE.txt for license information.
+# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+#
+# ===----------------------------------------------------------------------===##
+
+import lldb
+
diff --git a/libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_lldb.sh.cpp b/libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_lldb.sh.cpp
index 2da2246fe6fac9..49dff7574e14ce 100644
--- a/libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_lldb.sh.cpp
+++ b/libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_lldb.sh.cpp
@@ -9,6 +9,7 @@
 // UNSUPPORTED: c++03, c++11, c++14, c++17, c++20, c++23
 // XFAIL: LIBCXX-AIX-FIXME, LIBCXX-PICOLIBC-FIXME
 // UNSUPPORTED: gcc
+// UNSUPPORTED: android
 
 // RUN: %{cxx} %{flags} %s -o %t.exe %{compile_flags} -g %{link_flags}
 // RUN: %{lldb} %t.exe -o run -o detach -o quit

>From 1654e083fb43f8f577599e25ef22e9c39843d767 Mon Sep 17 00:00:00 2001
From: Zingam <zingam at outlook.com>
Date: Fri, 26 Jan 2024 08:13:05 +0200
Subject: [PATCH 09/40] WIP: GDB python script

---
 .../debugging/is_debugger_present.pass.cpp    |   4 +-
 .../is_debugger_present.with_debugger_gdb.py  | 122 ++++++++++++++++++
 ..._debugger_present.with_debugger_gdb.sh.cpp |  57 ++++++++
 ...debugger_present.with_debugger_lldb.sh.cpp |  36 ++++--
 4 files changed, 208 insertions(+), 11 deletions(-)
 create mode 100644 libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_gdb.py
 create mode 100644 libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_gdb.sh.cpp

diff --git a/libcxx/test/std/utilities/debugging/is_debugger_present.pass.cpp b/libcxx/test/std/utilities/debugging/is_debugger_present.pass.cpp
index 79c541922572ba..106890e77fa7e0 100644
--- a/libcxx/test/std/utilities/debugging/is_debugger_present.pass.cpp
+++ b/libcxx/test/std/utilities/debugging/is_debugger_present.pass.cpp
@@ -14,6 +14,7 @@
 // bool is_debugger_present() noexcept;
 
 #include <cassert>
+#include <concepts>
 #include <debugging>
 
 // Test without debugger.
@@ -21,7 +22,8 @@
 void test() {
   static_assert(noexcept(std::is_debugger_present()));
 
-  assert(!std::is_debugger_present());
+  std::same_as<bool> decltype(auto) isDebuggerPresent = is_debugger_present();
+  assert(isDebuggerPresent == false);
 }
 
 int main(int, char**) {
diff --git a/libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_gdb.py b/libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_gdb.py
new file mode 100644
index 00000000000000..c10d95ddd3d22e
--- /dev/null
+++ b/libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_gdb.py
@@ -0,0 +1,122 @@
+# ===----------------------------------------------------------------------===##
+#
+# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+# See https://llvm.org/LICENSE.txt for license information.
+# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+#
+# ===----------------------------------------------------------------------===##
+
+from __future__ import print_function
+import re
+import gdb
+import sys
+
+# https://sourceware.org/gdb/current/onlinedocs/gdb.html/Python.html
+
+test_failures = 0
+# Sometimes the inital run command can fail to trace the process.
+# (e.g. you don't have ptrace permissions)
+# In these cases gdb still sends us an exited event so we cannot
+# see what "run" printed to check for a warning message, since
+# we get taken to our exit handler before we can look.
+# Instead check that at least one test has been run by the time
+# we exit.
+has_run_tests = False
+
+
+class CheckResult(gdb.Command):
+    def __init__(self):
+        super(CheckResult, self).__init__("print_and_compare", gdb.COMMAND_DATA)
+
+    def invoke(self, arg, from_tty):
+        global has_run_tests
+
+        try:
+            has_run_tests = True
+
+            # Stack frame is:
+            # 0. StopForDebugger
+            # 1. ComparePrettyPrintToChars or ComparePrettyPrintToRegex
+            # 2. TestCase
+            compare_frame = gdb.newest_frame().older()
+            testcase_frame = compare_frame.older()
+            test_loc = testcase_frame.find_sal()
+            # Use interactive commands in the correct context to get the pretty
+            # printed version
+
+            value_str = self._get_value_string(compare_frame, testcase_frame)
+
+            # Ignore the convenience variable name and newline
+            value = value_str[value_str.find("= ") + 2 : -1]
+            gdb.newest_frame().select()
+            expectation_val = compare_frame.read_var("expectation")
+            check_literal = expectation_val.string(encoding="utf-8")
+            if "PrettyPrintToRegex" in compare_frame.name():
+                test_fails = not re.search(check_literal, value)
+            else:
+                test_fails = value != check_literal
+
+            if test_fails:
+                global test_failures
+                print("FAIL: " + test_loc.symtab.filename + ":" + str(test_loc.line))
+                print("GDB printed:")
+                print("   " + repr(value))
+                print("Value should match:")
+                print("   " + repr(check_literal))
+                test_failures += 1
+            else:
+                print("PASS: " + test_loc.symtab.filename + ":" + str(test_loc.line))
+
+        except RuntimeError as e:
+            # At this point, lots of different things could be wrong, so don't try to
+            # recover or figure it out. Don't exit either, because then it's
+            # impossible to debug the framework itself.
+            print("FAIL: Something is wrong in the test framework.")
+            print(str(e))
+            test_failures += 1
+
+    def _get_value_string(self, compare_frame, testcase_frame):
+        compare_frame.select()
+        if "ComparePrettyPrint" in compare_frame.name():
+            s = gdb.execute("p value", to_string=True)
+        else:
+            value_str = str(compare_frame.read_var("value"))
+            clean_expression_str = value_str.strip("'\"")
+            testcase_frame.select()
+            s = gdb.execute("p " + clean_expression_str, to_string=True)
+        if sys.version_info.major == 2:
+            return s.decode("utf-8")
+        return s
+
+
+def exit_handler(event=None):
+    global test_failures
+    global has_run_tests
+
+    if not has_run_tests:
+        print("FAILED test program did not run correctly, check gdb warnings")
+        test_failures = -1
+    elif test_failures:
+        print("FAILED %d cases" % test_failures)
+    exit(test_failures)
+
+
+# Start code executed at load time
+
+# Disable terminal paging
+gdb.execute("set height 0")
+gdb.execute("set python print-stack full")
+test_failures = 0
+CheckResult()
+test_bp = gdb.Breakpoint("StopForDebugger")
+test_bp.enabled = True
+test_bp.silent = True
+test_bp.commands = "print_and_compare\ncontinue"
+# "run" won't return if the program exits; ensure the script regains control.
+gdb.events.exited.connect(exit_handler)
+gdb.execute("run")
+# If the program didn't exit, something went wrong, but we don't
+# know what. Fail on exit.
+test_failures += 1
+exit_handler(None)
+
diff --git a/libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_gdb.sh.cpp b/libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_gdb.sh.cpp
new file mode 100644
index 00000000000000..bec613abfd764e
--- /dev/null
+++ b/libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_gdb.sh.cpp
@@ -0,0 +1,57 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// UNSUPPORTED: c++03, c++11, c++14, c++17, c++20, c++23
+// REQUIRES: host-has-gdb-with-python
+// UNSUPPORTED: android
+// XFAIL: LIBCXX-AIX-FIXME, LIBCXX-PICOLIBC-FIXME
+
+// RUN: %{cxx} %{flags} %s -o %t.exe %{compile_flags} -g %{link_flags}
+// RUN: %{gdb} %t.exe -ex "source %S/is_debugger_present.with_debugger_gdb.py" -ex run -ex detach -ex quit --silent
+
+// <debugging>
+
+// bool is_debugger_present() noexcept;
+
+#include <cassert>
+#include <concepts>
+#include <debugging>
+
+#include "test_macros.h"
+
+#ifdef TEST_COMPILER_GCC
+#  define OPT_NONE __attribute__((noinline))
+#else
+#  define OPT_NONE __attribute__((optnone))
+#endif
+
+// Prevents the compiler optimizing away the parameter in the caller function.
+template <typename Type>
+void MarkAsLive(Type&&) OPT_NONE;
+template <typename Type>
+void MarkAsLive(Type&&) {}
+
+void StopForDebugger(void*, void*) OPT_NONE;
+void StopForDebugger(void*, void*) {}
+
+// Test with debugger attached:
+//   GDB command: `gdb is_debugger_present.pass -ex run -ex detach -ex quit --silent`
+
+void test() {
+  static_assert(noexcept(std::is_debugger_present()));
+
+  std::same_as<bool> decltype(auto) isDebuggerPresent = std::is_debugger_present();
+  MarkAsLive(isDebuggerPresent);
+  StopForDebuger(&isDebuggerPresent);
+}
+
+int main(int, char**) {
+  test();
+
+  return 0;
+}
diff --git a/libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_lldb.sh.cpp b/libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_lldb.sh.cpp
index 49dff7574e14ce..ba0db48d479a61 100644
--- a/libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_lldb.sh.cpp
+++ b/libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_lldb.sh.cpp
@@ -7,35 +7,51 @@
 //===----------------------------------------------------------------------===//
 
 // UNSUPPORTED: c++03, c++11, c++14, c++17, c++20, c++23
-// XFAIL: LIBCXX-AIX-FIXME, LIBCXX-PICOLIBC-FIXME
-// UNSUPPORTED: gcc
+// REQUIRES: host-has-lldb-with-python
 // UNSUPPORTED: android
+// XFAIL: LIBCXX-AIX-FIXME, LIBCXX-PICOLIBC-FIXME
 
 // RUN: %{cxx} %{flags} %s -o %t.exe %{compile_flags} -g %{link_flags}
-// RUN: %{lldb} %t.exe -o run -o detach -o quit
-// RUN: %{gdb} %t.exe -ex run -ex detach -ex quit --silent
+// RUN: %{lldb} %t.exe -ex "command source %S/is_debugger_present.with_debugger_lldb.py" -o run -o detach -o quit
 
 // <debugging>
 
 // bool is_debugger_present() noexcept;
 
 #include <cassert>
+#include <concepts>
 #include <debugging>
-#include <cstdlib>
 
-// Test with debugger attached:
+#include "test_macros.h"
+
+#ifdef TEST_COMPILER_GCC
+#  define OPT_NONE __attribute__((noinline))
+#else
+#  define OPT_NONE __attribute__((optnone))
+#endif
 
-// LLDB command: `lldb "is_debugger_present.pass" -o run -o detach -o quit`
-// GDB command:  `gdb is_debugger_present.pass -ex run -ex detach -ex quit --silent`
+// Prevents the compiler optimizing away the parameter in the caller function.
+template <typename Type>
+void MarkAsLive(Type&&) OPT_NONE;
+template <typename Type>
+void MarkAsLive(Type&&) {}
+
+void StopForDebugger(void*, void*) OPT_NONE;
+void StopForDebugger(void*, void*) {}
+
+// Test with debugger attached:
+//   LLDB command: `lldb "is_debugger_present.pass" -o run -o detach -o quit`
 
 void test() {
   static_assert(noexcept(std::is_debugger_present()));
 
-  assert(std::is_debugger_present());
+  std::same_as<bool> decltype(auto) isDebuggerPresent = std::is_debugger_present();
+  MarkAsLive(isDebuggerPresent);
+  StopForDebuger(&isDebuggerPresent);
 }
 
 int main(int, char**) {
   test();
 
   return 0;
-}
+}
\ No newline at end of file

>From 82522c924a105af60814ba7001ab0824ac072410 Mon Sep 17 00:00:00 2001
From: Hristo Hristov <hghristov.rmm at gmail.com>
Date: Mon, 5 Feb 2024 12:52:42 +0200
Subject: [PATCH 10/40] WIP: GDB python script

---
 ..._debugger_present.with_debugger_gdb.sh.cpp |  10 +-
 ...debugger_present.with_debugger_gdb_test.py | 171 ++++++++++++++++++
 ...debugger_present.with_debugger_lldb.sh.cpp |   2 +-
 3 files changed, 179 insertions(+), 4 deletions(-)
 create mode 100644 libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_gdb_test.py

diff --git a/libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_gdb.sh.cpp b/libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_gdb.sh.cpp
index bec613abfd764e..0e91cc533e6f8c 100644
--- a/libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_gdb.sh.cpp
+++ b/libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_gdb.sh.cpp
@@ -36,8 +36,8 @@ void MarkAsLive(Type&&) OPT_NONE;
 template <typename Type>
 void MarkAsLive(Type&&) {}
 
-void StopForDebugger(void*, void*) OPT_NONE;
-void StopForDebugger(void*, void*) {}
+void StopForDebugger(void*) OPT_NONE;
+void StopForDebugger(void*) {}
 
 // Test with debugger attached:
 //   GDB command: `gdb is_debugger_present.pass -ex run -ex detach -ex quit --silent`
@@ -46,8 +46,12 @@ void test() {
   static_assert(noexcept(std::is_debugger_present()));
 
   std::same_as<bool> decltype(auto) isDebuggerPresent = std::is_debugger_present();
+  auto isDebuggerPresent1 = false;
+  auto helpMeStr = "Yeah it is working!";
   MarkAsLive(isDebuggerPresent);
-  StopForDebuger(&isDebuggerPresent);
+  MarkAsLive(isDebuggerPresent1);
+  MarkAsLive(helpMeStr);
+  StopForDebugger(&isDebuggerPresent);
 }
 
 int main(int, char**) {
diff --git a/libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_gdb_test.py b/libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_gdb_test.py
new file mode 100644
index 00000000000000..2946ea471cb4fe
--- /dev/null
+++ b/libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_gdb_test.py
@@ -0,0 +1,171 @@
+# ===----------------------------------------------------------------------===##
+#
+# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+# See https://llvm.org/LICENSE.txt for license information.
+# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+#
+# ===----------------------------------------------------------------------===##
+
+from __future__ import print_function
+import re
+import gdb
+import sys
+
+# https://sourceware.org/gdb/current/onlinedocs/gdb.html/Python.html
+
+test_failures = 0
+
+# Sometimes the inital run command can fail to trace the process.
+# (e.g. you don't have ptrace permissions)
+# In these cases gdb still sends us an exited event so we cannot
+# see what "run" printed to check for a warning message, since
+# we get taken to our exit handler before we can look.
+# Instead check that at least one test has been run by the time
+# we exit.
+has_run_tests = False
+
+
+class CheckResult(gdb.Command):
+    """GDB Tester"""
+
+    def __init__(self):
+        super(CheckResult, self).__init__("check_is_debugger_present", gdb.COMMAND_DATA)
+
+    def invoke(self, arg, from_tty):
+        global has_run_tests
+
+        try:
+            print("GDB Custom Test is starting!")
+
+            has_run_tests = True
+
+            # Stack frame is:
+            # 0. StopForDebugger
+            # 1. ComparePrettyPrintToChars or ComparePrettyPrintToRegex
+            # 2. TestCase
+            compare_frame = gdb.newest_frame().older()
+            testcase_frame = compare_frame.older()
+            test_loc = testcase_frame.find_sal()
+
+            # Use interactive commands in the correct context to get the pretty
+            # printed version
+
+            value_str = self._get_value_string(compare_frame, testcase_frame)
+            print(f"====> GDB output: {compare_frame}")
+            print(f"====> GDB output: {testcase_frame}")
+            print(f"====> GDB output: {test_loc}")
+            print(f"====> GDB output: {value_str}")
+
+            # Ignore the convenience variable name and newline
+            value = value_str[value_str.find("= ") + 2 : -1]
+            gdb.newest_frame().select()
+            expectation_val = compare_frame.read_var("isDebuggerPresent")
+            print(f"====> GDB: expectation_val isDebuggerPresent = {expectation_val}")
+            if not expectation_val:
+                global test_failures
+                print("FAIL: " + test_loc.symtab.filename + ":" + str(test_loc.line))
+                print("`isDebuggerPresent` value is `false`, value should be `true`")
+                test_failures += 1
+            else:
+                print("PASS: " + test_loc.symtab.filename + ":" + str(test_loc.line))
+            
+            expectation_val = compare_frame.read_var("isDebuggerPresent1")
+            if expectation_val:
+                print(f"====> GDB: expectation_val isDebuggerPresent1 = {expectation_val}")
+            expectation_val = compare_frame.read_var("helpMeStr")
+            if expectation_val == "Yeah it is working!":
+                print(f"====> GDB: expectation_val helpMeStr = {expectation_val}")
+            else:
+                print(f"====> GDB error: helpMeStr  {expectation_val}")
+
+            # check_literal = expectation_val.string(encoding="utf-8")
+            # if "PrettyPrintToRegex" in compare_frame.name():
+            #     test_fails = not re.search(check_literal, value)
+            # else:
+            #     test_fails = value != check_literal
+
+            # if test_fails:
+            #     global test_failures
+            #     print("FAIL: " + test_loc.symtab.filename + ":" + str(test_loc.line))
+            #     print("GDB printed:")
+            #     print("   " + repr(value))
+            #     print("Value should match:")
+            #     print("   " + repr(check_literal))
+            #     test_failures += 1
+            # else:
+            #     print("PASS: " + test_loc.symtab.filename + ":" + str(test_loc.line))
+
+        except RuntimeError as e:
+            # At this point, lots of different things could be wrong, so don't try to
+            # recover or figure it out. Don't exit either, because then it's
+            # impossible to debug the framework itself.
+            print("FAIL: Something is wrong in the test framework.")
+            print(str(e))
+
+            test_failures += 1
+
+    # def _get_value_string(self, compare_frame, testcase_frame):
+    #     compare_frame.select()
+    #     if "ComparePrettyPrint" in compare_frame.name():
+    #         s = gdb.execute("p value", to_string=True)
+    #     else:
+    #         value_str = str(compare_frame.read_var("value"))
+    #         clean_expression_str = value_str.strip("'\"")
+    #         testcase_frame.select()
+    #         s = gdb.execute("p " + clean_expression_str, to_string=True)
+    #     if sys.version_info.major == 2:
+    #         return s.decode("utf-8")
+    #     return s
+    def _get_value_string(self, compare_frame, testcase_frame):
+        compare_frame.select()
+        # if "ComparePrettyPrint" in compare_frame.name():
+        #     s = gdb.execute("p value", to_string=True)
+        # else:
+        #     value_str = str(compare_frame.read_var("value"))
+        #     clean_expression_str = value_str.strip("'\"")
+        #     testcase_frame.select()
+        #     s = gdb.execute("p " + clean_expression_str, to_string=True)
+        # if sys.version_info.major == 2:
+        #     return s.decode("utf-8")
+        s = compare_frame.name()
+        return s
+
+
+def exit_handler(event=None):
+    global test_failures
+    global has_run_tests
+
+    if not has_run_tests:
+        print("FAILED test program did not run correctly, check gdb warnings")
+        test_failures = -1
+    elif test_failures:
+        print("FAILED %d cases" % test_failures)
+    exit(test_failures)
+
+def main():
+    # Start code executed at load time
+
+    # Disable terminal paging
+    gdb.execute("set height 0")
+    gdb.execute("set python print-stack full")
+
+    test = CheckResult()
+    test_bp = gdb.Breakpoint("StopForDebugger")
+    test_bp.enabled = True
+    test_bp.silent = True
+    # test_bp.commands = "check_is_debugger_present\ncontinue"
+    test_bp.commands = """check_is_debugger_present
+    continue"""
+
+    # "run" won't return if the program exits; ensure the script regains control.
+    gdb.events.exited.connect(exit_handler)
+    gdb.execute("run")
+    # If the program didn't exit, something went wrong, but we don't
+    # know what. Fail on exit.
+    test.test_failures += 1
+    exit_handler(None)
+
+    print(f"Test failures count: {test.test_failures}")
+
+if __name__ == "__main__":
+    main()
diff --git a/libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_lldb.sh.cpp b/libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_lldb.sh.cpp
index ba0db48d479a61..1d954137b8e693 100644
--- a/libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_lldb.sh.cpp
+++ b/libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_lldb.sh.cpp
@@ -54,4 +54,4 @@ int main(int, char**) {
   test();
 
   return 0;
-}
\ No newline at end of file
+}

>From 65aa1f09eaf71fc2db885b01f810f3a5d6d92c0b Mon Sep 17 00:00:00 2001
From: Hristo Hristov <hghristov.rmm at gmail.com>
Date: Mon, 5 Feb 2024 13:15:41 +0200
Subject: [PATCH 11/40] GDB python script

---
 .../is_debugger_present.with_debugger_gdb.py  |  97 +++++-----
 ..._debugger_present.with_debugger_gdb.sh.cpp |   4 -
 ...debugger_present.with_debugger_gdb_test.py | 171 ------------------
 3 files changed, 45 insertions(+), 227 deletions(-)
 delete mode 100644 libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_gdb_test.py

diff --git a/libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_gdb.py b/libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_gdb.py
index c10d95ddd3d22e..1446df2bd0ed13 100644
--- a/libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_gdb.py
+++ b/libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_gdb.py
@@ -7,13 +7,12 @@
 # ===----------------------------------------------------------------------===##
 
 from __future__ import print_function
-import re
 import gdb
-import sys
 
 # https://sourceware.org/gdb/current/onlinedocs/gdb.html/Python.html
 
 test_failures = 0
+
 # Sometimes the inital run command can fail to trace the process.
 # (e.g. you don't have ptrace permissions)
 # In these cases gdb still sends us an exited event so we cannot
@@ -25,8 +24,10 @@
 
 
 class CheckResult(gdb.Command):
+    """GDB Tester"""
+
     def __init__(self):
-        super(CheckResult, self).__init__("print_and_compare", gdb.COMMAND_DATA)
+        super(CheckResult, self).__init__("check_is_debugger_present", gdb.COMMAND_DATA)
 
     def invoke(self, arg, from_tty):
         global has_run_tests
@@ -36,33 +37,24 @@ def invoke(self, arg, from_tty):
 
             # Stack frame is:
             # 0. StopForDebugger
-            # 1. ComparePrettyPrintToChars or ComparePrettyPrintToRegex
-            # 2. TestCase
+            # 1. Check `isDebuggerPresent`
+
             compare_frame = gdb.newest_frame().older()
             testcase_frame = compare_frame.older()
             test_loc = testcase_frame.find_sal()
-            # Use interactive commands in the correct context to get the pretty
-            # printed version
-
-            value_str = self._get_value_string(compare_frame, testcase_frame)
 
             # Ignore the convenience variable name and newline
-            value = value_str[value_str.find("= ") + 2 : -1]
+
+            # value = value_str[value_str.find("= ") + 2 : -1]
             gdb.newest_frame().select()
-            expectation_val = compare_frame.read_var("expectation")
-            check_literal = expectation_val.string(encoding="utf-8")
-            if "PrettyPrintToRegex" in compare_frame.name():
-                test_fails = not re.search(check_literal, value)
-            else:
-                test_fails = value != check_literal
+            expectation_val = compare_frame.read_var("isDebuggerPresent")
 
-            if test_fails:
+            if not expectation_val:
                 global test_failures
+
                 print("FAIL: " + test_loc.symtab.filename + ":" + str(test_loc.line))
-                print("GDB printed:")
-                print("   " + repr(value))
-                print("Value should match:")
-                print("   " + repr(check_literal))
+                print("`isDebuggerPresent` value is `false`, value should be `true`")
+
                 test_failures += 1
             else:
                 print("PASS: " + test_loc.symtab.filename + ":" + str(test_loc.line))
@@ -71,25 +63,16 @@ def invoke(self, arg, from_tty):
             # At this point, lots of different things could be wrong, so don't try to
             # recover or figure it out. Don't exit either, because then it's
             # impossible to debug the framework itself.
+
             print("FAIL: Something is wrong in the test framework.")
             print(str(e))
-            test_failures += 1
 
-    def _get_value_string(self, compare_frame, testcase_frame):
-        compare_frame.select()
-        if "ComparePrettyPrint" in compare_frame.name():
-            s = gdb.execute("p value", to_string=True)
-        else:
-            value_str = str(compare_frame.read_var("value"))
-            clean_expression_str = value_str.strip("'\"")
-            testcase_frame.select()
-            s = gdb.execute("p " + clean_expression_str, to_string=True)
-        if sys.version_info.major == 2:
-            return s.decode("utf-8")
-        return s
+            test_failures += 1
 
 
 def exit_handler(event=None):
+    """Exit handler"""
+
     global test_failures
     global has_run_tests
 
@@ -97,26 +80,36 @@ def exit_handler(event=None):
         print("FAILED test program did not run correctly, check gdb warnings")
         test_failures = -1
     elif test_failures:
-        print("FAILED %d cases" % test_failures)
+        print(f"FAILED {test_failures} cases")
     exit(test_failures)
 
+def main():
+    # Start code executed at load time
 
-# Start code executed at load time
+    # Disable terminal paging
 
-# Disable terminal paging
-gdb.execute("set height 0")
-gdb.execute("set python print-stack full")
-test_failures = 0
-CheckResult()
-test_bp = gdb.Breakpoint("StopForDebugger")
-test_bp.enabled = True
-test_bp.silent = True
-test_bp.commands = "print_and_compare\ncontinue"
-# "run" won't return if the program exits; ensure the script regains control.
-gdb.events.exited.connect(exit_handler)
-gdb.execute("run")
-# If the program didn't exit, something went wrong, but we don't
-# know what. Fail on exit.
-test_failures += 1
-exit_handler(None)
+    gdb.execute("set height 0")
+    gdb.execute("set python print-stack full")
+
+    test = CheckResult()
+    test_bp = gdb.Breakpoint("StopForDebugger")
+    test_bp.enabled = True
+    test_bp.silent = True
+    test_bp.commands = """check_is_debugger_present
+    continue"""
+
+    # "run" won't return if the program exits; ensure the script regains control.
+
+    gdb.events.exited.connect(exit_handler)
+    gdb.execute("run")
+
+    # If the program didn't exit, something went wrong, but we don't
+    # know what. Fail on exit.
+
+    test_failures += 1
+    exit_handler(None)
+
+    print(f"Test failures count: {test_failures}")
 
+if __name__ == "__main__":
+    main()
diff --git a/libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_gdb.sh.cpp b/libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_gdb.sh.cpp
index 0e91cc533e6f8c..f35bec75a98553 100644
--- a/libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_gdb.sh.cpp
+++ b/libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_gdb.sh.cpp
@@ -46,11 +46,7 @@ void test() {
   static_assert(noexcept(std::is_debugger_present()));
 
   std::same_as<bool> decltype(auto) isDebuggerPresent = std::is_debugger_present();
-  auto isDebuggerPresent1 = false;
-  auto helpMeStr = "Yeah it is working!";
   MarkAsLive(isDebuggerPresent);
-  MarkAsLive(isDebuggerPresent1);
-  MarkAsLive(helpMeStr);
   StopForDebugger(&isDebuggerPresent);
 }
 
diff --git a/libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_gdb_test.py b/libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_gdb_test.py
deleted file mode 100644
index 2946ea471cb4fe..00000000000000
--- a/libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_gdb_test.py
+++ /dev/null
@@ -1,171 +0,0 @@
-# ===----------------------------------------------------------------------===##
-#
-# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-# See https://llvm.org/LICENSE.txt for license information.
-# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-#
-# ===----------------------------------------------------------------------===##
-
-from __future__ import print_function
-import re
-import gdb
-import sys
-
-# https://sourceware.org/gdb/current/onlinedocs/gdb.html/Python.html
-
-test_failures = 0
-
-# Sometimes the inital run command can fail to trace the process.
-# (e.g. you don't have ptrace permissions)
-# In these cases gdb still sends us an exited event so we cannot
-# see what "run" printed to check for a warning message, since
-# we get taken to our exit handler before we can look.
-# Instead check that at least one test has been run by the time
-# we exit.
-has_run_tests = False
-
-
-class CheckResult(gdb.Command):
-    """GDB Tester"""
-
-    def __init__(self):
-        super(CheckResult, self).__init__("check_is_debugger_present", gdb.COMMAND_DATA)
-
-    def invoke(self, arg, from_tty):
-        global has_run_tests
-
-        try:
-            print("GDB Custom Test is starting!")
-
-            has_run_tests = True
-
-            # Stack frame is:
-            # 0. StopForDebugger
-            # 1. ComparePrettyPrintToChars or ComparePrettyPrintToRegex
-            # 2. TestCase
-            compare_frame = gdb.newest_frame().older()
-            testcase_frame = compare_frame.older()
-            test_loc = testcase_frame.find_sal()
-
-            # Use interactive commands in the correct context to get the pretty
-            # printed version
-
-            value_str = self._get_value_string(compare_frame, testcase_frame)
-            print(f"====> GDB output: {compare_frame}")
-            print(f"====> GDB output: {testcase_frame}")
-            print(f"====> GDB output: {test_loc}")
-            print(f"====> GDB output: {value_str}")
-
-            # Ignore the convenience variable name and newline
-            value = value_str[value_str.find("= ") + 2 : -1]
-            gdb.newest_frame().select()
-            expectation_val = compare_frame.read_var("isDebuggerPresent")
-            print(f"====> GDB: expectation_val isDebuggerPresent = {expectation_val}")
-            if not expectation_val:
-                global test_failures
-                print("FAIL: " + test_loc.symtab.filename + ":" + str(test_loc.line))
-                print("`isDebuggerPresent` value is `false`, value should be `true`")
-                test_failures += 1
-            else:
-                print("PASS: " + test_loc.symtab.filename + ":" + str(test_loc.line))
-            
-            expectation_val = compare_frame.read_var("isDebuggerPresent1")
-            if expectation_val:
-                print(f"====> GDB: expectation_val isDebuggerPresent1 = {expectation_val}")
-            expectation_val = compare_frame.read_var("helpMeStr")
-            if expectation_val == "Yeah it is working!":
-                print(f"====> GDB: expectation_val helpMeStr = {expectation_val}")
-            else:
-                print(f"====> GDB error: helpMeStr  {expectation_val}")
-
-            # check_literal = expectation_val.string(encoding="utf-8")
-            # if "PrettyPrintToRegex" in compare_frame.name():
-            #     test_fails = not re.search(check_literal, value)
-            # else:
-            #     test_fails = value != check_literal
-
-            # if test_fails:
-            #     global test_failures
-            #     print("FAIL: " + test_loc.symtab.filename + ":" + str(test_loc.line))
-            #     print("GDB printed:")
-            #     print("   " + repr(value))
-            #     print("Value should match:")
-            #     print("   " + repr(check_literal))
-            #     test_failures += 1
-            # else:
-            #     print("PASS: " + test_loc.symtab.filename + ":" + str(test_loc.line))
-
-        except RuntimeError as e:
-            # At this point, lots of different things could be wrong, so don't try to
-            # recover or figure it out. Don't exit either, because then it's
-            # impossible to debug the framework itself.
-            print("FAIL: Something is wrong in the test framework.")
-            print(str(e))
-
-            test_failures += 1
-
-    # def _get_value_string(self, compare_frame, testcase_frame):
-    #     compare_frame.select()
-    #     if "ComparePrettyPrint" in compare_frame.name():
-    #         s = gdb.execute("p value", to_string=True)
-    #     else:
-    #         value_str = str(compare_frame.read_var("value"))
-    #         clean_expression_str = value_str.strip("'\"")
-    #         testcase_frame.select()
-    #         s = gdb.execute("p " + clean_expression_str, to_string=True)
-    #     if sys.version_info.major == 2:
-    #         return s.decode("utf-8")
-    #     return s
-    def _get_value_string(self, compare_frame, testcase_frame):
-        compare_frame.select()
-        # if "ComparePrettyPrint" in compare_frame.name():
-        #     s = gdb.execute("p value", to_string=True)
-        # else:
-        #     value_str = str(compare_frame.read_var("value"))
-        #     clean_expression_str = value_str.strip("'\"")
-        #     testcase_frame.select()
-        #     s = gdb.execute("p " + clean_expression_str, to_string=True)
-        # if sys.version_info.major == 2:
-        #     return s.decode("utf-8")
-        s = compare_frame.name()
-        return s
-
-
-def exit_handler(event=None):
-    global test_failures
-    global has_run_tests
-
-    if not has_run_tests:
-        print("FAILED test program did not run correctly, check gdb warnings")
-        test_failures = -1
-    elif test_failures:
-        print("FAILED %d cases" % test_failures)
-    exit(test_failures)
-
-def main():
-    # Start code executed at load time
-
-    # Disable terminal paging
-    gdb.execute("set height 0")
-    gdb.execute("set python print-stack full")
-
-    test = CheckResult()
-    test_bp = gdb.Breakpoint("StopForDebugger")
-    test_bp.enabled = True
-    test_bp.silent = True
-    # test_bp.commands = "check_is_debugger_present\ncontinue"
-    test_bp.commands = """check_is_debugger_present
-    continue"""
-
-    # "run" won't return if the program exits; ensure the script regains control.
-    gdb.events.exited.connect(exit_handler)
-    gdb.execute("run")
-    # If the program didn't exit, something went wrong, but we don't
-    # know what. Fail on exit.
-    test.test_failures += 1
-    exit_handler(None)
-
-    print(f"Test failures count: {test.test_failures}")
-
-if __name__ == "__main__":
-    main()

>From 45d442bc75f3d33d894c846763602892afa1eb0c Mon Sep 17 00:00:00 2001
From: Hristo Hristov <hghristov.rmm at gmail.com>
Date: Tue, 6 Feb 2024 13:37:07 +0200
Subject: [PATCH 12/40] Refactoring

---
 ...nt_if_debugging_with_debugger_lldb.sh.cpp} |   0
 .../debugging/breakpoint_with_debugger_gdb.py | 120 +++++++++++++++++
 .../breakpoint_with_debugger_gdb.sh.cpp       |  69 ++++++++++
 .../breakpoint_with_debugger_gdb_test.py      | 123 ++++++++++++++++++
 ...db.py => breakpoint_with_debugger_lldb.py} |   2 +
 ...p => breakpoint_with_debugger_lldb.sh.cpp} |   0
 .../is_debugger_present.with_debugger_lldb.py |  10 --
 ... is_debugger_present_with_debugger_gdb.py} |   6 +-
 ...debugger_present_with_debugger_gdb.sh.cpp} |   4 +-
 .../is_debugger_present_with_debugger_lldb.py |  99 ++++++++++++++
 ...ebugger_present_with_debugger_lldb.sh.cpp} |  10 +-
 11 files changed, 422 insertions(+), 21 deletions(-)
 rename libcxx/test/std/utilities/debugging/{breakpoint_if_debugging.with_debugger_lldb.sh.cpp => breakpoint_if_debugging_with_debugger_lldb.sh.cpp} (100%)
 create mode 100644 libcxx/test/std/utilities/debugging/breakpoint_with_debugger_gdb.py
 create mode 100644 libcxx/test/std/utilities/debugging/breakpoint_with_debugger_gdb.sh.cpp
 create mode 100644 libcxx/test/std/utilities/debugging/breakpoint_with_debugger_gdb_test.py
 rename libcxx/test/std/utilities/debugging/{breakpoint.with_debugger_lldb.py => breakpoint_with_debugger_lldb.py} (79%)
 rename libcxx/test/std/utilities/debugging/{breakpoint.with_debugger_lldb.sh.cpp => breakpoint_with_debugger_lldb.sh.cpp} (100%)
 delete mode 100644 libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_lldb.py
 rename libcxx/test/std/utilities/debugging/{is_debugger_present.with_debugger_gdb.py => is_debugger_present_with_debugger_gdb.py} (96%)
 rename libcxx/test/std/utilities/debugging/{is_debugger_present.with_debugger_gdb.sh.cpp => is_debugger_present_with_debugger_gdb.sh.cpp} (90%)
 create mode 100644 libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_lldb.py
 rename libcxx/test/std/utilities/debugging/{is_debugger_present.with_debugger_lldb.sh.cpp => is_debugger_present_with_debugger_lldb.sh.cpp} (80%)

diff --git a/libcxx/test/std/utilities/debugging/breakpoint_if_debugging.with_debugger_lldb.sh.cpp b/libcxx/test/std/utilities/debugging/breakpoint_if_debugging_with_debugger_lldb.sh.cpp
similarity index 100%
rename from libcxx/test/std/utilities/debugging/breakpoint_if_debugging.with_debugger_lldb.sh.cpp
rename to libcxx/test/std/utilities/debugging/breakpoint_if_debugging_with_debugger_lldb.sh.cpp
diff --git a/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_gdb.py b/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_gdb.py
new file mode 100644
index 00000000000000..851d11e00786fe
--- /dev/null
+++ b/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_gdb.py
@@ -0,0 +1,120 @@
+# ===----------------------------------------------------------------------===##
+#
+# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+# See https://llvm.org/LICENSE.txt for license information.
+# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+#
+# ===----------------------------------------------------------------------===##
+
+from __future__ import print_function
+import gdb
+
+# https://sourceware.org/gdb/current/onlinedocs/gdb.html/Python.html
+
+test_failures = 0
+
+# Sometimes the inital run command can fail to trace the process.
+# (e.g. you don't have ptrace permissions)
+# In these cases gdb still sends us an exited event so we cannot
+# see what "run" printed to check for a warning message, since
+# we get taken to our exit handler before we can look.
+# Instead check that at least one test has been run by the time
+# we exit.
+has_run_tests = False
+
+
+class CheckResult(gdb.Command):
+    """GDB Tester"""
+
+    def __init__(self):
+        super(CheckResult, self).__init__("check_breakpoint", gdb.COMMAND_DATA)
+
+    def invoke(self, arg, from_tty):
+        global has_run_tests
+
+        try:
+            has_run_tests = True
+
+            # Stack frame is:
+            # 0. StopForDebugger
+            # 1. Check `isDebuggerPresent`
+
+            compare_frame = gdb.newest_frame().older()
+            testcase_frame = compare_frame.older()
+            test_loc = testcase_frame.find_sal()
+
+            # Ignore the convenience variable name and newline
+
+            frame_name = compare_frame.name()
+
+            if "std::__1::__breakpoint" in compare_frame.name():
+                print(f"===> GDB frame name:{frame_name}")
+                # s = gdb.execute("p value", to_string=True)
+
+            gdb.newest_frame().select()
+            expectation_val = compare_frame.read_var("isDebuggerPresent")
+
+            if not expectation_val:
+                global test_failures
+
+                print("FAIL: " + test_loc.symtab.filename + ":" + str(test_loc.line))
+                print("`isDebuggerPresent` value is `false`, value should be `true`")
+
+                test_failures += 1
+            else:
+                print("PASS: " + test_loc.symtab.filename + ":" + str(test_loc.line))
+
+        except RuntimeError as e:
+            # At this point, lots of different things could be wrong, so don't try to
+            # recover or figure it out. Don't exit either, because then it's
+            # impossible to debug the framework itself.
+
+            print("FAIL: Something is wrong in the test framework.")
+            print(str(e))
+
+            test_failures += 1
+
+
+def exit_handler(event=None):
+    """Exit handler"""
+
+    global test_failures
+    global has_run_tests
+
+    if not has_run_tests:
+        print("FAILED test program did not run correctly, check gdb warnings")
+        test_failures = -1
+    elif test_failures:
+        print(f"FAILED {test_failures} cases")
+    exit(test_failures)
+
+def main():
+    # Start code executed at load time
+
+    # Disable terminal paging
+
+    gdb.execute("set height 0")
+    gdb.execute("set python print-stack full")
+
+    test = CheckResult()
+    test_bp = gdb.Breakpoint("StopForDebugger")
+    test_bp.enabled = True
+    test_bp.silent = True
+    test_bp.commands = """check_breakpoint
+    continue"""
+
+    # "run" won't return if the program exits; ensure the script regains control.
+
+    gdb.events.exited.connect(exit_handler)
+    gdb.execute("run")
+
+    # If the program didn't exit, something went wrong, but we don't
+    # know what. Fail on exit.
+
+    test_failures += 1
+    exit_handler(None)
+
+    print(f"Test failures count: {test_failures}")
+
+if __name__ == "__main__":
+    main()
diff --git a/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_gdb.sh.cpp b/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_gdb.sh.cpp
new file mode 100644
index 00000000000000..0315869489949d
--- /dev/null
+++ b/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_gdb.sh.cpp
@@ -0,0 +1,69 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// UNSUPPORTED: c++03, c++11, c++14, c++17, c++20, c++23
+// REQUIRES: host-has-gdb-with-python
+// UNSUPPORTED: android
+// XFAIL: LIBCXX-AIX-FIXME, LIBCXX-PICOLIBC-FIXME
+
+// RUN: %{cxx} %{flags} %s -o %t.exe %{compile_flags} -g %{link_flags}
+// RUN: %{gdb} %t.exe -ex "source %S/breakpoint.with_debugger_gdb.py" -ex run// lldb ./build/default.debug.libcxx.testing/LLVM-Testing -o "command script -l python import /home/hristo/Projects/llvm-project/libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_lldb.py" -o run -o detach -o quit
+ -ex detach -ex quit --silent
+
+// <debugging>
+
+// void breakpoint() noexcept;
+
+#include <cassert>
+#include <debugging>
+
+#include "test_macros.h"
+
+#ifdef TEST_COMPILER_GCC
+#  define OPT_NONE __attribute__((noinline))
+#else
+#  define OPT_NONE __attribute__((optnone))
+#endif
+
+void StopForDebugger() OPT_NONE;
+void StopForDebugger() {}
+
+// Test with debugger attached:
+
+// GDB command:  `gdb breakpoint.pass -ex run -ex detach -ex quit --silent`
+
+gdb breakpoint.pass -ex run -ex "signal SIGTRAP" -ex detach -ex quit --silent
+
+//
+// Sample GDB ouput:
+//
+// Reading symbols from breakpoint.pass..
+// Starting program: /home/llvm-dev/Projects/llvm-project/build/breakpoint.pass
+// [Thread debugging using libthread_db enabled]
+// Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
+
+// Program received signal SIGTRAP, Trace/breakpoint trap.
+// std::__1::__breakpoint () at /home/llvm-dev/Projects/llvm-project/libcxx/src/debugging.cpp:44
+// warning: Source file is more recent than executable.
+// 44	}
+// Detaching from program: /home/llvm-dev/Projects/llvm-project/build/breakpoint.pass, process 53887
+// [Inferior 1 (process 53887) detached]
+
+void test() {
+  static_assert(noexcept(std::breakpoint()));
+
+  StopForDebugger();
+  std::breakpoint();
+  StopForDebugger();
+}
+
+int main(int, char**) {
+  test();
+
+  return 0;
+}
diff --git a/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_gdb_test.py b/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_gdb_test.py
new file mode 100644
index 00000000000000..8e8ac0eaf17a12
--- /dev/null
+++ b/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_gdb_test.py
@@ -0,0 +1,123 @@
+# ===----------------------------------------------------------------------===##
+#
+# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+# See https://llvm.org/LICENSE.txt for license information.
+# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+#
+# ===----------------------------------------------------------------------===##
+
+from __future__ import print_function
+import gdb
+
+# https://sourceware.org/gdb/current/onlinedocs/gdb.html/Python.html
+
+test_failures = 0
+
+# Sometimes the inital run command can fail to trace the process.
+# (e.g. you don't have ptrace permissions)
+# In these cases gdb still sends us an exited event so we cannot
+# see what "run" printed to check for a warning message, since
+# we get taken to our exit handler before we can look.
+# Instead check that at least one test has been run by the time
+# we exit.
+has_run_tests = False
+
+
+class CheckResult(gdb.Command):
+    """GDB Tester"""
+
+    def __init__(self):
+        super(CheckResult, self).__init__("check_breakpoint", gdb.COMMAND_DATA)
+
+    def invoke(self, arg, from_tty):
+        global has_run_tests
+
+        try:
+            has_run_tests = True
+
+            # Stack frame is:
+            # 0. StopForDebugger
+            # 1. Check `isDebuggerPresent`
+
+            compare_frame = gdb.newest_frame().older()
+            testcase_frame = compare_frame.older()
+            test_loc = testcase_frame.find_sal()
+
+            # Ignore the convenience variable name and newline
+
+            frame_name = compare_frame.name()
+
+            if "std::__1::__breakpoint" in compare_frame.name():
+                print(f"===> GDB frame name:{frame_name}")
+                # s = gdb.execute("p value", to_string=True)
+            print(f"===> GDB frame name:{frame_name}")
+
+            gdb.newest_frame().select()
+            expectation_val = compare_frame.read_var("isDebuggerPresent")
+
+            if not expectation_val:
+                global test_failures
+
+                print("FAIL: " + test_loc.symtab.filename + ":" + str(test_loc.line))
+                print("`isDebuggerPresent` value is `false`, value should be `true`")
+
+                test_failures += 1
+            else:
+                print("PASS: " + test_loc.symtab.filename + ":" + str(test_loc.line))
+
+        except RuntimeError as e:
+            # At this point, lots of different things could be wrong, so don't try to
+            # recover or figure it out. Don't exit either, because then it's
+            # impossible to debug the framework itself.
+
+            print("FAIL: Something is wrong in the test framework.")
+            print(str(e))
+
+            test_failures += 1
+
+
+def exit_handler(event=None):
+    """Exit handler"""
+
+    global test_failures
+    global has_run_tests
+
+    if not has_run_tests:
+        print("FAILED test program did not run correctly, check gdb warnings")
+        test_failures = -1
+    elif test_failures:
+        print(f"FAILED {test_failures} cases")
+    exit(test_failures)
+
+def main():
+    # Start code executed at load time
+
+    # Disable terminal paging
+
+    gdb.execute("set height 0")
+    gdb.execute("set python print-stack full")
+
+    test = CheckResult()
+    test_bp = gdb.Breakpoint("StopForDebugger")
+    test_bp.enabled = True
+    test_bp.silent = True
+    test_bp.commands = """continue
+    signal SIGTRAP
+    check_breakpoint
+    continue"""
+
+    # "run" won't return if the program exits; ensure the script regains control.
+
+    gdb.events.exited.connect(exit_handler)
+    gdb.execute("run")
+
+    # If the program didn't exit, something went wrong, but we don't
+    # know what. Fail on exit.
+
+   #  test_failures += 1
+    exit_handler(None)
+
+    print(f"Test failures count: {test_failures}")
+
+if __name__ == "__main__":
+    main()
diff --git a/libcxx/test/std/utilities/debugging/breakpoint.with_debugger_lldb.py b/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_lldb.py
similarity index 79%
rename from libcxx/test/std/utilities/debugging/breakpoint.with_debugger_lldb.py
rename to libcxx/test/std/utilities/debugging/breakpoint_with_debugger_lldb.py
index 41af51bc13a19b..4d0f19d1203a50 100644
--- a/libcxx/test/std/utilities/debugging/breakpoint.with_debugger_lldb.py
+++ b/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_lldb.py
@@ -9,6 +9,8 @@
 import lldb
 
 # https://lldb.llvm.org/use/python-reference.html#running-a-python-script-when-a-breakpoint-gets-hit
+# Recognize __builtin_debugtrap on arm64, advance pc past it so users can continue easily
+# https://reviews.llvm.org/D91238#change-LKCsq6kcwyVV
 
 def breakpoint_function_wrapper(frame, bp_loc, internal_dict):
    # Your code goes here
diff --git a/libcxx/test/std/utilities/debugging/breakpoint.with_debugger_lldb.sh.cpp b/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_lldb.sh.cpp
similarity index 100%
rename from libcxx/test/std/utilities/debugging/breakpoint.with_debugger_lldb.sh.cpp
rename to libcxx/test/std/utilities/debugging/breakpoint_with_debugger_lldb.sh.cpp
diff --git a/libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_lldb.py b/libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_lldb.py
deleted file mode 100644
index 61979b9a6e53d9..00000000000000
--- a/libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_lldb.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# ===----------------------------------------------------------------------===##
-#
-# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-# See https://llvm.org/LICENSE.txt for license information.
-# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-#
-# ===----------------------------------------------------------------------===##
-
-import lldb
-
diff --git a/libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_gdb.py b/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_gdb.py
similarity index 96%
rename from libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_gdb.py
rename to libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_gdb.py
index 1446df2bd0ed13..ce6b19c59ade81 100644
--- a/libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_gdb.py
+++ b/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_gdb.py
@@ -45,7 +45,6 @@ def invoke(self, arg, from_tty):
 
             # Ignore the convenience variable name and newline
 
-            # value = value_str[value_str.find("= ") + 2 : -1]
             gdb.newest_frame().select()
             expectation_val = compare_frame.read_var("isDebuggerPresent")
 
@@ -84,14 +83,13 @@ def exit_handler(event=None):
     exit(test_failures)
 
 def main():
-    # Start code executed at load time
-
+    """Main entry point"""
     # Disable terminal paging
 
     gdb.execute("set height 0")
     gdb.execute("set python print-stack full")
 
-    test = CheckResult()
+    CheckResult()
     test_bp = gdb.Breakpoint("StopForDebugger")
     test_bp.enabled = True
     test_bp.silent = True
diff --git a/libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_gdb.sh.cpp b/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_gdb.sh.cpp
similarity index 90%
rename from libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_gdb.sh.cpp
rename to libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_gdb.sh.cpp
index f35bec75a98553..9a1e7fdcf1b787 100644
--- a/libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_gdb.sh.cpp
+++ b/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_gdb.sh.cpp
@@ -12,7 +12,7 @@
 // XFAIL: LIBCXX-AIX-FIXME, LIBCXX-PICOLIBC-FIXME
 
 // RUN: %{cxx} %{flags} %s -o %t.exe %{compile_flags} -g %{link_flags}
-// RUN: %{gdb} %t.exe -ex "source %S/is_debugger_present.with_debugger_gdb.py" -ex run -ex detach -ex quit --silent
+// RUN: %{gdb} %t.exe -ex "source %S/is_debugger_present_with_debugger_gdb.py" -ex run -ex detach -ex quit --silent
 
 // <debugging>
 
@@ -40,7 +40,7 @@ void StopForDebugger(void*) OPT_NONE;
 void StopForDebugger(void*) {}
 
 // Test with debugger attached:
-//   GDB command: `gdb is_debugger_present.pass -ex run -ex detach -ex quit --silent`
+//   GDB command: `gdb is_debugger_present_with_debugger_gdb.sh -ex run -ex detach -ex quit --silent`
 
 void test() {
   static_assert(noexcept(std::is_debugger_present()));
diff --git a/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_lldb.py b/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_lldb.py
new file mode 100644
index 00000000000000..d0349db626d099
--- /dev/null
+++ b/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_lldb.py
@@ -0,0 +1,99 @@
+# ===----------------------------------------------------------------------===##
+#
+# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+# See https://llvm.org/LICENSE.txt for license information.
+# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+#
+# ===----------------------------------------------------------------------===##
+
+import lldb
+
+def breakpoint_handler(frame, bp_loc, internal_dict):
+    name = frame.GetFunctionName()
+    print(f"======> LLDB: func: {name}")
+    module = frame.GetModule()
+    filename = module.file.GetFilename()
+    print(f"======> LLDB: file: {filename}")
+    line = frame.GetLineEntry().GetLine()
+    print(f"======> LLDB: file: {line}")
+    parent = frame.get_parent_frame()
+
+    expectation_val = parent.FindVariable("isDebuggerPresent")
+    print(f"------ var: {expectation_val}")
+    expectation_val = parent.FindVariable("isDebuggerPresent")
+    print(f"------ var val: {expectation_val.value}")
+
+    # expectation_val = frame.FindVariable("isDebuggerPresent")
+    # print(f"------ var: {frame.variables}")
+
+    # for var in frame.variables:
+    #     print(f"     far: {var.name}")
+
+    # print(f"typeof: {type(expectation_val.value)}")
+    # print(f"typeof: {type(expectation_val.type)}")
+    # print(f"typeof: {type(expectation_val.value_type)}")
+    # print(f"expectation_val.value: {expectation_val.value}")
+    # print(f"expectation_val.value 2: {expectation_val}")
+    # value_value = expectation_val.value
+
+    # if value_value is None:
+    #     print(" ---- None")
+    # else:
+    #     print(f"---- Yes {value_value}")
+
+
+    if expectation_val.value == "true":
+        print(" ---- yes")
+    else:
+        print("---- no")
+
+    if expectation_val is None or expectation_val.value == "false":
+        # global test_failures
+
+        print("FAIL: " + filename + ":" + str(line))
+        print("`isDebuggerPresent` value is `false`, value should be `true`")
+
+        # test_failures += 1
+    else:
+        print("PASS: " + filename + ":" + str(line))
+
+
+def __lldb_init_module(debugger, internal_dict):
+    print("-------- START")
+    target = debugger.GetSelectedTarget()
+    test_bp = target.BreakpointCreateByName("StopForDebugger")
+    test_bp.SetScriptCallbackFunction("is_debugger_present_with_debugger_lldb.breakpoint_handler")
+    test_bp.enabled = True
+    print("------- END")
+
+
+# def main():
+#     """Main entry point"""
+#     print("==============> Hello LLDB Python")
+#     # Disable terminal paging
+
+#     # gdb.execute("set height 0")
+#     # gdb.execute("set python print-stack full")
+
+#     # CheckResult()
+#     # test_bp = gdb.Breakpoint("StopForDebugger")
+#     # test_bp.enabled = True
+#     # test_bp.silent = True
+#     # test_bp.commands = """check_is_debugger_present
+#     # continue"""
+
+#     # # "run" won't return if the program exits; ensure the script regains control.
+
+#     # gdb.events.exited.connect(exit_handler)
+#     # gdb.execute("run")
+
+#     # # If the program didn't exit, something went wrong, but we don't
+#     # # know what. Fail on exit.
+
+#     # test_failures += 1
+#     # exit_handler(None)
+
+#     # print(f"Test failures count: {test_failures}")
+
+# if __name__ == "__main__":
+#     main()
diff --git a/libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_lldb.sh.cpp b/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_lldb.sh.cpp
similarity index 80%
rename from libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_lldb.sh.cpp
rename to libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_lldb.sh.cpp
index 1d954137b8e693..0411b42bd31e00 100644
--- a/libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_lldb.sh.cpp
+++ b/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_lldb.sh.cpp
@@ -12,7 +12,7 @@
 // XFAIL: LIBCXX-AIX-FIXME, LIBCXX-PICOLIBC-FIXME
 
 // RUN: %{cxx} %{flags} %s -o %t.exe %{compile_flags} -g %{link_flags}
-// RUN: %{lldb} %t.exe -ex "command source %S/is_debugger_present.with_debugger_lldb.py" -o run -o detach -o quit
+// RUN: %{lldb} %t.exe -ex "command script import %S/is_debugger_present_with_debugger_lldb.py" -o run -o detach -o quit
 
 // <debugging>
 
@@ -36,18 +36,18 @@ void MarkAsLive(Type&&) OPT_NONE;
 template <typename Type>
 void MarkAsLive(Type&&) {}
 
-void StopForDebugger(void*, void*) OPT_NONE;
-void StopForDebugger(void*, void*) {}
+void StopForDebugger(void*) OPT_NONE;
+void StopForDebugger(void*) {}
 
 // Test with debugger attached:
-//   LLDB command: `lldb "is_debugger_present.pass" -o run -o detach -o quit`
+//   LLDB command: `lldb "is_debugger_present_with_debugger_lldb.sh" -o run -o detach -o quit`
 
 void test() {
   static_assert(noexcept(std::is_debugger_present()));
 
   std::same_as<bool> decltype(auto) isDebuggerPresent = std::is_debugger_present();
   MarkAsLive(isDebuggerPresent);
-  StopForDebuger(&isDebuggerPresent);
+  StopForDebugger(&isDebuggerPresent);
 }
 
 int main(int, char**) {

>From ffc70cf31c5c1321ca69fb6f1b55e39f9cfda7c8 Mon Sep 17 00:00:00 2001
From: Hristo Hristov <hghristov.rmm at gmail.com>
Date: Tue, 6 Feb 2024 14:51:34 +0200
Subject: [PATCH 13/40] WIP: LLDB `is_debugger_present` script

---
 .../is_debugger_present_with_debugger_lldb.py | 119 ++++++++----------
 ...debugger_present_with_debugger_lldb.sh.cpp |   2 +-
 libcxx/utils/libcxx/test/features.py          |  29 +----
 3 files changed, 52 insertions(+), 98 deletions(-)

diff --git a/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_lldb.py b/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_lldb.py
index d0349db626d099..960ceae8dd8b4b 100644
--- a/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_lldb.py
+++ b/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_lldb.py
@@ -8,92 +8,71 @@
 
 import lldb
 
+test_failures = 0
+
+# Sometimes the inital run command can fail to trace the process.
+# (e.g. you don't have ptrace permissions)
+# In these cases gdb still sends us an exited event so we cannot
+# see what "run" printed to check for a warning message, since
+# we get taken to our exit handler before we can look.
+# Instead check that at least one test has been run by the time
+# we exit.
+has_run_tests = False
+
 def breakpoint_handler(frame, bp_loc, internal_dict):
-    name = frame.GetFunctionName()
-    print(f"======> LLDB: func: {name}")
-    module = frame.GetModule()
-    filename = module.file.GetFilename()
-    print(f"======> LLDB: file: {filename}")
-    line = frame.GetLineEntry().GetLine()
-    print(f"======> LLDB: file: {line}")
-    parent = frame.get_parent_frame()
+    print("===> breakpoint_handler")
+    global has_run_tests
+
+    try:
+        has_run_tests = True
+
+        module = frame.GetModule()
+        filename = module.compile_units[0].file
+        line = frame.GetLineEntry().GetLine()
+        parent = frame.get_parent_frame()
+        expectation_val = parent.FindVariable("isDebuggerPresent")
 
-    expectation_val = parent.FindVariable("isDebuggerPresent")
-    print(f"------ var: {expectation_val}")
-    expectation_val = parent.FindVariable("isDebuggerPresent")
-    print(f"------ var val: {expectation_val.value}")
+        if expectation_val is None or expectation_val.value == "false":
+            global test_failures
 
-    # expectation_val = frame.FindVariable("isDebuggerPresent")
-    # print(f"------ var: {frame.variables}")
+            print(f"FAIL: {filename}:{line}")
+            print("`isDebuggerPresent` value is `false`, value should be `true`")
 
-    # for var in frame.variables:
-    #     print(f"     far: {var.name}")
+            test_failures += 1
+            exit(-1)
+        else:
+            print(f"PASS: {filename}:{line}")
 
-    # print(f"typeof: {type(expectation_val.value)}")
-    # print(f"typeof: {type(expectation_val.type)}")
-    # print(f"typeof: {type(expectation_val.value_type)}")
-    # print(f"expectation_val.value: {expectation_val.value}")
-    # print(f"expectation_val.value 2: {expectation_val}")
-    # value_value = expectation_val.value
+    except RuntimeError as e:
+        # At this point, lots of different things could be wrong, so don't try to
+        # recover or figure it out. Don't exit either, because then it's
+        # impossible to debug the framework itself.
 
-    # if value_value is None:
-    #     print(" ---- None")
-    # else:
-    #     print(f"---- Yes {value_value}")
+        print("FAIL: Something is wrong in the test framework.")
+        print(str(e))
 
+        test_failures += 1
 
-    if expectation_val.value == "true":
-        print(" ---- yes")
-    else:
-        print("---- no")
+def exit_handler(event=None):
+    """Exit handler"""
 
-    if expectation_val is None or expectation_val.value == "false":
-        # global test_failures
+    global test_failures
+    global has_run_tests
 
-        print("FAIL: " + filename + ":" + str(line))
-        print("`isDebuggerPresent` value is `false`, value should be `true`")
+    if not has_run_tests:
+        print("FAILED test program did not run correctly, check lldb warnings")
+        test_failures = -1
+    elif test_failures:
+        print(f"FAILED {test_failures} cases")
 
-        # test_failures += 1
-    else:
-        print("PASS: " + filename + ":" + str(line))
+    exit(test_failures)
 
 
 def __lldb_init_module(debugger, internal_dict):
-    print("-------- START")
     target = debugger.GetSelectedTarget()
     test_bp = target.BreakpointCreateByName("StopForDebugger")
     test_bp.SetScriptCallbackFunction("is_debugger_present_with_debugger_lldb.breakpoint_handler")
     test_bp.enabled = True
-    print("------- END")
-
-
-# def main():
-#     """Main entry point"""
-#     print("==============> Hello LLDB Python")
-#     # Disable terminal paging
-
-#     # gdb.execute("set height 0")
-#     # gdb.execute("set python print-stack full")
-
-#     # CheckResult()
-#     # test_bp = gdb.Breakpoint("StopForDebugger")
-#     # test_bp.enabled = True
-#     # test_bp.silent = True
-#     # test_bp.commands = """check_is_debugger_present
-#     # continue"""
-
-#     # # "run" won't return if the program exits; ensure the script regains control.
-
-#     # gdb.events.exited.connect(exit_handler)
-#     # gdb.execute("run")
-
-#     # # If the program didn't exit, something went wrong, but we don't
-#     # # know what. Fail on exit.
-
-#     # test_failures += 1
-#     # exit_handler(None)
-
-#     # print(f"Test failures count: {test_failures}")
 
-# if __name__ == "__main__":
-#     main()
+    # test_failures += 1
+    # exit_handler(None)
diff --git a/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_lldb.sh.cpp b/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_lldb.sh.cpp
index 0411b42bd31e00..d51eb03e1e9dc1 100644
--- a/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_lldb.sh.cpp
+++ b/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_lldb.sh.cpp
@@ -12,7 +12,7 @@
 // XFAIL: LIBCXX-AIX-FIXME, LIBCXX-PICOLIBC-FIXME
 
 // RUN: %{cxx} %{flags} %s -o %t.exe %{compile_flags} -g %{link_flags}
-// RUN: %{lldb} %t.exe -ex "command script import %S/is_debugger_present_with_debugger_lldb.py" -o run -o detach -o quit
+// RUN: %{lldb} %t.exe -o "command script import %S/is_debugger_present_with_debugger_lldb.py" -o run -o detach -o quit
 
 // <debugging>
 
diff --git a/libcxx/utils/libcxx/test/features.py b/libcxx/utils/libcxx/test/features.py
index 5084b60de7a841..4c7281e965bc86 100644
--- a/libcxx/utils/libcxx/test/features.py
+++ b/libcxx/utils/libcxx/test/features.py
@@ -493,38 +493,13 @@ def _getAndroidDeviceApi(cfg):
     ),
 ]
 
-# Detect whether LLDB is on the system, has Python scripting and supports
-# adding breakpoint commands. If so add a substitution to access it.
+# Detect whether LLDB is on the system.
 def check_lldb(cfg):
     lldb_path = shutil.which("lldb")
     if lldb_path is None:
         return False
 
-#     # Check that we can set breakpoint commands.
-#     test_src = """
-# try:
-#   debugger = lldb.SBDebugger.Create()
-#   # Block until target process exits.
-#   debugger.SetAsync(False)
-#   # target = debugger.CreateTarget()
-# except AttributeError:
-#   sys.exit(1)
-# #sys.exit()
-# """
-
-#     try:
-#         stdout = subprocess.check_output(
-#             [lldb_path, "-o", f"script {test_src}", "--batch"],
-#             stderr=subprocess.DEVNULL,
-#             universal_newlines=True,
-#         )
-#     except subprocess.CalledProcessError:
-#         # We can't set breakpoint commands
-#         return False
-
-#     # Check we actually ran the Python
-#     return not "Python scripting is not supported" in stdout
-    return True # TODO: Remove this line
+    return True
 
 
 DEFAULT_FEATURES += [

>From 6817593215eaaf1b1b0f1f9ae592a5c5959181fd Mon Sep 17 00:00:00 2001
From: Hristo Hristov <hghristov.rmm at gmail.com>
Date: Tue, 6 Feb 2024 15:12:09 +0200
Subject: [PATCH 14/40] Added test skelettons

---
 ...eakpoint_if_debugging_with_debugger_gdb.py | 120 ++++++++++++++++++
 ...oint_if_debugging_with_debugger_gdb.sh.cpp |  49 +++++++
 ...akpoint_if_debugging_with_debugger_lldb.py |  67 ++++++++++
 ...int_if_debugging_with_debugger_lldb.sh.cpp |  19 ++-
 .../breakpoint_with_debugger_gdb.sh.cpp       |   5 +-
 .../breakpoint_with_debugger_lldb.py          |  61 ++++++++-
 .../breakpoint_with_debugger_lldb.sh.cpp      |  36 ++----
 7 files changed, 322 insertions(+), 35 deletions(-)
 create mode 100644 libcxx/test/std/utilities/debugging/breakpoint_if_debugging_with_debugger_gdb.py
 create mode 100644 libcxx/test/std/utilities/debugging/breakpoint_if_debugging_with_debugger_gdb.sh.cpp
 create mode 100644 libcxx/test/std/utilities/debugging/breakpoint_if_debugging_with_debugger_lldb.py

diff --git a/libcxx/test/std/utilities/debugging/breakpoint_if_debugging_with_debugger_gdb.py b/libcxx/test/std/utilities/debugging/breakpoint_if_debugging_with_debugger_gdb.py
new file mode 100644
index 00000000000000..be96eccfe26f89
--- /dev/null
+++ b/libcxx/test/std/utilities/debugging/breakpoint_if_debugging_with_debugger_gdb.py
@@ -0,0 +1,120 @@
+# ===----------------------------------------------------------------------===##
+#
+# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+# See https://llvm.org/LICENSE.txt for license information.
+# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+#
+# ===----------------------------------------------------------------------===##
+
+from __future__ import print_function
+import gdb
+
+# https://sourceware.org/gdb/current/onlinedocs/gdb.html/Python.html
+
+test_failures = 0
+
+# Sometimes the inital run command can fail to trace the process.
+# (e.g. you don't have ptrace permissions)
+# In these cases gdb still sends us an exited event so we cannot
+# see what "run" printed to check for a warning message, since
+# we get taken to our exit handler before we can look.
+# Instead check that at least one test has been run by the time
+# we exit.
+has_run_tests = False
+
+
+class CheckResult(gdb.Command):
+    """GDB Tester"""
+
+    def __init__(self):
+        super(CheckResult, self).__init__("check_breakpoint_if_debugging", gdb.COMMAND_DATA)
+
+    def invoke(self, arg, from_tty):
+        global has_run_tests
+
+        try:
+            has_run_tests = True
+
+            # Stack frame is:
+            # 0. StopForDebugger
+            # 1. Check `isDebuggerPresent`
+
+            compare_frame = gdb.newest_frame().older()
+            testcase_frame = compare_frame.older()
+            test_loc = testcase_frame.find_sal()
+
+            # Ignore the convenience variable name and newline
+
+            frame_name = compare_frame.name()
+
+            if "std::__1::__breakpoint" in compare_frame.name():
+                print(f"===> GDB frame name:{frame_name}")
+                # s = gdb.execute("p value", to_string=True)
+
+            gdb.newest_frame().select()
+            expectation_val = compare_frame.read_var("isDebuggerPresent")
+
+            if not expectation_val:
+                global test_failures
+
+                print("FAIL: " + test_loc.symtab.filename + ":" + str(test_loc.line))
+                print("`isDebuggerPresent` value is `false`, value should be `true`")
+
+                test_failures += 1
+            else:
+                print("PASS: " + test_loc.symtab.filename + ":" + str(test_loc.line))
+
+        except RuntimeError as e:
+            # At this point, lots of different things could be wrong, so don't try to
+            # recover or figure it out. Don't exit either, because then it's
+            # impossible to debug the framework itself.
+
+            print("FAIL: Something is wrong in the test framework.")
+            print(str(e))
+
+            test_failures += 1
+
+
+def exit_handler(event=None):
+    """Exit handler"""
+
+    global test_failures
+    global has_run_tests
+
+    if not has_run_tests:
+        print("FAILED test program did not run correctly, check gdb warnings")
+        test_failures = -1
+    elif test_failures:
+        print(f"FAILED {test_failures} cases")
+    exit(test_failures)
+
+def main():
+    # Start code executed at load time
+
+    # Disable terminal paging
+
+    gdb.execute("set height 0")
+    gdb.execute("set python print-stack full")
+
+    test = CheckResult()
+    test_bp = gdb.Breakpoint("StopForDebugger")
+    test_bp.enabled = True
+    test_bp.silent = True
+    test_bp.commands = """check_breakpoint_if_debugging
+    continue"""
+
+    # "run" won't return if the program exits; ensure the script regains control.
+
+    gdb.events.exited.connect(exit_handler)
+    gdb.execute("run")
+
+    # If the program didn't exit, something went wrong, but we don't
+    # know what. Fail on exit.
+
+    test_failures += 1
+    exit_handler(None)
+
+    print(f"Test failures count: {test_failures}")
+
+if __name__ == "__main__":
+    main()
diff --git a/libcxx/test/std/utilities/debugging/breakpoint_if_debugging_with_debugger_gdb.sh.cpp b/libcxx/test/std/utilities/debugging/breakpoint_if_debugging_with_debugger_gdb.sh.cpp
new file mode 100644
index 00000000000000..f618e5240f52cb
--- /dev/null
+++ b/libcxx/test/std/utilities/debugging/breakpoint_if_debugging_with_debugger_gdb.sh.cpp
@@ -0,0 +1,49 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// UNSUPPORTED: c++03, c++11, c++14, c++17, c++20, c++23
+// REQUIRES: host-has-gdb-with-python
+// UNSUPPORTED: android
+// XFAIL: LIBCXX-AIX-FIXME, LIBCXX-PICOLIBC-FIXME
+
+// RUN: %{cxx} %{flags} %s -o %t.exe %{compile_flags} -g %{link_flags}
+// RUN: %{gdb} %t.exe -ex "source %S/breakpoint_if_debugging_with_debugger_gdb.py" -ex run -ex detach -ex quit --silent
+
+// <debugging>
+
+// void breakpoint_if_debugging() noexcept;
+
+#include <cassert>
+#include <debugging>
+
+#include "test_macros.h"
+
+#ifdef TEST_COMPILER_GCC
+#  define OPT_NONE __attribute__((noinline))
+#else
+#  define OPT_NONE __attribute__((optnone))
+#endif
+
+void StopForDebugger() OPT_NONE;
+void StopForDebugger() {}
+
+// Test with debugger attached:
+
+// GDB command:  `gdb breakpoint_if_debugging.pass -ex run -ex detach -ex quit --silent`
+
+void test() {
+  static_assert(noexcept(std::breakpoint_if_debugging()));
+
+  std::breakpoint_if_debugging();
+}
+
+int main(int, char**) {
+  test();
+
+  return 0;
+}
diff --git a/libcxx/test/std/utilities/debugging/breakpoint_if_debugging_with_debugger_lldb.py b/libcxx/test/std/utilities/debugging/breakpoint_if_debugging_with_debugger_lldb.py
new file mode 100644
index 00000000000000..e72802479bc15f
--- /dev/null
+++ b/libcxx/test/std/utilities/debugging/breakpoint_if_debugging_with_debugger_lldb.py
@@ -0,0 +1,67 @@
+# ===----------------------------------------------------------------------===##
+#
+# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+# See https://llvm.org/LICENSE.txt for license information.
+# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+#
+# ===----------------------------------------------------------------------===##
+
+import lldb
+
+test_failures = 0
+
+# Sometimes the inital run command can fail to trace the process.
+# (e.g. you don't have ptrace permissions)
+# In these cases gdb still sends us an exited event so we cannot
+# see what "run" printed to check for a warning message, since
+# we get taken to our exit handler before we can look.
+# Instead check that at least one test has been run by the time
+# we exit.
+has_run_tests = False
+
+def breakpoint_handler(frame, bp_loc, internal_dict):
+    global has_run_tests
+
+    try:
+        has_run_tests = True
+
+        module = frame.GetModule()
+        filename = module.compile_units[0].file
+        line = frame.GetLineEntry().GetLine()
+        parent = frame.get_parent_frame()
+
+      #   TODO: test
+
+    except RuntimeError as e:
+        # At this point, lots of different things could be wrong, so don't try to
+        # recover or figure it out. Don't exit either, because then it's
+        # impossible to debug the framework itself.
+
+        print("FAIL: Something is wrong in the test framework.")
+        print(str(e))
+
+        test_failures += 1
+
+def exit_handler(event=None):
+    """Exit handler"""
+
+    global test_failures
+    global has_run_tests
+
+    if not has_run_tests:
+        print("FAILED test program did not run correctly, check lldb warnings")
+        test_failures = -1
+    elif test_failures:
+        print(f"FAILED {test_failures} cases")
+
+    exit(test_failures)
+
+
+def __lldb_init_module(debugger, internal_dict):
+    target = debugger.GetSelectedTarget()
+    test_bp = target.BreakpointCreateByName("StopForDebugger")
+    test_bp.SetScriptCallbackFunction("is_debugger_present_with_debugger_lldb.breakpoint_handler")
+    test_bp.enabled = True
+
+    # test_failures += 1
+    # exit_handler(None)
\ No newline at end of file
diff --git a/libcxx/test/std/utilities/debugging/breakpoint_if_debugging_with_debugger_lldb.sh.cpp b/libcxx/test/std/utilities/debugging/breakpoint_if_debugging_with_debugger_lldb.sh.cpp
index 2fe76aa8e1b3e2..2b31456f00b275 100644
--- a/libcxx/test/std/utilities/debugging/breakpoint_if_debugging_with_debugger_lldb.sh.cpp
+++ b/libcxx/test/std/utilities/debugging/breakpoint_if_debugging_with_debugger_lldb.sh.cpp
@@ -7,13 +7,12 @@
 //===----------------------------------------------------------------------===//
 
 // UNSUPPORTED: c++03, c++11, c++14, c++17, c++20, c++23
-// XFAIL: LIBCXX-AIX-FIXME, LIBCXX-PICOLIBC-FIXME
-// UNSUPPORTED: gcc
+// REQUIRES: host-has-lldb-with-python
 // UNSUPPORTED: android
+// XFAIL: LIBCXX-AIX-FIXME, LIBCXX-PICOLIBC-FIXME
 
 // RUN: %{cxx} %{flags} %s -o %t.exe %{compile_flags} -g %{link_flags}
-// RUN: %{lldb} %t.exe -o run -o detach -o quit
-// RUN: %{gdb} %t.exe -ex run -ex detach -ex quit --silent
+// RUN: %{lldb} %t.exe -o "command script import %S/breakpoint_if_debugging_with_debugger_lldb.py" -o run -o detach -o quit
 
 // <debugging>
 
@@ -22,10 +21,20 @@
 #include <cassert>
 #include <debugging>
 
+#include "test_macros.h"
+
+#ifdef TEST_COMPILER_GCC
+#  define OPT_NONE __attribute__((noinline))
+#else
+#  define OPT_NONE __attribute__((optnone))
+#endif
+
+void StopForDebugger() OPT_NONE;
+void StopForDebugger() {}
+
 // Test with debugger attached:
 
 // LLDB command: `lldb "breakpoint_if_debugging.pass" -o run -o detach -o quit`
-// GDB command:  `gdb breakpoint_if_debugging.pass -ex run -ex detach -ex quit --silent`
 
 void test() {
   static_assert(noexcept(std::breakpoint_if_debugging()));
diff --git a/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_gdb.sh.cpp b/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_gdb.sh.cpp
index 0315869489949d..efdc0daff1f98f 100644
--- a/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_gdb.sh.cpp
+++ b/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_gdb.sh.cpp
@@ -12,8 +12,7 @@
 // XFAIL: LIBCXX-AIX-FIXME, LIBCXX-PICOLIBC-FIXME
 
 // RUN: %{cxx} %{flags} %s -o %t.exe %{compile_flags} -g %{link_flags}
-// RUN: %{gdb} %t.exe -ex "source %S/breakpoint.with_debugger_gdb.py" -ex run// lldb ./build/default.debug.libcxx.testing/LLVM-Testing -o "command script -l python import /home/hristo/Projects/llvm-project/libcxx/test/std/utilities/debugging/is_debugger_present.with_debugger_lldb.py" -o run -o detach -o quit
- -ex detach -ex quit --silent
+// RUN: %{gdb} %t.exe -ex "source %S/breakpoint_with_debugger_gdb.py" -ex run -ex detach -ex quit --silent
 
 // <debugging>
 
@@ -37,7 +36,7 @@ void StopForDebugger() {}
 
 // GDB command:  `gdb breakpoint.pass -ex run -ex detach -ex quit --silent`
 
-gdb breakpoint.pass -ex run -ex "signal SIGTRAP" -ex detach -ex quit --silent
+// gdb breakpoint.pass -ex run -ex "signal SIGTRAP" -ex detach -ex quit --silent
 
 //
 // Sample GDB ouput:
diff --git a/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_lldb.py b/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_lldb.py
index 4d0f19d1203a50..e72802479bc15f 100644
--- a/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_lldb.py
+++ b/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_lldb.py
@@ -8,9 +8,60 @@
 
 import lldb
 
-# https://lldb.llvm.org/use/python-reference.html#running-a-python-script-when-a-breakpoint-gets-hit
-# Recognize __builtin_debugtrap on arm64, advance pc past it so users can continue easily
-# https://reviews.llvm.org/D91238#change-LKCsq6kcwyVV
+test_failures = 0
 
-def breakpoint_function_wrapper(frame, bp_loc, internal_dict):
-   # Your code goes here
+# Sometimes the inital run command can fail to trace the process.
+# (e.g. you don't have ptrace permissions)
+# In these cases gdb still sends us an exited event so we cannot
+# see what "run" printed to check for a warning message, since
+# we get taken to our exit handler before we can look.
+# Instead check that at least one test has been run by the time
+# we exit.
+has_run_tests = False
+
+def breakpoint_handler(frame, bp_loc, internal_dict):
+    global has_run_tests
+
+    try:
+        has_run_tests = True
+
+        module = frame.GetModule()
+        filename = module.compile_units[0].file
+        line = frame.GetLineEntry().GetLine()
+        parent = frame.get_parent_frame()
+
+      #   TODO: test
+
+    except RuntimeError as e:
+        # At this point, lots of different things could be wrong, so don't try to
+        # recover or figure it out. Don't exit either, because then it's
+        # impossible to debug the framework itself.
+
+        print("FAIL: Something is wrong in the test framework.")
+        print(str(e))
+
+        test_failures += 1
+
+def exit_handler(event=None):
+    """Exit handler"""
+
+    global test_failures
+    global has_run_tests
+
+    if not has_run_tests:
+        print("FAILED test program did not run correctly, check lldb warnings")
+        test_failures = -1
+    elif test_failures:
+        print(f"FAILED {test_failures} cases")
+
+    exit(test_failures)
+
+
+def __lldb_init_module(debugger, internal_dict):
+    target = debugger.GetSelectedTarget()
+    test_bp = target.BreakpointCreateByName("StopForDebugger")
+    test_bp.SetScriptCallbackFunction("is_debugger_present_with_debugger_lldb.breakpoint_handler")
+    test_bp.enabled = True
+
+    # test_failures += 1
+    # exit_handler(None)
\ No newline at end of file
diff --git a/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_lldb.sh.cpp b/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_lldb.sh.cpp
index 2c753b05592e37..9a3ef6c4e5cd60 100644
--- a/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_lldb.sh.cpp
+++ b/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_lldb.sh.cpp
@@ -7,13 +7,12 @@
 //===----------------------------------------------------------------------===//
 
 // UNSUPPORTED: c++03, c++11, c++14, c++17, c++20, c++23
-// XFAIL: LIBCXX-AIX-FIXME, LIBCXX-PICOLIBC-FIXME
-// UNSUPPORTED: gcc
+// REQUIRES: host-has-lldb-with-python
 // UNSUPPORTED: android
+// XFAIL: LIBCXX-AIX-FIXME, LIBCXX-PICOLIBC-FIXME
 
 // RUN: %{cxx} %{flags} %s -o %t.exe %{compile_flags} -g %{link_flags}
-// RUN: %{lldb} %t.exe -o run -o detach -o quit
-// RUN: %{gdb} %t.exe -ex run -ex detach -ex quit --silent
+// RUN: %{lldb} %t.exe -o "command script import %S/breakpoint_with_debugger_lldb.py" -o run -o detach -o quit
 
 // <debugging>
 
@@ -22,10 +21,20 @@
 #include <cassert>
 #include <debugging>
 
+#include "test_macros.h"
+
+#ifdef TEST_COMPILER_GCC
+#  define OPT_NONE __attribute__((noinline))
+#else
+#  define OPT_NONE __attribute__((optnone))
+#endif
+
+void StopForDebugger() OPT_NONE;
+void StopForDebugger() {}
+
 // Test with debugger attached:
 
 // LLDB command: `lldb "breakpoint.pass" -o run -o detach -o quit`
-// GDB command:  `gdb breakpoint.pass -ex run -ex detach -ex quit --silent`
 
 //
 // Sample LLDB output:
@@ -45,23 +54,6 @@
 // Process 43162 detached
 // (lldb) quit
 
-//
-// Sample GDB ouput:
-//
-// Reading symbols from breakpoint.pass..
-// Starting program: /home/llvm-dev/Projects/llvm-project/build/breakpoint.pass
-// [Thread debugging using libthread_db enabled]
-// Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
-
-// Program received signal SIGTRAP, Trace/breakpoint trap.
-// std::__1::__breakpoint () at /home/llvm-dev/Projects/llvm-project/libcxx/src/debugging.cpp:44
-// warning: Source file is more recent than executable.
-// 44	}
-// Detaching from program: /home/llvm-dev/Projects/llvm-project/build/breakpoint.pass, process 53887
-// [Inferior 1 (process 53887) detached]
-
-// https://lldb.llvm.org/use/python-reference.html#running-a-python-script-when-a-breakpoint-gets-hit
-
 void test() {
   static_assert(noexcept(std::breakpoint()));
 

>From 7e7330e00195bb1e8993869111ab5058dbb4f396 Mon Sep 17 00:00:00 2001
From: Hristo Hristov <hghristov.rmm at gmail.com>
Date: Tue, 6 Feb 2024 15:50:28 +0200
Subject: [PATCH 15/40] Tweaks

What was implemented so far:

- Implemented functions
  - [ ] `breakpoint()`
  - [ ] `breakpoint_if_debugging()`
  - [ ] `is_debugger_present()`
- Supported platforms
  - [ ] AIX
  - [x] Apple
  - [x] FreeBSD (not tested)
  - [x] Linux
  - [ ] Picolib
  - [x] Windows
- Supported debuggers (implemented tests)
  - GDB
    - [ ] `breakpoint()`
    - [ ] `breakpoint_if_debugging()`
    - [x] `is_debugger_present()`
  - LLDB
    - [ ] `breakpoint()`
    - [ ] `breakpoint_if_debugging()`
    - [ ] `is_debugger_present()`
---
 .../debugging/is_debugger_present_with_debugger_gdb.py          | 1 +
 .../debugging/is_debugger_present_with_debugger_lldb.py         | 2 --
 2 files changed, 1 insertion(+), 2 deletions(-)

diff --git a/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_gdb.py b/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_gdb.py
index ce6b19c59ade81..e4669c83c4426c 100644
--- a/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_gdb.py
+++ b/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_gdb.py
@@ -98,6 +98,7 @@ def main():
 
     # "run" won't return if the program exits; ensure the script regains control.
 
+    # https://sourceware.org/gdb/current/onlinedocs/gdb.html/Events-In-Python.html
     gdb.events.exited.connect(exit_handler)
     gdb.execute("run")
 
diff --git a/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_lldb.py b/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_lldb.py
index 960ceae8dd8b4b..e8351149082eb8 100644
--- a/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_lldb.py
+++ b/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_lldb.py
@@ -20,7 +20,6 @@
 has_run_tests = False
 
 def breakpoint_handler(frame, bp_loc, internal_dict):
-    print("===> breakpoint_handler")
     global has_run_tests
 
     try:
@@ -39,7 +38,6 @@ def breakpoint_handler(frame, bp_loc, internal_dict):
             print("`isDebuggerPresent` value is `false`, value should be `true`")
 
             test_failures += 1
-            exit(-1)
         else:
             print(f"PASS: {filename}:{line}")
 

>From 91ad4113459a6b4dc1c1b2b04dd9e801f2597f39 Mon Sep 17 00:00:00 2001
From: Hristo Hristov <hghristov.rmm at gmail.com>
Date: Wed, 7 Feb 2024 14:02:08 +0200
Subject: [PATCH 16/40] DONE: `is_debugger_present` test works for GDB and LLDB

---
 ...reakpoint_if_debugging_with_debugger_gdb.sh.cpp |  2 +-
 .../debugging/breakpoint_with_debugger_gdb.sh.cpp  |  2 +-
 .../is_debugger_present_with_debugger_gdb.sh.cpp   |  2 +-
 .../is_debugger_present_with_debugger_lldb.py      | 14 ++++++++++----
 .../is_debugger_present_with_debugger_lldb.sh.cpp  |  2 +-
 5 files changed, 14 insertions(+), 8 deletions(-)

diff --git a/libcxx/test/std/utilities/debugging/breakpoint_if_debugging_with_debugger_gdb.sh.cpp b/libcxx/test/std/utilities/debugging/breakpoint_if_debugging_with_debugger_gdb.sh.cpp
index f618e5240f52cb..ef6e7778369c5c 100644
--- a/libcxx/test/std/utilities/debugging/breakpoint_if_debugging_with_debugger_gdb.sh.cpp
+++ b/libcxx/test/std/utilities/debugging/breakpoint_if_debugging_with_debugger_gdb.sh.cpp
@@ -12,7 +12,7 @@
 // XFAIL: LIBCXX-AIX-FIXME, LIBCXX-PICOLIBC-FIXME
 
 // RUN: %{cxx} %{flags} %s -o %t.exe %{compile_flags} -g %{link_flags}
-// RUN: %{gdb} %t.exe -ex "source %S/breakpoint_if_debugging_with_debugger_gdb.py" -ex run -ex detach -ex quit --silent
+// RUN: %{gdb} %t.exe -ex "source %S/breakpoint_if_debugging_with_debugger_gdb.py" --silent
 
 // <debugging>
 
diff --git a/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_gdb.sh.cpp b/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_gdb.sh.cpp
index efdc0daff1f98f..d1906460a0dfaf 100644
--- a/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_gdb.sh.cpp
+++ b/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_gdb.sh.cpp
@@ -12,7 +12,7 @@
 // XFAIL: LIBCXX-AIX-FIXME, LIBCXX-PICOLIBC-FIXME
 
 // RUN: %{cxx} %{flags} %s -o %t.exe %{compile_flags} -g %{link_flags}
-// RUN: %{gdb} %t.exe -ex "source %S/breakpoint_with_debugger_gdb.py" -ex run -ex detach -ex quit --silent
+// RUN: %{gdb} %t.exe -ex "source %S/breakpoint_with_debugger_gdb.py" --silent
 
 // <debugging>
 
diff --git a/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_gdb.sh.cpp b/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_gdb.sh.cpp
index 9a1e7fdcf1b787..21f2bbc0fc6c98 100644
--- a/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_gdb.sh.cpp
+++ b/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_gdb.sh.cpp
@@ -12,7 +12,7 @@
 // XFAIL: LIBCXX-AIX-FIXME, LIBCXX-PICOLIBC-FIXME
 
 // RUN: %{cxx} %{flags} %s -o %t.exe %{compile_flags} -g %{link_flags}
-// RUN: %{gdb} %t.exe -ex "source %S/is_debugger_present_with_debugger_gdb.py" -ex run -ex detach -ex quit --silent
+// RUN: %{gdb} %t.exe -ex "source %S/is_debugger_present_with_debugger_gdb.py" --silent
 
 // <debugging>
 
diff --git a/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_lldb.py b/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_lldb.py
index e8351149082eb8..2b7523c74ff29e 100644
--- a/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_lldb.py
+++ b/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_lldb.py
@@ -20,6 +20,7 @@
 has_run_tests = False
 
 def breakpoint_handler(frame, bp_loc, internal_dict):
+    print("===============> breakpoint_handler")
     global has_run_tests
 
     try:
@@ -51,7 +52,7 @@ def breakpoint_handler(frame, bp_loc, internal_dict):
 
         test_failures += 1
 
-def exit_handler(event=None):
+def exit_handler(debugger):
     """Exit handler"""
 
     global test_failures
@@ -61,9 +62,10 @@ def exit_handler(event=None):
         print("FAILED test program did not run correctly, check lldb warnings")
         test_failures = -1
     elif test_failures:
+        test_failures -= 1
         print(f"FAILED {test_failures} cases")
 
-    exit(test_failures)
+    debugger.HandleCommand(f"exit {test_failures}")
 
 
 def __lldb_init_module(debugger, internal_dict):
@@ -72,5 +74,9 @@ def __lldb_init_module(debugger, internal_dict):
     test_bp.SetScriptCallbackFunction("is_debugger_present_with_debugger_lldb.breakpoint_handler")
     test_bp.enabled = True
 
-    # test_failures += 1
-    # exit_handler(None)
+    debugger.HandleCommand("run")
+
+    global test_failures
+    test_failures += 1
+
+    exit_handler(debugger)
diff --git a/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_lldb.sh.cpp b/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_lldb.sh.cpp
index d51eb03e1e9dc1..2365203d66dcff 100644
--- a/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_lldb.sh.cpp
+++ b/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_lldb.sh.cpp
@@ -12,7 +12,7 @@
 // XFAIL: LIBCXX-AIX-FIXME, LIBCXX-PICOLIBC-FIXME
 
 // RUN: %{cxx} %{flags} %s -o %t.exe %{compile_flags} -g %{link_flags}
-// RUN: %{lldb} %t.exe -o "command script import %S/is_debugger_present_with_debugger_lldb.py" -o run -o detach -o quit
+// RUN: %{lldb} %t.exe -o "command script import %S/is_debugger_present_with_debugger_lldb.py"
 
 // <debugging>
 

>From 09048bf83211a36d147267f333373b73d49b3532 Mon Sep 17 00:00:00 2001
From: Hristo Hristov <hghristov.rmm at gmail.com>
Date: Wed, 7 Feb 2024 14:31:21 +0200
Subject: [PATCH 17/40] Tweaks and cleanups

---
 .../breakpoint_if_debugging_with_debugger_gdb.py  |  5 ++++-
 .../breakpoint_if_debugging_with_debugger_lldb.py | 15 +++++++++++----
 .../debugging/breakpoint_with_debugger_gdb.py     |  5 ++++-
 .../debugging/breakpoint_with_debugger_gdb.sh.cpp |  4 ++--
 .../debugging/breakpoint_with_debugger_lldb.py    | 14 ++++++++++----
 .../debugging/is_debugger_present.pass.cpp        |  2 +-
 .../is_debugger_present_with_debugger_gdb.py      |  4 ++++
 .../is_debugger_present_with_debugger_lldb.py     |  3 ++-
 8 files changed, 38 insertions(+), 14 deletions(-)

diff --git a/libcxx/test/std/utilities/debugging/breakpoint_if_debugging_with_debugger_gdb.py b/libcxx/test/std/utilities/debugging/breakpoint_if_debugging_with_debugger_gdb.py
index be96eccfe26f89..7e4b2f56c17d2f 100644
--- a/libcxx/test/std/utilities/debugging/breakpoint_if_debugging_with_debugger_gdb.py
+++ b/libcxx/test/std/utilities/debugging/breakpoint_if_debugging_with_debugger_gdb.py
@@ -89,14 +89,17 @@ def exit_handler(event=None):
     exit(test_failures)
 
 def main():
+    """Main entry point"""
     # Start code executed at load time
 
+    global test_failures
+
     # Disable terminal paging
 
     gdb.execute("set height 0")
     gdb.execute("set python print-stack full")
 
-    test = CheckResult()
+    CheckResult()
     test_bp = gdb.Breakpoint("StopForDebugger")
     test_bp.enabled = True
     test_bp.silent = True
diff --git a/libcxx/test/std/utilities/debugging/breakpoint_if_debugging_with_debugger_lldb.py b/libcxx/test/std/utilities/debugging/breakpoint_if_debugging_with_debugger_lldb.py
index e72802479bc15f..29077c6ca99b95 100644
--- a/libcxx/test/std/utilities/debugging/breakpoint_if_debugging_with_debugger_lldb.py
+++ b/libcxx/test/std/utilities/debugging/breakpoint_if_debugging_with_debugger_lldb.py
@@ -42,7 +42,7 @@ def breakpoint_handler(frame, bp_loc, internal_dict):
 
         test_failures += 1
 
-def exit_handler(event=None):
+def exit_handler(debugger):
     """Exit handler"""
 
     global test_failures
@@ -52,16 +52,23 @@ def exit_handler(event=None):
         print("FAILED test program did not run correctly, check lldb warnings")
         test_failures = -1
     elif test_failures:
+        test_failures -= 1
         print(f"FAILED {test_failures} cases")
 
-    exit(test_failures)
+    debugger.HandleCommand(f"exit {test_failures}")
 
 
 def __lldb_init_module(debugger, internal_dict):
+    global test_failures
+
     target = debugger.GetSelectedTarget()
     test_bp = target.BreakpointCreateByName("StopForDebugger")
     test_bp.SetScriptCallbackFunction("is_debugger_present_with_debugger_lldb.breakpoint_handler")
     test_bp.enabled = True
 
-    # test_failures += 1
-    # exit_handler(None)
\ No newline at end of file
+
+    debugger.HandleCommand("run")
+
+    test_failures += 1
+
+    exit_handler(debugger)
diff --git a/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_gdb.py b/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_gdb.py
index 851d11e00786fe..648f4ceca6f9e2 100644
--- a/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_gdb.py
+++ b/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_gdb.py
@@ -89,14 +89,17 @@ def exit_handler(event=None):
     exit(test_failures)
 
 def main():
+    """Main entry point"""
     # Start code executed at load time
 
+    global test_failures
+
     # Disable terminal paging
 
     gdb.execute("set height 0")
     gdb.execute("set python print-stack full")
 
-    test = CheckResult()
+    CheckResult()
     test_bp = gdb.Breakpoint("StopForDebugger")
     test_bp.enabled = True
     test_bp.silent = True
diff --git a/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_gdb.sh.cpp b/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_gdb.sh.cpp
index d1906460a0dfaf..0aa80f562f777f 100644
--- a/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_gdb.sh.cpp
+++ b/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_gdb.sh.cpp
@@ -56,9 +56,9 @@ void StopForDebugger() {}
 void test() {
   static_assert(noexcept(std::breakpoint()));
 
-  StopForDebugger();
+  // StopForDebugger();
   std::breakpoint();
-  StopForDebugger();
+  // StopForDebugger();
 }
 
 int main(int, char**) {
diff --git a/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_lldb.py b/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_lldb.py
index e72802479bc15f..558bbd6d89ca08 100644
--- a/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_lldb.py
+++ b/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_lldb.py
@@ -42,7 +42,7 @@ def breakpoint_handler(frame, bp_loc, internal_dict):
 
         test_failures += 1
 
-def exit_handler(event=None):
+def exit_handler(debugger):
     """Exit handler"""
 
     global test_failures
@@ -52,16 +52,22 @@ def exit_handler(event=None):
         print("FAILED test program did not run correctly, check lldb warnings")
         test_failures = -1
     elif test_failures:
+        test_failures -= 1
         print(f"FAILED {test_failures} cases")
 
-    exit(test_failures)
+    debugger.HandleCommand(f"exit {test_failures}")
 
 
 def __lldb_init_module(debugger, internal_dict):
+    global test_failures
+
     target = debugger.GetSelectedTarget()
     test_bp = target.BreakpointCreateByName("StopForDebugger")
     test_bp.SetScriptCallbackFunction("is_debugger_present_with_debugger_lldb.breakpoint_handler")
     test_bp.enabled = True
 
-    # test_failures += 1
-    # exit_handler(None)
\ No newline at end of file
+    debugger.HandleCommand("run")
+
+    test_failures += 1
+
+    exit_handler(debugger)
diff --git a/libcxx/test/std/utilities/debugging/is_debugger_present.pass.cpp b/libcxx/test/std/utilities/debugging/is_debugger_present.pass.cpp
index 106890e77fa7e0..0b1e2aa109a870 100644
--- a/libcxx/test/std/utilities/debugging/is_debugger_present.pass.cpp
+++ b/libcxx/test/std/utilities/debugging/is_debugger_present.pass.cpp
@@ -22,7 +22,7 @@
 void test() {
   static_assert(noexcept(std::is_debugger_present()));
 
-  std::same_as<bool> decltype(auto) isDebuggerPresent = is_debugger_present();
+  std::same_as<bool> decltype(auto) isDebuggerPresent = std::is_debugger_present();
   assert(isDebuggerPresent == false);
 }
 
diff --git a/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_gdb.py b/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_gdb.py
index e4669c83c4426c..43c5b60662218e 100644
--- a/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_gdb.py
+++ b/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_gdb.py
@@ -84,6 +84,10 @@ def exit_handler(event=None):
 
 def main():
     """Main entry point"""
+    # Start code executed at load time
+
+    global test_failures
+
     # Disable terminal paging
 
     gdb.execute("set height 0")
diff --git a/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_lldb.py b/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_lldb.py
index 2b7523c74ff29e..3374a866f31f61 100644
--- a/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_lldb.py
+++ b/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_lldb.py
@@ -69,6 +69,8 @@ def exit_handler(debugger):
 
 
 def __lldb_init_module(debugger, internal_dict):
+    global test_failures
+
     target = debugger.GetSelectedTarget()
     test_bp = target.BreakpointCreateByName("StopForDebugger")
     test_bp.SetScriptCallbackFunction("is_debugger_present_with_debugger_lldb.breakpoint_handler")
@@ -76,7 +78,6 @@ def __lldb_init_module(debugger, internal_dict):
 
     debugger.HandleCommand("run")
 
-    global test_failures
     test_failures += 1
 
     exit_handler(debugger)

>From 98b82ee345bce9b23df48762b25946abe4c5e78a Mon Sep 17 00:00:00 2001
From: Hristo Hristov <hghristov.rmm at gmail.com>
Date: Thu, 8 Feb 2024 12:45:12 +0200
Subject: [PATCH 18/40] Fixed Windows

---
 libcxx/src/debugging.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/libcxx/src/debugging.cpp b/libcxx/src/debugging.cpp
index fccd6f8c397502..81527079b17f10 100644
--- a/libcxx/src/debugging.cpp
+++ b/libcxx/src/debugging.cpp
@@ -31,7 +31,7 @@ _LIBCPP_BEGIN_NAMESPACE_STD
 
 #if defined(_LIBCPP_WIN32API)
 
-void __breakpoint() noexcept { void DebugBreak(); }
+void __breakpoint() noexcept { DebugBreak(); }
 
 #elif defined(__APPLE__) || defined(__FreeBSD__) || defined(__linux__)
 
@@ -54,7 +54,7 @@ void __breakpoint() noexcept {
 
 // is_debugger_present()
 
-#if defined(_LIBC_WIN32API)
+#if defined(_LIBCPP_WIN32API)
 
 bool __is_debugger_present() noexcept { return IsDebuggerPresent(); }
 

>From f83d1ace75d547ff13d896dd73015edea0a35b45 Mon Sep 17 00:00:00 2001
From: Hristo Hristov <hghristov.rmm at gmail.com>
Date: Thu, 8 Feb 2024 19:34:04 +0200
Subject: [PATCH 19/40] Use `#error` instead of `static_assert`

---
 libcxx/src/debugging.cpp | 10 ++--------
 1 file changed, 2 insertions(+), 8 deletions(-)

diff --git a/libcxx/src/debugging.cpp b/libcxx/src/debugging.cpp
index 81527079b17f10..2efcd120a2f4e9 100644
--- a/libcxx/src/debugging.cpp
+++ b/libcxx/src/debugging.cpp
@@ -45,10 +45,7 @@ void __breakpoint() {
 
 #else
 
-void __breakpoint() noexcept {
-  static_assert(false, "'std::breakpoint()' is not implemented on this platform.");
-  return false;
-}
+#  error "'std::breakpoint()' is not implemented on this platform."
 
 #endif // defined(_LIBCPP_WIN32API)
 
@@ -119,10 +116,7 @@ bool __is_debugger_present() noexcept {
 
 #else
 
-bool __is_debugger_present() noexcept {
-  static_assert(false, "'std::is_debugger_present()' is not implemented on this platform.");
-  return false;
-}
+#  error "'std::is_debugger_present()' is not implemented on this platform."
 
 #endif // defined(_LIBCPP_WIN32API)
 

>From f5af62785464da89eef87935912ca11a6b4b0842 Mon Sep 17 00:00:00 2001
From: Hristo Hristov <hghristov.rmm at gmail.com>
Date: Mon, 12 Feb 2024 09:50:45 +0200
Subject: [PATCH 20/40] WIP

---
 .../debugging/breakpoint_with_debugger_gdb.py | 20 ++++++++++++++-----
 .../breakpoint_with_debugger_gdb.sh.cpp       |  6 +++++-
 2 files changed, 20 insertions(+), 6 deletions(-)

diff --git a/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_gdb.py b/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_gdb.py
index 648f4ceca6f9e2..58f0fa0b6775ad 100644
--- a/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_gdb.py
+++ b/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_gdb.py
@@ -30,6 +30,7 @@ def __init__(self):
         super(CheckResult, self).__init__("check_breakpoint", gdb.COMMAND_DATA)
 
     def invoke(self, arg, from_tty):
+        print("--------2")
         global has_run_tests
 
         try:
@@ -39,13 +40,17 @@ def invoke(self, arg, from_tty):
             # 0. StopForDebugger
             # 1. Check `isDebuggerPresent`
 
-            compare_frame = gdb.newest_frame().older()
+            compare_frame = gdb.newest_frame()
             testcase_frame = compare_frame.older()
             test_loc = testcase_frame.find_sal()
 
             # Ignore the convenience variable name and newline
 
             frame_name = compare_frame.name()
+            print(f"===> GDB frame name:{frame_name}")
+
+            frame_name = testcase_frame.name()
+            print(f"===> GDB frame name:{frame_name}")
 
             if "std::__1::__breakpoint" in compare_frame.name():
                 print(f"===> GDB frame name:{frame_name}")
@@ -77,7 +82,7 @@ def invoke(self, arg, from_tty):
 
 def exit_handler(event=None):
     """Exit handler"""
-
+    print("-----1")
     global test_failures
     global has_run_tests
 
@@ -93,7 +98,7 @@ def main():
     # Start code executed at load time
 
     global test_failures
-
+    print("-----9")
     # Disable terminal paging
 
     gdb.execute("set height 0")
@@ -108,14 +113,19 @@ def main():
 
     # "run" won't return if the program exits; ensure the script regains control.
 
-    gdb.events.exited.connect(exit_handler)
+    # gdb.events.exited.connect(exit_handler)
+    # gdb.execute("handle SIGTRAP ignore")
+    # gdb.execute("handle SIGTRAP nostop noprint noignore")
     gdb.execute("run")
+    gdb.execute("signal 0")
+    # gdb.execute("detach")
+    gdb.execute("quit")
 
     # If the program didn't exit, something went wrong, but we don't
     # know what. Fail on exit.
 
     test_failures += 1
-    exit_handler(None)
+    # exit_handler(None)
 
     print(f"Test failures count: {test_failures}")
 
diff --git a/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_gdb.sh.cpp b/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_gdb.sh.cpp
index 0aa80f562f777f..624638d9115eae 100644
--- a/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_gdb.sh.cpp
+++ b/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_gdb.sh.cpp
@@ -53,12 +53,16 @@ void StopForDebugger() {}
 // Detaching from program: /home/llvm-dev/Projects/llvm-project/build/breakpoint.pass, process 53887
 // [Inferior 1 (process 53887) detached]
 
+#include <print>
+
 void test() {
   static_assert(noexcept(std::breakpoint()));
 
+  std::println("1111111");
   // StopForDebugger();
   std::breakpoint();
-  // StopForDebugger();
+  StopForDebugger();
+  std::println("222222");
 }
 
 int main(int, char**) {

>From 03bf337e2cc7941331ac964b3317fec693f5aa9b Mon Sep 17 00:00:00 2001
From: Hristo Hristov <hghristov.rmm at gmail.com>
Date: Mon, 12 Feb 2024 09:52:43 +0200
Subject: [PATCH 21/40] Removed `breakpoint` test skelettons

---
 .../breakpoint_if_debugging.pass.cpp          |  31 ----
 ...eakpoint_if_debugging_with_debugger_gdb.py | 123 ----------------
 ...oint_if_debugging_with_debugger_gdb.sh.cpp |  49 -------
 ...akpoint_if_debugging_with_debugger_lldb.py |  74 ----------
 ...int_if_debugging_with_debugger_lldb.sh.cpp |  49 -------
 .../debugging/breakpoint_with_debugger_gdb.py | 133 ------------------
 .../breakpoint_with_debugger_gdb.sh.cpp       |  72 ----------
 .../breakpoint_with_debugger_gdb_test.py      | 123 ----------------
 .../breakpoint_with_debugger_lldb.py          |  73 ----------
 .../breakpoint_with_debugger_lldb.sh.cpp      |  67 ---------
 10 files changed, 794 deletions(-)
 delete mode 100644 libcxx/test/std/utilities/debugging/breakpoint_if_debugging.pass.cpp
 delete mode 100644 libcxx/test/std/utilities/debugging/breakpoint_if_debugging_with_debugger_gdb.py
 delete mode 100644 libcxx/test/std/utilities/debugging/breakpoint_if_debugging_with_debugger_gdb.sh.cpp
 delete mode 100644 libcxx/test/std/utilities/debugging/breakpoint_if_debugging_with_debugger_lldb.py
 delete mode 100644 libcxx/test/std/utilities/debugging/breakpoint_if_debugging_with_debugger_lldb.sh.cpp
 delete mode 100644 libcxx/test/std/utilities/debugging/breakpoint_with_debugger_gdb.py
 delete mode 100644 libcxx/test/std/utilities/debugging/breakpoint_with_debugger_gdb.sh.cpp
 delete mode 100644 libcxx/test/std/utilities/debugging/breakpoint_with_debugger_gdb_test.py
 delete mode 100644 libcxx/test/std/utilities/debugging/breakpoint_with_debugger_lldb.py
 delete mode 100644 libcxx/test/std/utilities/debugging/breakpoint_with_debugger_lldb.sh.cpp

diff --git a/libcxx/test/std/utilities/debugging/breakpoint_if_debugging.pass.cpp b/libcxx/test/std/utilities/debugging/breakpoint_if_debugging.pass.cpp
deleted file mode 100644
index 6f3a85498efbf6..00000000000000
--- a/libcxx/test/std/utilities/debugging/breakpoint_if_debugging.pass.cpp
+++ /dev/null
@@ -1,31 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// UNSUPPORTED: c++03, c++11, c++14, c++17, c++20, c++23
-// XFAIL: LIBCXX-AIX-FIXME, LIBCXX-PICOLIBC-FIXME
-
-// <debugging>
-
-// void breakpoint_if_debugging() noexcept;
-
-#include <cassert>
-#include <debugging>
-
-// Test without debugger.
-
-void test() {
-  static_assert(noexcept(std::breakpoint_if_debugging()));
-
-  std::breakpoint_if_debugging();
-}
-
-int main(int, char**) {
-  test();
-
-  return 0;
-}
diff --git a/libcxx/test/std/utilities/debugging/breakpoint_if_debugging_with_debugger_gdb.py b/libcxx/test/std/utilities/debugging/breakpoint_if_debugging_with_debugger_gdb.py
deleted file mode 100644
index 7e4b2f56c17d2f..00000000000000
--- a/libcxx/test/std/utilities/debugging/breakpoint_if_debugging_with_debugger_gdb.py
+++ /dev/null
@@ -1,123 +0,0 @@
-# ===----------------------------------------------------------------------===##
-#
-# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-# See https://llvm.org/LICENSE.txt for license information.
-# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-#
-# ===----------------------------------------------------------------------===##
-
-from __future__ import print_function
-import gdb
-
-# https://sourceware.org/gdb/current/onlinedocs/gdb.html/Python.html
-
-test_failures = 0
-
-# Sometimes the inital run command can fail to trace the process.
-# (e.g. you don't have ptrace permissions)
-# In these cases gdb still sends us an exited event so we cannot
-# see what "run" printed to check for a warning message, since
-# we get taken to our exit handler before we can look.
-# Instead check that at least one test has been run by the time
-# we exit.
-has_run_tests = False
-
-
-class CheckResult(gdb.Command):
-    """GDB Tester"""
-
-    def __init__(self):
-        super(CheckResult, self).__init__("check_breakpoint_if_debugging", gdb.COMMAND_DATA)
-
-    def invoke(self, arg, from_tty):
-        global has_run_tests
-
-        try:
-            has_run_tests = True
-
-            # Stack frame is:
-            # 0. StopForDebugger
-            # 1. Check `isDebuggerPresent`
-
-            compare_frame = gdb.newest_frame().older()
-            testcase_frame = compare_frame.older()
-            test_loc = testcase_frame.find_sal()
-
-            # Ignore the convenience variable name and newline
-
-            frame_name = compare_frame.name()
-
-            if "std::__1::__breakpoint" in compare_frame.name():
-                print(f"===> GDB frame name:{frame_name}")
-                # s = gdb.execute("p value", to_string=True)
-
-            gdb.newest_frame().select()
-            expectation_val = compare_frame.read_var("isDebuggerPresent")
-
-            if not expectation_val:
-                global test_failures
-
-                print("FAIL: " + test_loc.symtab.filename + ":" + str(test_loc.line))
-                print("`isDebuggerPresent` value is `false`, value should be `true`")
-
-                test_failures += 1
-            else:
-                print("PASS: " + test_loc.symtab.filename + ":" + str(test_loc.line))
-
-        except RuntimeError as e:
-            # At this point, lots of different things could be wrong, so don't try to
-            # recover or figure it out. Don't exit either, because then it's
-            # impossible to debug the framework itself.
-
-            print("FAIL: Something is wrong in the test framework.")
-            print(str(e))
-
-            test_failures += 1
-
-
-def exit_handler(event=None):
-    """Exit handler"""
-
-    global test_failures
-    global has_run_tests
-
-    if not has_run_tests:
-        print("FAILED test program did not run correctly, check gdb warnings")
-        test_failures = -1
-    elif test_failures:
-        print(f"FAILED {test_failures} cases")
-    exit(test_failures)
-
-def main():
-    """Main entry point"""
-    # Start code executed at load time
-
-    global test_failures
-
-    # Disable terminal paging
-
-    gdb.execute("set height 0")
-    gdb.execute("set python print-stack full")
-
-    CheckResult()
-    test_bp = gdb.Breakpoint("StopForDebugger")
-    test_bp.enabled = True
-    test_bp.silent = True
-    test_bp.commands = """check_breakpoint_if_debugging
-    continue"""
-
-    # "run" won't return if the program exits; ensure the script regains control.
-
-    gdb.events.exited.connect(exit_handler)
-    gdb.execute("run")
-
-    # If the program didn't exit, something went wrong, but we don't
-    # know what. Fail on exit.
-
-    test_failures += 1
-    exit_handler(None)
-
-    print(f"Test failures count: {test_failures}")
-
-if __name__ == "__main__":
-    main()
diff --git a/libcxx/test/std/utilities/debugging/breakpoint_if_debugging_with_debugger_gdb.sh.cpp b/libcxx/test/std/utilities/debugging/breakpoint_if_debugging_with_debugger_gdb.sh.cpp
deleted file mode 100644
index ef6e7778369c5c..00000000000000
--- a/libcxx/test/std/utilities/debugging/breakpoint_if_debugging_with_debugger_gdb.sh.cpp
+++ /dev/null
@@ -1,49 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// UNSUPPORTED: c++03, c++11, c++14, c++17, c++20, c++23
-// REQUIRES: host-has-gdb-with-python
-// UNSUPPORTED: android
-// XFAIL: LIBCXX-AIX-FIXME, LIBCXX-PICOLIBC-FIXME
-
-// RUN: %{cxx} %{flags} %s -o %t.exe %{compile_flags} -g %{link_flags}
-// RUN: %{gdb} %t.exe -ex "source %S/breakpoint_if_debugging_with_debugger_gdb.py" --silent
-
-// <debugging>
-
-// void breakpoint_if_debugging() noexcept;
-
-#include <cassert>
-#include <debugging>
-
-#include "test_macros.h"
-
-#ifdef TEST_COMPILER_GCC
-#  define OPT_NONE __attribute__((noinline))
-#else
-#  define OPT_NONE __attribute__((optnone))
-#endif
-
-void StopForDebugger() OPT_NONE;
-void StopForDebugger() {}
-
-// Test with debugger attached:
-
-// GDB command:  `gdb breakpoint_if_debugging.pass -ex run -ex detach -ex quit --silent`
-
-void test() {
-  static_assert(noexcept(std::breakpoint_if_debugging()));
-
-  std::breakpoint_if_debugging();
-}
-
-int main(int, char**) {
-  test();
-
-  return 0;
-}
diff --git a/libcxx/test/std/utilities/debugging/breakpoint_if_debugging_with_debugger_lldb.py b/libcxx/test/std/utilities/debugging/breakpoint_if_debugging_with_debugger_lldb.py
deleted file mode 100644
index 29077c6ca99b95..00000000000000
--- a/libcxx/test/std/utilities/debugging/breakpoint_if_debugging_with_debugger_lldb.py
+++ /dev/null
@@ -1,74 +0,0 @@
-# ===----------------------------------------------------------------------===##
-#
-# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-# See https://llvm.org/LICENSE.txt for license information.
-# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-#
-# ===----------------------------------------------------------------------===##
-
-import lldb
-
-test_failures = 0
-
-# Sometimes the inital run command can fail to trace the process.
-# (e.g. you don't have ptrace permissions)
-# In these cases gdb still sends us an exited event so we cannot
-# see what "run" printed to check for a warning message, since
-# we get taken to our exit handler before we can look.
-# Instead check that at least one test has been run by the time
-# we exit.
-has_run_tests = False
-
-def breakpoint_handler(frame, bp_loc, internal_dict):
-    global has_run_tests
-
-    try:
-        has_run_tests = True
-
-        module = frame.GetModule()
-        filename = module.compile_units[0].file
-        line = frame.GetLineEntry().GetLine()
-        parent = frame.get_parent_frame()
-
-      #   TODO: test
-
-    except RuntimeError as e:
-        # At this point, lots of different things could be wrong, so don't try to
-        # recover or figure it out. Don't exit either, because then it's
-        # impossible to debug the framework itself.
-
-        print("FAIL: Something is wrong in the test framework.")
-        print(str(e))
-
-        test_failures += 1
-
-def exit_handler(debugger):
-    """Exit handler"""
-
-    global test_failures
-    global has_run_tests
-
-    if not has_run_tests:
-        print("FAILED test program did not run correctly, check lldb warnings")
-        test_failures = -1
-    elif test_failures:
-        test_failures -= 1
-        print(f"FAILED {test_failures} cases")
-
-    debugger.HandleCommand(f"exit {test_failures}")
-
-
-def __lldb_init_module(debugger, internal_dict):
-    global test_failures
-
-    target = debugger.GetSelectedTarget()
-    test_bp = target.BreakpointCreateByName("StopForDebugger")
-    test_bp.SetScriptCallbackFunction("is_debugger_present_with_debugger_lldb.breakpoint_handler")
-    test_bp.enabled = True
-
-
-    debugger.HandleCommand("run")
-
-    test_failures += 1
-
-    exit_handler(debugger)
diff --git a/libcxx/test/std/utilities/debugging/breakpoint_if_debugging_with_debugger_lldb.sh.cpp b/libcxx/test/std/utilities/debugging/breakpoint_if_debugging_with_debugger_lldb.sh.cpp
deleted file mode 100644
index 2b31456f00b275..00000000000000
--- a/libcxx/test/std/utilities/debugging/breakpoint_if_debugging_with_debugger_lldb.sh.cpp
+++ /dev/null
@@ -1,49 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// UNSUPPORTED: c++03, c++11, c++14, c++17, c++20, c++23
-// REQUIRES: host-has-lldb-with-python
-// UNSUPPORTED: android
-// XFAIL: LIBCXX-AIX-FIXME, LIBCXX-PICOLIBC-FIXME
-
-// RUN: %{cxx} %{flags} %s -o %t.exe %{compile_flags} -g %{link_flags}
-// RUN: %{lldb} %t.exe -o "command script import %S/breakpoint_if_debugging_with_debugger_lldb.py" -o run -o detach -o quit
-
-// <debugging>
-
-// void breakpoint_if_debugging() noexcept;
-
-#include <cassert>
-#include <debugging>
-
-#include "test_macros.h"
-
-#ifdef TEST_COMPILER_GCC
-#  define OPT_NONE __attribute__((noinline))
-#else
-#  define OPT_NONE __attribute__((optnone))
-#endif
-
-void StopForDebugger() OPT_NONE;
-void StopForDebugger() {}
-
-// Test with debugger attached:
-
-// LLDB command: `lldb "breakpoint_if_debugging.pass" -o run -o detach -o quit`
-
-void test() {
-  static_assert(noexcept(std::breakpoint_if_debugging()));
-
-  std::breakpoint_if_debugging();
-}
-
-int main(int, char**) {
-  test();
-
-  return 0;
-}
diff --git a/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_gdb.py b/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_gdb.py
deleted file mode 100644
index 58f0fa0b6775ad..00000000000000
--- a/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_gdb.py
+++ /dev/null
@@ -1,133 +0,0 @@
-# ===----------------------------------------------------------------------===##
-#
-# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-# See https://llvm.org/LICENSE.txt for license information.
-# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-#
-# ===----------------------------------------------------------------------===##
-
-from __future__ import print_function
-import gdb
-
-# https://sourceware.org/gdb/current/onlinedocs/gdb.html/Python.html
-
-test_failures = 0
-
-# Sometimes the inital run command can fail to trace the process.
-# (e.g. you don't have ptrace permissions)
-# In these cases gdb still sends us an exited event so we cannot
-# see what "run" printed to check for a warning message, since
-# we get taken to our exit handler before we can look.
-# Instead check that at least one test has been run by the time
-# we exit.
-has_run_tests = False
-
-
-class CheckResult(gdb.Command):
-    """GDB Tester"""
-
-    def __init__(self):
-        super(CheckResult, self).__init__("check_breakpoint", gdb.COMMAND_DATA)
-
-    def invoke(self, arg, from_tty):
-        print("--------2")
-        global has_run_tests
-
-        try:
-            has_run_tests = True
-
-            # Stack frame is:
-            # 0. StopForDebugger
-            # 1. Check `isDebuggerPresent`
-
-            compare_frame = gdb.newest_frame()
-            testcase_frame = compare_frame.older()
-            test_loc = testcase_frame.find_sal()
-
-            # Ignore the convenience variable name and newline
-
-            frame_name = compare_frame.name()
-            print(f"===> GDB frame name:{frame_name}")
-
-            frame_name = testcase_frame.name()
-            print(f"===> GDB frame name:{frame_name}")
-
-            if "std::__1::__breakpoint" in compare_frame.name():
-                print(f"===> GDB frame name:{frame_name}")
-                # s = gdb.execute("p value", to_string=True)
-
-            gdb.newest_frame().select()
-            expectation_val = compare_frame.read_var("isDebuggerPresent")
-
-            if not expectation_val:
-                global test_failures
-
-                print("FAIL: " + test_loc.symtab.filename + ":" + str(test_loc.line))
-                print("`isDebuggerPresent` value is `false`, value should be `true`")
-
-                test_failures += 1
-            else:
-                print("PASS: " + test_loc.symtab.filename + ":" + str(test_loc.line))
-
-        except RuntimeError as e:
-            # At this point, lots of different things could be wrong, so don't try to
-            # recover or figure it out. Don't exit either, because then it's
-            # impossible to debug the framework itself.
-
-            print("FAIL: Something is wrong in the test framework.")
-            print(str(e))
-
-            test_failures += 1
-
-
-def exit_handler(event=None):
-    """Exit handler"""
-    print("-----1")
-    global test_failures
-    global has_run_tests
-
-    if not has_run_tests:
-        print("FAILED test program did not run correctly, check gdb warnings")
-        test_failures = -1
-    elif test_failures:
-        print(f"FAILED {test_failures} cases")
-    exit(test_failures)
-
-def main():
-    """Main entry point"""
-    # Start code executed at load time
-
-    global test_failures
-    print("-----9")
-    # Disable terminal paging
-
-    gdb.execute("set height 0")
-    gdb.execute("set python print-stack full")
-
-    CheckResult()
-    test_bp = gdb.Breakpoint("StopForDebugger")
-    test_bp.enabled = True
-    test_bp.silent = True
-    test_bp.commands = """check_breakpoint
-    continue"""
-
-    # "run" won't return if the program exits; ensure the script regains control.
-
-    # gdb.events.exited.connect(exit_handler)
-    # gdb.execute("handle SIGTRAP ignore")
-    # gdb.execute("handle SIGTRAP nostop noprint noignore")
-    gdb.execute("run")
-    gdb.execute("signal 0")
-    # gdb.execute("detach")
-    gdb.execute("quit")
-
-    # If the program didn't exit, something went wrong, but we don't
-    # know what. Fail on exit.
-
-    test_failures += 1
-    # exit_handler(None)
-
-    print(f"Test failures count: {test_failures}")
-
-if __name__ == "__main__":
-    main()
diff --git a/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_gdb.sh.cpp b/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_gdb.sh.cpp
deleted file mode 100644
index 624638d9115eae..00000000000000
--- a/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_gdb.sh.cpp
+++ /dev/null
@@ -1,72 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// UNSUPPORTED: c++03, c++11, c++14, c++17, c++20, c++23
-// REQUIRES: host-has-gdb-with-python
-// UNSUPPORTED: android
-// XFAIL: LIBCXX-AIX-FIXME, LIBCXX-PICOLIBC-FIXME
-
-// RUN: %{cxx} %{flags} %s -o %t.exe %{compile_flags} -g %{link_flags}
-// RUN: %{gdb} %t.exe -ex "source %S/breakpoint_with_debugger_gdb.py" --silent
-
-// <debugging>
-
-// void breakpoint() noexcept;
-
-#include <cassert>
-#include <debugging>
-
-#include "test_macros.h"
-
-#ifdef TEST_COMPILER_GCC
-#  define OPT_NONE __attribute__((noinline))
-#else
-#  define OPT_NONE __attribute__((optnone))
-#endif
-
-void StopForDebugger() OPT_NONE;
-void StopForDebugger() {}
-
-// Test with debugger attached:
-
-// GDB command:  `gdb breakpoint.pass -ex run -ex detach -ex quit --silent`
-
-// gdb breakpoint.pass -ex run -ex "signal SIGTRAP" -ex detach -ex quit --silent
-
-//
-// Sample GDB ouput:
-//
-// Reading symbols from breakpoint.pass..
-// Starting program: /home/llvm-dev/Projects/llvm-project/build/breakpoint.pass
-// [Thread debugging using libthread_db enabled]
-// Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
-
-// Program received signal SIGTRAP, Trace/breakpoint trap.
-// std::__1::__breakpoint () at /home/llvm-dev/Projects/llvm-project/libcxx/src/debugging.cpp:44
-// warning: Source file is more recent than executable.
-// 44	}
-// Detaching from program: /home/llvm-dev/Projects/llvm-project/build/breakpoint.pass, process 53887
-// [Inferior 1 (process 53887) detached]
-
-#include <print>
-
-void test() {
-  static_assert(noexcept(std::breakpoint()));
-
-  std::println("1111111");
-  // StopForDebugger();
-  std::breakpoint();
-  StopForDebugger();
-  std::println("222222");
-}
-
-int main(int, char**) {
-  test();
-
-  return 0;
-}
diff --git a/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_gdb_test.py b/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_gdb_test.py
deleted file mode 100644
index 8e8ac0eaf17a12..00000000000000
--- a/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_gdb_test.py
+++ /dev/null
@@ -1,123 +0,0 @@
-# ===----------------------------------------------------------------------===##
-#
-# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-# See https://llvm.org/LICENSE.txt for license information.
-# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-#
-# ===----------------------------------------------------------------------===##
-
-from __future__ import print_function
-import gdb
-
-# https://sourceware.org/gdb/current/onlinedocs/gdb.html/Python.html
-
-test_failures = 0
-
-# Sometimes the inital run command can fail to trace the process.
-# (e.g. you don't have ptrace permissions)
-# In these cases gdb still sends us an exited event so we cannot
-# see what "run" printed to check for a warning message, since
-# we get taken to our exit handler before we can look.
-# Instead check that at least one test has been run by the time
-# we exit.
-has_run_tests = False
-
-
-class CheckResult(gdb.Command):
-    """GDB Tester"""
-
-    def __init__(self):
-        super(CheckResult, self).__init__("check_breakpoint", gdb.COMMAND_DATA)
-
-    def invoke(self, arg, from_tty):
-        global has_run_tests
-
-        try:
-            has_run_tests = True
-
-            # Stack frame is:
-            # 0. StopForDebugger
-            # 1. Check `isDebuggerPresent`
-
-            compare_frame = gdb.newest_frame().older()
-            testcase_frame = compare_frame.older()
-            test_loc = testcase_frame.find_sal()
-
-            # Ignore the convenience variable name and newline
-
-            frame_name = compare_frame.name()
-
-            if "std::__1::__breakpoint" in compare_frame.name():
-                print(f"===> GDB frame name:{frame_name}")
-                # s = gdb.execute("p value", to_string=True)
-            print(f"===> GDB frame name:{frame_name}")
-
-            gdb.newest_frame().select()
-            expectation_val = compare_frame.read_var("isDebuggerPresent")
-
-            if not expectation_val:
-                global test_failures
-
-                print("FAIL: " + test_loc.symtab.filename + ":" + str(test_loc.line))
-                print("`isDebuggerPresent` value is `false`, value should be `true`")
-
-                test_failures += 1
-            else:
-                print("PASS: " + test_loc.symtab.filename + ":" + str(test_loc.line))
-
-        except RuntimeError as e:
-            # At this point, lots of different things could be wrong, so don't try to
-            # recover or figure it out. Don't exit either, because then it's
-            # impossible to debug the framework itself.
-
-            print("FAIL: Something is wrong in the test framework.")
-            print(str(e))
-
-            test_failures += 1
-
-
-def exit_handler(event=None):
-    """Exit handler"""
-
-    global test_failures
-    global has_run_tests
-
-    if not has_run_tests:
-        print("FAILED test program did not run correctly, check gdb warnings")
-        test_failures = -1
-    elif test_failures:
-        print(f"FAILED {test_failures} cases")
-    exit(test_failures)
-
-def main():
-    # Start code executed at load time
-
-    # Disable terminal paging
-
-    gdb.execute("set height 0")
-    gdb.execute("set python print-stack full")
-
-    test = CheckResult()
-    test_bp = gdb.Breakpoint("StopForDebugger")
-    test_bp.enabled = True
-    test_bp.silent = True
-    test_bp.commands = """continue
-    signal SIGTRAP
-    check_breakpoint
-    continue"""
-
-    # "run" won't return if the program exits; ensure the script regains control.
-
-    gdb.events.exited.connect(exit_handler)
-    gdb.execute("run")
-
-    # If the program didn't exit, something went wrong, but we don't
-    # know what. Fail on exit.
-
-   #  test_failures += 1
-    exit_handler(None)
-
-    print(f"Test failures count: {test_failures}")
-
-if __name__ == "__main__":
-    main()
diff --git a/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_lldb.py b/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_lldb.py
deleted file mode 100644
index 558bbd6d89ca08..00000000000000
--- a/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_lldb.py
+++ /dev/null
@@ -1,73 +0,0 @@
-# ===----------------------------------------------------------------------===##
-#
-# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-# See https://llvm.org/LICENSE.txt for license information.
-# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-#
-# ===----------------------------------------------------------------------===##
-
-import lldb
-
-test_failures = 0
-
-# Sometimes the inital run command can fail to trace the process.
-# (e.g. you don't have ptrace permissions)
-# In these cases gdb still sends us an exited event so we cannot
-# see what "run" printed to check for a warning message, since
-# we get taken to our exit handler before we can look.
-# Instead check that at least one test has been run by the time
-# we exit.
-has_run_tests = False
-
-def breakpoint_handler(frame, bp_loc, internal_dict):
-    global has_run_tests
-
-    try:
-        has_run_tests = True
-
-        module = frame.GetModule()
-        filename = module.compile_units[0].file
-        line = frame.GetLineEntry().GetLine()
-        parent = frame.get_parent_frame()
-
-      #   TODO: test
-
-    except RuntimeError as e:
-        # At this point, lots of different things could be wrong, so don't try to
-        # recover or figure it out. Don't exit either, because then it's
-        # impossible to debug the framework itself.
-
-        print("FAIL: Something is wrong in the test framework.")
-        print(str(e))
-
-        test_failures += 1
-
-def exit_handler(debugger):
-    """Exit handler"""
-
-    global test_failures
-    global has_run_tests
-
-    if not has_run_tests:
-        print("FAILED test program did not run correctly, check lldb warnings")
-        test_failures = -1
-    elif test_failures:
-        test_failures -= 1
-        print(f"FAILED {test_failures} cases")
-
-    debugger.HandleCommand(f"exit {test_failures}")
-
-
-def __lldb_init_module(debugger, internal_dict):
-    global test_failures
-
-    target = debugger.GetSelectedTarget()
-    test_bp = target.BreakpointCreateByName("StopForDebugger")
-    test_bp.SetScriptCallbackFunction("is_debugger_present_with_debugger_lldb.breakpoint_handler")
-    test_bp.enabled = True
-
-    debugger.HandleCommand("run")
-
-    test_failures += 1
-
-    exit_handler(debugger)
diff --git a/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_lldb.sh.cpp b/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_lldb.sh.cpp
deleted file mode 100644
index 9a3ef6c4e5cd60..00000000000000
--- a/libcxx/test/std/utilities/debugging/breakpoint_with_debugger_lldb.sh.cpp
+++ /dev/null
@@ -1,67 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// UNSUPPORTED: c++03, c++11, c++14, c++17, c++20, c++23
-// REQUIRES: host-has-lldb-with-python
-// UNSUPPORTED: android
-// XFAIL: LIBCXX-AIX-FIXME, LIBCXX-PICOLIBC-FIXME
-
-// RUN: %{cxx} %{flags} %s -o %t.exe %{compile_flags} -g %{link_flags}
-// RUN: %{lldb} %t.exe -o "command script import %S/breakpoint_with_debugger_lldb.py" -o run -o detach -o quit
-
-// <debugging>
-
-// void breakpoint() noexcept;
-
-#include <cassert>
-#include <debugging>
-
-#include "test_macros.h"
-
-#ifdef TEST_COMPILER_GCC
-#  define OPT_NONE __attribute__((noinline))
-#else
-#  define OPT_NONE __attribute__((optnone))
-#endif
-
-void StopForDebugger() OPT_NONE;
-void StopForDebugger() {}
-
-// Test with debugger attached:
-
-// LLDB command: `lldb "breakpoint.pass" -o run -o detach -o quit`
-
-//
-// Sample LLDB output:
-//
-// Process 43162 launched: '/home/llvm-dev/Projects/llvm-project/build/breakpoint.pass' (x86_64)
-// Process 43162 stopped
-// * thread #1, name = 'breakpoint.pass', stop reason = signal SIGTRAP
-//     frame #0: 0x00007ffff7eb27e5 libc++.so.1`std::__1::__breakpoint() at debugging.cpp:44:1
-//    41  	#  else
-//    42  	  raise(SIGTRAP);
-//    43  	#  endif
-// -> 44  	}
-//    45
-//    46  	#else
-//    47
-// (lldb) detach
-// Process 43162 detached
-// (lldb) quit
-
-void test() {
-  static_assert(noexcept(std::breakpoint()));
-
-  std::breakpoint();
-}
-
-int main(int, char**) {
-  test();
-
-  return 0;
-}

>From 2e2e657b21d120dd9ae1dc112ceff7caedb937d9 Mon Sep 17 00:00:00 2001
From: Hristo Hristov <hghristov.rmm at gmail.com>
Date: Mon, 12 Feb 2024 14:33:23 +0200
Subject: [PATCH 22/40] Fix CI

---
 libcxx/modules/std/debugging.inc                           | 6 +++---
 libcxx/test/libcxx/transitive_includes/cxx03.csv           | 1 +
 libcxx/test/libcxx/transitive_includes/cxx11.csv           | 1 +
 libcxx/test/libcxx/transitive_includes/cxx14.csv           | 1 +
 libcxx/test/libcxx/transitive_includes/cxx17.csv           | 1 +
 libcxx/test/libcxx/transitive_includes/cxx20.csv           | 1 +
 libcxx/test/libcxx/transitive_includes/cxx23.csv           | 1 +
 libcxx/test/libcxx/transitive_includes/cxx26.csv           | 1 +
 .../debugging/is_debugger_present_with_debugger_gdb.py     | 2 ++
 .../debugging/is_debugger_present_with_debugger_lldb.py    | 7 +++++--
 libcxx/utils/libcxx/test/features.py                       | 2 ++
 11 files changed, 19 insertions(+), 5 deletions(-)

diff --git a/libcxx/modules/std/debugging.inc b/libcxx/modules/std/debugging.inc
index e8f8dd13f88ba6..86ad5d25a059f0 100644
--- a/libcxx/modules/std/debugging.inc
+++ b/libcxx/modules/std/debugging.inc
@@ -10,8 +10,8 @@
 export namespace std {
 #if _LIBCPP_STD_VER >= 26 && defined(_LIBCPP_HAS_DEBUGGING)
   // [debugging.utility], utility
-  using stgd::breakpoint;
-  using stgd::breakpoint_if_debugging;
-  using stgd::is_debugger_present;
+  using std::breakpoint;
+  using std::breakpoint_if_debugging;
+  using std::is_debugger_present;
 #endif
 } // namespace std
diff --git a/libcxx/test/libcxx/transitive_includes/cxx03.csv b/libcxx/test/libcxx/transitive_includes/cxx03.csv
index c65b9b9d705e27..34aeac00a8f5cb 100644
--- a/libcxx/test/libcxx/transitive_includes/cxx03.csv
+++ b/libcxx/test/libcxx/transitive_includes/cxx03.csv
@@ -201,6 +201,7 @@ ctgmath cmath
 cwchar cstddef
 cwchar cwctype
 cwctype cctype
+debugging version
 deque algorithm
 deque atomic
 deque compare
diff --git a/libcxx/test/libcxx/transitive_includes/cxx11.csv b/libcxx/test/libcxx/transitive_includes/cxx11.csv
index b3d9e327fc7aa9..17882a5c0dbc62 100644
--- a/libcxx/test/libcxx/transitive_includes/cxx11.csv
+++ b/libcxx/test/libcxx/transitive_includes/cxx11.csv
@@ -202,6 +202,7 @@ ctgmath cmath
 cwchar cstddef
 cwchar cwctype
 cwctype cctype
+debugging version
 deque algorithm
 deque atomic
 deque compare
diff --git a/libcxx/test/libcxx/transitive_includes/cxx14.csv b/libcxx/test/libcxx/transitive_includes/cxx14.csv
index d723409422a3eb..b8fa6731a24c9b 100644
--- a/libcxx/test/libcxx/transitive_includes/cxx14.csv
+++ b/libcxx/test/libcxx/transitive_includes/cxx14.csv
@@ -202,6 +202,7 @@ ctgmath cmath
 cwchar cstddef
 cwchar cwctype
 cwctype cctype
+debugging version
 deque algorithm
 deque atomic
 deque compare
diff --git a/libcxx/test/libcxx/transitive_includes/cxx17.csv b/libcxx/test/libcxx/transitive_includes/cxx17.csv
index d723409422a3eb..b8fa6731a24c9b 100644
--- a/libcxx/test/libcxx/transitive_includes/cxx17.csv
+++ b/libcxx/test/libcxx/transitive_includes/cxx17.csv
@@ -202,6 +202,7 @@ ctgmath cmath
 cwchar cstddef
 cwchar cwctype
 cwctype cctype
+debugging version
 deque algorithm
 deque atomic
 deque compare
diff --git a/libcxx/test/libcxx/transitive_includes/cxx20.csv b/libcxx/test/libcxx/transitive_includes/cxx20.csv
index 03b4eda8b4d868..6a5fd74489a039 100644
--- a/libcxx/test/libcxx/transitive_includes/cxx20.csv
+++ b/libcxx/test/libcxx/transitive_includes/cxx20.csv
@@ -213,6 +213,7 @@ ctgmath cmath
 cwchar cstddef
 cwchar cwctype
 cwctype cctype
+debugging version
 deque algorithm
 deque atomic
 deque compare
diff --git a/libcxx/test/libcxx/transitive_includes/cxx23.csv b/libcxx/test/libcxx/transitive_includes/cxx23.csv
index 062127364adfee..a9a987754d7ef0 100644
--- a/libcxx/test/libcxx/transitive_includes/cxx23.csv
+++ b/libcxx/test/libcxx/transitive_includes/cxx23.csv
@@ -144,6 +144,7 @@ ctgmath ccomplex
 ctgmath cmath
 cwchar cwctype
 cwctype cctype
+debugging version
 deque compare
 deque cstddef
 deque cstdint
diff --git a/libcxx/test/libcxx/transitive_includes/cxx26.csv b/libcxx/test/libcxx/transitive_includes/cxx26.csv
index 062127364adfee..a9a987754d7ef0 100644
--- a/libcxx/test/libcxx/transitive_includes/cxx26.csv
+++ b/libcxx/test/libcxx/transitive_includes/cxx26.csv
@@ -144,6 +144,7 @@ ctgmath ccomplex
 ctgmath cmath
 cwchar cwctype
 cwctype cctype
+debugging version
 deque compare
 deque cstddef
 deque cstdint
diff --git a/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_gdb.py b/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_gdb.py
index 43c5b60662218e..ea7ecaeadf024c 100644
--- a/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_gdb.py
+++ b/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_gdb.py
@@ -82,6 +82,7 @@ def exit_handler(event=None):
         print(f"FAILED {test_failures} cases")
     exit(test_failures)
 
+
 def main():
     """Main entry point"""
     # Start code executed at load time
@@ -114,5 +115,6 @@ def main():
 
     print(f"Test failures count: {test_failures}")
 
+
 if __name__ == "__main__":
     main()
diff --git a/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_lldb.py b/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_lldb.py
index 3374a866f31f61..62907670367da2 100644
--- a/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_lldb.py
+++ b/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_lldb.py
@@ -19,8 +19,8 @@
 # we exit.
 has_run_tests = False
 
+
 def breakpoint_handler(frame, bp_loc, internal_dict):
-    print("===============> breakpoint_handler")
     global has_run_tests
 
     try:
@@ -52,6 +52,7 @@ def breakpoint_handler(frame, bp_loc, internal_dict):
 
         test_failures += 1
 
+
 def exit_handler(debugger):
     """Exit handler"""
 
@@ -73,7 +74,9 @@ def __lldb_init_module(debugger, internal_dict):
 
     target = debugger.GetSelectedTarget()
     test_bp = target.BreakpointCreateByName("StopForDebugger")
-    test_bp.SetScriptCallbackFunction("is_debugger_present_with_debugger_lldb.breakpoint_handler")
+    test_bp.SetScriptCallbackFunction(
+        "is_debugger_present_with_debugger_lldb.breakpoint_handler"
+    )
     test_bp.enabled = True
 
     debugger.HandleCommand("run")
diff --git a/libcxx/utils/libcxx/test/features.py b/libcxx/utils/libcxx/test/features.py
index 4c7281e965bc86..8e8dc546db2805 100644
--- a/libcxx/utils/libcxx/test/features.py
+++ b/libcxx/utils/libcxx/test/features.py
@@ -493,6 +493,7 @@ def _getAndroidDeviceApi(cfg):
     ),
 ]
 
+
 # Detect whether LLDB is on the system.
 def check_lldb(cfg):
     lldb_path = shutil.which("lldb")
@@ -510,6 +511,7 @@ def check_lldb(cfg):
     )
 ]
 
+
 # Detect whether GDB is on the system, has Python scripting and supports
 # adding breakpoint commands. If so add a substitution to access it.
 def check_gdb(cfg):

>From 3407f3f2d07a0441cdf6f33fac4a8ad88c32303f Mon Sep 17 00:00:00 2001
From: Hristo Hristov <hghristov.rmm at gmail.com>
Date: Mon, 12 Feb 2024 15:48:34 +0200
Subject: [PATCH 23/40] Try to fix CI

---
 libcxx/utils/libcxx/header_information.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libcxx/utils/libcxx/header_information.py b/libcxx/utils/libcxx/header_information.py
index bccae353b0c6bd..2e20775aec0961 100644
--- a/libcxx/utils/libcxx/header_information.py
+++ b/libcxx/utils/libcxx/header_information.py
@@ -55,6 +55,7 @@
     "coroutine": "// UNSUPPORTED: c++03, c++11, c++14, c++17",
     "cwchar": "// UNSUPPORTED: no-wide-characters",
     "cwctype": "// UNSUPPORTED: no-wide-characters",
+    "debugging": "// UNSUPPORTED: c++03, c++11, c++14, c++17, c++20, c++23",
     "experimental/iterator": "// UNSUPPORTED: c++03",
     "experimental/propagate_const": "// UNSUPPORTED: c++03",
     "experimental/simd": "// UNSUPPORTED: c++03",
@@ -138,7 +139,6 @@
 # implemented yet. They are used in the generated module input. The C++23 standard
 # modules will fail to build if a header is added but this list is not updated.
 headers_not_available = [
-    "debugging",
     "flat_map",
     "flat_set",
     "generator",

>From 685f19bdd7ee1bfa7aa144167b5cd78ceb7f8f03 Mon Sep 17 00:00:00 2001
From: Hristo Hristov <hghristov.rmm at gmail.com>
Date: Mon, 12 Feb 2024 15:54:34 +0200
Subject: [PATCH 24/40] Try to fix CI

---
 libcxx/modules/std.compat.cppm.in | 3 ---
 libcxx/modules/std.cppm.in        | 3 ---
 2 files changed, 6 deletions(-)

diff --git a/libcxx/modules/std.compat.cppm.in b/libcxx/modules/std.compat.cppm.in
index b44dbab25c74b4..c9ca9e18a77a6f 100644
--- a/libcxx/modules/std.compat.cppm.in
+++ b/libcxx/modules/std.compat.cppm.in
@@ -54,9 +54,6 @@ module;
 // into thinking that libc++ provides the header.
 //
 #ifndef _WIN32
-#  if __has_include(<debugging>)
-#    error "please update the header information for <debugging> in headers_not_available in utils/libcxx/header_information.py"
-#  endif // __has_include(<debugging>)
 #  if __has_include(<flat_map>)
 #    error "please update the header information for <flat_map> in headers_not_available in utils/libcxx/header_information.py"
 #  endif // __has_include(<flat_map>)
diff --git a/libcxx/modules/std.cppm.in b/libcxx/modules/std.cppm.in
index 0fb465f49301d1..f07b48df7d89b6 100644
--- a/libcxx/modules/std.cppm.in
+++ b/libcxx/modules/std.cppm.in
@@ -177,9 +177,6 @@ module;
 // into thinking that libc++ provides the header.
 //
 #ifndef _WIN32
-#  if __has_include(<debugging>)
-#    error "please update the header information for <debugging> in headers_not_available in utils/libcxx/header_information.py"
-#  endif // __has_include(<debugging>)
 #  if __has_include(<flat_map>)
 #    error "please update the header information for <flat_map> in headers_not_available in utils/libcxx/header_information.py"
 #  endif // __has_include(<flat_map>)

>From 38754a0f369946244e50a5757f546ecd9311c79c Mon Sep 17 00:00:00 2001
From: Hristo Hristov <hghristov.rmm at gmail.com>
Date: Mon, 12 Feb 2024 16:35:25 +0200
Subject: [PATCH 25/40] Try to fix CI

---
 libcxx/include/module.modulemap | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/libcxx/include/module.modulemap b/libcxx/include/module.modulemap
index f36a47cef00977..ab4b7c390f1086 100644
--- a/libcxx/include/module.modulemap
+++ b/libcxx/include/module.modulemap
@@ -59,6 +59,10 @@ module std_coroutine [system] {
   header "coroutine"
   export *
 }
+module std_debugging [system] {
+  header "debugging"
+  export *
+}
 module std_deque [system] {
   header "deque"
   export *

>From 2eb966c911daa22522d84e2b55f6d8d07df93c8f Mon Sep 17 00:00:00 2001
From: Hristo Hristov <hghristov.rmm at gmail.com>
Date: Mon, 12 Feb 2024 16:52:33 +0200
Subject: [PATCH 26/40] Try to fix CI

---
 libcxx/src/debugging.cpp | 32 ++++++++++++++++++--------------
 1 file changed, 18 insertions(+), 14 deletions(-)

diff --git a/libcxx/src/debugging.cpp b/libcxx/src/debugging.cpp
index 2efcd120a2f4e9..3d92eecf62ea4b 100644
--- a/libcxx/src/debugging.cpp
+++ b/libcxx/src/debugging.cpp
@@ -27,35 +27,37 @@
 
 _LIBCPP_BEGIN_NAMESPACE_STD
 
+#if defined(_LIBCPP_HAS_DEBUGGING)
+
 // breakpoint()
 
-#if defined(_LIBCPP_WIN32API)
+#  if defined(_LIBCPP_WIN32API)
 
 void __breakpoint() noexcept { DebugBreak(); }
 
-#elif defined(__APPLE__) || defined(__FreeBSD__) || defined(__linux__)
+#  elif defined(__APPLE__) || defined(__FreeBSD__) || defined(__linux__)
 
 void __breakpoint() {
-#  if __has_builtin(__builtin_debugtrap)
+#    if __has_builtin(__builtin_debugtrap)
   __builtin_debugtrap();
-#  else
+#    else
   raise(SIGTRAP);
-#  endif
+#    endif
 }
 
-#else
+#  else
 
-#  error "'std::breakpoint()' is not implemented on this platform."
+#    error "'std::breakpoint()' is not implemented on this platform."
 
-#endif // defined(_LIBCPP_WIN32API)
+#  endif // defined(_LIBCPP_WIN32API)
 
 // is_debugger_present()
 
-#if defined(_LIBCPP_WIN32API)
+#  if defined(_LIBCPP_WIN32API)
 
 bool __is_debugger_present() noexcept { return IsDebuggerPresent(); }
 
-#elif defined(__APPLE__) || defined(__FreeBSD__)
+#  elif defined(__APPLE__) || defined(__FreeBSD__)
 
 // Returns true if the current process is being debugged (either
 // running under the debugger or has a debugger attached post facto).
@@ -87,7 +89,7 @@ bool __is_debugger_present() noexcept {
   return ((info.kp_proc.p_flag & P_TRACED) != 0);
 }
 
-#elif defined(__linux__)
+#  elif defined(__linux__)
 
 bool __is_debugger_present() noexcept {
   // https://docs.kernel.org/filesystems/proc.html
@@ -114,11 +116,11 @@ bool __is_debugger_present() noexcept {
   return false;
 }
 
-#else
+#  else
 
-#  error "'std::is_debugger_present()' is not implemented on this platform."
+#    error "'std::is_debugger_present()' is not implemented on this platform."
 
-#endif // defined(_LIBCPP_WIN32API)
+#  endif // defined(_LIBCPP_WIN32API)
 
 _LIBCPP_EXPORTED_FROM_ABI void breakpoint() noexcept { __breakpoint(); }
 
@@ -129,4 +131,6 @@ _LIBCPP_EXPORTED_FROM_ABI void breakpoint_if_debugging() noexcept {
 
 _LIBCPP_EXPORTED_FROM_ABI bool is_debugger_present() noexcept { return __is_debugger_present(); }
 
+#endif // defined(_LIBCPP_HAS_DEBUGGING)
+
 _LIBCPP_END_NAMESPACE_STD

>From ea005b1d5867627e25ace31eb2843cbd819e8fc4 Mon Sep 17 00:00:00 2001
From: Hristo Hristov <hghristov.rmm at gmail.com>
Date: Mon, 12 Feb 2024 17:05:44 +0200
Subject: [PATCH 27/40] Try to fix CI

---
 ...n-linux-gnu.libcxxabi.v1.stable.exceptions.nonew.abilist | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/libcxx/lib/abi/x86_64-unknown-linux-gnu.libcxxabi.v1.stable.exceptions.nonew.abilist b/libcxx/lib/abi/x86_64-unknown-linux-gnu.libcxxabi.v1.stable.exceptions.nonew.abilist
index 6432ad3be35859..b47eddaa1bfad0 100644
--- a/libcxx/lib/abi/x86_64-unknown-linux-gnu.libcxxabi.v1.stable.exceptions.nonew.abilist
+++ b/libcxx/lib/abi/x86_64-unknown-linux-gnu.libcxxabi.v1.stable.exceptions.nonew.abilist
@@ -36,6 +36,7 @@
 {'is_defined': False, 'name': '_ZTVSt13runtime_error', 'size': 0, 'type': 'OBJECT'}
 {'is_defined': False, 'name': '_ZTVSt14overflow_error', 'size': 0, 'type': 'OBJECT'}
 {'is_defined': False, 'name': '_ZTVSt16invalid_argument', 'size': 0, 'type': 'OBJECT'}
+{'is_defined': False, 'name': '_ZTVSt9exception', 'size': 0, 'type': 'OBJECT'}
 {'is_defined': False, 'name': '_ZdaPv', 'type': 'FUNC'}
 {'is_defined': False, 'name': '_ZdaPvSt11align_val_t', 'type': 'FUNC'}
 {'is_defined': False, 'name': '_ZdlPv', 'type': 'FUNC'}
@@ -555,6 +556,7 @@
 {'is_defined': True, 'name': '_ZNSt3__110__time_putC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__110__time_putD1Ev', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__110__time_putD2Ev', 'type': 'FUNC'}
+{'is_defined': True, 'name': '_ZNSt3__110breakpointEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__110ctype_base5alnumE', 'size': 2, 'type': 'OBJECT'}
 {'is_defined': True, 'name': '_ZNSt3__110ctype_base5alphaE', 'size': 2, 'type': 'OBJECT'}
 {'is_defined': True, 'name': '_ZNSt3__110ctype_base5blankE', 'size': 2, 'type': 'OBJECT'}
@@ -1209,6 +1211,7 @@
 {'is_defined': True, 'name': '_ZNSt3__119basic_istringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEOS5_', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__119basic_ostringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEOS5_', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__119declare_no_pointersEPcm', 'type': 'FUNC'}
+{'is_defined': True, 'name': '_ZNSt3__119is_debugger_presentEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__120__get_collation_nameEPKc', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__120__libcpp_atomic_waitEPVKNS_17__cxx_atomic_implIiNS_22__cxx_atomic_base_implIiEEEEi', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__120__libcpp_atomic_waitEPVKvi', 'type': 'FUNC'}
@@ -1230,6 +1233,7 @@
 {'is_defined': True, 'name': '_ZNSt3__123__cxx_atomic_notify_oneEPVKv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__123__libcpp_atomic_monitorEPVKNS_17__cxx_atomic_implIiNS_22__cxx_atomic_base_implIiEEEE', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__123__libcpp_atomic_monitorEPVKv', 'type': 'FUNC'}
+{'is_defined': True, 'name': '_ZNSt3__123breakpoint_if_debuggingEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__125notify_all_at_thread_exitERNS_18condition_variableENS_11unique_lockINS_5mutexEEE', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__131__arrive_barrier_algorithm_baseEPNS_24__barrier_algorithm_baseEh', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__132__destroy_barrier_algorithm_baseEPNS_24__barrier_algorithm_baseE', 'type': 'FUNC'}
@@ -1968,6 +1972,8 @@
 {'is_defined': True, 'name': '_ZTVNSt3__120__codecvt_utf8_utf16IDiEE', 'size': 96, 'type': 'OBJECT'}
 {'is_defined': True, 'name': '_ZTVNSt3__120__codecvt_utf8_utf16IDsEE', 'size': 96, 'type': 'OBJECT'}
 {'is_defined': True, 'name': '_ZTVNSt3__120__codecvt_utf8_utf16IwEE', 'size': 96, 'type': 'OBJECT'}
+{'is_defined': True, 'name': '_ZTVNSt3__120__time_get_c_storageIcEE', 'size': 72, 'type': 'OBJECT'}
+{'is_defined': True, 'name': '_ZTVNSt3__120__time_get_c_storageIwEE', 'size': 72, 'type': 'OBJECT'}
 {'is_defined': True, 'name': '_ZTVNSt3__13pmr15memory_resourceE', 'size': 56, 'type': 'OBJECT'}
 {'is_defined': True, 'name': '_ZTVNSt3__13pmr25monotonic_buffer_resourceE', 'size': 56, 'type': 'OBJECT'}
 {'is_defined': True, 'name': '_ZTVNSt3__13pmr26__null_memory_resource_impE', 'size': 56, 'type': 'OBJECT'}

>From dd0cd75fa5dac6ace393cd3b6110bf8ba870defc Mon Sep 17 00:00:00 2001
From: Hristo Hristov <hghristov.rmm at gmail.com>
Date: Thu, 15 Feb 2024 09:11:08 +0200
Subject: [PATCH 28/40] Added ABIs

---
 ...4-apple-darwin.libcxxabi.v1.stable.exceptions.nonew.abilist | 3 +++
 ...inux-android21.libcxxabi.v1.stable.exceptions.nonew.abilist | 3 +++
 ...4-apple-darwin.libcxxabi.v1.stable.exceptions.nonew.abilist | 3 +++
 ...inux-android21.libcxxabi.v1.stable.exceptions.nonew.abilist | 3 +++
 ...nknown-freebsd.libcxxabi.v1.stable.exceptions.nonew.abilist | 3 +++
 ...wn-linux-gnu.libcxxabi.v1.stable.noexceptions.nonew.abilist | 3 +++
 libcxx/src/debugging.cpp                                       | 3 +++
 7 files changed, 21 insertions(+)

diff --git a/libcxx/lib/abi/arm64-apple-darwin.libcxxabi.v1.stable.exceptions.nonew.abilist b/libcxx/lib/abi/arm64-apple-darwin.libcxxabi.v1.stable.exceptions.nonew.abilist
index 46353986f5d7d7..cbbb61aea75bc9 100644
--- a/libcxx/lib/abi/arm64-apple-darwin.libcxxabi.v1.stable.exceptions.nonew.abilist
+++ b/libcxx/lib/abi/arm64-apple-darwin.libcxxabi.v1.stable.exceptions.nonew.abilist
@@ -909,6 +909,7 @@
 {'is_defined': True, 'name': '__ZNSt3__110__time_putC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__110__time_putD1Ev', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__110__time_putD2Ev', 'type': 'FUNC'}
+{'is_defined': True, 'name': '__ZNSt3__110breakpointEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__110ctype_base5alnumE', 'size': 0, 'type': 'OBJECT'}
 {'is_defined': True, 'name': '__ZNSt3__110ctype_base5alphaE', 'size': 0, 'type': 'OBJECT'}
 {'is_defined': True, 'name': '__ZNSt3__110ctype_base5blankE', 'size': 0, 'type': 'OBJECT'}
@@ -1563,6 +1564,7 @@
 {'is_defined': True, 'name': '__ZNSt3__119basic_istringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEOS5_', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__119basic_ostringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEOS5_', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__119declare_no_pointersEPcm', 'type': 'FUNC'}
+{'is_defined': True, 'name': '__ZNSt3__119is_debugger_presentEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__120__get_collation_nameEPKc', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__120__libcpp_atomic_waitEPVKNS_17__cxx_atomic_implIxNS_22__cxx_atomic_base_implIxEEEEx', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__120__libcpp_atomic_waitEPVKvx', 'type': 'FUNC'}
@@ -1584,6 +1586,7 @@
 {'is_defined': True, 'name': '__ZNSt3__123__cxx_atomic_notify_oneEPVKv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__123__libcpp_atomic_monitorEPVKNS_17__cxx_atomic_implIxNS_22__cxx_atomic_base_implIxEEEE', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__123__libcpp_atomic_monitorEPVKv', 'type': 'FUNC'}
+{'is_defined': True, 'name': '__ZNSt3__123breakpoint_if_debuggingEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__125notify_all_at_thread_exitERNS_18condition_variableENS_11unique_lockINS_5mutexEEE', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__131__arrive_barrier_algorithm_baseEPNS_24__barrier_algorithm_baseEh', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__132__destroy_barrier_algorithm_baseEPNS_24__barrier_algorithm_baseE', 'type': 'FUNC'}
diff --git a/libcxx/lib/abi/i686-linux-android21.libcxxabi.v1.stable.exceptions.nonew.abilist b/libcxx/lib/abi/i686-linux-android21.libcxxabi.v1.stable.exceptions.nonew.abilist
index fec3a4505a0c6d..b57785484f8ae8 100644
--- a/libcxx/lib/abi/i686-linux-android21.libcxxabi.v1.stable.exceptions.nonew.abilist
+++ b/libcxx/lib/abi/i686-linux-android21.libcxxabi.v1.stable.exceptions.nonew.abilist
@@ -543,6 +543,7 @@
 {'is_defined': True, 'name': '_ZNSt6__ndk110__time_putC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk110__time_putD1Ev', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk110__time_putD2Ev', 'type': 'FUNC'}
+{'is_defined': True, 'name': '_ZNSt6__ndk110breakpointEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk110ctype_base5alnumE', 'size': 4, 'type': 'OBJECT'}
 {'is_defined': True, 'name': '_ZNSt6__ndk110ctype_base5alphaE', 'size': 4, 'type': 'OBJECT'}
 {'is_defined': True, 'name': '_ZNSt6__ndk110ctype_base5blankE', 'size': 4, 'type': 'OBJECT'}
@@ -1197,6 +1198,7 @@
 {'is_defined': True, 'name': '_ZNSt6__ndk119basic_istringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEOS5_', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk119basic_ostringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEOS5_', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk119declare_no_pointersEPcj', 'type': 'FUNC'}
+{'is_defined': True, 'name': '_ZNSt6__ndk119is_debugger_presentEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk120__get_collation_nameEPKc', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk120__libcpp_atomic_waitEPVKNS_17__cxx_atomic_implIiNS_22__cxx_atomic_base_implIiEEEEi', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk120__libcpp_atomic_waitEPVKvi', 'type': 'FUNC'}
@@ -1218,6 +1220,7 @@
 {'is_defined': True, 'name': '_ZNSt6__ndk123__cxx_atomic_notify_oneEPVKv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk123__libcpp_atomic_monitorEPVKNS_17__cxx_atomic_implIiNS_22__cxx_atomic_base_implIiEEEE', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk123__libcpp_atomic_monitorEPVKv', 'type': 'FUNC'}
+{'is_defined': True, 'name': '_ZNSt6__ndk123breakpoint_if_debuggingEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk125notify_all_at_thread_exitERNS_18condition_variableENS_11unique_lockINS_5mutexEEE', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk131__arrive_barrier_algorithm_baseEPNS_24__barrier_algorithm_baseEh', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk132__destroy_barrier_algorithm_baseEPNS_24__barrier_algorithm_baseE', 'type': 'FUNC'}
diff --git a/libcxx/lib/abi/x86_64-apple-darwin.libcxxabi.v1.stable.exceptions.nonew.abilist b/libcxx/lib/abi/x86_64-apple-darwin.libcxxabi.v1.stable.exceptions.nonew.abilist
index c169b4a9925219..40b2ef958364e6 100644
--- a/libcxx/lib/abi/x86_64-apple-darwin.libcxxabi.v1.stable.exceptions.nonew.abilist
+++ b/libcxx/lib/abi/x86_64-apple-darwin.libcxxabi.v1.stable.exceptions.nonew.abilist
@@ -909,6 +909,7 @@
 {'is_defined': True, 'name': '__ZNSt3__110__time_putC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__110__time_putD1Ev', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__110__time_putD2Ev', 'type': 'FUNC'}
+{'is_defined': True, 'name': '__ZNSt3__110breakpointEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__110ctype_base5alnumE', 'size': 0, 'type': 'OBJECT'}
 {'is_defined': True, 'name': '__ZNSt3__110ctype_base5alphaE', 'size': 0, 'type': 'OBJECT'}
 {'is_defined': True, 'name': '__ZNSt3__110ctype_base5blankE', 'size': 0, 'type': 'OBJECT'}
@@ -1563,6 +1564,7 @@
 {'is_defined': True, 'name': '__ZNSt3__119basic_istringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEOS5_', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__119basic_ostringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEOS5_', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__119declare_no_pointersEPcm', 'type': 'FUNC'}
+{'is_defined': True, 'name': '__ZNSt3__119is_debugger_presentEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__120__get_collation_nameEPKc', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__120__libcpp_atomic_waitEPVKNS_17__cxx_atomic_implIxNS_22__cxx_atomic_base_implIxEEEEx', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__120__libcpp_atomic_waitEPVKvx', 'type': 'FUNC'}
@@ -1584,6 +1586,7 @@
 {'is_defined': True, 'name': '__ZNSt3__123__cxx_atomic_notify_oneEPVKv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__123__libcpp_atomic_monitorEPVKNS_17__cxx_atomic_implIxNS_22__cxx_atomic_base_implIxEEEE', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__123__libcpp_atomic_monitorEPVKv', 'type': 'FUNC'}
+{'is_defined': True, 'name': '__ZNSt3__123breakpoint_if_debuggingEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__125notify_all_at_thread_exitERNS_18condition_variableENS_11unique_lockINS_5mutexEEE', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__131__arrive_barrier_algorithm_baseEPNS_24__barrier_algorithm_baseEh', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__132__destroy_barrier_algorithm_baseEPNS_24__barrier_algorithm_baseE', 'type': 'FUNC'}
diff --git a/libcxx/lib/abi/x86_64-linux-android21.libcxxabi.v1.stable.exceptions.nonew.abilist b/libcxx/lib/abi/x86_64-linux-android21.libcxxabi.v1.stable.exceptions.nonew.abilist
index efa2189e9c9287..2297a0067b6a1c 100644
--- a/libcxx/lib/abi/x86_64-linux-android21.libcxxabi.v1.stable.exceptions.nonew.abilist
+++ b/libcxx/lib/abi/x86_64-linux-android21.libcxxabi.v1.stable.exceptions.nonew.abilist
@@ -543,6 +543,7 @@
 {'is_defined': True, 'name': '_ZNSt6__ndk110__time_putC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk110__time_putD1Ev', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk110__time_putD2Ev', 'type': 'FUNC'}
+{'is_defined': True, 'name': '_ZNSt6__ndk110breakpointEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk110ctype_base5alnumE', 'size': 8, 'type': 'OBJECT'}
 {'is_defined': True, 'name': '_ZNSt6__ndk110ctype_base5alphaE', 'size': 8, 'type': 'OBJECT'}
 {'is_defined': True, 'name': '_ZNSt6__ndk110ctype_base5blankE', 'size': 8, 'type': 'OBJECT'}
@@ -1197,6 +1198,7 @@
 {'is_defined': True, 'name': '_ZNSt6__ndk119basic_istringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEOS5_', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk119basic_ostringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEOS5_', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk119declare_no_pointersEPcm', 'type': 'FUNC'}
+{'is_defined': True, 'name': '_ZNSt6__ndk119is_debugger_presentEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk120__get_collation_nameEPKc', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk120__libcpp_atomic_waitEPVKNS_17__cxx_atomic_implIiNS_22__cxx_atomic_base_implIiEEEEi', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk120__libcpp_atomic_waitEPVKvi', 'type': 'FUNC'}
@@ -1218,6 +1220,7 @@
 {'is_defined': True, 'name': '_ZNSt6__ndk123__cxx_atomic_notify_oneEPVKv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk123__libcpp_atomic_monitorEPVKNS_17__cxx_atomic_implIiNS_22__cxx_atomic_base_implIiEEEE', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk123__libcpp_atomic_monitorEPVKv', 'type': 'FUNC'}
+{'is_defined': True, 'name': '_ZNSt6__123breakpoint_if_debuggingEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk125notify_all_at_thread_exitERNS_18condition_variableENS_11unique_lockINS_5mutexEEE', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk131__arrive_barrier_algorithm_baseEPNS_24__barrier_algorithm_baseEh', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk132__destroy_barrier_algorithm_baseEPNS_24__barrier_algorithm_baseE', 'type': 'FUNC'}
diff --git a/libcxx/lib/abi/x86_64-unknown-freebsd.libcxxabi.v1.stable.exceptions.nonew.abilist b/libcxx/lib/abi/x86_64-unknown-freebsd.libcxxabi.v1.stable.exceptions.nonew.abilist
index ebda5b0dfba57d..467284019aab7c 100644
--- a/libcxx/lib/abi/x86_64-unknown-freebsd.libcxxabi.v1.stable.exceptions.nonew.abilist
+++ b/libcxx/lib/abi/x86_64-unknown-freebsd.libcxxabi.v1.stable.exceptions.nonew.abilist
@@ -557,6 +557,7 @@
 {'is_defined': True, 'name': '_ZNSt3__110__time_putC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__110__time_putD1Ev', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__110__time_putD2Ev', 'type': 'FUNC'}
+{'is_defined': True, 'name': '_ZNSt3__110breakpointEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__110ctype_base5alnumE', 'size': 8, 'type': 'OBJECT'}
 {'is_defined': True, 'name': '_ZNSt3__110ctype_base5alphaE', 'size': 8, 'type': 'OBJECT'}
 {'is_defined': True, 'name': '_ZNSt3__110ctype_base5blankE', 'size': 8, 'type': 'OBJECT'}
@@ -1211,6 +1212,7 @@
 {'is_defined': True, 'name': '_ZNSt3__119basic_istringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEOS5_', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__119basic_ostringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEOS5_', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__119declare_no_pointersEPcm', 'type': 'FUNC'}
+{'is_defined': True, 'name': '_ZNSt3__119is_debugger_presentEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__120__get_collation_nameEPKc', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__120__libcpp_atomic_waitEPVKNS_17__cxx_atomic_implIlNS_22__cxx_atomic_base_implIlEEEEl', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__120__libcpp_atomic_waitEPVKvl', 'type': 'FUNC'}
@@ -1232,6 +1234,7 @@
 {'is_defined': True, 'name': '_ZNSt3__123__cxx_atomic_notify_oneEPVKv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__123__libcpp_atomic_monitorEPVKNS_17__cxx_atomic_implIlNS_22__cxx_atomic_base_implIlEEEE', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__123__libcpp_atomic_monitorEPVKv', 'type': 'FUNC'}
+{'is_defined': True, 'name': '_ZNSt3__123breakpoint_if_debuggingEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__125notify_all_at_thread_exitERNS_18condition_variableENS_11unique_lockINS_5mutexEEE', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__131__arrive_barrier_algorithm_baseEPNS_24__barrier_algorithm_baseEh', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__132__destroy_barrier_algorithm_baseEPNS_24__barrier_algorithm_baseE', 'type': 'FUNC'}
diff --git a/libcxx/lib/abi/x86_64-unknown-linux-gnu.libcxxabi.v1.stable.noexceptions.nonew.abilist b/libcxx/lib/abi/x86_64-unknown-linux-gnu.libcxxabi.v1.stable.noexceptions.nonew.abilist
index 1fe84e17b3f7f0..df9ebe53bbd8a3 100644
--- a/libcxx/lib/abi/x86_64-unknown-linux-gnu.libcxxabi.v1.stable.noexceptions.nonew.abilist
+++ b/libcxx/lib/abi/x86_64-unknown-linux-gnu.libcxxabi.v1.stable.noexceptions.nonew.abilist
@@ -526,6 +526,7 @@
 {'is_defined': True, 'name': '_ZNSt3__110__time_putC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__110__time_putD1Ev', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__110__time_putD2Ev', 'type': 'FUNC'}
+{'is_defined': True, 'name': '_ZNSt3__110breakpointEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__110ctype_base5alnumE', 'size': 2, 'type': 'OBJECT'}
 {'is_defined': True, 'name': '_ZNSt3__110ctype_base5alphaE', 'size': 2, 'type': 'OBJECT'}
 {'is_defined': True, 'name': '_ZNSt3__110ctype_base5blankE', 'size': 2, 'type': 'OBJECT'}
@@ -1180,6 +1181,7 @@
 {'is_defined': True, 'name': '_ZNSt3__119basic_istringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEOS5_', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__119basic_ostringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEOS5_', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__119declare_no_pointersEPcm', 'type': 'FUNC'}
+{'is_defined': True, 'name': '_ZNSt3__119is_debugger_presentEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__120__get_collation_nameEPKc', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__120__libcpp_atomic_waitEPVKNS_17__cxx_atomic_implIiNS_22__cxx_atomic_base_implIiEEEEi', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__120__libcpp_atomic_waitEPVKvi', 'type': 'FUNC'}
@@ -1201,6 +1203,7 @@
 {'is_defined': True, 'name': '_ZNSt3__123__cxx_atomic_notify_oneEPVKv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__123__libcpp_atomic_monitorEPVKNS_17__cxx_atomic_implIiNS_22__cxx_atomic_base_implIiEEEE', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__123__libcpp_atomic_monitorEPVKv', 'type': 'FUNC'}
+{'is_defined': True, 'name': '_ZNSt3__123breakpoint_if_debuggingEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__125notify_all_at_thread_exitERNS_18condition_variableENS_11unique_lockINS_5mutexEEE', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__131__arrive_barrier_algorithm_baseEPNS_24__barrier_algorithm_baseEh', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__132__destroy_barrier_algorithm_baseEPNS_24__barrier_algorithm_baseE', 'type': 'FUNC'}
diff --git a/libcxx/src/debugging.cpp b/libcxx/src/debugging.cpp
index 3d92eecf62ea4b..648df15cabef07 100644
--- a/libcxx/src/debugging.cpp
+++ b/libcxx/src/debugging.cpp
@@ -16,8 +16,11 @@
 #elif defined(__APPLE__) || defined(__FreeBSD__)
 #  include <array>
 #  include <csignal>
+#  include <libutil.h>
+#  include <sys/proc.h>
 #  include <sys/sysctl.h>
 #  include <sys/types.h>
+#  include <sys/user.h>
 #  include <unistd.h>
 #elif defined(__linux__)
 #  include <csignal>

>From b39076ce158582d30052f40252db0593dbcd9a98 Mon Sep 17 00:00:00 2001
From: Hristo Hristov <hghristov.rmm at gmail.com>
Date: Fri, 16 Feb 2024 14:10:21 +0200
Subject: [PATCH 29/40] Various fixes: macOS, Android ABI

---
 ...android21.libcxxabi.v1.stable.exceptions.nonew.abilist | 2 +-
 ...linux-gnu.libcxxabi.v1.stable.exceptions.nonew.abilist | 3 ---
 libcxx/src/debugging.cpp                                  | 8 +++++++-
 3 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/libcxx/lib/abi/x86_64-linux-android21.libcxxabi.v1.stable.exceptions.nonew.abilist b/libcxx/lib/abi/x86_64-linux-android21.libcxxabi.v1.stable.exceptions.nonew.abilist
index 2297a0067b6a1c..0187b958bed61c 100644
--- a/libcxx/lib/abi/x86_64-linux-android21.libcxxabi.v1.stable.exceptions.nonew.abilist
+++ b/libcxx/lib/abi/x86_64-linux-android21.libcxxabi.v1.stable.exceptions.nonew.abilist
@@ -1220,7 +1220,7 @@
 {'is_defined': True, 'name': '_ZNSt6__ndk123__cxx_atomic_notify_oneEPVKv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk123__libcpp_atomic_monitorEPVKNS_17__cxx_atomic_implIiNS_22__cxx_atomic_base_implIiEEEE', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk123__libcpp_atomic_monitorEPVKv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt6__123breakpoint_if_debuggingEv', 'type': 'FUNC'}
+{'is_defined': True, 'name': '_ZNSt6__ndk123breakpoint_if_debuggingEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk125notify_all_at_thread_exitERNS_18condition_variableENS_11unique_lockINS_5mutexEEE', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk131__arrive_barrier_algorithm_baseEPNS_24__barrier_algorithm_baseEh', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk132__destroy_barrier_algorithm_baseEPNS_24__barrier_algorithm_baseE', 'type': 'FUNC'}
diff --git a/libcxx/lib/abi/x86_64-unknown-linux-gnu.libcxxabi.v1.stable.exceptions.nonew.abilist b/libcxx/lib/abi/x86_64-unknown-linux-gnu.libcxxabi.v1.stable.exceptions.nonew.abilist
index b47eddaa1bfad0..2c4045dc798ebf 100644
--- a/libcxx/lib/abi/x86_64-unknown-linux-gnu.libcxxabi.v1.stable.exceptions.nonew.abilist
+++ b/libcxx/lib/abi/x86_64-unknown-linux-gnu.libcxxabi.v1.stable.exceptions.nonew.abilist
@@ -36,7 +36,6 @@
 {'is_defined': False, 'name': '_ZTVSt13runtime_error', 'size': 0, 'type': 'OBJECT'}
 {'is_defined': False, 'name': '_ZTVSt14overflow_error', 'size': 0, 'type': 'OBJECT'}
 {'is_defined': False, 'name': '_ZTVSt16invalid_argument', 'size': 0, 'type': 'OBJECT'}
-{'is_defined': False, 'name': '_ZTVSt9exception', 'size': 0, 'type': 'OBJECT'}
 {'is_defined': False, 'name': '_ZdaPv', 'type': 'FUNC'}
 {'is_defined': False, 'name': '_ZdaPvSt11align_val_t', 'type': 'FUNC'}
 {'is_defined': False, 'name': '_ZdlPv', 'type': 'FUNC'}
@@ -1972,8 +1971,6 @@
 {'is_defined': True, 'name': '_ZTVNSt3__120__codecvt_utf8_utf16IDiEE', 'size': 96, 'type': 'OBJECT'}
 {'is_defined': True, 'name': '_ZTVNSt3__120__codecvt_utf8_utf16IDsEE', 'size': 96, 'type': 'OBJECT'}
 {'is_defined': True, 'name': '_ZTVNSt3__120__codecvt_utf8_utf16IwEE', 'size': 96, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__120__time_get_c_storageIcEE', 'size': 72, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__120__time_get_c_storageIwEE', 'size': 72, 'type': 'OBJECT'}
 {'is_defined': True, 'name': '_ZTVNSt3__13pmr15memory_resourceE', 'size': 56, 'type': 'OBJECT'}
 {'is_defined': True, 'name': '_ZTVNSt3__13pmr25monotonic_buffer_resourceE', 'size': 56, 'type': 'OBJECT'}
 {'is_defined': True, 'name': '_ZTVNSt3__13pmr26__null_memory_resource_impE', 'size': 56, 'type': 'OBJECT'}
diff --git a/libcxx/src/debugging.cpp b/libcxx/src/debugging.cpp
index 648df15cabef07..afaf0b4a92bbc5 100644
--- a/libcxx/src/debugging.cpp
+++ b/libcxx/src/debugging.cpp
@@ -13,7 +13,13 @@
 #  define WIN32_LEAN_AND_MEAN
 #  define NOMINMAX
 #  include <windows.h>
-#elif defined(__APPLE__) || defined(__FreeBSD__)
+#elif defined(__APPLE__)
+#  include <array>
+#  include <csignal>
+#  include <sys/sysctl.h>
+#  include <sys/types.h>
+#  include <unistd.h>
+#elif defined(__FreeBSD__)
 #  include <array>
 #  include <csignal>
 #  include <libutil.h>

>From 98e44a16f3552f33056b85509b08935c4fb817c6 Mon Sep 17 00:00:00 2001
From: Hristo Hristov <hghristov.rmm at gmail.com>
Date: Fri, 16 Feb 2024 14:58:05 +0200
Subject: [PATCH 30/40] Try to fix BSD CI

---
 libcxx/src/debugging.cpp | 1 +
 1 file changed, 1 insertion(+)

diff --git a/libcxx/src/debugging.cpp b/libcxx/src/debugging.cpp
index afaf0b4a92bbc5..6c29f2e58e6f24 100644
--- a/libcxx/src/debugging.cpp
+++ b/libcxx/src/debugging.cpp
@@ -23,6 +23,7 @@
 #  include <array>
 #  include <csignal>
 #  include <libutil.h>
+#  include <sys/cdefs.h>
 #  include <sys/proc.h>
 #  include <sys/sysctl.h>
 #  include <sys/types.h>

>From 7ebf623da37bf93baf30c4ac11b90771a331ad1b Mon Sep 17 00:00:00 2001
From: Hristo Hristov <hghristov.rmm at gmail.com>
Date: Sat, 17 Feb 2024 08:20:46 +0200
Subject: [PATCH 31/40] Try to fix Windows CI

---
 libcxx/include/__config                              |  2 +-
 libcxx/src/debugging.cpp                             | 12 ++++++++++++
 .../is_debugger_present_with_debugger_gdb.sh.cpp     |  8 ++++++--
 .../is_debugger_present_with_debugger_lldb.sh.cpp    |  6 ++++--
 4 files changed, 23 insertions(+), 5 deletions(-)

diff --git a/libcxx/include/__config b/libcxx/include/__config
index 64901114f77112..798295220c900e 100644
--- a/libcxx/include/__config
+++ b/libcxx/include/__config
@@ -1516,7 +1516,7 @@ __sanitizer_verify_double_ended_contiguous_container(const void*, const void*, c
 #    define _LIBCPP_HAS_EXPLICIT_THIS_PARAMETER
 #  endif
 
-#  if (defined(__APPLE__) || defined(__FreeBSD__) || defined(__linux__) || defined(_WIN32)) &&                         \
+#  if (defined(__APPLE__) || defined(__FreeBSD__) || defined(__linux__) || defined(_LIBCPP_WIN32API)) &&               \
       !defined(__PICOLIBC__) && !defined(_LIBCPP_HAS_NO_INCOMPLETE_DEBUGGING)
 #    define _LIBCPP_HAS_DEBUGGING
 #  endif
diff --git a/libcxx/src/debugging.cpp b/libcxx/src/debugging.cpp
index 6c29f2e58e6f24..1708ed322527ec 100644
--- a/libcxx/src/debugging.cpp
+++ b/libcxx/src/debugging.cpp
@@ -102,6 +102,17 @@ bool __is_debugger_present() noexcept {
 #  elif defined(__linux__)
 
 bool __is_debugger_present() noexcept {
+#    if defined(_LIBCPP_HAS_NO_FILESYSTEM)
+  _LIBCPP_ASSERT_INTERNAL(false,
+                          "Function is not available. Could not open '/proc/self/status' for reading, libc++ was "
+                          "compiled with _LIBCPP_HAS_NO_FILESYSTEM.");
+  return false;
+#    elif defined(_LIBCPP_HAS_NO_LOCALIZATION)
+  _LIBCPP_ASSERT_INTERNAL(false,
+                          "Function is not available. Could not open '/proc/self/status' for reading, libc++ was "
+                          "compiled with _LIBCPP_HAS_NO_LOCALIZATION.");
+  return false;
+#    else
   // https://docs.kernel.org/filesystems/proc.html
 
   // Get the status information of a process by reading the file /proc/PID/status.
@@ -124,6 +135,7 @@ bool __is_debugger_present() noexcept {
   }
 
   return false;
+#    endif // _LIBCPP_HAS_NO_FILESYSTEM
 }
 
 #  else
diff --git a/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_gdb.sh.cpp b/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_gdb.sh.cpp
index 21f2bbc0fc6c98..7bd9617966538c 100644
--- a/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_gdb.sh.cpp
+++ b/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_gdb.sh.cpp
@@ -8,11 +8,15 @@
 
 // UNSUPPORTED: c++03, c++11, c++14, c++17, c++20, c++23
 // REQUIRES: host-has-gdb-with-python
-// UNSUPPORTED: android
+// The Android libc++ tests are run on a non-Android host, connected to an
+// Android device over adb. gdb needs special support to make this work (e.g.
+// gdbclient.py, ndk-gdb.py, gdbserver), and the Android organization doesn't
+// support gdb anymore, favoring lldb instead.
+// UNSUPPORTED: android, linux && no-filesystem && no-localization
 // XFAIL: LIBCXX-AIX-FIXME, LIBCXX-PICOLIBC-FIXME
 
 // RUN: %{cxx} %{flags} %s -o %t.exe %{compile_flags} -g %{link_flags}
-// RUN: %{gdb} %t.exe -ex "source %S/is_debugger_present_with_debugger_gdb.py" --silent
+// RUN: "%{gdb}" %t.exe -ex "source %S/is_debugger_present_with_debugger_gdb.py" --silent
 
 // <debugging>
 
diff --git a/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_lldb.sh.cpp b/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_lldb.sh.cpp
index 2365203d66dcff..52882492d909c9 100644
--- a/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_lldb.sh.cpp
+++ b/libcxx/test/std/utilities/debugging/is_debugger_present_with_debugger_lldb.sh.cpp
@@ -8,11 +8,13 @@
 
 // UNSUPPORTED: c++03, c++11, c++14, c++17, c++20, c++23
 // REQUIRES: host-has-lldb-with-python
-// UNSUPPORTED: android
+// The Android libc++ tests are run on a non-Android host, connected to an
+// Android device over adb.
+// UNSUPPORTED: android, linux && no-filesystem && no-localization
 // XFAIL: LIBCXX-AIX-FIXME, LIBCXX-PICOLIBC-FIXME
 
 // RUN: %{cxx} %{flags} %s -o %t.exe %{compile_flags} -g %{link_flags}
-// RUN: %{lldb} %t.exe -o "command script import %S/is_debugger_present_with_debugger_lldb.py"
+// RUN: "%{lldb}" %t.exe -o "command script import %S/is_debugger_present_with_debugger_lldb.py"
 
 // <debugging>
 

>From 582aff61fb8a4fb1bedf5511c3852f7898c32880 Mon Sep 17 00:00:00 2001
From: Hristo Hristov <hghristov.rmm at gmail.com>
Date: Tue, 19 Mar 2024 08:41:58 +0200
Subject: [PATCH 32/40] Added `AVAILABIlITY` macro

---
 libcxx/include/__availability                 | 13 +++++++++++++
 libcxx/include/debugging                      | 17 ++++++++++++++---
 libcxx/include/version                        |  2 +-
 libcxx/src/debugging.cpp                      | 19 +++++--------------
 .../debugging.version.compile.pass.cpp        |  4 ++--
 .../version.version.compile.pass.cpp          |  4 ++--
 .../generate_feature_test_macro_components.py |  4 ++--
 7 files changed, 39 insertions(+), 24 deletions(-)

diff --git a/libcxx/include/__availability b/libcxx/include/__availability
index bb3ed0a8da521b..6895a941d0f319 100644
--- a/libcxx/include/__availability
+++ b/libcxx/include/__availability
@@ -160,6 +160,13 @@
 #  define _LIBCPP_AVAILABILITY_HAS_TZDB 1
 #  define _LIBCPP_AVAILABILITY_TZDB
 
+// This controls the availability of the C++26 debugging functions.
+// The platform specific implementation is built in the library.
+#  if defined(_LIBCPP_HAS_DEBUGGING)
+#    define _LIBCPP_AVAILABILITY_HAS_DEBUGGING 1
+#    define _LIBCPP_AVAILABILITY_DEBUGGING
+#  endif
+
 #elif defined(__APPLE__)
 
 #  define _LIBCPP_AVAILABILITY_HAS_BAD_OPTIONAL_ACCESS                                                                 \
@@ -290,6 +297,12 @@
 #  else
 #    define _LIBCPP_AVAILABILITY_HAS_ADDITIONAL_IOSTREAM_EXPLICIT_INSTANTIATIONS_1 1
 #  endif
+
+#  if defined(_LIBCPP_HAS_DEBUGGING)
+#    define _LIBCPP_AVAILABILITY_HAS_DEBUGGING 0
+#    define _LIBCPP_AVAILABILITY_DEBUGGING __attribute__((unavailable))
+#  endif
+
 #else
 
 // ...New vendors can add availability markup here...
diff --git a/libcxx/include/debugging b/libcxx/include/debugging
index 686ce7c861fa7e..4605b90b3486ac 100644
--- a/libcxx/include/debugging
+++ b/libcxx/include/debugging
@@ -31,11 +31,22 @@ _LIBCPP_BEGIN_NAMESPACE_STD
 
 #if _LIBCPP_STD_VER >= 26 && defined(_LIBCPP_HAS_DEBUGGING)
 
-_LIBCPP_EXPORTED_FROM_ABI void breakpoint() noexcept;
+_LIBCPP_EXPORTED_FROM_ABI void __breakpoint() noexcept;
 
-_LIBCPP_EXPORTED_FROM_ABI void breakpoint_if_debugging() noexcept;
+_LIBCPP_EXPORTED_FROM_ABI void __breakpoint_if_debugging() noexcept;
 
-_LIBCPP_EXPORTED_FROM_ABI bool is_debugger_present() noexcept;
+_LIBCPP_EXPORTED_FROM_ABI bool __is_debugger_present() noexcept;
+
+_LIBCPP_AVAILABILITY_DEBUGGING _LIBCPP_HIDE_FROM_ABI void breakpoint() noexcept { __breakpoint(); }
+
+_LIBCPP_AVAILABILITY_DEBUGGING _LIBCPP_HIDE_FROM_ABI void breakpoint_if_debugging() noexcept {
+  if (__is_debugger_present())
+    __breakpoint();
+}
+
+_LIBCPP_AVAILABILITY_DEBUGGING _LIBCPP_HIDE_FROM_ABI bool is_debugger_present() noexcept {
+  return __is_debugger_present();
+}
 
 #endif
 
diff --git a/libcxx/include/version b/libcxx/include/version
index ff138f5b34dd21..30a1e462471823 100644
--- a/libcxx/include/version
+++ b/libcxx/include/version
@@ -492,7 +492,7 @@ __cpp_lib_within_lifetime                               202306L <type_traits>
 # define __cpp_lib_bind_front                           202306L
 # define __cpp_lib_bitset                               202306L
 // # define __cpp_lib_copyable_function                    202306L
-# if _LIBCPP_STD_VER >= 26 && defined(_LIBCPP_HAS_DEBUGGING)
+# if _LIBCPP_STD_VER >= 26 && defined(_LIBCPP_HAS_DEBUGGING) && defined(_LIBCPP_AVAILABILITY_HAS_DEBUGGING)
 #   define __cpp_lib_debugging                          202311L
 # endif
 // # define __cpp_lib_freestanding_algorithm               202311L
diff --git a/libcxx/src/debugging.cpp b/libcxx/src/debugging.cpp
index 1708ed322527ec..784b3922584066 100644
--- a/libcxx/src/debugging.cpp
+++ b/libcxx/src/debugging.cpp
@@ -43,11 +43,11 @@ _LIBCPP_BEGIN_NAMESPACE_STD
 
 #  if defined(_LIBCPP_WIN32API)
 
-void __breakpoint() noexcept { DebugBreak(); }
+_LIBCPP_EXPORTED_FROM_ABI void __breakpoint() noexcept { DebugBreak(); }
 
 #  elif defined(__APPLE__) || defined(__FreeBSD__) || defined(__linux__)
 
-void __breakpoint() {
+_LIBCPP_EXPORTED_FROM_ABI void __breakpoint() {
 #    if __has_builtin(__builtin_debugtrap)
   __builtin_debugtrap();
 #    else
@@ -65,13 +65,13 @@ void __breakpoint() {
 
 #  if defined(_LIBCPP_WIN32API)
 
-bool __is_debugger_present() noexcept { return IsDebuggerPresent(); }
+_LIBCPP_EXPORTED_FROM_ABI bool __is_debugger_present() noexcept { return IsDebuggerPresent(); }
 
 #  elif defined(__APPLE__) || defined(__FreeBSD__)
 
 // Returns true if the current process is being debugged (either
 // running under the debugger or has a debugger attached post facto).
-bool __is_debugger_present() noexcept {
+_LIBCPP_EXPORTED_FROM_ABI bool __is_debugger_present() noexcept {
   // Technical Q&A QA1361: Detecting the Debugger
   // https://developer.apple.com/library/archive/qa/qa1361/_index.html
 
@@ -101,7 +101,7 @@ bool __is_debugger_present() noexcept {
 
 #  elif defined(__linux__)
 
-bool __is_debugger_present() noexcept {
+_LIBCPP_EXPORTED_FROM_ABI bool __is_debugger_present() noexcept {
 #    if defined(_LIBCPP_HAS_NO_FILESYSTEM)
   _LIBCPP_ASSERT_INTERNAL(false,
                           "Function is not available. Could not open '/proc/self/status' for reading, libc++ was "
@@ -144,15 +144,6 @@ bool __is_debugger_present() noexcept {
 
 #  endif // defined(_LIBCPP_WIN32API)
 
-_LIBCPP_EXPORTED_FROM_ABI void breakpoint() noexcept { __breakpoint(); }
-
-_LIBCPP_EXPORTED_FROM_ABI void breakpoint_if_debugging() noexcept {
-  if (__is_debugger_present())
-    __breakpoint();
-}
-
-_LIBCPP_EXPORTED_FROM_ABI bool is_debugger_present() noexcept { return __is_debugger_present(); }
-
 #endif // defined(_LIBCPP_HAS_DEBUGGING)
 
 _LIBCPP_END_NAMESPACE_STD
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/debugging.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/debugging.version.compile.pass.cpp
index b18646321094cb..493b1f26232327 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/debugging.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/debugging.version.compile.pass.cpp
@@ -54,7 +54,7 @@
 
 #elif TEST_STD_VER > 23
 
-# if TEST_STD_VER >= 26 && defined(_LIBCPP_HAS_DEBUGGING)
+# if TEST_STD_VER >= 26 && defined(_LIBCPP_HAS_DEBUGGING) && defined(_LIBCPP_AVAILABILITY_HAS_DEBUGGING)
 #   ifndef __cpp_lib_debugging
 #     error "__cpp_lib_debugging should be defined in c++26"
 #   endif
@@ -63,7 +63,7 @@
 #   endif
 # else
 #   ifdef __cpp_lib_debugging
-#     error "__cpp_lib_debugging should not be defined when the requirement 'TEST_STD_VER >= 26 && defined(_LIBCPP_HAS_DEBUGGING)' is not met!"
+#     error "__cpp_lib_debugging should not be defined when the requirement 'TEST_STD_VER >= 26 && defined(_LIBCPP_HAS_DEBUGGING) && defined(_LIBCPP_AVAILABILITY_HAS_DEBUGGING)' is not met!"
 #   endif
 # endif
 
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/version.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/version.version.compile.pass.cpp
index 38030f30ca5f81..79192a9b17f942 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/version.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/version.version.compile.pass.cpp
@@ -6333,7 +6333,7 @@
 #   error "__cpp_lib_coroutine should have the value 201902L in c++26"
 # endif
 
-# if TEST_STD_VER >= 26 && defined(_LIBCPP_HAS_DEBUGGING)
+# if TEST_STD_VER >= 26 && defined(_LIBCPP_HAS_DEBUGGING) && defined(_LIBCPP_AVAILABILITY_HAS_DEBUGGING)
 #   ifndef __cpp_lib_debugging
 #     error "__cpp_lib_debugging should be defined in c++26"
 #   endif
@@ -6342,7 +6342,7 @@
 #   endif
 # else
 #   ifdef __cpp_lib_debugging
-#     error "__cpp_lib_debugging should not be defined when the requirement 'TEST_STD_VER >= 26 && defined(_LIBCPP_HAS_DEBUGGING)' is not met!"
+#     error "__cpp_lib_debugging should not be defined when the requirement 'TEST_STD_VER >= 26 && defined(_LIBCPP_HAS_DEBUGGING) && defined(_LIBCPP_AVAILABILITY_HAS_DEBUGGING)' is not met!"
 #   endif
 # endif
 
diff --git a/libcxx/utils/generate_feature_test_macro_components.py b/libcxx/utils/generate_feature_test_macro_components.py
index ccb33f712d27d0..7173c2c8f7b7e3 100755
--- a/libcxx/utils/generate_feature_test_macro_components.py
+++ b/libcxx/utils/generate_feature_test_macro_components.py
@@ -401,8 +401,8 @@ def add_version_header(tc):
             "name": "__cpp_lib_debugging",
             "values": {"c++26": 202311},  # P2546R5 Debugging Support
             "headers": ["debugging"],
-            "test_suite_guard": "TEST_STD_VER >= 26 && defined(_LIBCPP_HAS_DEBUGGING)",
-            "libcxx_guard": "_LIBCPP_STD_VER >= 26 && defined(_LIBCPP_HAS_DEBUGGING)",
+            "test_suite_guard": "TEST_STD_VER >= 26 && defined(_LIBCPP_HAS_DEBUGGING) && defined(_LIBCPP_AVAILABILITY_HAS_DEBUGGING)",
+            "libcxx_guard": "_LIBCPP_STD_VER >= 26 && defined(_LIBCPP_HAS_DEBUGGING) && defined(_LIBCPP_AVAILABILITY_HAS_DEBUGGING)",
         },
         {
             "name": "__cpp_lib_destroying_delete",

>From 3e672f5eb46e85b36032188dd5f9e0c2f2fbc741 Mon Sep 17 00:00:00 2001
From: Hristo Hristov <hghristov.rmm at gmail.com>
Date: Tue, 19 Mar 2024 09:24:10 +0200
Subject: [PATCH 33/40] Disabled build on FreeBSD

---
 libcxx/include/__config | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/libcxx/include/__config b/libcxx/include/__config
index 798295220c900e..9507060f0be42b 100644
--- a/libcxx/include/__config
+++ b/libcxx/include/__config
@@ -1516,8 +1516,8 @@ __sanitizer_verify_double_ended_contiguous_container(const void*, const void*, c
 #    define _LIBCPP_HAS_EXPLICIT_THIS_PARAMETER
 #  endif
 
-#  if (defined(__APPLE__) || defined(__FreeBSD__) || defined(__linux__) || defined(_LIBCPP_WIN32API)) &&               \
-      !defined(__PICOLIBC__) && !defined(_LIBCPP_HAS_NO_INCOMPLETE_DEBUGGING)
+#  if (defined(__APPLE__) || defined(__linux__) || defined(_LIBCPP_WIN32API)) && !defined(__PICOLIBC__) &&             \
+      !defined(_LIBCPP_HAS_NO_INCOMPLETE_DEBUGGING)
 #    define _LIBCPP_HAS_DEBUGGING
 #  endif
 

>From a6f608e1de66dcc1c98a0e6a26b47023226368c9 Mon Sep 17 00:00:00 2001
From: Hristo Hristov <hghristov.rmm at gmail.com>
Date: Tue, 19 Mar 2024 09:38:40 +0200
Subject: [PATCH 34/40] Added tests

---
 .../debugging/breakpoint.compile.pass.cpp     | 20 +++++++++++++++++++
 .../breakpoint_if_debugging.compile.pass.cpp  | 20 +++++++++++++++++++
 2 files changed, 40 insertions(+)
 create mode 100644 libcxx/test/std/utilities/debugging/breakpoint.compile.pass.cpp
 create mode 100644 libcxx/test/std/utilities/debugging/breakpoint_if_debugging.compile.pass.cpp

diff --git a/libcxx/test/std/utilities/debugging/breakpoint.compile.pass.cpp b/libcxx/test/std/utilities/debugging/breakpoint.compile.pass.cpp
new file mode 100644
index 00000000000000..a8407d7c91424b
--- /dev/null
+++ b/libcxx/test/std/utilities/debugging/breakpoint.compile.pass.cpp
@@ -0,0 +1,20 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// UNSUPPORTED: c++03, c++11, c++14, c++17, c++20, c++23
+// XFAIL: LIBCXX-AIX-FIXME, LIBCXX-PICOLIBC-FIXME
+
+// <debugging>
+
+// void breakpoint() noexcept;
+
+#include <debugging>
+
+// Test without debugger.
+
+static_assert(noexcept(std::breakpoint()));
diff --git a/libcxx/test/std/utilities/debugging/breakpoint_if_debugging.compile.pass.cpp b/libcxx/test/std/utilities/debugging/breakpoint_if_debugging.compile.pass.cpp
new file mode 100644
index 00000000000000..c8e6d26323fd2f
--- /dev/null
+++ b/libcxx/test/std/utilities/debugging/breakpoint_if_debugging.compile.pass.cpp
@@ -0,0 +1,20 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// UNSUPPORTED: c++03, c++11, c++14, c++17, c++20, c++23
+// XFAIL: LIBCXX-AIX-FIXME, LIBCXX-PICOLIBC-FIXME
+
+// <debugging>
+
+// void breakpoint_if_debugging() noexcept;
+
+#include <debugging>
+
+// Test without debugger.
+
+static_assert(noexcept(std::breakpoint_if_debugging()));

>From 922d224045851495d1acd7c59277f82aae30d081 Mon Sep 17 00:00:00 2001
From: Hristo Hristov <hghristov.rmm at gmail.com>
Date: Tue, 19 Mar 2024 09:43:37 +0200
Subject: [PATCH 35/40] Minor tweak

---
 libcxx/include/debugging | 2 --
 1 file changed, 2 deletions(-)

diff --git a/libcxx/include/debugging b/libcxx/include/debugging
index 4605b90b3486ac..45d4ec7adae95c 100644
--- a/libcxx/include/debugging
+++ b/libcxx/include/debugging
@@ -33,8 +33,6 @@ _LIBCPP_BEGIN_NAMESPACE_STD
 
 _LIBCPP_EXPORTED_FROM_ABI void __breakpoint() noexcept;
 
-_LIBCPP_EXPORTED_FROM_ABI void __breakpoint_if_debugging() noexcept;
-
 _LIBCPP_EXPORTED_FROM_ABI bool __is_debugger_present() noexcept;
 
 _LIBCPP_AVAILABILITY_DEBUGGING _LIBCPP_HIDE_FROM_ABI void breakpoint() noexcept { __breakpoint(); }

>From 82d2d42bf5a9e1322956a7c011115cbd72c5bcde Mon Sep 17 00:00:00 2001
From: Hristo Hristov <hghristov.rmm at gmail.com>
Date: Tue, 19 Mar 2024 09:57:53 +0200
Subject: [PATCH 36/40] Updated ABI

---
 ...apple-darwin.libcxxabi.v1.stable.exceptions.nonew.abilist | 5 ++---
 ...ux-android21.libcxxabi.v1.stable.exceptions.nonew.abilist | 5 ++---
 ...apple-darwin.libcxxabi.v1.stable.exceptions.nonew.abilist | 5 ++---
 ...ux-android21.libcxxabi.v1.stable.exceptions.nonew.abilist | 5 ++---
 ...nown-freebsd.libcxxabi.v1.stable.exceptions.nonew.abilist | 5 ++---
 ...wn-linux-gnu.libcxxabi.v1.stable.exceptions.nonew.abilist | 5 ++---
 ...-linux-gnu.libcxxabi.v1.stable.noexceptions.nonew.abilist | 5 ++---
 7 files changed, 14 insertions(+), 21 deletions(-)

diff --git a/libcxx/lib/abi/arm64-apple-darwin.libcxxabi.v1.stable.exceptions.nonew.abilist b/libcxx/lib/abi/arm64-apple-darwin.libcxxabi.v1.stable.exceptions.nonew.abilist
index cbbb61aea75bc9..9c2b12a2ea1701 100644
--- a/libcxx/lib/abi/arm64-apple-darwin.libcxxabi.v1.stable.exceptions.nonew.abilist
+++ b/libcxx/lib/abi/arm64-apple-darwin.libcxxabi.v1.stable.exceptions.nonew.abilist
@@ -909,7 +909,7 @@
 {'is_defined': True, 'name': '__ZNSt3__110__time_putC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__110__time_putD1Ev', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__110__time_putD2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '__ZNSt3__110breakpointEv', 'type': 'FUNC'}
+{'is_defined': True, 'name': '__ZNSt3__110__breakpointEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__110ctype_base5alnumE', 'size': 0, 'type': 'OBJECT'}
 {'is_defined': True, 'name': '__ZNSt3__110ctype_base5alphaE', 'size': 0, 'type': 'OBJECT'}
 {'is_defined': True, 'name': '__ZNSt3__110ctype_base5blankE', 'size': 0, 'type': 'OBJECT'}
@@ -1564,7 +1564,7 @@
 {'is_defined': True, 'name': '__ZNSt3__119basic_istringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEOS5_', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__119basic_ostringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEOS5_', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__119declare_no_pointersEPcm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '__ZNSt3__119is_debugger_presentEv', 'type': 'FUNC'}
+{'is_defined': True, 'name': '__ZNSt3__119__is_debugger_presentEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__120__get_collation_nameEPKc', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__120__libcpp_atomic_waitEPVKNS_17__cxx_atomic_implIxNS_22__cxx_atomic_base_implIxEEEEx', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__120__libcpp_atomic_waitEPVKvx', 'type': 'FUNC'}
@@ -1586,7 +1586,6 @@
 {'is_defined': True, 'name': '__ZNSt3__123__cxx_atomic_notify_oneEPVKv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__123__libcpp_atomic_monitorEPVKNS_17__cxx_atomic_implIxNS_22__cxx_atomic_base_implIxEEEE', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__123__libcpp_atomic_monitorEPVKv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '__ZNSt3__123breakpoint_if_debuggingEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__125notify_all_at_thread_exitERNS_18condition_variableENS_11unique_lockINS_5mutexEEE', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__131__arrive_barrier_algorithm_baseEPNS_24__barrier_algorithm_baseEh', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__132__destroy_barrier_algorithm_baseEPNS_24__barrier_algorithm_baseE', 'type': 'FUNC'}
diff --git a/libcxx/lib/abi/i686-linux-android21.libcxxabi.v1.stable.exceptions.nonew.abilist b/libcxx/lib/abi/i686-linux-android21.libcxxabi.v1.stable.exceptions.nonew.abilist
index b57785484f8ae8..107cde79fb7cd8 100644
--- a/libcxx/lib/abi/i686-linux-android21.libcxxabi.v1.stable.exceptions.nonew.abilist
+++ b/libcxx/lib/abi/i686-linux-android21.libcxxabi.v1.stable.exceptions.nonew.abilist
@@ -543,7 +543,7 @@
 {'is_defined': True, 'name': '_ZNSt6__ndk110__time_putC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk110__time_putD1Ev', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk110__time_putD2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt6__ndk110breakpointEv', 'type': 'FUNC'}
+{'is_defined': True, 'name': '_ZNSt6__ndk110__breakpointEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk110ctype_base5alnumE', 'size': 4, 'type': 'OBJECT'}
 {'is_defined': True, 'name': '_ZNSt6__ndk110ctype_base5alphaE', 'size': 4, 'type': 'OBJECT'}
 {'is_defined': True, 'name': '_ZNSt6__ndk110ctype_base5blankE', 'size': 4, 'type': 'OBJECT'}
@@ -1198,7 +1198,7 @@
 {'is_defined': True, 'name': '_ZNSt6__ndk119basic_istringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEOS5_', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk119basic_ostringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEOS5_', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk119declare_no_pointersEPcj', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt6__ndk119is_debugger_presentEv', 'type': 'FUNC'}
+{'is_defined': True, 'name': '_ZNSt6__ndk119__is_debugger_presentEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk120__get_collation_nameEPKc', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk120__libcpp_atomic_waitEPVKNS_17__cxx_atomic_implIiNS_22__cxx_atomic_base_implIiEEEEi', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk120__libcpp_atomic_waitEPVKvi', 'type': 'FUNC'}
@@ -1220,7 +1220,6 @@
 {'is_defined': True, 'name': '_ZNSt6__ndk123__cxx_atomic_notify_oneEPVKv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk123__libcpp_atomic_monitorEPVKNS_17__cxx_atomic_implIiNS_22__cxx_atomic_base_implIiEEEE', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk123__libcpp_atomic_monitorEPVKv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt6__ndk123breakpoint_if_debuggingEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk125notify_all_at_thread_exitERNS_18condition_variableENS_11unique_lockINS_5mutexEEE', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk131__arrive_barrier_algorithm_baseEPNS_24__barrier_algorithm_baseEh', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk132__destroy_barrier_algorithm_baseEPNS_24__barrier_algorithm_baseE', 'type': 'FUNC'}
diff --git a/libcxx/lib/abi/x86_64-apple-darwin.libcxxabi.v1.stable.exceptions.nonew.abilist b/libcxx/lib/abi/x86_64-apple-darwin.libcxxabi.v1.stable.exceptions.nonew.abilist
index 40b2ef958364e6..dec501a6c7dc68 100644
--- a/libcxx/lib/abi/x86_64-apple-darwin.libcxxabi.v1.stable.exceptions.nonew.abilist
+++ b/libcxx/lib/abi/x86_64-apple-darwin.libcxxabi.v1.stable.exceptions.nonew.abilist
@@ -909,7 +909,7 @@
 {'is_defined': True, 'name': '__ZNSt3__110__time_putC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__110__time_putD1Ev', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__110__time_putD2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '__ZNSt3__110breakpointEv', 'type': 'FUNC'}
+{'is_defined': True, 'name': '__ZNSt3__110__breakpointEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__110ctype_base5alnumE', 'size': 0, 'type': 'OBJECT'}
 {'is_defined': True, 'name': '__ZNSt3__110ctype_base5alphaE', 'size': 0, 'type': 'OBJECT'}
 {'is_defined': True, 'name': '__ZNSt3__110ctype_base5blankE', 'size': 0, 'type': 'OBJECT'}
@@ -1564,7 +1564,7 @@
 {'is_defined': True, 'name': '__ZNSt3__119basic_istringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEOS5_', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__119basic_ostringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEOS5_', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__119declare_no_pointersEPcm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '__ZNSt3__119is_debugger_presentEv', 'type': 'FUNC'}
+{'is_defined': True, 'name': '__ZNSt3__119__is_debugger_presentEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__120__get_collation_nameEPKc', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__120__libcpp_atomic_waitEPVKNS_17__cxx_atomic_implIxNS_22__cxx_atomic_base_implIxEEEEx', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__120__libcpp_atomic_waitEPVKvx', 'type': 'FUNC'}
@@ -1586,7 +1586,6 @@
 {'is_defined': True, 'name': '__ZNSt3__123__cxx_atomic_notify_oneEPVKv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__123__libcpp_atomic_monitorEPVKNS_17__cxx_atomic_implIxNS_22__cxx_atomic_base_implIxEEEE', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__123__libcpp_atomic_monitorEPVKv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '__ZNSt3__123breakpoint_if_debuggingEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__125notify_all_at_thread_exitERNS_18condition_variableENS_11unique_lockINS_5mutexEEE', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__131__arrive_barrier_algorithm_baseEPNS_24__barrier_algorithm_baseEh', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__132__destroy_barrier_algorithm_baseEPNS_24__barrier_algorithm_baseE', 'type': 'FUNC'}
diff --git a/libcxx/lib/abi/x86_64-linux-android21.libcxxabi.v1.stable.exceptions.nonew.abilist b/libcxx/lib/abi/x86_64-linux-android21.libcxxabi.v1.stable.exceptions.nonew.abilist
index 0187b958bed61c..8a353246d2a2dd 100644
--- a/libcxx/lib/abi/x86_64-linux-android21.libcxxabi.v1.stable.exceptions.nonew.abilist
+++ b/libcxx/lib/abi/x86_64-linux-android21.libcxxabi.v1.stable.exceptions.nonew.abilist
@@ -543,7 +543,7 @@
 {'is_defined': True, 'name': '_ZNSt6__ndk110__time_putC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk110__time_putD1Ev', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk110__time_putD2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt6__ndk110breakpointEv', 'type': 'FUNC'}
+{'is_defined': True, 'name': '_ZNSt6__ndk110__breakpointEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk110ctype_base5alnumE', 'size': 8, 'type': 'OBJECT'}
 {'is_defined': True, 'name': '_ZNSt6__ndk110ctype_base5alphaE', 'size': 8, 'type': 'OBJECT'}
 {'is_defined': True, 'name': '_ZNSt6__ndk110ctype_base5blankE', 'size': 8, 'type': 'OBJECT'}
@@ -1198,7 +1198,7 @@
 {'is_defined': True, 'name': '_ZNSt6__ndk119basic_istringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEOS5_', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk119basic_ostringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEOS5_', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk119declare_no_pointersEPcm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt6__ndk119is_debugger_presentEv', 'type': 'FUNC'}
+{'is_defined': True, 'name': '_ZNSt6__ndk119__is_debugger_presentEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk120__get_collation_nameEPKc', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk120__libcpp_atomic_waitEPVKNS_17__cxx_atomic_implIiNS_22__cxx_atomic_base_implIiEEEEi', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk120__libcpp_atomic_waitEPVKvi', 'type': 'FUNC'}
@@ -1220,7 +1220,6 @@
 {'is_defined': True, 'name': '_ZNSt6__ndk123__cxx_atomic_notify_oneEPVKv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk123__libcpp_atomic_monitorEPVKNS_17__cxx_atomic_implIiNS_22__cxx_atomic_base_implIiEEEE', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk123__libcpp_atomic_monitorEPVKv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt6__ndk123breakpoint_if_debuggingEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk125notify_all_at_thread_exitERNS_18condition_variableENS_11unique_lockINS_5mutexEEE', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk131__arrive_barrier_algorithm_baseEPNS_24__barrier_algorithm_baseEh', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk132__destroy_barrier_algorithm_baseEPNS_24__barrier_algorithm_baseE', 'type': 'FUNC'}
diff --git a/libcxx/lib/abi/x86_64-unknown-freebsd.libcxxabi.v1.stable.exceptions.nonew.abilist b/libcxx/lib/abi/x86_64-unknown-freebsd.libcxxabi.v1.stable.exceptions.nonew.abilist
index 467284019aab7c..31c98ccd504d02 100644
--- a/libcxx/lib/abi/x86_64-unknown-freebsd.libcxxabi.v1.stable.exceptions.nonew.abilist
+++ b/libcxx/lib/abi/x86_64-unknown-freebsd.libcxxabi.v1.stable.exceptions.nonew.abilist
@@ -557,7 +557,7 @@
 {'is_defined': True, 'name': '_ZNSt3__110__time_putC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__110__time_putD1Ev', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__110__time_putD2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__110breakpointEv', 'type': 'FUNC'}
+{'is_defined': True, 'name': '_ZNSt3__110__breakpointEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__110ctype_base5alnumE', 'size': 8, 'type': 'OBJECT'}
 {'is_defined': True, 'name': '_ZNSt3__110ctype_base5alphaE', 'size': 8, 'type': 'OBJECT'}
 {'is_defined': True, 'name': '_ZNSt3__110ctype_base5blankE', 'size': 8, 'type': 'OBJECT'}
@@ -1212,7 +1212,7 @@
 {'is_defined': True, 'name': '_ZNSt3__119basic_istringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEOS5_', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__119basic_ostringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEOS5_', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__119declare_no_pointersEPcm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__119is_debugger_presentEv', 'type': 'FUNC'}
+{'is_defined': True, 'name': '_ZNSt3__119__is_debugger_presentEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__120__get_collation_nameEPKc', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__120__libcpp_atomic_waitEPVKNS_17__cxx_atomic_implIlNS_22__cxx_atomic_base_implIlEEEEl', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__120__libcpp_atomic_waitEPVKvl', 'type': 'FUNC'}
@@ -1234,7 +1234,6 @@
 {'is_defined': True, 'name': '_ZNSt3__123__cxx_atomic_notify_oneEPVKv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__123__libcpp_atomic_monitorEPVKNS_17__cxx_atomic_implIlNS_22__cxx_atomic_base_implIlEEEE', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__123__libcpp_atomic_monitorEPVKv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__123breakpoint_if_debuggingEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__125notify_all_at_thread_exitERNS_18condition_variableENS_11unique_lockINS_5mutexEEE', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__131__arrive_barrier_algorithm_baseEPNS_24__barrier_algorithm_baseEh', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__132__destroy_barrier_algorithm_baseEPNS_24__barrier_algorithm_baseE', 'type': 'FUNC'}
diff --git a/libcxx/lib/abi/x86_64-unknown-linux-gnu.libcxxabi.v1.stable.exceptions.nonew.abilist b/libcxx/lib/abi/x86_64-unknown-linux-gnu.libcxxabi.v1.stable.exceptions.nonew.abilist
index 2c4045dc798ebf..ecf2cf712902db 100644
--- a/libcxx/lib/abi/x86_64-unknown-linux-gnu.libcxxabi.v1.stable.exceptions.nonew.abilist
+++ b/libcxx/lib/abi/x86_64-unknown-linux-gnu.libcxxabi.v1.stable.exceptions.nonew.abilist
@@ -555,7 +555,7 @@
 {'is_defined': True, 'name': '_ZNSt3__110__time_putC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__110__time_putD1Ev', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__110__time_putD2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__110breakpointEv', 'type': 'FUNC'}
+{'is_defined': True, 'name': '_ZNSt3__110__breakpointEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__110ctype_base5alnumE', 'size': 2, 'type': 'OBJECT'}
 {'is_defined': True, 'name': '_ZNSt3__110ctype_base5alphaE', 'size': 2, 'type': 'OBJECT'}
 {'is_defined': True, 'name': '_ZNSt3__110ctype_base5blankE', 'size': 2, 'type': 'OBJECT'}
@@ -1210,7 +1210,7 @@
 {'is_defined': True, 'name': '_ZNSt3__119basic_istringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEOS5_', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__119basic_ostringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEOS5_', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__119declare_no_pointersEPcm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__119is_debugger_presentEv', 'type': 'FUNC'}
+{'is_defined': True, 'name': '_ZNSt3__119__is_debugger_presentEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__120__get_collation_nameEPKc', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__120__libcpp_atomic_waitEPVKNS_17__cxx_atomic_implIiNS_22__cxx_atomic_base_implIiEEEEi', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__120__libcpp_atomic_waitEPVKvi', 'type': 'FUNC'}
@@ -1232,7 +1232,6 @@
 {'is_defined': True, 'name': '_ZNSt3__123__cxx_atomic_notify_oneEPVKv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__123__libcpp_atomic_monitorEPVKNS_17__cxx_atomic_implIiNS_22__cxx_atomic_base_implIiEEEE', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__123__libcpp_atomic_monitorEPVKv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__123breakpoint_if_debuggingEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__125notify_all_at_thread_exitERNS_18condition_variableENS_11unique_lockINS_5mutexEEE', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__131__arrive_barrier_algorithm_baseEPNS_24__barrier_algorithm_baseEh', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__132__destroy_barrier_algorithm_baseEPNS_24__barrier_algorithm_baseE', 'type': 'FUNC'}
diff --git a/libcxx/lib/abi/x86_64-unknown-linux-gnu.libcxxabi.v1.stable.noexceptions.nonew.abilist b/libcxx/lib/abi/x86_64-unknown-linux-gnu.libcxxabi.v1.stable.noexceptions.nonew.abilist
index df9ebe53bbd8a3..493c0912f2e4f0 100644
--- a/libcxx/lib/abi/x86_64-unknown-linux-gnu.libcxxabi.v1.stable.noexceptions.nonew.abilist
+++ b/libcxx/lib/abi/x86_64-unknown-linux-gnu.libcxxabi.v1.stable.noexceptions.nonew.abilist
@@ -526,7 +526,7 @@
 {'is_defined': True, 'name': '_ZNSt3__110__time_putC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__110__time_putD1Ev', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__110__time_putD2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__110breakpointEv', 'type': 'FUNC'}
+{'is_defined': True, 'name': '_ZNSt3__110__breakpointEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__110ctype_base5alnumE', 'size': 2, 'type': 'OBJECT'}
 {'is_defined': True, 'name': '_ZNSt3__110ctype_base5alphaE', 'size': 2, 'type': 'OBJECT'}
 {'is_defined': True, 'name': '_ZNSt3__110ctype_base5blankE', 'size': 2, 'type': 'OBJECT'}
@@ -1181,7 +1181,7 @@
 {'is_defined': True, 'name': '_ZNSt3__119basic_istringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEOS5_', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__119basic_ostringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEOS5_', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__119declare_no_pointersEPcm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__119is_debugger_presentEv', 'type': 'FUNC'}
+{'is_defined': True, 'name': '_ZNSt3__119__is_debugger_presentEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__120__get_collation_nameEPKc', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__120__libcpp_atomic_waitEPVKNS_17__cxx_atomic_implIiNS_22__cxx_atomic_base_implIiEEEEi', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__120__libcpp_atomic_waitEPVKvi', 'type': 'FUNC'}
@@ -1203,7 +1203,6 @@
 {'is_defined': True, 'name': '_ZNSt3__123__cxx_atomic_notify_oneEPVKv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__123__libcpp_atomic_monitorEPVKNS_17__cxx_atomic_implIiNS_22__cxx_atomic_base_implIiEEEE', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__123__libcpp_atomic_monitorEPVKv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__123breakpoint_if_debuggingEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__125notify_all_at_thread_exitERNS_18condition_variableENS_11unique_lockINS_5mutexEEE', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__131__arrive_barrier_algorithm_baseEPNS_24__barrier_algorithm_baseEh', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt3__132__destroy_barrier_algorithm_baseEPNS_24__barrier_algorithm_baseE', 'type': 'FUNC'}

>From acda75ba46787c64ff97283e4ad16e454fafc2f6 Mon Sep 17 00:00:00 2001
From: Hristo Hristov <hghristov.rmm at gmail.com>
Date: Tue, 19 Mar 2024 09:58:40 +0200
Subject: [PATCH 37/40] Removed FreeBSD ABI

---
 ...bcxxabi.v1.stable.exceptions.nonew.abilist | 2034 -----------------
 1 file changed, 2034 deletions(-)
 delete mode 100644 libcxx/lib/abi/x86_64-unknown-freebsd.libcxxabi.v1.stable.exceptions.nonew.abilist

diff --git a/libcxx/lib/abi/x86_64-unknown-freebsd.libcxxabi.v1.stable.exceptions.nonew.abilist b/libcxx/lib/abi/x86_64-unknown-freebsd.libcxxabi.v1.stable.exceptions.nonew.abilist
deleted file mode 100644
index 31c98ccd504d02..00000000000000
--- a/libcxx/lib/abi/x86_64-unknown-freebsd.libcxxabi.v1.stable.exceptions.nonew.abilist
+++ /dev/null
@@ -1,2034 +0,0 @@
-{'is_defined': False, 'name': '_ZNKSt11logic_error4whatEv', 'type': 'FUNC'}
-{'is_defined': False, 'name': '_ZNKSt13runtime_error4whatEv', 'type': 'FUNC'}
-{'is_defined': False, 'name': '_ZNKSt9exception4whatEv', 'type': 'FUNC'}
-{'is_defined': False, 'name': '_ZNSt11logic_errorD2Ev', 'type': 'FUNC'}
-{'is_defined': False, 'name': '_ZNSt12length_errorD1Ev', 'type': 'FUNC'}
-{'is_defined': False, 'name': '_ZNSt12out_of_rangeD1Ev', 'type': 'FUNC'}
-{'is_defined': False, 'name': '_ZNSt13runtime_errorD1Ev', 'type': 'FUNC'}
-{'is_defined': False, 'name': '_ZNSt13runtime_errorD2Ev', 'type': 'FUNC'}
-{'is_defined': False, 'name': '_ZNSt14overflow_errorD1Ev', 'type': 'FUNC'}
-{'is_defined': False, 'name': '_ZNSt16invalid_argumentD1Ev', 'type': 'FUNC'}
-{'is_defined': False, 'name': '_ZNSt20bad_array_new_lengthC1Ev', 'type': 'FUNC'}
-{'is_defined': False, 'name': '_ZNSt20bad_array_new_lengthD1Ev', 'type': 'FUNC'}
-{'is_defined': False, 'name': '_ZNSt8bad_castC1Ev', 'type': 'FUNC'}
-{'is_defined': False, 'name': '_ZNSt8bad_castD1Ev', 'type': 'FUNC'}
-{'is_defined': False, 'name': '_ZNSt8bad_castD2Ev', 'type': 'FUNC'}
-{'is_defined': False, 'name': '_ZNSt9bad_allocC1Ev', 'type': 'FUNC'}
-{'is_defined': False, 'name': '_ZNSt9bad_allocD1Ev', 'type': 'FUNC'}
-{'is_defined': False, 'name': '_ZNSt9exceptionD2Ev', 'type': 'FUNC'}
-{'is_defined': False, 'name': '_ZSt9terminatev', 'type': 'FUNC'}
-{'is_defined': False, 'name': '_ZTISt11logic_error', 'size': 0, 'type': 'OBJECT'}
-{'is_defined': False, 'name': '_ZTISt12length_error', 'size': 0, 'type': 'OBJECT'}
-{'is_defined': False, 'name': '_ZTISt12out_of_range', 'size': 0, 'type': 'OBJECT'}
-{'is_defined': False, 'name': '_ZTISt13runtime_error', 'size': 0, 'type': 'OBJECT'}
-{'is_defined': False, 'name': '_ZTISt14overflow_error', 'size': 0, 'type': 'OBJECT'}
-{'is_defined': False, 'name': '_ZTISt16invalid_argument', 'size': 0, 'type': 'OBJECT'}
-{'is_defined': False, 'name': '_ZTISt20bad_array_new_length', 'size': 0, 'type': 'OBJECT'}
-{'is_defined': False, 'name': '_ZTISt8bad_cast', 'size': 0, 'type': 'OBJECT'}
-{'is_defined': False, 'name': '_ZTISt9bad_alloc', 'size': 0, 'type': 'OBJECT'}
-{'is_defined': False, 'name': '_ZTISt9exception', 'size': 0, 'type': 'OBJECT'}
-{'is_defined': False, 'name': '_ZTVN10__cxxabiv117__class_type_infoE', 'size': 0, 'type': 'OBJECT'}
-{'is_defined': False, 'name': '_ZTVN10__cxxabiv120__si_class_type_infoE', 'size': 0, 'type': 'OBJECT'}
-{'is_defined': False, 'name': '_ZTVN10__cxxabiv121__vmi_class_type_infoE', 'size': 0, 'type': 'OBJECT'}
-{'is_defined': False, 'name': '_ZTVSt11logic_error', 'size': 0, 'type': 'OBJECT'}
-{'is_defined': False, 'name': '_ZTVSt12length_error', 'size': 0, 'type': 'OBJECT'}
-{'is_defined': False, 'name': '_ZTVSt12out_of_range', 'size': 0, 'type': 'OBJECT'}
-{'is_defined': False, 'name': '_ZTVSt13runtime_error', 'size': 0, 'type': 'OBJECT'}
-{'is_defined': False, 'name': '_ZTVSt14overflow_error', 'size': 0, 'type': 'OBJECT'}
-{'is_defined': False, 'name': '_ZTVSt16invalid_argument', 'size': 0, 'type': 'OBJECT'}
-{'is_defined': False, 'name': '_ZdaPv', 'type': 'FUNC'}
-{'is_defined': False, 'name': '_ZdaPvSt11align_val_t', 'type': 'FUNC'}
-{'is_defined': False, 'name': '_ZdlPv', 'type': 'FUNC'}
-{'is_defined': False, 'name': '_ZdlPvSt11align_val_t', 'type': 'FUNC'}
-{'is_defined': False, 'name': '_Znam', 'type': 'FUNC'}
-{'is_defined': False, 'name': '_ZnamSt11align_val_t', 'type': 'FUNC'}
-{'is_defined': False, 'name': '_Znwm', 'type': 'FUNC'}
-{'is_defined': False, 'name': '_ZnwmSt11align_val_t', 'type': 'FUNC'}
-{'is_defined': False, 'name': '__cxa_allocate_exception', 'type': 'FUNC'}
-{'is_defined': False, 'name': '__cxa_atexit at FBSD_1.0', 'type': 'FUNC'}
-{'is_defined': False, 'name': '__cxa_begin_catch', 'type': 'FUNC'}
-{'is_defined': False, 'name': '__cxa_current_primary_exception', 'type': 'FUNC'}
-{'is_defined': False, 'name': '__cxa_decrement_exception_refcount', 'type': 'FUNC'}
-{'is_defined': False, 'name': '__cxa_end_catch', 'type': 'FUNC'}
-{'is_defined': False, 'name': '__cxa_finalize at FBSD_1.0', 'type': 'FUNC'}
-{'is_defined': False, 'name': '__cxa_free_exception', 'type': 'FUNC'}
-{'is_defined': False, 'name': '__cxa_guard_abort', 'type': 'FUNC'}
-{'is_defined': False, 'name': '__cxa_guard_acquire', 'type': 'FUNC'}
-{'is_defined': False, 'name': '__cxa_guard_release', 'type': 'FUNC'}
-{'is_defined': False, 'name': '__cxa_increment_exception_refcount', 'type': 'FUNC'}
-{'is_defined': False, 'name': '__cxa_init_primary_exception', 'type': 'FUNC'}
-{'is_defined': False, 'name': '__cxa_pure_virtual', 'type': 'FUNC'}
-{'is_defined': False, 'name': '__cxa_rethrow', 'type': 'FUNC'}
-{'is_defined': False, 'name': '__cxa_rethrow_primary_exception', 'type': 'FUNC'}
-{'is_defined': False, 'name': '__cxa_throw', 'type': 'FUNC'}
-{'is_defined': False, 'name': '__cxa_uncaught_exceptions', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt12bad_any_cast4whatEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt12experimental15fundamentals_v112bad_any_cast4whatEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt16nested_exception14rethrow_nestedEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt18bad_variant_access4whatEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt19bad_optional_access4whatEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__110__time_put8__do_putEPcRS1_PK2tmcc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__110__time_put8__do_putEPwRS1_PK2tmcc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__110error_code7messageEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__110moneypunctIcLb0EE11do_groupingEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__110moneypunctIcLb0EE13do_neg_formatEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__110moneypunctIcLb0EE13do_pos_formatEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__110moneypunctIcLb0EE14do_curr_symbolEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__110moneypunctIcLb0EE14do_frac_digitsEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__110moneypunctIcLb0EE16do_decimal_pointEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__110moneypunctIcLb0EE16do_negative_signEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__110moneypunctIcLb0EE16do_positive_signEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__110moneypunctIcLb0EE16do_thousands_sepEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__110moneypunctIcLb1EE11do_groupingEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__110moneypunctIcLb1EE13do_neg_formatEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__110moneypunctIcLb1EE13do_pos_formatEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__110moneypunctIcLb1EE14do_curr_symbolEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__110moneypunctIcLb1EE14do_frac_digitsEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__110moneypunctIcLb1EE16do_decimal_pointEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__110moneypunctIcLb1EE16do_negative_signEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__110moneypunctIcLb1EE16do_positive_signEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__110moneypunctIcLb1EE16do_thousands_sepEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__110moneypunctIwLb0EE11do_groupingEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__110moneypunctIwLb0EE13do_neg_formatEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__110moneypunctIwLb0EE13do_pos_formatEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__110moneypunctIwLb0EE14do_curr_symbolEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__110moneypunctIwLb0EE14do_frac_digitsEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__110moneypunctIwLb0EE16do_decimal_pointEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__110moneypunctIwLb0EE16do_negative_signEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__110moneypunctIwLb0EE16do_positive_signEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__110moneypunctIwLb0EE16do_thousands_sepEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__110moneypunctIwLb1EE11do_groupingEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__110moneypunctIwLb1EE13do_neg_formatEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__110moneypunctIwLb1EE13do_pos_formatEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__110moneypunctIwLb1EE14do_curr_symbolEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__110moneypunctIwLb1EE14do_frac_digitsEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__110moneypunctIwLb1EE16do_decimal_pointEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__110moneypunctIwLb1EE16do_negative_signEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__110moneypunctIwLb1EE16do_positive_signEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__110moneypunctIwLb1EE16do_thousands_sepEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__112bad_weak_ptr4whatEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE12find_last_ofEPKcmm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13find_first_ofEPKcmm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE16find_last_not_ofEPKcmm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE17find_first_not_ofEPKcmm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE2atEm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4copyEPcmm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4findEPKcmm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4findEcm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5rfindEPKcmm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5rfindEcm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEPKc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEmmPKc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEmmPKcm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEmmRKS5_mm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE12find_last_ofEPKwmm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE13find_first_ofEPKwmm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE16find_last_not_ofEPKwmm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE17find_first_not_ofEPKwmm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE2atEm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4copyEPwmm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4findEPKwmm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4findEwm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5rfindEPKwmm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5rfindEwm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7compareEPKw', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7compareEmmPKw', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7compareEmmPKwm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7compareEmmRKS5_mm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__112ctype_bynameIcE10do_tolowerEPcPKc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__112ctype_bynameIcE10do_tolowerEc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__112ctype_bynameIcE10do_toupperEPcPKc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__112ctype_bynameIcE10do_toupperEc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__112ctype_bynameIwE10do_scan_isEmPKwS3_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__112ctype_bynameIwE10do_tolowerEPwPKw', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__112ctype_bynameIwE10do_tolowerEw', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__112ctype_bynameIwE10do_toupperEPwPKw', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__112ctype_bynameIwE10do_toupperEw', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__112ctype_bynameIwE11do_scan_notEmPKwS3_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__112ctype_bynameIwE5do_isEPKwS3_Pm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__112ctype_bynameIwE5do_isEmw', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__112ctype_bynameIwE8do_widenEPKcS3_Pw', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__112ctype_bynameIwE8do_widenEc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__112ctype_bynameIwE9do_narrowEPKwS3_cPc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__112ctype_bynameIwE9do_narrowEwc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__112strstreambuf6pcountEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__113random_device7entropyEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__114__codecvt_utf8IDiE10do_unshiftER11__mbstate_tPcS4_RS4_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__114__codecvt_utf8IDiE11do_encodingEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__114__codecvt_utf8IDiE13do_max_lengthEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__114__codecvt_utf8IDiE16do_always_noconvEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__114__codecvt_utf8IDiE5do_inER11__mbstate_tPKcS5_RS5_PDiS7_RS7_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__114__codecvt_utf8IDiE6do_outER11__mbstate_tPKDiS5_RS5_PcS7_RS7_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__114__codecvt_utf8IDiE9do_lengthER11__mbstate_tPKcS5_m', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__114__codecvt_utf8IDsE10do_unshiftER11__mbstate_tPcS4_RS4_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__114__codecvt_utf8IDsE11do_encodingEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__114__codecvt_utf8IDsE13do_max_lengthEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__114__codecvt_utf8IDsE16do_always_noconvEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__114__codecvt_utf8IDsE5do_inER11__mbstate_tPKcS5_RS5_PDsS7_RS7_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__114__codecvt_utf8IDsE6do_outER11__mbstate_tPKDsS5_RS5_PcS7_RS7_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__114__codecvt_utf8IDsE9do_lengthER11__mbstate_tPKcS5_m', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__114__codecvt_utf8IwE10do_unshiftER11__mbstate_tPcS4_RS4_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__114__codecvt_utf8IwE11do_encodingEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__114__codecvt_utf8IwE13do_max_lengthEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__114__codecvt_utf8IwE16do_always_noconvEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__114__codecvt_utf8IwE5do_inER11__mbstate_tPKcS5_RS5_PwS7_RS7_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__114__codecvt_utf8IwE6do_outER11__mbstate_tPKwS5_RS5_PcS7_RS7_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__114__codecvt_utf8IwE9do_lengthER11__mbstate_tPKcS5_m', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__114collate_bynameIcE10do_compareEPKcS3_S3_S3_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__114collate_bynameIcE12do_transformEPKcS3_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__114collate_bynameIwE10do_compareEPKwS3_S3_S3_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__114collate_bynameIwE12do_transformEPKwS3_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__114error_category10equivalentERKNS_10error_codeEi', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__114error_category10equivalentEiRKNS_15error_conditionE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__114error_category23default_error_conditionEi', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__115__codecvt_utf16IDiLb0EE10do_unshiftER11__mbstate_tPcS4_RS4_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__115__codecvt_utf16IDiLb0EE11do_encodingEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__115__codecvt_utf16IDiLb0EE13do_max_lengthEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__115__codecvt_utf16IDiLb0EE16do_always_noconvEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__115__codecvt_utf16IDiLb0EE5do_inER11__mbstate_tPKcS5_RS5_PDiS7_RS7_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__115__codecvt_utf16IDiLb0EE6do_outER11__mbstate_tPKDiS5_RS5_PcS7_RS7_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__115__codecvt_utf16IDiLb0EE9do_lengthER11__mbstate_tPKcS5_m', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__115__codecvt_utf16IDiLb1EE10do_unshiftER11__mbstate_tPcS4_RS4_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__115__codecvt_utf16IDiLb1EE11do_encodingEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__115__codecvt_utf16IDiLb1EE13do_max_lengthEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__115__codecvt_utf16IDiLb1EE16do_always_noconvEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__115__codecvt_utf16IDiLb1EE5do_inER11__mbstate_tPKcS5_RS5_PDiS7_RS7_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__115__codecvt_utf16IDiLb1EE6do_outER11__mbstate_tPKDiS5_RS5_PcS7_RS7_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__115__codecvt_utf16IDiLb1EE9do_lengthER11__mbstate_tPKcS5_m', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__115__codecvt_utf16IDsLb0EE10do_unshiftER11__mbstate_tPcS4_RS4_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__115__codecvt_utf16IDsLb0EE11do_encodingEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__115__codecvt_utf16IDsLb0EE13do_max_lengthEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__115__codecvt_utf16IDsLb0EE16do_always_noconvEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__115__codecvt_utf16IDsLb0EE5do_inER11__mbstate_tPKcS5_RS5_PDsS7_RS7_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__115__codecvt_utf16IDsLb0EE6do_outER11__mbstate_tPKDsS5_RS5_PcS7_RS7_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__115__codecvt_utf16IDsLb0EE9do_lengthER11__mbstate_tPKcS5_m', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__115__codecvt_utf16IDsLb1EE10do_unshiftER11__mbstate_tPcS4_RS4_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__115__codecvt_utf16IDsLb1EE11do_encodingEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__115__codecvt_utf16IDsLb1EE13do_max_lengthEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__115__codecvt_utf16IDsLb1EE16do_always_noconvEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__115__codecvt_utf16IDsLb1EE5do_inER11__mbstate_tPKcS5_RS5_PDsS7_RS7_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__115__codecvt_utf16IDsLb1EE6do_outER11__mbstate_tPKDsS5_RS5_PcS7_RS7_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__115__codecvt_utf16IDsLb1EE9do_lengthER11__mbstate_tPKcS5_m', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__115__codecvt_utf16IwLb0EE10do_unshiftER11__mbstate_tPcS4_RS4_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__115__codecvt_utf16IwLb0EE11do_encodingEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__115__codecvt_utf16IwLb0EE13do_max_lengthEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__115__codecvt_utf16IwLb0EE16do_always_noconvEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__115__codecvt_utf16IwLb0EE5do_inER11__mbstate_tPKcS5_RS5_PwS7_RS7_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__115__codecvt_utf16IwLb0EE6do_outER11__mbstate_tPKwS5_RS5_PcS7_RS7_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__115__codecvt_utf16IwLb0EE9do_lengthER11__mbstate_tPKcS5_m', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__115__codecvt_utf16IwLb1EE10do_unshiftER11__mbstate_tPcS4_RS4_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__115__codecvt_utf16IwLb1EE11do_encodingEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__115__codecvt_utf16IwLb1EE13do_max_lengthEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__115__codecvt_utf16IwLb1EE16do_always_noconvEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__115__codecvt_utf16IwLb1EE5do_inER11__mbstate_tPKcS5_RS5_PwS7_RS7_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__115__codecvt_utf16IwLb1EE6do_outER11__mbstate_tPKwS5_RS5_PcS7_RS7_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__115__codecvt_utf16IwLb1EE9do_lengthER11__mbstate_tPKcS5_m', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__115basic_streambufIcNS_11char_traitsIcEEE6getlocEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__115basic_streambufIwNS_11char_traitsIwEEE6getlocEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEE3strEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__115error_condition7messageEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__117moneypunct_bynameIcLb0EE11do_groupingEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__117moneypunct_bynameIcLb0EE13do_neg_formatEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__117moneypunct_bynameIcLb0EE13do_pos_formatEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__117moneypunct_bynameIcLb0EE14do_curr_symbolEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__117moneypunct_bynameIcLb0EE14do_frac_digitsEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__117moneypunct_bynameIcLb0EE16do_decimal_pointEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__117moneypunct_bynameIcLb0EE16do_negative_signEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__117moneypunct_bynameIcLb0EE16do_positive_signEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__117moneypunct_bynameIcLb0EE16do_thousands_sepEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__117moneypunct_bynameIcLb1EE11do_groupingEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__117moneypunct_bynameIcLb1EE13do_neg_formatEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__117moneypunct_bynameIcLb1EE13do_pos_formatEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__117moneypunct_bynameIcLb1EE14do_curr_symbolEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__117moneypunct_bynameIcLb1EE14do_frac_digitsEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__117moneypunct_bynameIcLb1EE16do_decimal_pointEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__117moneypunct_bynameIcLb1EE16do_negative_signEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__117moneypunct_bynameIcLb1EE16do_positive_signEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__117moneypunct_bynameIcLb1EE16do_thousands_sepEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__117moneypunct_bynameIwLb0EE11do_groupingEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__117moneypunct_bynameIwLb0EE13do_neg_formatEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__117moneypunct_bynameIwLb0EE13do_pos_formatEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__117moneypunct_bynameIwLb0EE14do_curr_symbolEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__117moneypunct_bynameIwLb0EE14do_frac_digitsEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__117moneypunct_bynameIwLb0EE16do_decimal_pointEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__117moneypunct_bynameIwLb0EE16do_negative_signEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__117moneypunct_bynameIwLb0EE16do_positive_signEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__117moneypunct_bynameIwLb0EE16do_thousands_sepEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__117moneypunct_bynameIwLb1EE11do_groupingEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__117moneypunct_bynameIwLb1EE13do_neg_formatEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__117moneypunct_bynameIwLb1EE13do_pos_formatEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__117moneypunct_bynameIwLb1EE14do_curr_symbolEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__117moneypunct_bynameIwLb1EE14do_frac_digitsEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__117moneypunct_bynameIwLb1EE16do_decimal_pointEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__117moneypunct_bynameIwLb1EE16do_negative_signEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__117moneypunct_bynameIwLb1EE16do_positive_signEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__117moneypunct_bynameIwLb1EE16do_thousands_sepEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__118__time_get_storageIcE15__do_date_orderEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__118__time_get_storageIwE15__do_date_orderEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__119__shared_weak_count13__get_deleterERKSt9type_info', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__120__codecvt_utf8_utf16IDiE10do_unshiftER11__mbstate_tPcS4_RS4_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__120__codecvt_utf8_utf16IDiE11do_encodingEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__120__codecvt_utf8_utf16IDiE13do_max_lengthEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__120__codecvt_utf8_utf16IDiE16do_always_noconvEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__120__codecvt_utf8_utf16IDiE5do_inER11__mbstate_tPKcS5_RS5_PDiS7_RS7_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__120__codecvt_utf8_utf16IDiE6do_outER11__mbstate_tPKDiS5_RS5_PcS7_RS7_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__120__codecvt_utf8_utf16IDiE9do_lengthER11__mbstate_tPKcS5_m', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__120__codecvt_utf8_utf16IDsE10do_unshiftER11__mbstate_tPcS4_RS4_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__120__codecvt_utf8_utf16IDsE11do_encodingEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__120__codecvt_utf8_utf16IDsE13do_max_lengthEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__120__codecvt_utf8_utf16IDsE16do_always_noconvEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__120__codecvt_utf8_utf16IDsE5do_inER11__mbstate_tPKcS5_RS5_PDsS7_RS7_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__120__codecvt_utf8_utf16IDsE6do_outER11__mbstate_tPKDsS5_RS5_PcS7_RS7_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__120__codecvt_utf8_utf16IDsE9do_lengthER11__mbstate_tPKcS5_m', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__120__codecvt_utf8_utf16IwE10do_unshiftER11__mbstate_tPcS4_RS4_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__120__codecvt_utf8_utf16IwE11do_encodingEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__120__codecvt_utf8_utf16IwE13do_max_lengthEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__120__codecvt_utf8_utf16IwE16do_always_noconvEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__120__codecvt_utf8_utf16IwE5do_inER11__mbstate_tPKcS5_RS5_PwS7_RS7_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__120__codecvt_utf8_utf16IwE6do_outER11__mbstate_tPKwS5_RS5_PcS7_RS7_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__120__codecvt_utf8_utf16IwE9do_lengthER11__mbstate_tPKcS5_m', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__120__time_get_c_storageIcE3__XEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__120__time_get_c_storageIcE3__cEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__120__time_get_c_storageIcE3__rEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__120__time_get_c_storageIcE3__xEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__120__time_get_c_storageIcE7__am_pmEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__120__time_get_c_storageIcE7__weeksEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__120__time_get_c_storageIcE8__monthsEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__120__time_get_c_storageIwE3__XEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__120__time_get_c_storageIwE3__cEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__120__time_get_c_storageIwE3__rEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__120__time_get_c_storageIwE3__xEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__120__time_get_c_storageIwE7__am_pmEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__120__time_get_c_storageIwE7__weeksEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__120__time_get_c_storageIwE8__monthsEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__120__vector_base_commonILb1EE20__throw_length_errorEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__120__vector_base_commonILb1EE20__throw_out_of_rangeEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__121__basic_string_commonILb1EE20__throw_length_errorEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__121__basic_string_commonILb1EE20__throw_out_of_rangeEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__123__match_any_but_newlineIcE6__execERNS_7__stateIcEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__123__match_any_but_newlineIwE6__execERNS_7__stateIwEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__13pmr26synchronized_pool_resource11do_is_equalERKNS0_15memory_resourceE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__13pmr28unsynchronized_pool_resource12__pool_indexEmm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__13pmr28unsynchronized_pool_resource17__pool_block_sizeEi', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__13pmr28unsynchronized_pool_resource22__log2_pool_block_sizeEi', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__13pmr28unsynchronized_pool_resource7optionsEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__14__fs10filesystem18directory_iterator13__dereferenceEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__14__fs10filesystem28recursive_directory_iterator13__dereferenceEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__14__fs10filesystem28recursive_directory_iterator5depthEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__14__fs10filesystem28recursive_directory_iterator7optionsEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__14__fs10filesystem4path10__filenameEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__14__fs10filesystem4path11__extensionEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__14__fs10filesystem4path11__root_nameEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__14__fs10filesystem4path13__parent_pathEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__14__fs10filesystem4path15__relative_pathEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__14__fs10filesystem4path15__root_path_rawEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__14__fs10filesystem4path16__root_directoryEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__14__fs10filesystem4path16lexically_normalEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__14__fs10filesystem4path18lexically_relativeERKS2_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__14__fs10filesystem4path3endEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__14__fs10filesystem4path5beginEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__14__fs10filesystem4path6__stemEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__14__fs10filesystem4path9__compareENS_17basic_string_viewIcNS_11char_traitsIcEEEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__15ctypeIcE10do_tolowerEPcPKc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__15ctypeIcE10do_tolowerEc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__15ctypeIcE10do_toupperEPcPKc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__15ctypeIcE10do_toupperEc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__15ctypeIcE8do_widenEPKcS3_Pc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__15ctypeIcE8do_widenEc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__15ctypeIcE9do_narrowEPKcS3_cPc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__15ctypeIcE9do_narrowEcc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__15ctypeIwE10do_scan_isEmPKwS3_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__15ctypeIwE10do_tolowerEPwPKw', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__15ctypeIwE10do_tolowerEw', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__15ctypeIwE10do_toupperEPwPKw', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__15ctypeIwE10do_toupperEw', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__15ctypeIwE11do_scan_notEmPKwS3_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__15ctypeIwE5do_isEPKwS3_Pm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__15ctypeIwE5do_isEmw', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__15ctypeIwE8do_widenEPKcS3_Pw', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__15ctypeIwE8do_widenEc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__15ctypeIwE9do_narrowEPKwS3_cPc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__15ctypeIwE9do_narrowEwc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__16locale4nameEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__16locale9has_facetERNS0_2idE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__16locale9use_facetERNS0_2idE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__16localeeqERKS0_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17codecvtIDiDu11__mbstate_tE10do_unshiftERS1_PDuS4_RS4_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17codecvtIDiDu11__mbstate_tE11do_encodingEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17codecvtIDiDu11__mbstate_tE13do_max_lengthEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17codecvtIDiDu11__mbstate_tE16do_always_noconvEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17codecvtIDiDu11__mbstate_tE5do_inERS1_PKDuS5_RS5_PDiS7_RS7_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17codecvtIDiDu11__mbstate_tE6do_outERS1_PKDiS5_RS5_PDuS7_RS7_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17codecvtIDiDu11__mbstate_tE9do_lengthERS1_PKDuS5_m', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17codecvtIDic11__mbstate_tE10do_unshiftERS1_PcS4_RS4_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17codecvtIDic11__mbstate_tE11do_encodingEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17codecvtIDic11__mbstate_tE13do_max_lengthEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17codecvtIDic11__mbstate_tE16do_always_noconvEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17codecvtIDic11__mbstate_tE5do_inERS1_PKcS5_RS5_PDiS7_RS7_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17codecvtIDic11__mbstate_tE6do_outERS1_PKDiS5_RS5_PcS7_RS7_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17codecvtIDic11__mbstate_tE9do_lengthERS1_PKcS5_m', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17codecvtIDsDu11__mbstate_tE10do_unshiftERS1_PDuS4_RS4_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17codecvtIDsDu11__mbstate_tE11do_encodingEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17codecvtIDsDu11__mbstate_tE13do_max_lengthEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17codecvtIDsDu11__mbstate_tE16do_always_noconvEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17codecvtIDsDu11__mbstate_tE5do_inERS1_PKDuS5_RS5_PDsS7_RS7_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17codecvtIDsDu11__mbstate_tE6do_outERS1_PKDsS5_RS5_PDuS7_RS7_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17codecvtIDsDu11__mbstate_tE9do_lengthERS1_PKDuS5_m', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17codecvtIDsc11__mbstate_tE10do_unshiftERS1_PcS4_RS4_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17codecvtIDsc11__mbstate_tE11do_encodingEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17codecvtIDsc11__mbstate_tE13do_max_lengthEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17codecvtIDsc11__mbstate_tE16do_always_noconvEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17codecvtIDsc11__mbstate_tE5do_inERS1_PKcS5_RS5_PDsS7_RS7_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17codecvtIDsc11__mbstate_tE6do_outERS1_PKDsS5_RS5_PcS7_RS7_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17codecvtIDsc11__mbstate_tE9do_lengthERS1_PKcS5_m', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17codecvtIcc11__mbstate_tE10do_unshiftERS1_PcS4_RS4_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17codecvtIcc11__mbstate_tE11do_encodingEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17codecvtIcc11__mbstate_tE13do_max_lengthEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17codecvtIcc11__mbstate_tE16do_always_noconvEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17codecvtIcc11__mbstate_tE5do_inERS1_PKcS5_RS5_PcS7_RS7_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17codecvtIcc11__mbstate_tE6do_outERS1_PKcS5_RS5_PcS7_RS7_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17codecvtIcc11__mbstate_tE9do_lengthERS1_PKcS5_m', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17codecvtIwc11__mbstate_tE10do_unshiftERS1_PcS4_RS4_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17codecvtIwc11__mbstate_tE11do_encodingEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17codecvtIwc11__mbstate_tE13do_max_lengthEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17codecvtIwc11__mbstate_tE16do_always_noconvEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17codecvtIwc11__mbstate_tE5do_inERS1_PKcS5_RS5_PwS7_RS7_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17codecvtIwc11__mbstate_tE6do_outERS1_PKwS5_RS5_PcS7_RS7_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17codecvtIwc11__mbstate_tE9do_lengthERS1_PKcS5_m', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17collateIcE10do_compareEPKcS3_S3_S3_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17collateIcE12do_transformEPKcS3_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17collateIcE7do_hashEPKcS3_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17collateIwE10do_compareEPKwS3_S3_S3_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17collateIwE12do_transformEPKwS3_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17collateIwE7do_hashEPKwS3_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjRPv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjRb', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjRd', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjRe', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjRf', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjRl', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjRm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjRt', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjRx', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjRy', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjS8_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjRPv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjRb', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjRd', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjRe', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjRf', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjRl', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjRm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjRt', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjRx', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjRy', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjS8_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_putES4_RNS_8ios_baseEcPKv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_putES4_RNS_8ios_baseEcb', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_putES4_RNS_8ios_baseEcd', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_putES4_RNS_8ios_baseEce', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_putES4_RNS_8ios_baseEcl', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_putES4_RNS_8ios_baseEcm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_putES4_RNS_8ios_baseEcx', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_putES4_RNS_8ios_baseEcy', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_putES4_RNS_8ios_baseEwPKv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_putES4_RNS_8ios_baseEwb', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_putES4_RNS_8ios_baseEwd', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_putES4_RNS_8ios_baseEwe', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_putES4_RNS_8ios_baseEwl', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_putES4_RNS_8ios_baseEwm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_putES4_RNS_8ios_baseEwx', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__17num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_putES4_RNS_8ios_baseEwy', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18ios_base6getlocEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18messagesIcE6do_getEliiRKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18messagesIcE7do_openERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEERKNS_6localeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18messagesIcE8do_closeEl', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18messagesIwE6do_getEliiRKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18messagesIwE7do_openERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEERKNS_6localeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18messagesIwE8do_closeEl', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18numpunctIcE11do_groupingEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18numpunctIcE11do_truenameEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18numpunctIcE12do_falsenameEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18numpunctIcE16do_decimal_pointEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18numpunctIcE16do_thousands_sepEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18numpunctIwE11do_groupingEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18numpunctIwE11do_truenameEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18numpunctIwE12do_falsenameEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18numpunctIwE16do_decimal_pointEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18numpunctIwE16do_thousands_sepEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE10__get_hourERiRS4_S4_RjRKNS_5ctypeIcEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE10__get_yearERiRS4_S4_RjRKNS_5ctypeIcEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE11__get_am_pmERiRS4_S4_RjRKNS_5ctypeIcEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE11__get_monthERiRS4_S4_RjRKNS_5ctypeIcEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE11__get_year4ERiRS4_S4_RjRKNS_5ctypeIcEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE11do_get_dateES4_S4_RNS_8ios_baseERjP2tm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE11do_get_timeES4_S4_RNS_8ios_baseERjP2tm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE11do_get_yearES4_S4_RNS_8ios_baseERjP2tm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE12__get_minuteERiRS4_S4_RjRKNS_5ctypeIcEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE12__get_secondERiRS4_S4_RjRKNS_5ctypeIcEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE13__get_12_hourERiRS4_S4_RjRKNS_5ctypeIcEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE13__get_percentERS4_S4_RjRKNS_5ctypeIcEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE13__get_weekdayERiRS4_S4_RjRKNS_5ctypeIcEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE13do_date_orderEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE14do_get_weekdayES4_S4_RNS_8ios_baseERjP2tm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE15__get_monthnameERiRS4_S4_RjRKNS_5ctypeIcEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE16do_get_monthnameES4_S4_RNS_8ios_baseERjP2tm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE17__get_weekdaynameERiRS4_S4_RjRKNS_5ctypeIcEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE17__get_white_spaceERS4_S4_RjRKNS_5ctypeIcEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE18__get_day_year_numERiRS4_S4_RjRKNS_5ctypeIcEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE3getES4_S4_RNS_8ios_baseERjP2tmPKcSC_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjP2tmcc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE9__get_dayERiRS4_S4_RjRKNS_5ctypeIcEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE10__get_hourERiRS4_S4_RjRKNS_5ctypeIwEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE10__get_yearERiRS4_S4_RjRKNS_5ctypeIwEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE11__get_am_pmERiRS4_S4_RjRKNS_5ctypeIwEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE11__get_monthERiRS4_S4_RjRKNS_5ctypeIwEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE11__get_year4ERiRS4_S4_RjRKNS_5ctypeIwEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE11do_get_dateES4_S4_RNS_8ios_baseERjP2tm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE11do_get_timeES4_S4_RNS_8ios_baseERjP2tm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE11do_get_yearES4_S4_RNS_8ios_baseERjP2tm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE12__get_minuteERiRS4_S4_RjRKNS_5ctypeIwEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE12__get_secondERiRS4_S4_RjRKNS_5ctypeIwEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE13__get_12_hourERiRS4_S4_RjRKNS_5ctypeIwEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE13__get_percentERS4_S4_RjRKNS_5ctypeIwEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE13__get_weekdayERiRS4_S4_RjRKNS_5ctypeIwEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE13do_date_orderEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE14do_get_weekdayES4_S4_RNS_8ios_baseERjP2tm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE15__get_monthnameERiRS4_S4_RjRKNS_5ctypeIwEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE16do_get_monthnameES4_S4_RNS_8ios_baseERjP2tm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE17__get_weekdaynameERiRS4_S4_RjRKNS_5ctypeIwEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE17__get_white_spaceERS4_S4_RjRKNS_5ctypeIwEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE18__get_day_year_numERiRS4_S4_RjRKNS_5ctypeIwEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE3getES4_S4_RNS_8ios_baseERjP2tmPKwSC_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjP2tmcc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE9__get_dayERiRS4_S4_RjRKNS_5ctypeIwEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18time_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE3putES4_RNS_8ios_baseEcPK2tmPKcSC_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18time_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_putES4_RNS_8ios_baseEcPK2tmcc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18time_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE3putES4_RNS_8ios_baseEwPK2tmPKwSC_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__18time_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_putES4_RNS_8ios_baseEwPK2tmcc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__19money_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_bRNS_8ios_baseERjRNS_12basic_stringIcS3_NS_9allocatorIcEEEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__19money_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_bRNS_8ios_baseERjRe', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__19money_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_bRNS_8ios_baseERjRNS_12basic_stringIwS3_NS_9allocatorIwEEEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__19money_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_bRNS_8ios_baseERjRe', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__19money_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_putES4_bRNS_8ios_baseEcRKNS_12basic_stringIcS3_NS_9allocatorIcEEEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__19money_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_putES4_bRNS_8ios_baseEce', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__19money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_putES4_bRNS_8ios_baseEwRKNS_12basic_stringIwS3_NS_9allocatorIwEEEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNKSt3__19money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_putES4_bRNS_8ios_baseEwe', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt11logic_errorC1EPKc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt11logic_errorC1ERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt11logic_errorC1ERKS_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt11logic_errorC2EPKc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt11logic_errorC2ERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt11logic_errorC2ERKS_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt11logic_erroraSERKS_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt12experimental19bad_optional_accessD0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt12experimental19bad_optional_accessD1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt12experimental19bad_optional_accessD2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt13exception_ptr31__from_native_exception_pointerEPv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt13exception_ptrC1ERKS_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt13exception_ptrC2ERKS_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt13exception_ptrD1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt13exception_ptrD2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt13exception_ptraSERKS_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt13runtime_errorC1EPKc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt13runtime_errorC1ERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt13runtime_errorC1ERKS_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt13runtime_errorC2EPKc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt13runtime_errorC2ERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt13runtime_errorC2ERKS_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt13runtime_erroraSERKS_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt16nested_exceptionC1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt16nested_exceptionC2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt16nested_exceptionD0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt16nested_exceptionD1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt16nested_exceptionD2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt19bad_optional_accessD0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt19bad_optional_accessD1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt19bad_optional_accessD2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__110__time_getC1EPKc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__110__time_getC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__110__time_getC2EPKc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__110__time_getC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__110__time_getD1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__110__time_getD2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__110__time_putC1EPKc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__110__time_putC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__110__time_putC2EPKc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__110__time_putC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__110__time_putD1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__110__time_putD2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__110__breakpointEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__110ctype_base5alnumE', 'size': 8, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__110ctype_base5alphaE', 'size': 8, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__110ctype_base5blankE', 'size': 8, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__110ctype_base5cntrlE', 'size': 8, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__110ctype_base5digitE', 'size': 8, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__110ctype_base5graphE', 'size': 8, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__110ctype_base5lowerE', 'size': 8, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__110ctype_base5printE', 'size': 8, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__110ctype_base5punctE', 'size': 8, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__110ctype_base5spaceE', 'size': 8, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__110ctype_base5upperE', 'size': 8, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__110ctype_base6xdigitE', 'size': 8, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__110istrstreamD0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__110istrstreamD1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__110istrstreamD2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__110moneypunctIcLb0EE2idE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__110moneypunctIcLb0EE4intlE', 'size': 1, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__110moneypunctIcLb1EE2idE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__110moneypunctIcLb1EE4intlE', 'size': 1, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__110moneypunctIwLb0EE2idE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__110moneypunctIwLb0EE4intlE', 'size': 1, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__110moneypunctIwLb1EE2idE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__110moneypunctIwLb1EE4intlE', 'size': 1, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__110ostrstreamD0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__110ostrstreamD1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__110ostrstreamD2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__110to_wstringEd', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__110to_wstringEe', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__110to_wstringEf', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__110to_wstringEi', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__110to_wstringEj', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__110to_wstringEl', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__110to_wstringEm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__110to_wstringEx', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__110to_wstringEy', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__111__call_onceERVmPvPFvS2_E', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__111__money_getIcE13__gather_infoEbRKNS_6localeERNS_10money_base7patternERcS8_RNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEESF_SF_SF_Ri', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__111__money_getIwE13__gather_infoEbRKNS_6localeERNS_10money_base7patternERwS8_RNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEERNS9_IwNSA_IwEENSC_IwEEEESJ_SJ_Ri', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__111__money_putIcE13__gather_infoEbbRKNS_6localeERNS_10money_base7patternERcS8_RNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEESF_SF_Ri', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__111__money_putIcE8__formatEPcRS2_S3_jPKcS5_RKNS_5ctypeIcEEbRKNS_10money_base7patternEccRKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEESL_SL_i', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__111__money_putIwE13__gather_infoEbbRKNS_6localeERNS_10money_base7patternERwS8_RNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEERNS9_IwNSA_IwEENSC_IwEEEESJ_Ri', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__111__money_putIwE8__formatEPwRS2_S3_jPKwS5_RKNS_5ctypeIwEEbRKNS_10money_base7patternEwwRKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEERKNSE_IwNSF_IwEENSH_IwEEEESQ_i', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__111regex_errorC1ENS_15regex_constants10error_typeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__111regex_errorC2ENS_15regex_constants10error_typeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__111regex_errorD0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__111regex_errorD1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__111regex_errorD2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__111this_thread9sleep_forERKNS_6chrono8durationIxNS_5ratioILl1ELl1000000000EEEEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__111timed_mutex4lockEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__111timed_mutex6unlockEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__111timed_mutex8try_lockEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__111timed_mutexC1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__111timed_mutexC2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__111timed_mutexD1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__111timed_mutexD2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112__do_nothingEPv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112__get_sp_mutEPKv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112__next_primeEm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112__rs_default4__c_E', 'size': 4, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__112__rs_defaultC1ERKS0_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112__rs_defaultC1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112__rs_defaultC2ERKS0_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112__rs_defaultC2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112__rs_defaultD1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112__rs_defaultD2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112__rs_defaultclEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112bad_weak_ptrD0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112bad_weak_ptrD1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112bad_weak_ptrD2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE21__grow_by_and_replaceEmmmmmmPKc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE2atEm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4nposE', 'size': 8, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5eraseEmm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcmm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEmc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendEPKc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendEPKcm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendERKS5_mm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendEmc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKcm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignERKS5_mm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEmc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertENS_11__wrap_iterIPKcEEc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertEmPKc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertEmPKcm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertEmRKS5_mm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertEmmc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEmc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceEmmPKc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceEmmPKcm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceEmmRKS5_mm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceEmmmc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEmmmmmm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1ERKS5_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1ERKS5_RKS4_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1ERKS5_mmRKS4_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2ERKS5_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2ERKS5_RKS4_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2ERKS5_mmRKS4_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEaSERKS5_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE21__grow_by_and_replaceEmmmmmmPKw', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE2atEm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4nposE', 'size': 8, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5eraseEmm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initEPKwm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initEPKwmm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initEmw', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendEPKw', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendEPKwm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendERKS5_mm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendEmw', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKw', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKwm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignERKS5_mm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEmw', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertENS_11__wrap_iterIPKwEEw', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertEmPKw', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertEmPKwm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertEmRKS5_mm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertEmmw', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6resizeEmw', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceEmmPKw', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceEmmPKwm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceEmmRKS5_mm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceEmmmw', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7reserveEm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9__grow_byEmmmmmm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC1ERKS5_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC1ERKS5_RKS4_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC1ERKS5_mmRKS4_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2ERKS5_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2ERKS5_RKS4_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2ERKS5_mmRKS4_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEaSERKS5_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEaSEw', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112ctype_bynameIcEC1EPKcm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112ctype_bynameIcEC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112ctype_bynameIcEC2EPKcm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112ctype_bynameIcEC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112ctype_bynameIcED0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112ctype_bynameIcED1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112ctype_bynameIcED2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112ctype_bynameIwEC1EPKcm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112ctype_bynameIwEC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112ctype_bynameIwEC2EPKcm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112ctype_bynameIwEC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112ctype_bynameIwED0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112ctype_bynameIwED1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112ctype_bynameIwED2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112future_errorC1ENS_10error_codeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112future_errorC2ENS_10error_codeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112future_errorD0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112future_errorD1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112future_errorD2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112placeholders2_1E', 'size': 1, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__112placeholders2_2E', 'size': 1, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__112placeholders2_3E', 'size': 1, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__112placeholders2_4E', 'size': 1, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__112placeholders2_5E', 'size': 1, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__112placeholders2_6E', 'size': 1, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__112placeholders2_7E', 'size': 1, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__112placeholders2_8E', 'size': 1, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__112placeholders2_9E', 'size': 1, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__112placeholders3_10E', 'size': 1, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__112strstreambuf3strEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112strstreambuf4swapERS0_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112strstreambuf6__initEPclS1_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112strstreambuf6freezeEb', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112strstreambuf7seekoffExNS_8ios_base7seekdirEj', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112strstreambuf7seekposENS_4fposI11__mbstate_tEEj', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112strstreambuf8overflowEi', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112strstreambuf9pbackfailEi', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112strstreambuf9underflowEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112strstreambufC1EPFPvmEPFvS1_E', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112strstreambufC1EPKal', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112strstreambufC1EPKcl', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112strstreambufC1EPKhl', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112strstreambufC1EPalS1_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112strstreambufC1EPclS1_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112strstreambufC1EPhlS1_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112strstreambufC1El', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112strstreambufC2EPFPvmEPFvS1_E', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112strstreambufC2EPKal', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112strstreambufC2EPKcl', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112strstreambufC2EPKhl', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112strstreambufC2EPalS1_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112strstreambufC2EPclS1_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112strstreambufC2EPhlS1_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112strstreambufC2El', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112strstreambufD0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112strstreambufD1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112strstreambufD2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112system_errorC1ENS_10error_codeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112system_errorC1ENS_10error_codeEPKc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112system_errorC1ENS_10error_codeERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112system_errorC1EiRKNS_14error_categoryE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112system_errorC1EiRKNS_14error_categoryEPKc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112system_errorC1EiRKNS_14error_categoryERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112system_errorC2ENS_10error_codeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112system_errorC2ENS_10error_codeEPKc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112system_errorC2ENS_10error_codeERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112system_errorC2EiRKNS_14error_categoryE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112system_errorC2EiRKNS_14error_categoryEPKc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112system_errorC2EiRKNS_14error_categoryERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112system_errorD0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112system_errorD1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__112system_errorD2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_filebufIcNS_11char_traitsIcEEE11__read_modeEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_filebufIcNS_11char_traitsIcEEE12__write_modeEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_filebufIcNS_11char_traitsIcEEE4openEPKcj', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_filebufIcNS_11char_traitsIcEEE4swapERS3_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_filebufIcNS_11char_traitsIcEEE4syncEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_filebufIcNS_11char_traitsIcEEE5closeEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_filebufIcNS_11char_traitsIcEEE5imbueERKNS_6localeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_filebufIcNS_11char_traitsIcEEE6setbufEPcl', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_filebufIcNS_11char_traitsIcEEE7seekoffExNS_8ios_base7seekdirEj', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_filebufIcNS_11char_traitsIcEEE7seekposENS_4fposI11__mbstate_tEEj', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_filebufIcNS_11char_traitsIcEEE8overflowEi', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_filebufIcNS_11char_traitsIcEEE9pbackfailEi', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_filebufIcNS_11char_traitsIcEEE9underflowEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_filebufIcNS_11char_traitsIcEEEC1EOS3_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_filebufIcNS_11char_traitsIcEEEC1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_filebufIcNS_11char_traitsIcEEEC2EOS3_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_filebufIcNS_11char_traitsIcEEEC2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_filebufIcNS_11char_traitsIcEEED0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_filebufIcNS_11char_traitsIcEEED1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_filebufIcNS_11char_traitsIcEEED2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE3getEPcl', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE3getEPclc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE3getERNS_15basic_streambufIcS2_EE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE3getERNS_15basic_streambufIcS2_EEc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE3getERc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE3getEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE4peekEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE4readEPcl', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE4swapERS3_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE4syncEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE5seekgENS_4fposI11__mbstate_tEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE5seekgExNS_8ios_base7seekdirE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE5tellgEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE5ungetEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE6ignoreEli', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE6sentryC1ERS3_b', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE6sentryC2ERS3_b', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE7getlineEPcl', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE7getlineEPclc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE7putbackEc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE8readsomeEPcl', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIcNS_11char_traitsIcEEEC1EPNS_15basic_streambufIcS2_EE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIcNS_11char_traitsIcEEEC2EPNS_15basic_streambufIcS2_EE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIcNS_11char_traitsIcEEED0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIcNS_11char_traitsIcEEED1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIcNS_11char_traitsIcEEED2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIcNS_11char_traitsIcEEErsEPFRNS_8ios_baseES5_E', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIcNS_11char_traitsIcEEErsEPFRNS_9basic_iosIcS2_EES6_E', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIcNS_11char_traitsIcEEErsEPFRS3_S4_E', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIcNS_11char_traitsIcEEErsEPNS_15basic_streambufIcS2_EE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIcNS_11char_traitsIcEEErsERPv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIcNS_11char_traitsIcEEErsERb', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIcNS_11char_traitsIcEEErsERd', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIcNS_11char_traitsIcEEErsERe', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIcNS_11char_traitsIcEEErsERf', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIcNS_11char_traitsIcEEErsERi', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIcNS_11char_traitsIcEEErsERj', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIcNS_11char_traitsIcEEErsERl', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIcNS_11char_traitsIcEEErsERm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIcNS_11char_traitsIcEEErsERs', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIcNS_11char_traitsIcEEErsERt', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIcNS_11char_traitsIcEEErsERx', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIcNS_11char_traitsIcEEErsERy', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE3getEPwl', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE3getEPwlw', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE3getERNS_15basic_streambufIwS2_EE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE3getERNS_15basic_streambufIwS2_EEw', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE3getERw', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE3getEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE4peekEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE4readEPwl', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE4swapERS3_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE4syncEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE5seekgENS_4fposI11__mbstate_tEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE5seekgExNS_8ios_base7seekdirE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE5tellgEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE5ungetEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE6ignoreEli', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE6sentryC1ERS3_b', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE6sentryC2ERS3_b', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE7getlineEPwl', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE7getlineEPwlw', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE7putbackEw', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE8readsomeEPwl', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIwNS_11char_traitsIwEEEC1EPNS_15basic_streambufIwS2_EE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIwNS_11char_traitsIwEEEC2EPNS_15basic_streambufIwS2_EE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIwNS_11char_traitsIwEEED0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIwNS_11char_traitsIwEEED1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIwNS_11char_traitsIwEEED2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIwNS_11char_traitsIwEEErsEPFRNS_8ios_baseES5_E', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIwNS_11char_traitsIwEEErsEPFRNS_9basic_iosIwS2_EES6_E', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIwNS_11char_traitsIwEEErsEPFRS3_S4_E', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIwNS_11char_traitsIwEEErsEPNS_15basic_streambufIwS2_EE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIwNS_11char_traitsIwEEErsERPv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIwNS_11char_traitsIwEEErsERb', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIwNS_11char_traitsIwEEErsERd', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIwNS_11char_traitsIwEEErsERe', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIwNS_11char_traitsIwEEErsERf', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIwNS_11char_traitsIwEEErsERi', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIwNS_11char_traitsIwEEErsERj', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIwNS_11char_traitsIwEEErsERl', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIwNS_11char_traitsIwEEErsERm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIwNS_11char_traitsIwEEErsERs', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIwNS_11char_traitsIwEEErsERt', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIwNS_11char_traitsIwEEErsERx', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_istreamIwNS_11char_traitsIwEEErsERy', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE3putEc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE4swapERS3_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE5flushEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE5seekpENS_4fposI11__mbstate_tEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE5seekpExNS_8ios_base7seekdirE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE5tellpEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE5writeEPKcl', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE6sentryC1ERS3_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE6sentryC2ERS3_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE6sentryD1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE6sentryD2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEEC1EPNS_15basic_streambufIcS2_EE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEEC2EPNS_15basic_streambufIcS2_EE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEED0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEED1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEED2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEPFRNS_8ios_baseES5_E', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEPFRNS_9basic_iosIcS2_EES6_E', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEPFRS3_S4_E', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEPKv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEPNS_15basic_streambufIcS2_EE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEb', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEd', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEe', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEf', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEi', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEj', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEl', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEs', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEt', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEx', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEy', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEE3putEw', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEE4swapERS3_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEE5flushEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEE5seekpENS_4fposI11__mbstate_tEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEE5seekpExNS_8ios_base7seekdirE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEE5tellpEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEE5writeEPKwl', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEE6sentryC1ERS3_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEE6sentryC2ERS3_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEE6sentryD1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEE6sentryD2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEEC1EPNS_15basic_streambufIwS2_EE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEEC2EPNS_15basic_streambufIwS2_EE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEED0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEED1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEED2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEElsEPFRNS_8ios_baseES5_E', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEElsEPFRNS_9basic_iosIwS2_EES6_E', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEElsEPFRS3_S4_E', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEElsEPKv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEElsEPNS_15basic_streambufIwS2_EE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEElsEb', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEElsEd', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEElsEe', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEElsEf', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEElsEi', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEElsEj', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEElsEl', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEElsEm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEElsEs', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEElsEt', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEElsEx', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEElsEy', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113random_deviceC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113random_deviceC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113random_deviceD1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113random_deviceD2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113random_deviceclEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113shared_futureIvED1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113shared_futureIvED2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__113shared_futureIvEaSERKS1_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114__num_get_base10__get_baseERNS_8ios_baseE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114__num_get_base5__srcE', 'size': 33, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__114__num_put_base12__format_intEPcPKcbj', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114__num_put_base14__format_floatEPcPKcj', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114__num_put_base18__identify_paddingEPcS1_RKNS_8ios_baseE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114__shared_count12__add_sharedEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114__shared_count16__release_sharedEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114__shared_countD0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114__shared_countD1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114__shared_countD2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114basic_ifstreamIcNS_11char_traitsIcEEE4openEPKcj', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114basic_ifstreamIcNS_11char_traitsIcEEE4openERKNS_12basic_stringIcS2_NS_9allocatorIcEEEEj', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114basic_iostreamIcNS_11char_traitsIcEEE4swapERS3_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114basic_iostreamIcNS_11char_traitsIcEEEC1EPNS_15basic_streambufIcS2_EE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114basic_iostreamIcNS_11char_traitsIcEEEC2EPNS_15basic_streambufIcS2_EE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114basic_iostreamIcNS_11char_traitsIcEEED0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114basic_iostreamIcNS_11char_traitsIcEEED1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114basic_iostreamIcNS_11char_traitsIcEEED2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114basic_ofstreamIcNS_11char_traitsIcEEE4openEPKcj', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114basic_ofstreamIcNS_11char_traitsIcEEE4openERKNS_12basic_stringIcS2_NS_9allocatorIcEEEEj', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114codecvt_bynameIDiDu11__mbstate_tED0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114codecvt_bynameIDiDu11__mbstate_tED1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114codecvt_bynameIDiDu11__mbstate_tED2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114codecvt_bynameIDic11__mbstate_tED0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114codecvt_bynameIDic11__mbstate_tED1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114codecvt_bynameIDic11__mbstate_tED2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114codecvt_bynameIDsDu11__mbstate_tED0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114codecvt_bynameIDsDu11__mbstate_tED1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114codecvt_bynameIDsDu11__mbstate_tED2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114codecvt_bynameIDsc11__mbstate_tED0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114codecvt_bynameIDsc11__mbstate_tED1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114codecvt_bynameIDsc11__mbstate_tED2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114codecvt_bynameIcc11__mbstate_tED0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114codecvt_bynameIcc11__mbstate_tED1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114codecvt_bynameIcc11__mbstate_tED2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114codecvt_bynameIwc11__mbstate_tED0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114codecvt_bynameIwc11__mbstate_tED1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114codecvt_bynameIwc11__mbstate_tED2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114collate_bynameIcEC1EPKcm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114collate_bynameIcEC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114collate_bynameIcEC2EPKcm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114collate_bynameIcEC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114collate_bynameIcED0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114collate_bynameIcED1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114collate_bynameIcED2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114collate_bynameIwEC1EPKcm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114collate_bynameIwEC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114collate_bynameIwEC2EPKcm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114collate_bynameIwEC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114collate_bynameIwED0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114collate_bynameIwED1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114collate_bynameIwED2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114error_categoryC2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114error_categoryD0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114error_categoryD1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__114error_categoryD2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115__get_classnameEPKcb', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115__thread_struct25notify_all_at_thread_exitEPNS_18condition_variableEPNS_5mutexE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115__thread_struct27__make_ready_at_thread_exitEPNS_17__assoc_sub_stateE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115__thread_structC1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115__thread_structC2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115__thread_structD1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115__thread_structD2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE10pubseekoffExNS_8ios_base7seekdirEj', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE10pubseekposENS_4fposI11__mbstate_tEEj', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE4setgEPcS4_S4_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE4setpEPcS4_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE4swapERS3_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE4syncEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE5gbumpEi', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE5imbueERKNS_6localeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE5pbumpEi', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE5sgetcEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE5sgetnEPcl', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE5sputcEc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE5sputnEPKcl', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE5uflowEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE6sbumpcEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE6setbufEPcl', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE6snextcEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE6xsgetnEPcl', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE6xsputnEPKcl', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE7pubsyncEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE7seekoffExNS_8ios_base7seekdirEj', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE7seekposENS_4fposI11__mbstate_tEEj', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE7sungetcEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE8in_availEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE8overflowEi', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE8pubimbueERKNS_6localeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE9pbackfailEi', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE9pubsetbufEPcl', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE9showmanycEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE9sputbackcEc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE9underflowEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEEC1ERKS3_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEEC1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEEC2ERKS3_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEEC2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEED0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEED1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEED2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIcNS_11char_traitsIcEEEaSERKS3_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE10pubseekoffExNS_8ios_base7seekdirEj', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE10pubseekposENS_4fposI11__mbstate_tEEj', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE4setgEPwS4_S4_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE4setpEPwS4_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE4swapERS3_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE4syncEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE5gbumpEi', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE5imbueERKNS_6localeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE5pbumpEi', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE5sgetcEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE5sgetnEPwl', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE5sputcEw', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE5sputnEPKwl', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE5uflowEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE6sbumpcEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE6setbufEPwl', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE6snextcEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE6xsgetnEPwl', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE6xsputnEPKwl', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE7pubsyncEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE7seekoffExNS_8ios_base7seekdirEj', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE7seekposENS_4fposI11__mbstate_tEEj', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE7sungetcEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE8in_availEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE8overflowEi', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE8pubimbueERKNS_6localeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE9pbackfailEi', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE9pubsetbufEPwl', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE9showmanycEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE9sputbackcEw', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEE9underflowEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEEC1ERKS3_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEEC1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEEC2ERKS3_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEEC2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEED0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEED1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEED2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_streambufIwNS_11char_traitsIwEEEaSERKS3_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEE3strERKNS_12basic_stringIcS2_S4_EE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEE4swapERS5_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEE7seekoffExNS_8ios_base7seekdirEj', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEE8overflowEi', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEE9pbackfailEi', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEE9underflowEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEEC1EOS5_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEEC2EOS5_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEOS5_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115future_categoryEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115numpunct_bynameIcE6__initEPKc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115numpunct_bynameIcEC1EPKcm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115numpunct_bynameIcEC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115numpunct_bynameIcEC2EPKcm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115numpunct_bynameIcEC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115numpunct_bynameIcED0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115numpunct_bynameIcED1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115numpunct_bynameIcED2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115numpunct_bynameIwE6__initEPKc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115numpunct_bynameIwEC1EPKcm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115numpunct_bynameIwEC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115numpunct_bynameIwEC2EPKcm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115numpunct_bynameIwEC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115numpunct_bynameIwED0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115numpunct_bynameIwED1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115numpunct_bynameIwED2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115recursive_mutex4lockEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115recursive_mutex6unlockEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115recursive_mutex8try_lockEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115recursive_mutexC1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115recursive_mutexC2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115recursive_mutexD1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115recursive_mutexD2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__115system_categoryEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__116__check_groupingERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPjS8_Rj', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__116__narrow_to_utf8ILm16EED0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__116__narrow_to_utf8ILm16EED1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__116__narrow_to_utf8ILm16EED2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__116__narrow_to_utf8ILm32EED0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__116__narrow_to_utf8ILm32EED1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__116__narrow_to_utf8ILm32EED2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__116generic_categoryEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__117__assoc_sub_state10__sub_waitERNS_11unique_lockINS_5mutexEEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__117__assoc_sub_state12__make_readyEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__117__assoc_sub_state13set_exceptionESt13exception_ptr', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__117__assoc_sub_state16__on_zero_sharedEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__117__assoc_sub_state24set_value_at_thread_exitEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__117__assoc_sub_state28set_exception_at_thread_exitESt13exception_ptr', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__117__assoc_sub_state4copyEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__117__assoc_sub_state4waitEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__117__assoc_sub_state9__executeEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__117__assoc_sub_state9set_valueEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__117__widen_from_utf8ILm16EED0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__117__widen_from_utf8ILm16EED1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__117__widen_from_utf8ILm16EED2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__117__widen_from_utf8ILm32EED0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__117__widen_from_utf8ILm32EED1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__117__widen_from_utf8ILm32EED2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__117bad_function_callD0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__117bad_function_callD1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__117bad_function_callD2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__117declare_reachableEPv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__117iostream_categoryEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__117moneypunct_bynameIcLb0EE4initEPKc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__117moneypunct_bynameIcLb1EE4initEPKc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__117moneypunct_bynameIwLb0EE4initEPKc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__117moneypunct_bynameIwLb1EE4initEPKc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__118__get_ostream_fileERNS_13basic_ostreamIcNS_11char_traitsIcEEEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__118__time_get_storageIcE4initERKNS_5ctypeIcEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__118__time_get_storageIcE9__analyzeEcRKNS_5ctypeIcEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__118__time_get_storageIcEC1EPKc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__118__time_get_storageIcEC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__118__time_get_storageIcEC2EPKc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__118__time_get_storageIcEC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__118__time_get_storageIwE4initERKNS_5ctypeIwEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__118__time_get_storageIwE9__analyzeEcRKNS_5ctypeIwEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__118__time_get_storageIwEC1EPKc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__118__time_get_storageIwEC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__118__time_get_storageIwEC2EPKc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__118__time_get_storageIwEC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEOS5_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__118condition_variable10notify_allEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__118condition_variable10notify_oneEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__118condition_variable15__do_timed_waitERNS_11unique_lockINS_5mutexEEENS_6chrono10time_pointINS5_12system_clockENS5_8durationIxNS_5ratioILl1ELl1000000000EEEEEEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__118condition_variable4waitERNS_11unique_lockINS_5mutexEEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__118condition_variableD1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__118condition_variableD2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__118shared_timed_mutex11lock_sharedEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__118shared_timed_mutex13unlock_sharedEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__118shared_timed_mutex15try_lock_sharedEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__118shared_timed_mutex4lockEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__118shared_timed_mutex6unlockEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__118shared_timed_mutex8try_lockEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__118shared_timed_mutexC1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__118shared_timed_mutexC2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__119__is_posix_terminalEP7__sFILE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__119__shared_mutex_base11lock_sharedEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__119__shared_mutex_base13unlock_sharedEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__119__shared_mutex_base15try_lock_sharedEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__119__shared_mutex_base4lockEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__119__shared_mutex_base6unlockEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__119__shared_mutex_base8try_lockEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__119__shared_mutex_baseC1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__119__shared_mutex_baseC2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__119__shared_weak_count10__add_weakEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__119__shared_weak_count12__add_sharedEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__119__shared_weak_count14__release_weakEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__119__shared_weak_count16__release_sharedEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__119__shared_weak_count4lockEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__119__shared_weak_countD0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__119__shared_weak_countD1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__119__shared_weak_countD2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__119__thread_local_dataEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__119basic_istringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEOS5_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__119basic_ostringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEOS5_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__119declare_no_pointersEPcm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__119__is_debugger_presentEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__120__get_collation_nameEPKc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__120__libcpp_atomic_waitEPVKNS_17__cxx_atomic_implIlNS_22__cxx_atomic_base_implIlEEEEl', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__120__libcpp_atomic_waitEPVKvl', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__120__throw_system_errorEiPKc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__121__throw_runtime_errorEPKc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__121__undeclare_reachableEPv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__121recursive_timed_mutex4lockEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__121recursive_timed_mutex6unlockEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__121recursive_timed_mutex8try_lockEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__121recursive_timed_mutexC1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__121recursive_timed_mutexC2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__121recursive_timed_mutexD1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__121recursive_timed_mutexD2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__121undeclare_no_pointersEPcm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__122__libcpp_verbose_abortEPKcz', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__123__cxx_atomic_notify_allEPVKNS_17__cxx_atomic_implIlNS_22__cxx_atomic_base_implIlEEEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__123__cxx_atomic_notify_allEPVKv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__123__cxx_atomic_notify_oneEPVKNS_17__cxx_atomic_implIlNS_22__cxx_atomic_base_implIlEEEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__123__cxx_atomic_notify_oneEPVKv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__123__libcpp_atomic_monitorEPVKNS_17__cxx_atomic_implIlNS_22__cxx_atomic_base_implIlEEEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__123__libcpp_atomic_monitorEPVKv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__125notify_all_at_thread_exitERNS_18condition_variableENS_11unique_lockINS_5mutexEEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__131__arrive_barrier_algorithm_baseEPNS_24__barrier_algorithm_baseEh', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__132__destroy_barrier_algorithm_baseEPNS_24__barrier_algorithm_baseE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__134__construct_barrier_algorithm_baseERl', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__13cinE', 'size': 168, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__13pmr15memory_resourceD0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__13pmr15memory_resourceD1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__13pmr15memory_resourceD2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__13pmr19new_delete_resourceEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__13pmr20get_default_resourceEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__13pmr20null_memory_resourceEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__13pmr20set_default_resourceEPNS0_15memory_resourceE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__13pmr25monotonic_buffer_resource11do_allocateEmm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__13pmr25monotonic_buffer_resource14__chunk_footer25__try_allocate_from_chunkEmm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__13pmr25monotonic_buffer_resource20__initial_descriptor25__try_allocate_from_chunkEmm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__13pmr28unsynchronized_pool_resource11do_allocateEmm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__13pmr28unsynchronized_pool_resource12__adhoc_pool13__do_allocateEPNS0_15memory_resourceEmm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__13pmr28unsynchronized_pool_resource12__adhoc_pool13__release_ptrEPNS0_15memory_resourceE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__13pmr28unsynchronized_pool_resource12__adhoc_pool15__do_deallocateEPNS0_15memory_resourceEPvmm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__13pmr28unsynchronized_pool_resource13do_deallocateEPvmm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__13pmr28unsynchronized_pool_resource7releaseEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__13pmr28unsynchronized_pool_resourceC1ERKNS0_12pool_optionsEPNS0_15memory_resourceE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__13pmr28unsynchronized_pool_resourceC2ERKNS0_12pool_optionsEPNS0_15memory_resourceE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14__fs10filesystem10__absoluteERKNS1_4pathEPNS_10error_codeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14__fs10filesystem10hash_valueERKNS1_4pathE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14__fs10filesystem11__canonicalERKNS1_4pathEPNS_10error_codeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14__fs10filesystem11__copy_fileERKNS1_4pathES4_NS1_12copy_optionsEPNS_10error_codeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14__fs10filesystem11__file_sizeERKNS1_4pathEPNS_10error_codeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14__fs10filesystem12__equivalentERKNS1_4pathES4_PNS_10error_codeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14__fs10filesystem12__remove_allERKNS1_4pathEPNS_10error_codeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14__fs10filesystem13__fs_is_emptyERKNS1_4pathEPNS_10error_codeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14__fs10filesystem13__permissionsERKNS1_4pathENS1_5permsENS1_12perm_optionsEPNS_10error_codeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14__fs10filesystem13__resize_fileERKNS1_4pathEmPNS_10error_codeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14__fs10filesystem14__copy_symlinkERKNS1_4pathES4_PNS_10error_codeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14__fs10filesystem14__current_pathEPNS_10error_codeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14__fs10filesystem14__current_pathERKNS1_4pathEPNS_10error_codeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14__fs10filesystem14__read_symlinkERKNS1_4pathEPNS_10error_codeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14__fs10filesystem15directory_entry12__do_refreshEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14__fs10filesystem16_FilesystemClock3nowEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14__fs10filesystem16_FilesystemClock9is_steadyE', 'size': 1, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__14__fs10filesystem16__create_symlinkERKNS1_4pathES4_PNS_10error_codeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14__fs10filesystem16__symlink_statusERKNS1_4pathEPNS_10error_codeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14__fs10filesystem16filesystem_error13__create_whatEi', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14__fs10filesystem16filesystem_errorD0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14__fs10filesystem16filesystem_errorD1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14__fs10filesystem16filesystem_errorD2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14__fs10filesystem17__hard_link_countERKNS1_4pathEPNS_10error_codeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14__fs10filesystem17__last_write_timeERKNS1_4pathENS_6chrono10time_pointINS1_16_FilesystemClockENS5_8durationInNS_5ratioILl1ELl1000000000EEEEEEEPNS_10error_codeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14__fs10filesystem17__last_write_timeERKNS1_4pathEPNS_10error_codeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14__fs10filesystem18__create_directoryERKNS1_4pathEPNS_10error_codeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14__fs10filesystem18__create_directoryERKNS1_4pathES4_PNS_10error_codeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14__fs10filesystem18__create_hard_linkERKNS1_4pathES4_PNS_10error_codeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14__fs10filesystem18__weakly_canonicalERKNS1_4pathEPNS_10error_codeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14__fs10filesystem18directory_iterator11__incrementEPNS_10error_codeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14__fs10filesystem18directory_iteratorC1ERKNS1_4pathEPNS_10error_codeENS1_17directory_optionsE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14__fs10filesystem18directory_iteratorC2ERKNS1_4pathEPNS_10error_codeENS1_17directory_optionsE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14__fs10filesystem20__create_directoriesERKNS1_4pathEPNS_10error_codeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14__fs10filesystem21__temp_directory_pathEPNS_10error_codeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14__fs10filesystem26__create_directory_symlinkERKNS1_4pathES4_PNS_10error_codeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14__fs10filesystem28recursive_directory_iterator11__incrementEPNS_10error_codeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14__fs10filesystem28recursive_directory_iterator15__try_recursionEPNS_10error_codeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14__fs10filesystem28recursive_directory_iterator5__popEPNS_10error_codeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14__fs10filesystem28recursive_directory_iterator9__advanceEPNS_10error_codeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14__fs10filesystem28recursive_directory_iteratorC1ERKNS1_4pathENS1_17directory_optionsEPNS_10error_codeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14__fs10filesystem28recursive_directory_iteratorC2ERKNS1_4pathENS1_17directory_optionsEPNS_10error_codeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14__fs10filesystem4path17replace_extensionERKS2_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14__fs10filesystem4path19preferred_separatorE', 'size': 1, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__14__fs10filesystem4path8iterator11__decrementEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14__fs10filesystem4path8iterator11__incrementEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14__fs10filesystem6__copyERKNS1_4pathES4_NS1_12copy_optionsEPNS_10error_codeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14__fs10filesystem7__spaceERKNS1_4pathEPNS_10error_codeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14__fs10filesystem8__removeERKNS1_4pathEPNS_10error_codeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14__fs10filesystem8__renameERKNS1_4pathES4_PNS_10error_codeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14__fs10filesystem8__statusERKNS1_4pathEPNS_10error_codeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14cerrE', 'size': 160, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__14clogE', 'size': 160, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__14coutE', 'size': 160, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__14stodERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14stodERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14stofERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14stofERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14stoiERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPmi', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14stoiERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPmi', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14stolERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPmi', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14stolERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPmi', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__14wcinE', 'size': 168, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__15alignEmmRPvRm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__15ctypeIcE10table_sizeE', 'size': 8, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__15ctypeIcE13classic_tableEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__15ctypeIcE2idE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__15ctypeIcEC1EPKmbm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__15ctypeIcEC2EPKmbm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__15ctypeIcED0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__15ctypeIcED1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__15ctypeIcED2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__15ctypeIwE2idE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__15ctypeIwED0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__15ctypeIwED1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__15ctypeIwED2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__15mutex4lockEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__15mutex6unlockEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__15mutex8try_lockEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__15mutexD1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__15mutexD2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__15stoldERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__15stoldERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__15stollERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPmi', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__15stollERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPmi', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__15stoulERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPmi', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__15stoulERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPmi', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__15wcerrE', 'size': 160, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__15wclogE', 'size': 160, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__15wcoutE', 'size': 160, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__16__itoa8__u32toaEjPc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16__itoa8__u64toaEmPc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16__sortIRNS_6__lessIaaEEPaEEvT0_S5_T_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16__sortIRNS_6__lessIccEEPcEEvT0_S5_T_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16__sortIRNS_6__lessIddEEPdEEvT0_S5_T_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16__sortIRNS_6__lessIeeEEPeEEvT0_S5_T_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16__sortIRNS_6__lessIffEEPfEEvT0_S5_T_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16__sortIRNS_6__lessIhhEEPhEEvT0_S5_T_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16__sortIRNS_6__lessIiiEEPiEEvT0_S5_T_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16__sortIRNS_6__lessIjjEEPjEEvT0_S5_T_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16__sortIRNS_6__lessIllEEPlEEvT0_S5_T_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16__sortIRNS_6__lessImmEEPmEEvT0_S5_T_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16__sortIRNS_6__lessIssEEPsEEvT0_S5_T_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16__sortIRNS_6__lessIttEEPtEEvT0_S5_T_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16__sortIRNS_6__lessIwwEEPwEEvT0_S5_T_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16__sortIRNS_6__lessIxxEEPxEEvT0_S5_T_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16__sortIRNS_6__lessIyyEEPyEEvT0_S5_T_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16chrono12steady_clock3nowEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16chrono12steady_clock9is_steadyE', 'size': 1, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__16chrono12system_clock11from_time_tEl', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16chrono12system_clock3nowEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16chrono12system_clock9is_steadyE', 'size': 1, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__16chrono12system_clock9to_time_tERKNS0_10time_pointIS1_NS0_8durationIxNS_5ratioILl1ELl1000000EEEEEEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16futureIvE3getEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16futureIvEC1EPNS_17__assoc_sub_stateE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16futureIvEC2EPNS_17__assoc_sub_stateE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16futureIvED1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16futureIvED2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16gslice6__initEm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16locale14__install_ctorERKS0_PNS0_5facetEl', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16locale2id5__getEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16locale2id9__next_idE', 'size': 4, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__16locale3allE', 'size': 4, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__16locale4noneE', 'size': 4, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__16locale4timeE', 'size': 4, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__16locale5ctypeE', 'size': 4, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__16locale5facet16__on_zero_sharedEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16locale5facetD0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16locale5facetD1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16locale5facetD2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16locale6globalERKS0_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16locale7classicEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16locale7collateE', 'size': 4, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__16locale7numericE', 'size': 4, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__16locale8__globalEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16locale8messagesE', 'size': 4, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__16locale8monetaryE', 'size': 4, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__16localeC1EPKc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16localeC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16localeC1ERKS0_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16localeC1ERKS0_PKci', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16localeC1ERKS0_RKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEi', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16localeC1ERKS0_S2_i', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16localeC1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16localeC2EPKc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16localeC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16localeC2ERKS0_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16localeC2ERKS0_PKci', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16localeC2ERKS0_RKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEi', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16localeC2ERKS0_S2_i', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16localeC2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16localeD1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16localeD2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16localeaSERKS0_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16stoullERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPmi', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16stoullERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPmi', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16thread20hardware_concurrencyEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16thread4joinEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16thread6detachEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16threadD1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__16threadD2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__17codecvtIDiDu11__mbstate_tE2idE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__17codecvtIDiDu11__mbstate_tED0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__17codecvtIDiDu11__mbstate_tED1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__17codecvtIDiDu11__mbstate_tED2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__17codecvtIDic11__mbstate_tE2idE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__17codecvtIDic11__mbstate_tED0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__17codecvtIDic11__mbstate_tED1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__17codecvtIDic11__mbstate_tED2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__17codecvtIDsDu11__mbstate_tE2idE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__17codecvtIDsDu11__mbstate_tED0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__17codecvtIDsDu11__mbstate_tED1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__17codecvtIDsDu11__mbstate_tED2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__17codecvtIDsc11__mbstate_tE2idE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__17codecvtIDsc11__mbstate_tED0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__17codecvtIDsc11__mbstate_tED1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__17codecvtIDsc11__mbstate_tED2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__17codecvtIcc11__mbstate_tE2idE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__17codecvtIcc11__mbstate_tED0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__17codecvtIcc11__mbstate_tED1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__17codecvtIcc11__mbstate_tED2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__17codecvtIwc11__mbstate_tE2idE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__17codecvtIwc11__mbstate_tEC1EPKcm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__17codecvtIwc11__mbstate_tEC1Em', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__17codecvtIwc11__mbstate_tEC2EPKcm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__17codecvtIwc11__mbstate_tEC2Em', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__17codecvtIwc11__mbstate_tED0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__17codecvtIwc11__mbstate_tED1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__17codecvtIwc11__mbstate_tED2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__17collateIcE2idE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__17collateIcED0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__17collateIcED1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__17collateIcED2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__17collateIwE2idE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__17collateIwED0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__17collateIwED1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__17collateIwED2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE2idE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE2idE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__17num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE2idE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__17num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE2idE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__17promiseIvE10get_futureEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__17promiseIvE13set_exceptionESt13exception_ptr', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__17promiseIvE24set_value_at_thread_exitEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__17promiseIvE28set_exception_at_thread_exitESt13exception_ptr', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__17promiseIvE9set_valueEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__17promiseIvEC1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__17promiseIvEC2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__17promiseIvED1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__17promiseIvED2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18__rs_getEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18__sp_mut4lockEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18__sp_mut6unlockEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_base10floatfieldE', 'size': 4, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_base10scientificE', 'size': 4, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_base11adjustfieldE', 'size': 4, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_base15sync_with_stdioEb', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_base16__call_callbacksENS0_5eventE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_base17register_callbackEPFvNS0_5eventERS0_iEi', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_base2inE', 'size': 4, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_base33__set_badbit_and_consider_rethrowEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_base34__set_failbit_and_consider_rethrowEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_base3appE', 'size': 4, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_base3ateE', 'size': 4, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_base3decE', 'size': 4, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_base3hexE', 'size': 4, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_base3octE', 'size': 4, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_base3outE', 'size': 4, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_base4InitC1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_base4InitC2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_base4InitD1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_base4InitD2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_base4initEPv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_base4leftE', 'size': 4, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_base4moveERS0_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_base4swapERS0_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_base5clearEj', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_base5fixedE', 'size': 4, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_base5imbueERKNS_6localeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_base5iwordEi', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_base5pwordEi', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_base5rightE', 'size': 4, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_base5truncE', 'size': 4, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_base6badbitE', 'size': 4, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_base6binaryE', 'size': 4, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_base6eofbitE', 'size': 4, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_base6skipwsE', 'size': 4, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_base6xallocEv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_base7copyfmtERKS0_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_base7failbitE', 'size': 4, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_base7failureC1EPKcRKNS_10error_codeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_base7failureC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEERKNS_10error_codeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_base7failureC2EPKcRKNS_10error_codeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_base7failureC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEERKNS_10error_codeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_base7failureD0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_base7failureD1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_base7failureD2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_base7goodbitE', 'size': 4, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_base7showposE', 'size': 4, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_base7unitbufE', 'size': 4, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_base8internalE', 'size': 4, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_base8showbaseE', 'size': 4, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_base9__xindex_E', 'size': 4, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_base9basefieldE', 'size': 4, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_base9boolalphaE', 'size': 4, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_base9showpointE', 'size': 4, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_base9uppercaseE', 'size': 4, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_baseD0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_baseD1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18ios_baseD2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18messagesIcE2idE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__18messagesIwE2idE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__18numpunctIcE2idE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__18numpunctIcEC1Em', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18numpunctIcEC2Em', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18numpunctIcED0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18numpunctIcED1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18numpunctIcED2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18numpunctIwE2idE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__18numpunctIwEC1Em', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18numpunctIwEC2Em', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18numpunctIwED0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18numpunctIwED1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18numpunctIwED2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE2idE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE2idE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__18time_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE2idE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__18time_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE2idE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__18to_charsEPcS0_d', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18to_charsEPcS0_dNS_12chars_formatE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18to_charsEPcS0_dNS_12chars_formatEi', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18to_charsEPcS0_e', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18to_charsEPcS0_eNS_12chars_formatE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18to_charsEPcS0_eNS_12chars_formatEi', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18to_charsEPcS0_f', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18to_charsEPcS0_fNS_12chars_formatE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18to_charsEPcS0_fNS_12chars_formatEi', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18valarrayImE6resizeEmm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18valarrayImEC1Em', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18valarrayImEC2Em', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18valarrayImED1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__18valarrayImED2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__19__num_getIcE17__stage2_int_loopEciPcRS2_RjcRKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPjRSD_S2_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__19__num_getIcE17__stage2_int_prepERNS_8ios_baseEPcRc', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__19__num_getIcE19__stage2_float_loopEcRbRcPcRS4_ccRKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPjRSE_RjS4_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__19__num_getIcE19__stage2_float_prepERNS_8ios_baseEPcRcS5_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__19__num_getIwE17__stage2_int_loopEwiPcRS2_RjwRKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPjRSD_Pw', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__19__num_getIwE17__stage2_int_prepERNS_8ios_baseEPwRw', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__19__num_getIwE19__stage2_float_loopEwRbRcPcRS4_wwRKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPjRSE_RjPw', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__19__num_getIwE19__stage2_float_prepERNS_8ios_baseEPwRwS5_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__19__num_putIcE21__widen_and_group_intEPcS2_S2_S2_RS2_S3_RKNS_6localeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__19__num_putIcE23__widen_and_group_floatEPcS2_S2_S2_RS2_S3_RKNS_6localeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__19__num_putIwE21__widen_and_group_intEPcS2_S2_PwRS3_S4_RKNS_6localeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__19__num_putIwE23__widen_and_group_floatEPcS2_S2_PwRS3_S4_RKNS_6localeE', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__19basic_iosIcNS_11char_traitsIcEEE7copyfmtERKS3_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__19basic_iosIcNS_11char_traitsIcEEED0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__19basic_iosIcNS_11char_traitsIcEEED1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__19basic_iosIcNS_11char_traitsIcEEED2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__19basic_iosIwNS_11char_traitsIwEEE7copyfmtERKS3_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__19basic_iosIwNS_11char_traitsIwEEED0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__19basic_iosIwNS_11char_traitsIwEEED1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__19basic_iosIwNS_11char_traitsIwEEED2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__19money_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE2idE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__19money_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE8__do_getERS4_S4_bRKNS_6localeEjRjRbRKNS_5ctypeIcEERNS_10unique_ptrIcPFvPvEEERPcSM_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__19money_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE2idE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__19money_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE8__do_getERS4_S4_bRKNS_6localeEjRjRbRKNS_5ctypeIwEERNS_10unique_ptrIwPFvPvEEERPwSM_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__19money_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE2idE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__19money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE2idE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZNSt3__19strstreamD0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__19strstreamD1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__19strstreamD2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__19to_stringEd', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__19to_stringEe', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__19to_stringEf', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__19to_stringEi', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__19to_stringEj', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__19to_stringEl', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__19to_stringEm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__19to_stringEx', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__19to_stringEy', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt3__1plIcNS_11char_traitsIcEENS_9allocatorIcEEEENS_12basic_stringIT_T0_T1_EEPKS6_RKS9_', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZSt17__throw_bad_allocv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZSt17current_exceptionv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZSt17rethrow_exceptionSt13exception_ptr', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZSt18uncaught_exceptionv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZSt19uncaught_exceptionsv', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZSt7nothrow', 'size': 1, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTCNSt3__110istrstreamE0_NS_13basic_istreamIcNS_11char_traitsIcEEEE', 'size': 80, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTCNSt3__110ostrstreamE0_NS_13basic_ostreamIcNS_11char_traitsIcEEEE', 'size': 80, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTCNSt3__114basic_ifstreamIcNS_11char_traitsIcEEEE0_NS_13basic_istreamIcS2_EE', 'size': 80, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTCNSt3__114basic_iostreamIcNS_11char_traitsIcEEEE0_NS_13basic_istreamIcS2_EE', 'size': 80, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTCNSt3__114basic_iostreamIcNS_11char_traitsIcEEEE16_NS_13basic_ostreamIcS2_EE', 'size': 80, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTCNSt3__114basic_ofstreamIcNS_11char_traitsIcEEEE0_NS_13basic_ostreamIcS2_EE', 'size': 80, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTCNSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE0_NS_13basic_istreamIcS2_EE', 'size': 80, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTCNSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE0_NS_14basic_iostreamIcS2_EE', 'size': 120, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTCNSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE16_NS_13basic_ostreamIcS2_EE', 'size': 80, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTCNSt3__119basic_istringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE0_NS_13basic_istreamIcS2_EE', 'size': 80, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTCNSt3__119basic_ostringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE0_NS_13basic_ostreamIcS2_EE', 'size': 80, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTCNSt3__19strstreamE0_NS_13basic_istreamIcNS_11char_traitsIcEEEE', 'size': 80, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTCNSt3__19strstreamE0_NS_14basic_iostreamIcNS_11char_traitsIcEEEE', 'size': 120, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTCNSt3__19strstreamE16_NS_13basic_ostreamIcNS_11char_traitsIcEEEE', 'size': 80, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt12experimental15fundamentals_v112bad_any_castE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt12experimental19bad_optional_accessE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__110__time_getE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__110__time_putE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__110ctype_baseE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__110istrstreamE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__110money_baseE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__110moneypunctIcLb0EEE', 'size': 56, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__110moneypunctIcLb1EEE', 'size': 56, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__110moneypunctIwLb0EEE', 'size': 56, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__110moneypunctIwLb1EEE', 'size': 56, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__110ostrstreamE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__111__money_getIcEE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__111__money_getIwEE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__111__money_putIcEE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__111__money_putIwEE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__111regex_errorE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__112bad_weak_ptrE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__112codecvt_baseE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__112ctype_bynameIcEE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__112ctype_bynameIwEE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__112future_errorE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__112strstreambufE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__112system_errorE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__113basic_filebufIcNS_11char_traitsIcEEEE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__113basic_istreamIcNS_11char_traitsIcEEEE', 'size': 40, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__113basic_istreamIwNS_11char_traitsIwEEEE', 'size': 40, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__113basic_ostreamIcNS_11char_traitsIcEEEE', 'size': 40, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__113basic_ostreamIwNS_11char_traitsIwEEEE', 'size': 40, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__113messages_baseE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__114__codecvt_utf8IDiEE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__114__codecvt_utf8IDsEE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__114__codecvt_utf8IwEE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__114__num_get_baseE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__114__num_put_baseE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__114__shared_countE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__114basic_ifstreamIcNS_11char_traitsIcEEEE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__114basic_iostreamIcNS_11char_traitsIcEEEE', 'size': 56, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__114basic_ofstreamIcNS_11char_traitsIcEEEE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__114codecvt_bynameIDiDu11__mbstate_tEE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__114codecvt_bynameIDic11__mbstate_tEE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__114codecvt_bynameIDsDu11__mbstate_tEE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__114codecvt_bynameIDsc11__mbstate_tEE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__114codecvt_bynameIcc11__mbstate_tEE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__114codecvt_bynameIwc11__mbstate_tEE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__114collate_bynameIcEE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__114collate_bynameIwEE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__114error_categoryE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__115__codecvt_utf16IDiLb0EEE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__115__codecvt_utf16IDiLb1EEE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__115__codecvt_utf16IDsLb0EEE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__115__codecvt_utf16IDsLb1EEE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__115__codecvt_utf16IwLb0EEE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__115__codecvt_utf16IwLb1EEE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__115basic_streambufIcNS_11char_traitsIcEEEE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__115basic_streambufIwNS_11char_traitsIwEEEE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEEE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__115messages_bynameIcEE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__115messages_bynameIwEE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__115numpunct_bynameIcEE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__115numpunct_bynameIwEE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__115time_get_bynameIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEE', 'size': 56, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__115time_get_bynameIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEE', 'size': 56, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__115time_put_bynameIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__115time_put_bynameIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__116__narrow_to_utf8ILm16EEE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__116__narrow_to_utf8ILm32EEE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__117__assoc_sub_stateE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__117__widen_from_utf8ILm16EEE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__117__widen_from_utf8ILm32EEE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__117bad_function_callE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__117moneypunct_bynameIcLb0EEE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__117moneypunct_bynameIcLb1EEE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__117moneypunct_bynameIwLb0EEE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__117moneypunct_bynameIwLb1EEE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__118__time_get_storageIcEE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__118__time_get_storageIwEE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__119__shared_weak_countE', 'size': 40, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__119basic_istringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__119basic_ostringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__120__codecvt_utf8_utf16IDiEE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__120__codecvt_utf8_utf16IDsEE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__120__codecvt_utf8_utf16IwEE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__120__time_get_c_storageIcEE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__120__time_get_c_storageIwEE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__13pmr15memory_resourceE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__13pmr25monotonic_buffer_resourceE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__13pmr26__null_memory_resource_impE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__13pmr26synchronized_pool_resourceE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__13pmr28unsynchronized_pool_resourceE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__13pmr32__new_delete_memory_resource_impE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__14__fs10filesystem16filesystem_errorE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__15ctypeIcEE', 'size': 56, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__15ctypeIwEE', 'size': 56, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__16locale5facetE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__17codecvtIDiDu11__mbstate_tEE', 'size': 56, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__17codecvtIDic11__mbstate_tEE', 'size': 56, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__17codecvtIDsDu11__mbstate_tEE', 'size': 56, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__17codecvtIDsc11__mbstate_tEE', 'size': 56, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__17codecvtIcc11__mbstate_tEE', 'size': 56, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__17codecvtIwc11__mbstate_tEE', 'size': 56, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__17collateIcEE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__17collateIwEE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEE', 'size': 56, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEE', 'size': 56, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__17num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEE', 'size': 56, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__17num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEE', 'size': 56, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__18ios_base7failureE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__18ios_baseE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__18messagesIcEE', 'size': 56, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__18messagesIwEE', 'size': 56, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__18numpunctIcEE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__18numpunctIwEE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEE', 'size': 72, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEE', 'size': 72, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__18time_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEE', 'size': 56, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__18time_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEE', 'size': 56, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__19__num_getIcEE', 'size': 40, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__19__num_getIwEE', 'size': 40, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__19__num_putIcEE', 'size': 40, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__19__num_putIwEE', 'size': 40, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__19basic_iosIcNS_11char_traitsIcEEEE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__19basic_iosIwNS_11char_traitsIwEEEE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__19money_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEE', 'size': 56, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__19money_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEE', 'size': 56, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__19money_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEE', 'size': 56, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__19money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEE', 'size': 56, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__19strstreamE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTINSt3__19time_baseE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTISt12bad_any_cast', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTISt16nested_exception', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTISt18bad_variant_access', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTISt19bad_optional_access', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt12experimental15fundamentals_v112bad_any_castE', 'size': 50, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt12experimental19bad_optional_accessE', 'size': 40, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__110__time_getE', 'size': 21, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__110__time_putE', 'size': 21, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__110ctype_baseE', 'size': 21, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__110istrstreamE', 'size': 21, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__110money_baseE', 'size': 21, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__110moneypunctIcLb0EEE', 'size': 28, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__110moneypunctIcLb1EEE', 'size': 28, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__110moneypunctIwLb0EEE', 'size': 28, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__110moneypunctIwLb1EEE', 'size': 28, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__110ostrstreamE', 'size': 21, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__111__money_getIcEE', 'size': 25, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__111__money_getIwEE', 'size': 25, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__111__money_putIcEE', 'size': 25, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__111__money_putIwEE', 'size': 25, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__111regex_errorE', 'size': 22, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__112bad_weak_ptrE', 'size': 23, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__112codecvt_baseE', 'size': 23, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__112ctype_bynameIcEE', 'size': 26, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__112ctype_bynameIwEE', 'size': 26, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__112future_errorE', 'size': 23, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__112strstreambufE', 'size': 23, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__112system_errorE', 'size': 23, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__113basic_filebufIcNS_11char_traitsIcEEEE', 'size': 47, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__113basic_istreamIcNS_11char_traitsIcEEEE', 'size': 47, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__113basic_istreamIwNS_11char_traitsIwEEEE', 'size': 47, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__113basic_ostreamIcNS_11char_traitsIcEEEE', 'size': 47, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__113basic_ostreamIwNS_11char_traitsIwEEEE', 'size': 47, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__113messages_baseE', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__114__codecvt_utf8IDiEE', 'size': 29, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__114__codecvt_utf8IDsEE', 'size': 29, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__114__codecvt_utf8IwEE', 'size': 28, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__114__num_get_baseE', 'size': 25, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__114__num_put_baseE', 'size': 25, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__114__shared_countE', 'size': 25, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__114basic_ifstreamIcNS_11char_traitsIcEEEE', 'size': 48, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__114basic_iostreamIcNS_11char_traitsIcEEEE', 'size': 48, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__114basic_ofstreamIcNS_11char_traitsIcEEEE', 'size': 48, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__114codecvt_bynameIDiDu11__mbstate_tEE', 'size': 44, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__114codecvt_bynameIDic11__mbstate_tEE', 'size': 43, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__114codecvt_bynameIDsDu11__mbstate_tEE', 'size': 44, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__114codecvt_bynameIDsc11__mbstate_tEE', 'size': 43, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__114codecvt_bynameIcc11__mbstate_tEE', 'size': 42, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__114codecvt_bynameIwc11__mbstate_tEE', 'size': 42, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__114collate_bynameIcEE', 'size': 28, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__114collate_bynameIwEE', 'size': 28, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__114error_categoryE', 'size': 25, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__115__codecvt_utf16IDiLb0EEE', 'size': 34, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__115__codecvt_utf16IDiLb1EEE', 'size': 34, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__115__codecvt_utf16IDsLb0EEE', 'size': 34, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__115__codecvt_utf16IDsLb1EEE', 'size': 34, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__115__codecvt_utf16IwLb0EEE', 'size': 33, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__115__codecvt_utf16IwLb1EEE', 'size': 33, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__115basic_streambufIcNS_11char_traitsIcEEEE', 'size': 49, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__115basic_streambufIwNS_11char_traitsIwEEEE', 'size': 49, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEEE', 'size': 66, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__115messages_bynameIcEE', 'size': 29, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__115messages_bynameIwEE', 'size': 29, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__115numpunct_bynameIcEE', 'size': 29, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__115numpunct_bynameIwEE', 'size': 29, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__115time_get_bynameIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEE', 'size': 77, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__115time_get_bynameIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEE', 'size': 77, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__115time_put_bynameIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEE', 'size': 77, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__115time_put_bynameIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEE', 'size': 77, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__116__narrow_to_utf8ILm16EEE', 'size': 34, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__116__narrow_to_utf8ILm32EEE', 'size': 34, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__117__assoc_sub_stateE', 'size': 28, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__117__widen_from_utf8ILm16EEE', 'size': 35, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__117__widen_from_utf8ILm32EEE', 'size': 35, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__117bad_function_callE', 'size': 28, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__117moneypunct_bynameIcLb0EEE', 'size': 35, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__117moneypunct_bynameIcLb1EEE', 'size': 35, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__117moneypunct_bynameIwLb0EEE', 'size': 35, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__117moneypunct_bynameIwLb1EEE', 'size': 35, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__118__time_get_storageIcEE', 'size': 32, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__118__time_get_storageIwEE', 'size': 32, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE', 'size': 69, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__119__shared_weak_countE', 'size': 30, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__119basic_istringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE', 'size': 70, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__119basic_ostringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE', 'size': 70, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__120__codecvt_utf8_utf16IDiEE', 'size': 35, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__120__codecvt_utf8_utf16IDsEE', 'size': 35, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__120__codecvt_utf8_utf16IwEE', 'size': 34, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__120__time_get_c_storageIcEE', 'size': 34, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__120__time_get_c_storageIwEE', 'size': 34, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__13pmr15memory_resourceE', 'size': 30, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__13pmr25monotonic_buffer_resourceE', 'size': 40, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__13pmr26__null_memory_resource_impE', 'size': 41, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__13pmr26synchronized_pool_resourceE', 'size': 41, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__13pmr28unsynchronized_pool_resourceE', 'size': 43, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__13pmr32__new_delete_memory_resource_impE', 'size': 47, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__14__fs10filesystem16filesystem_errorE', 'size': 44, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__15ctypeIcEE', 'size': 18, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__15ctypeIwEE', 'size': 18, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__16locale5facetE', 'size': 22, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__17codecvtIDiDu11__mbstate_tEE', 'size': 36, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__17codecvtIDic11__mbstate_tEE', 'size': 35, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__17codecvtIDsDu11__mbstate_tEE', 'size': 36, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__17codecvtIDsc11__mbstate_tEE', 'size': 35, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__17codecvtIcc11__mbstate_tEE', 'size': 34, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__17codecvtIwc11__mbstate_tEE', 'size': 34, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__17collateIcEE', 'size': 20, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__17collateIwEE', 'size': 20, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEE', 'size': 68, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEE', 'size': 68, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__17num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEE', 'size': 68, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__17num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEE', 'size': 68, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__18ios_base7failureE', 'size': 26, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__18ios_baseE', 'size': 18, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__18messagesIcEE', 'size': 21, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__18messagesIwEE', 'size': 21, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__18numpunctIcEE', 'size': 21, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__18numpunctIwEE', 'size': 21, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEE', 'size': 69, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEE', 'size': 69, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__18time_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEE', 'size': 69, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__18time_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEE', 'size': 69, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__19__num_getIcEE', 'size': 22, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__19__num_getIwEE', 'size': 22, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__19__num_putIcEE', 'size': 22, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__19__num_putIwEE', 'size': 22, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__19basic_iosIcNS_11char_traitsIcEEEE', 'size': 42, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__19basic_iosIwNS_11char_traitsIwEEEE', 'size': 42, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__19money_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEE', 'size': 70, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__19money_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEE', 'size': 70, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__19money_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEE', 'size': 70, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__19money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEE', 'size': 70, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__19strstreamE', 'size': 19, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSNSt3__19time_baseE', 'size': 19, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSSt12bad_any_cast', 'size': 17, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSSt16nested_exception', 'size': 21, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSSt18bad_variant_access', 'size': 23, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTSSt19bad_optional_access', 'size': 24, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTTNSt3__110istrstreamE', 'size': 32, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTTNSt3__110ostrstreamE', 'size': 32, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTTNSt3__113basic_istreamIcNS_11char_traitsIcEEEE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTTNSt3__113basic_istreamIwNS_11char_traitsIwEEEE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTTNSt3__113basic_ostreamIcNS_11char_traitsIcEEEE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTTNSt3__113basic_ostreamIwNS_11char_traitsIwEEEE', 'size': 16, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTTNSt3__114basic_ifstreamIcNS_11char_traitsIcEEEE', 'size': 32, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTTNSt3__114basic_iostreamIcNS_11char_traitsIcEEEE', 'size': 56, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTTNSt3__114basic_ofstreamIcNS_11char_traitsIcEEEE', 'size': 32, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTTNSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE', 'size': 80, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTTNSt3__119basic_istringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE', 'size': 32, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTTNSt3__119basic_ostringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE', 'size': 32, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTTNSt3__19strstreamE', 'size': 80, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt12experimental15fundamentals_v112bad_any_castE', 'size': 40, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt12experimental19bad_optional_accessE', 'size': 40, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__110istrstreamE', 'size': 80, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__110moneypunctIcLb0EEE', 'size': 112, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__110moneypunctIcLb1EEE', 'size': 112, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__110moneypunctIwLb0EEE', 'size': 112, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__110moneypunctIwLb1EEE', 'size': 112, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__110ostrstreamE', 'size': 80, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__111regex_errorE', 'size': 40, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__112bad_weak_ptrE', 'size': 40, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__112ctype_bynameIcEE', 'size': 104, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__112ctype_bynameIwEE', 'size': 136, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__112future_errorE', 'size': 40, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__112strstreambufE', 'size': 128, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__112system_errorE', 'size': 40, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__113basic_filebufIcNS_11char_traitsIcEEEE', 'size': 128, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__113basic_istreamIcNS_11char_traitsIcEEEE', 'size': 80, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__113basic_istreamIwNS_11char_traitsIwEEEE', 'size': 80, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__113basic_ostreamIcNS_11char_traitsIcEEEE', 'size': 80, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__113basic_ostreamIwNS_11char_traitsIwEEEE', 'size': 80, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__114__codecvt_utf8IDiEE', 'size': 96, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__114__codecvt_utf8IDsEE', 'size': 96, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__114__codecvt_utf8IwEE', 'size': 96, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__114__shared_countE', 'size': 40, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__114basic_ifstreamIcNS_11char_traitsIcEEEE', 'size': 80, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__114basic_iostreamIcNS_11char_traitsIcEEEE', 'size': 120, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__114basic_ofstreamIcNS_11char_traitsIcEEEE', 'size': 80, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__114codecvt_bynameIDiDu11__mbstate_tEE', 'size': 96, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__114codecvt_bynameIDic11__mbstate_tEE', 'size': 96, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__114codecvt_bynameIDsDu11__mbstate_tEE', 'size': 96, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__114codecvt_bynameIDsc11__mbstate_tEE', 'size': 96, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__114codecvt_bynameIcc11__mbstate_tEE', 'size': 96, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__114codecvt_bynameIwc11__mbstate_tEE', 'size': 96, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__114collate_bynameIcEE', 'size': 64, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__114collate_bynameIwEE', 'size': 64, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__114error_categoryE', 'size': 72, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__115__codecvt_utf16IDiLb0EEE', 'size': 96, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__115__codecvt_utf16IDiLb1EEE', 'size': 96, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__115__codecvt_utf16IDsLb0EEE', 'size': 96, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__115__codecvt_utf16IDsLb1EEE', 'size': 96, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__115__codecvt_utf16IwLb0EEE', 'size': 96, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__115__codecvt_utf16IwLb1EEE', 'size': 96, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__115basic_streambufIcNS_11char_traitsIcEEEE', 'size': 128, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__115basic_streambufIwNS_11char_traitsIwEEEE', 'size': 128, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEEE', 'size': 128, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__115messages_bynameIcEE', 'size': 64, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__115messages_bynameIwEE', 'size': 64, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__115numpunct_bynameIcEE', 'size': 80, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__115numpunct_bynameIwEE', 'size': 80, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__115time_get_bynameIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEE', 'size': 224, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__115time_get_bynameIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEE', 'size': 224, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__115time_put_bynameIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEE', 'size': 48, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__115time_put_bynameIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEE', 'size': 48, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__116__narrow_to_utf8ILm16EEE', 'size': 96, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__116__narrow_to_utf8ILm32EEE', 'size': 96, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__117__assoc_sub_stateE', 'size': 48, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__117__widen_from_utf8ILm16EEE', 'size': 96, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__117__widen_from_utf8ILm32EEE', 'size': 96, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__117bad_function_callE', 'size': 40, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__117moneypunct_bynameIcLb0EEE', 'size': 112, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__117moneypunct_bynameIcLb1EEE', 'size': 112, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__117moneypunct_bynameIwLb0EEE', 'size': 112, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__117moneypunct_bynameIwLb1EEE', 'size': 112, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE', 'size': 120, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__119__shared_weak_countE', 'size': 56, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__119basic_istringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE', 'size': 80, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__119basic_ostringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE', 'size': 80, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__120__codecvt_utf8_utf16IDiEE', 'size': 96, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__120__codecvt_utf8_utf16IDsEE', 'size': 96, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__120__codecvt_utf8_utf16IwEE', 'size': 96, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__13pmr15memory_resourceE', 'size': 56, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__13pmr25monotonic_buffer_resourceE', 'size': 56, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__13pmr26__null_memory_resource_impE', 'size': 56, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__13pmr26synchronized_pool_resourceE', 'size': 56, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__13pmr28unsynchronized_pool_resourceE', 'size': 56, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__13pmr32__new_delete_memory_resource_impE', 'size': 56, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__14__fs10filesystem16filesystem_errorE', 'size': 40, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__15ctypeIcEE', 'size': 104, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__15ctypeIwEE', 'size': 136, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__16locale5facetE', 'size': 40, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__17codecvtIDiDu11__mbstate_tEE', 'size': 96, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__17codecvtIDic11__mbstate_tEE', 'size': 96, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__17codecvtIDsDu11__mbstate_tEE', 'size': 96, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__17codecvtIDsc11__mbstate_tEE', 'size': 96, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__17codecvtIcc11__mbstate_tEE', 'size': 96, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__17codecvtIwc11__mbstate_tEE', 'size': 96, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__17collateIcEE', 'size': 64, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__17collateIwEE', 'size': 64, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEE', 'size': 128, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEE', 'size': 128, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__17num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEE', 'size': 104, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__17num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEE', 'size': 104, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__18ios_base7failureE', 'size': 40, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__18ios_baseE', 'size': 32, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__18messagesIcEE', 'size': 64, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__18messagesIwEE', 'size': 64, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__18numpunctIcEE', 'size': 80, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__18numpunctIwEE', 'size': 80, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEE', 'size': 168, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEE', 'size': 168, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__18time_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEE', 'size': 48, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__18time_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEE', 'size': 48, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__19basic_iosIcNS_11char_traitsIcEEEE', 'size': 32, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__19basic_iosIwNS_11char_traitsIwEEEE', 'size': 32, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__19money_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEE', 'size': 56, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__19money_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEE', 'size': 56, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__19money_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEE', 'size': 56, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__19money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEE', 'size': 56, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVNSt3__19strstreamE', 'size': 120, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVSt12bad_any_cast', 'size': 40, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVSt16nested_exception', 'size': 32, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVSt18bad_variant_access', 'size': 40, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZTVSt19bad_optional_access', 'size': 40, 'type': 'OBJECT'}
-{'is_defined': True, 'name': '_ZThn16_NSt3__114basic_iostreamIcNS_11char_traitsIcEEED0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZThn16_NSt3__114basic_iostreamIcNS_11char_traitsIcEEED1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZThn16_NSt3__19strstreamD0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZThn16_NSt3__19strstreamD1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZTv0_n24_NSt3__110istrstreamD0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZTv0_n24_NSt3__110istrstreamD1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZTv0_n24_NSt3__110ostrstreamD0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZTv0_n24_NSt3__110ostrstreamD1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZTv0_n24_NSt3__113basic_istreamIcNS_11char_traitsIcEEED0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZTv0_n24_NSt3__113basic_istreamIcNS_11char_traitsIcEEED1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZTv0_n24_NSt3__113basic_istreamIwNS_11char_traitsIwEEED0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZTv0_n24_NSt3__113basic_istreamIwNS_11char_traitsIwEEED1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZTv0_n24_NSt3__113basic_ostreamIcNS_11char_traitsIcEEED0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZTv0_n24_NSt3__113basic_ostreamIcNS_11char_traitsIcEEED1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZTv0_n24_NSt3__113basic_ostreamIwNS_11char_traitsIwEEED0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZTv0_n24_NSt3__113basic_ostreamIwNS_11char_traitsIwEEED1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZTv0_n24_NSt3__114basic_iostreamIcNS_11char_traitsIcEEED0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZTv0_n24_NSt3__114basic_iostreamIcNS_11char_traitsIcEEED1Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZTv0_n24_NSt3__19strstreamD0Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZTv0_n24_NSt3__19strstreamD1Ev', 'type': 'FUNC'}
\ No newline at end of file

>From 6ccc6b96d7014f9a48704d40c5bc7f493a9d5e43 Mon Sep 17 00:00:00 2001
From: Hristo Hristov <hghristov.rmm at gmail.com>
Date: Tue, 19 Mar 2024 10:14:51 +0200
Subject: [PATCH 38/40] Updated ANDROID ABI

---
 ...nux-android21.libcxxabi.v1.stable.exceptions.nonew.abilist | 4 ++--
 ...nux-android21.libcxxabi.v1.stable.exceptions.nonew.abilist | 4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/libcxx/lib/abi/i686-linux-android21.libcxxabi.v1.stable.exceptions.nonew.abilist b/libcxx/lib/abi/i686-linux-android21.libcxxabi.v1.stable.exceptions.nonew.abilist
index 107cde79fb7cd8..72d92561d14bae 100644
--- a/libcxx/lib/abi/i686-linux-android21.libcxxabi.v1.stable.exceptions.nonew.abilist
+++ b/libcxx/lib/abi/i686-linux-android21.libcxxabi.v1.stable.exceptions.nonew.abilist
@@ -543,7 +543,6 @@
 {'is_defined': True, 'name': '_ZNSt6__ndk110__time_putC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk110__time_putD1Ev', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk110__time_putD2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt6__ndk110__breakpointEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk110ctype_base5alnumE', 'size': 4, 'type': 'OBJECT'}
 {'is_defined': True, 'name': '_ZNSt6__ndk110ctype_base5alphaE', 'size': 4, 'type': 'OBJECT'}
 {'is_defined': True, 'name': '_ZNSt6__ndk110ctype_base5blankE', 'size': 4, 'type': 'OBJECT'}
@@ -599,6 +598,7 @@
 {'is_defined': True, 'name': '_ZNSt6__ndk111timed_mutexC2Ev', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk111timed_mutexD1Ev', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk111timed_mutexD2Ev', 'type': 'FUNC'}
+{'is_defined': True, 'name': '_ZNSt6__ndk112__breakpointEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk112__do_nothingEPv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk112__get_sp_mutEPKv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk112__next_primeEj', 'type': 'FUNC'}
@@ -1198,11 +1198,11 @@
 {'is_defined': True, 'name': '_ZNSt6__ndk119basic_istringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEOS5_', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk119basic_ostringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEOS5_', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk119declare_no_pointersEPcj', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt6__ndk119__is_debugger_presentEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk120__get_collation_nameEPKc', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk120__libcpp_atomic_waitEPVKNS_17__cxx_atomic_implIiNS_22__cxx_atomic_base_implIiEEEEi', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk120__libcpp_atomic_waitEPVKvi', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk120__throw_system_errorEiPKc', 'type': 'FUNC'}
+{'is_defined': True, 'name': '_ZNSt6__ndk121__is_debugger_presentEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk121__throw_runtime_errorEPKc', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk121__undeclare_reachableEPv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk121recursive_timed_mutex4lockEv', 'type': 'FUNC'}
diff --git a/libcxx/lib/abi/x86_64-linux-android21.libcxxabi.v1.stable.exceptions.nonew.abilist b/libcxx/lib/abi/x86_64-linux-android21.libcxxabi.v1.stable.exceptions.nonew.abilist
index 8a353246d2a2dd..dfea2654a20847 100644
--- a/libcxx/lib/abi/x86_64-linux-android21.libcxxabi.v1.stable.exceptions.nonew.abilist
+++ b/libcxx/lib/abi/x86_64-linux-android21.libcxxabi.v1.stable.exceptions.nonew.abilist
@@ -543,7 +543,6 @@
 {'is_defined': True, 'name': '_ZNSt6__ndk110__time_putC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk110__time_putD1Ev', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk110__time_putD2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt6__ndk110__breakpointEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk110ctype_base5alnumE', 'size': 8, 'type': 'OBJECT'}
 {'is_defined': True, 'name': '_ZNSt6__ndk110ctype_base5alphaE', 'size': 8, 'type': 'OBJECT'}
 {'is_defined': True, 'name': '_ZNSt6__ndk110ctype_base5blankE', 'size': 8, 'type': 'OBJECT'}
@@ -599,6 +598,7 @@
 {'is_defined': True, 'name': '_ZNSt6__ndk111timed_mutexC2Ev', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk111timed_mutexD1Ev', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk111timed_mutexD2Ev', 'type': 'FUNC'}
+{'is_defined': True, 'name': '_ZNSt6__ndk112__breakpointEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk112__do_nothingEPv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk112__get_sp_mutEPKv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk112__next_primeEm', 'type': 'FUNC'}
@@ -1198,11 +1198,11 @@
 {'is_defined': True, 'name': '_ZNSt6__ndk119basic_istringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEOS5_', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk119basic_ostringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEOS5_', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk119declare_no_pointersEPcm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '_ZNSt6__ndk119__is_debugger_presentEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk120__get_collation_nameEPKc', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk120__libcpp_atomic_waitEPVKNS_17__cxx_atomic_implIiNS_22__cxx_atomic_base_implIiEEEEi', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk120__libcpp_atomic_waitEPVKvi', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk120__throw_system_errorEiPKc', 'type': 'FUNC'}
+{'is_defined': True, 'name': '_ZNSt6__ndk121__is_debugger_presentEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk121__throw_runtime_errorEPKc', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk121__undeclare_reachableEPv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '_ZNSt6__ndk121recursive_timed_mutex4lockEv', 'type': 'FUNC'}

>From 75849e6fd8b209ce7c3c737cd6c179a147354ded Mon Sep 17 00:00:00 2001
From: Hristo Hristov <hghristov.rmm at gmail.com>
Date: Tue, 19 Mar 2024 10:17:40 +0200
Subject: [PATCH 39/40] Updated Apple ABI

---
 ...-apple-darwin.libcxxabi.v1.stable.exceptions.nonew.abilist | 4 ++--
 ...-apple-darwin.libcxxabi.v1.stable.exceptions.nonew.abilist | 4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/libcxx/lib/abi/arm64-apple-darwin.libcxxabi.v1.stable.exceptions.nonew.abilist b/libcxx/lib/abi/arm64-apple-darwin.libcxxabi.v1.stable.exceptions.nonew.abilist
index 9c2b12a2ea1701..42f5683ad94a6d 100644
--- a/libcxx/lib/abi/arm64-apple-darwin.libcxxabi.v1.stable.exceptions.nonew.abilist
+++ b/libcxx/lib/abi/arm64-apple-darwin.libcxxabi.v1.stable.exceptions.nonew.abilist
@@ -909,7 +909,6 @@
 {'is_defined': True, 'name': '__ZNSt3__110__time_putC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__110__time_putD1Ev', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__110__time_putD2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '__ZNSt3__110__breakpointEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__110ctype_base5alnumE', 'size': 0, 'type': 'OBJECT'}
 {'is_defined': True, 'name': '__ZNSt3__110ctype_base5alphaE', 'size': 0, 'type': 'OBJECT'}
 {'is_defined': True, 'name': '__ZNSt3__110ctype_base5blankE', 'size': 0, 'type': 'OBJECT'}
@@ -965,6 +964,7 @@
 {'is_defined': True, 'name': '__ZNSt3__111timed_mutexC2Ev', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__111timed_mutexD1Ev', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__111timed_mutexD2Ev', 'type': 'FUNC'}
+{'is_defined': True, 'name': '__ZNSt3__112__breakpointEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__112__do_nothingEPv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__112__get_sp_mutEPKv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__112__next_primeEm', 'type': 'FUNC'}
@@ -1564,11 +1564,11 @@
 {'is_defined': True, 'name': '__ZNSt3__119basic_istringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEOS5_', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__119basic_ostringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEOS5_', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__119declare_no_pointersEPcm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '__ZNSt3__119__is_debugger_presentEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__120__get_collation_nameEPKc', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__120__libcpp_atomic_waitEPVKNS_17__cxx_atomic_implIxNS_22__cxx_atomic_base_implIxEEEEx', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__120__libcpp_atomic_waitEPVKvx', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__120__throw_system_errorEiPKc', 'type': 'FUNC'}
+{'is_defined': True, 'name': '__ZNSt3__121__is_debugger_presentEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__121__throw_runtime_errorEPKc', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__121__undeclare_reachableEPv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__121recursive_timed_mutex4lockEv', 'type': 'FUNC'}
diff --git a/libcxx/lib/abi/x86_64-apple-darwin.libcxxabi.v1.stable.exceptions.nonew.abilist b/libcxx/lib/abi/x86_64-apple-darwin.libcxxabi.v1.stable.exceptions.nonew.abilist
index dec501a6c7dc68..79379e82c75f7f 100644
--- a/libcxx/lib/abi/x86_64-apple-darwin.libcxxabi.v1.stable.exceptions.nonew.abilist
+++ b/libcxx/lib/abi/x86_64-apple-darwin.libcxxabi.v1.stable.exceptions.nonew.abilist
@@ -909,7 +909,6 @@
 {'is_defined': True, 'name': '__ZNSt3__110__time_putC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__110__time_putD1Ev', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__110__time_putD2Ev', 'type': 'FUNC'}
-{'is_defined': True, 'name': '__ZNSt3__110__breakpointEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__110ctype_base5alnumE', 'size': 0, 'type': 'OBJECT'}
 {'is_defined': True, 'name': '__ZNSt3__110ctype_base5alphaE', 'size': 0, 'type': 'OBJECT'}
 {'is_defined': True, 'name': '__ZNSt3__110ctype_base5blankE', 'size': 0, 'type': 'OBJECT'}
@@ -965,6 +964,7 @@
 {'is_defined': True, 'name': '__ZNSt3__111timed_mutexC2Ev', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__111timed_mutexD1Ev', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__111timed_mutexD2Ev', 'type': 'FUNC'}
+{'is_defined': True, 'name': '__ZNSt3__112__breakpointEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__112__do_nothingEPv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__112__get_sp_mutEPKv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__112__next_primeEm', 'type': 'FUNC'}
@@ -1564,11 +1564,11 @@
 {'is_defined': True, 'name': '__ZNSt3__119basic_istringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEOS5_', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__119basic_ostringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEOS5_', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__119declare_no_pointersEPcm', 'type': 'FUNC'}
-{'is_defined': True, 'name': '__ZNSt3__119__is_debugger_presentEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__120__get_collation_nameEPKc', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__120__libcpp_atomic_waitEPVKNS_17__cxx_atomic_implIxNS_22__cxx_atomic_base_implIxEEEEx', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__120__libcpp_atomic_waitEPVKvx', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__120__throw_system_errorEiPKc', 'type': 'FUNC'}
+{'is_defined': True, 'name': '__ZNSt3__121__is_debugger_presentEv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__121__throw_runtime_errorEPKc', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__121__undeclare_reachableEPv', 'type': 'FUNC'}
 {'is_defined': True, 'name': '__ZNSt3__121recursive_timed_mutex4lockEv', 'type': 'FUNC'}

>From f4eef33ea7609c7288479523d3a1a238e85bd59d Mon Sep 17 00:00:00 2001
From: Hristo Hristov <hghristov.rmm at gmail.com>
Date: Tue, 19 Mar 2024 10:43:12 +0200
Subject: [PATCH 40/40] Fixed double include

---
 libcxx/include/debugging | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/libcxx/include/debugging b/libcxx/include/debugging
index 45d4ec7adae95c..f729d14479b2b6 100644
--- a/libcxx/include/debugging
+++ b/libcxx/include/debugging
@@ -35,14 +35,14 @@ _LIBCPP_EXPORTED_FROM_ABI void __breakpoint() noexcept;
 
 _LIBCPP_EXPORTED_FROM_ABI bool __is_debugger_present() noexcept;
 
-_LIBCPP_AVAILABILITY_DEBUGGING _LIBCPP_HIDE_FROM_ABI void breakpoint() noexcept { __breakpoint(); }
+_LIBCPP_AVAILABILITY_DEBUGGING _LIBCPP_HIDE_FROM_ABI inline void breakpoint() noexcept { __breakpoint(); }
 
-_LIBCPP_AVAILABILITY_DEBUGGING _LIBCPP_HIDE_FROM_ABI void breakpoint_if_debugging() noexcept {
+_LIBCPP_AVAILABILITY_DEBUGGING _LIBCPP_HIDE_FROM_ABI inline void breakpoint_if_debugging() noexcept {
   if (__is_debugger_present())
     __breakpoint();
 }
 
-_LIBCPP_AVAILABILITY_DEBUGGING _LIBCPP_HIDE_FROM_ABI bool is_debugger_present() noexcept {
+_LIBCPP_AVAILABILITY_DEBUGGING _LIBCPP_HIDE_FROM_ABI inline bool is_debugger_present() noexcept {
   return __is_debugger_present();
 }
 



More information about the libcxx-commits mailing list