diff options
Diffstat (limited to 'libstdc++-v3')
-rw-r--r-- | libstdc++-v3/ChangeLog | 30 | ||||
-rwxr-xr-x | libstdc++-v3/configure | 44 | ||||
-rw-r--r-- | libstdc++-v3/configure.ac | 21 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/chrono.h | 8 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/this_thread_sleep.h | 1 | ||||
-rw-r--r-- | libstdc++-v3/include/std/stacktrace | 14 | ||||
-rw-r--r-- | libstdc++-v3/python/libstdcxx/v6/printers.py | 37 |
7 files changed, 150 insertions, 5 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index c216147..0449198 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,33 @@ +2025-10-15 Jonathan Wakely <jwakely@redhat.com> + + * python/libstdcxx/v6/printers.py (StdStacktraceEntryPrinter): + New printer for std::stacktrace_entry. + (StdStacktracePrinter): New printer for std::basic_stacktrace. + +2025-10-15 Jonathan Wakely <jwakely@redhat.com> + + * include/std/stacktrace (basic_stacktrace::current): Call + _M_trim before returning. + (basic_stacktrace::_M_trim): New member function. + +2025-10-15 Jonathan Wakely <jwakely@redhat.com> + + PR libstdc++/122293 + * include/bits/chrono.h (__to_timeout_timespec): Fix + preprocessor condition to match the conditions under which + callers of this function are defined. + * include/bits/this_thread_sleep.h: Remove unused include. + +2025-10-15 Chris Johns <chrisj@rtems.org> + + * configure: Regenerate. + * configure.ac (newlib, *-rtems*): Add HAVE_SYS_IOCTL_H, + HAVE_SYS_STAT_H, HAVE_SYS_TYPES_H, HAVE_S_ISREG, HAVE_UNISTD_H, + HAVE_UNLINKAT, _GLIBCXX_USE_CHMOD, _GLIBCXX_USE_MKDIR, + _GLIBCXX_USE_CHDIR, _GLIBCXX_USE_GETCWD, _GLIBCXX_USE_UTIME, + _GLIBCXX_USE_LINK, _GLIBCXX_USE_READLINK, _GLIBCXX_USE_SYMLINK, + _GLIBCXX_USE_TRUNCATE and _GLIBCXX_USE_FDOPENDIR. + 2025-10-14 Mike Crowe <mac@mcrowe.com> PR libstdc++/116586 diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure index 86ec969..42b638f 100755 --- a/libstdc++-v3/configure +++ b/libstdc++-v3/configure @@ -28744,6 +28744,14 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext $as_echo "#define HAVE_LINK 1" >>confdefs.h + $as_echo "#define HAVE_SYS_IOCT4YL_H 1" >>confdefs.h + + $as_echo "#define HAVE_SYS_STAT_H 1" >>confdefs.h + + $as_echo "#define HAVE_SYS_TYPES_H 1" >>confdefs.h + + $as_echo "#define HAVE_S_ISREG 1" >>confdefs.h + $as_echo "#define HAVE_QUICK_EXIT 1" >>confdefs.h $as_echo "#define HAVE_READLINK 1" >>confdefs.h @@ -28758,8 +28766,42 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext $as_echo "#define HAVE_SYMLINK 1" >>confdefs.h + $as_echo "#define HAVE_SYS_IOCT4YL_H 1" >>confdefs.h + + $as_echo "#define HAVE_SYS_STAT_H 1" >>confdefs.h + + $as_echo "#define HAVE_SYS_TYPES_H 1" >>confdefs.h + + $as_echo "#define HAVE_S_ISREG 1" >>confdefs.h + $as_echo "#define HAVE_TRUNCATE 1" >>confdefs.h + $as_echo "#define HAVE_UNISTD_H 1" >>confdefs.h + + $as_echo "#define HAVE_UNLINKAT 1" >>confdefs.h + + $as_echo "#define HAVE_USLEEP 1" >>confdefs.h + + $as_echo "#define _GLIBCXX_USE_CHMOD 1" >>confdefs.h + + $as_echo "#define _GLIBCXX_USE_MKDIR 1" >>confdefs.h + + $as_echo "#define _GLIBCXX_USE_CHDIR 1" >>confdefs.h + + $as_echo "#define _GLIBCXX_USE_GETCWD 1" >>confdefs.h + + $as_echo "#define _GLIBCXX_USE_UTIME 1" >>confdefs.h + + $as_echo "#define _GLIBCXX_USE_LINK 1" >>confdefs.h + + $as_echo "#define _GLIBCXX_USE_READLINK 1" >>confdefs.h + + $as_echo "#define _GLIBCXX_USE_SYMLINK 1" >>confdefs.h + + $as_echo "#define _GLIBCXX_USE_TRUNCATE 1" >>confdefs.h + + $as_echo "#define _GLIBCXX_USE_FDOPENDIR 1" >>confdefs.h + $as_echo "#define HAVE_USLEEP 1" >>confdefs.h @@ -53919,7 +53961,7 @@ $as_echo "$glibcxx_cv_libbacktrace_atomics" >&6; } CXXFLAGS='-O0 -S' cat > conftest.$ac_ext << EOF -#line 53922 "configure" +#line 53964 "configure" #include <stddef.h> int main() { diff --git a/libstdc++-v3/configure.ac b/libstdc++-v3/configure.ac index 47813eb..b9d49c3 100644 --- a/libstdc++-v3/configure.ac +++ b/libstdc++-v3/configure.ac @@ -399,6 +399,10 @@ dnl # rather than hardcoding that information. AC_DEFINE(HAVE_ALIGNED_ALLOC) AC_DEFINE(HAVE_AT_QUICK_EXIT) AC_DEFINE(HAVE_LINK) + AC_DEFINE(HAVE_SYS_IOCT4YL_H) + AC_DEFINE(HAVE_SYS_STAT_H) + AC_DEFINE(HAVE_SYS_TYPES_H) + AC_DEFINE(HAVE_S_ISREG) AC_DEFINE(HAVE_QUICK_EXIT) AC_DEFINE(HAVE_READLINK) AC_DEFINE(HAVE_SETENV) @@ -406,7 +410,24 @@ dnl # rather than hardcoding that information. AC_DEFINE(HAVE_SOCKATMARK) AC_DEFINE(HAVE_STRERROR_L) AC_DEFINE(HAVE_SYMLINK) + AC_DEFINE(HAVE_SYS_IOCT4YL_H) + AC_DEFINE(HAVE_SYS_STAT_H) + AC_DEFINE(HAVE_SYS_TYPES_H) + AC_DEFINE(HAVE_S_ISREG) AC_DEFINE(HAVE_TRUNCATE) + AC_DEFINE(HAVE_UNISTD_H) + AC_DEFINE(HAVE_UNLINKAT) + AC_DEFINE(HAVE_USLEEP) + AC_DEFINE(_GLIBCXX_USE_CHMOD) + AC_DEFINE(_GLIBCXX_USE_MKDIR) + AC_DEFINE(_GLIBCXX_USE_CHDIR) + AC_DEFINE(_GLIBCXX_USE_GETCWD) + AC_DEFINE(_GLIBCXX_USE_UTIME) + AC_DEFINE(_GLIBCXX_USE_LINK) + AC_DEFINE(_GLIBCXX_USE_READLINK) + AC_DEFINE(_GLIBCXX_USE_SYMLINK) + AC_DEFINE(_GLIBCXX_USE_TRUNCATE) + AC_DEFINE(_GLIBCXX_USE_FDOPENDIR) AC_DEFINE(HAVE_USLEEP) # These functions are defined in librtemscpu. We don't use diff --git a/libstdc++-v3/include/bits/chrono.h b/libstdc++-v3/include/bits/chrono.h index 7f505aa..4dc3998 100644 --- a/libstdc++-v3/include/bits/chrono.h +++ b/libstdc++-v3/include/bits/chrono.h @@ -1515,8 +1515,9 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) } // namespace filesystem #endif // C++17 && HOSTED -#if defined _GLIBCXX_USE_NANOSLEEP || defined _GLIBCXX_USE_CLOCK_REALTIME \ - || defined _GLIBCXX_HAS_GTHREADS +#if _GLIBCXX_HOSTED +#if ! defined _GLIBCXX_NO_SLEEP || defined _GLIBCXX_HAS_GTHREADS \ + || _GLIBCXX_HAVE_LINUX_FUTEX namespace chrono { /// @cond undocumented @@ -1585,7 +1586,8 @@ namespace chrono /// @endcond } // namespace chrono -#endif // USE_NANOSLEEP || USE_CLOCK_REALTIME || HAS_GTHREADS +#endif // !NO_SLEEP || HAS_GTHREADS || HAVE_LINUX_FUTEX +#endif // HOSTED _GLIBCXX_END_NAMESPACE_VERSION } // namespace std diff --git a/libstdc++-v3/include/bits/this_thread_sleep.h b/libstdc++-v3/include/bits/this_thread_sleep.h index 01f25dd..7c9d573 100644 --- a/libstdc++-v3/include/bits/this_thread_sleep.h +++ b/libstdc++-v3/include/bits/this_thread_sleep.h @@ -36,7 +36,6 @@ #if __cplusplus >= 201103L #include <bits/chrono.h> // std::chrono::* -#include <ext/numeric_traits.h> // __int_traits #ifdef _GLIBCXX_USE_NANOSLEEP # include <cerrno> // errno, EINTR diff --git a/libstdc++-v3/include/std/stacktrace b/libstdc++-v3/include/std/stacktrace index 01e18ba..b9e260e 100644 --- a/libstdc++-v3/include/std/stacktrace +++ b/libstdc++-v3/include/std/stacktrace @@ -208,6 +208,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { if (_S_current(__cb, std::__addressof(__ret))) __ret._M_clear(); + else + __ret._M_trim(); } return __ret; } @@ -224,6 +226,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { if (_S_current(__cb, std::__addressof(__ret), __skip)) __ret._M_clear(); + else + __ret._M_trim(); } return __ret; @@ -260,6 +264,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } } } + else + __ret._M_trim(); } return __ret; } @@ -651,6 +657,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } }; + void + _M_trim() noexcept + { + // libbacktrace adds an invalid -1UL entry at the end, remove it. + if (!empty() && !end()[-1]) + _M_impl._M_resize(size() - 1, _M_alloc); + } + [[no_unique_address]] allocator_type _M_alloc{}; _Impl _M_impl{}; diff --git a/libstdc++-v3/python/libstdcxx/v6/printers.py b/libstdc++-v3/python/libstdcxx/v6/printers.py index 1822d42..7a5a627 100644 --- a/libstdc++-v3/python/libstdcxx/v6/printers.py +++ b/libstdc++-v3/python/libstdcxx/v6/printers.py @@ -2357,6 +2357,37 @@ class StdTextEncodingPrinter(printer_base): return 'unknown' return rep['_M_name'] +class StdStacktraceEntryPrinter(printer_base): + """Print a std::stacktrace_entry.""" + + def __init__(self, typename, val): + self._val = val + self._typename = typename + + def to_string(self): + block = gdb.current_progspace().block_for_pc(self._val['_M_pc']) + if block is None or block.function is None: + return "<unknown>" + sym = block.function + return "{{{} at {}:{}}}".format(sym.print_name, sym.symtab.filename, sym.line) + +class StdStacktracePrinter(printer_base): + """Print a std::stacktrace.""" + + def __init__(self, typename, val): + self._val = val + self._typename = typename + self._size = self._val['_M_impl']['_M_size'] + + def to_string(self): + return '%s of length %d' % (self._typename, self._size) + + def children(self): + return StdSpanPrinter._iterator(self._val['_M_impl']['_M_frames'], self._size) + + def display_hint(self): + return 'array' + # A "regular expression" printer which conforms to the # "SubPrettyPrinter" protocol from gdb.printing. class RxPrinter(object): @@ -2977,6 +3008,12 @@ def build_libstdcxx_dictionary(): # libstdcxx_printer.add_version('std::chrono::(anonymous namespace)', 'Rule', # StdChronoTimeZoneRulePrinter) + # C++23 components + libstdcxx_printer.add_version('std::', 'stacktrace_entry', + StdStacktraceEntryPrinter) + libstdcxx_printer.add_version('std::', 'basic_stacktrace', + StdStacktracePrinter) + # C++26 components libstdcxx_printer.add_version('std::', 'text_encoding', StdTextEncodingPrinter) |