pystack 1.5.1__tar.gz → 1.6.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. {pystack-1.5.1 → pystack-1.6.0}/.bumpversion.cfg +1 -1
  2. {pystack-1.5.1 → pystack-1.6.0}/Makefile +1 -1
  3. {pystack-1.5.1 → pystack-1.6.0}/NEWS.rst +17 -0
  4. {pystack-1.5.1 → pystack-1.6.0}/PKG-INFO +2 -1
  5. {pystack-1.5.1 → pystack-1.6.0}/setup.py +1 -0
  6. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/_pystack/elf_common.cpp +2 -2
  7. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/_pystack/process.cpp +2 -2
  8. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/_pystack/unwinder.cpp +2 -2
  9. pystack-1.6.0/src/pystack/_version.py +1 -0
  10. {pystack-1.5.1 → pystack-1.6.0}/src/pystack.egg-info/PKG-INFO +2 -1
  11. pystack-1.5.1/src/pystack/_version.py +0 -1
  12. {pystack-1.5.1 → pystack-1.6.0}/.pre-commit-config.yaml +0 -0
  13. {pystack-1.5.1 → pystack-1.6.0}/LICENSE +0 -0
  14. {pystack-1.5.1 → pystack-1.6.0}/MANIFEST.in +0 -0
  15. {pystack-1.5.1 → pystack-1.6.0}/README.md +0 -0
  16. {pystack-1.5.1 → pystack-1.6.0}/pyproject.toml +0 -0
  17. {pystack-1.5.1 → pystack-1.6.0}/setup.cfg +0 -0
  18. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/__init__.py +0 -0
  19. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/__main__.py +0 -0
  20. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/_pystack/CMakeLists.txt +0 -0
  21. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/_pystack/__init__.pxd +0 -0
  22. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/_pystack/compat.h +0 -0
  23. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/_pystack/corefile.cpp +0 -0
  24. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/_pystack/corefile.h +0 -0
  25. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/_pystack/corefile.pxd +0 -0
  26. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/_pystack/cpython/code.h +0 -0
  27. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/_pystack/cpython/dict.h +0 -0
  28. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/_pystack/cpython/float.h +0 -0
  29. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/_pystack/cpython/frame.h +0 -0
  30. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/_pystack/cpython/gc.h +0 -0
  31. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/_pystack/cpython/int.h +0 -0
  32. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/_pystack/cpython/interpreter.h +0 -0
  33. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/_pystack/cpython/list.h +0 -0
  34. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/_pystack/cpython/object.h +0 -0
  35. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/_pystack/cpython/pthread.h +0 -0
  36. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/_pystack/cpython/runtime.h +0 -0
  37. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/_pystack/cpython/string.h +0 -0
  38. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/_pystack/cpython/thread.h +0 -0
  39. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/_pystack/cpython/tuple.h +0 -0
  40. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/_pystack/elf_common.h +0 -0
  41. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/_pystack/elf_common.pxd +0 -0
  42. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/_pystack/logging.cpp +0 -0
  43. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/_pystack/logging.h +0 -0
  44. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/_pystack/logging.pxd +0 -0
  45. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/_pystack/mem.cpp +0 -0
  46. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/_pystack/mem.h +0 -0
  47. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/_pystack/mem.pxd +0 -0
  48. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/_pystack/native_frame.h +0 -0
  49. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/_pystack/native_frame.pxd +0 -0
  50. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/_pystack/process.h +0 -0
  51. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/_pystack/process.pxd +0 -0
  52. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/_pystack/pycode.cpp +0 -0
  53. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/_pystack/pycode.h +0 -0
  54. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/_pystack/pycode.pxd +0 -0
  55. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/_pystack/pycompat.h +0 -0
  56. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/_pystack/pyframe.cpp +0 -0
  57. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/_pystack/pyframe.h +0 -0
  58. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/_pystack/pyframe.pxd +0 -0
  59. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/_pystack/pythread.cpp +0 -0
  60. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/_pystack/pythread.h +0 -0
  61. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/_pystack/pythread.pxd +0 -0
  62. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/_pystack/pytypes.cpp +0 -0
  63. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/_pystack/pytypes.h +0 -0
  64. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/_pystack/structure.h +0 -0
  65. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/_pystack/unwinder.h +0 -0
  66. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/_pystack/version.cpp +0 -0
  67. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/_pystack/version.h +0 -0
  68. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/_pystack.pyi +0 -0
  69. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/_pystack.pyx +0 -0
  70. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/colors.py +0 -0
  71. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/engine.py +0 -0
  72. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/errors.py +0 -0
  73. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/maps.py +0 -0
  74. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/process.py +0 -0
  75. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/py.typed +0 -0
  76. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/traceback_formatter.py +0 -0
  77. {pystack-1.5.1 → pystack-1.6.0}/src/pystack/types.py +0 -0
  78. {pystack-1.5.1 → pystack-1.6.0}/src/pystack.egg-info/SOURCES.txt +0 -0
  79. {pystack-1.5.1 → pystack-1.6.0}/src/pystack.egg-info/dependency_links.txt +0 -0
  80. {pystack-1.5.1 → pystack-1.6.0}/src/pystack.egg-info/entry_points.txt +0 -0
  81. {pystack-1.5.1 → pystack-1.6.0}/src/pystack.egg-info/top_level.txt +0 -0
@@ -1,5 +1,5 @@
1
1
  [bumpversion]
2
- current_version = 1.5.1
2
+ current_version = 1.6.0
3
3
  commit = True
4
4
  message =
5
5
  Prepare for {new_version} release
@@ -71,7 +71,7 @@ valgrind: ## Run valgrind, with the correct configuration
71
71
  .PHONY: ccoverage
72
72
  ccoverage: ## Run the test suite, with C++ code coverage
73
73
  $(MAKE) clean
74
- CFLAGS="$(CFLAGS) -O0 -pg --coverage" $(MAKE) build
74
+ CFLAGS="$(CFLAGS) -O0 -pg --coverage" CXXFLAGS="$(CXXFLAGS) -O0 -pg --coverage" $(MAKE) build
75
75
  $(MAKE) check
76
76
  gcov -i build/*/src/pystack/_pystack -i -d
77
77
  lcov --capture --directory . --output-file cppcoverage.lcov
@@ -8,6 +8,23 @@ Changelog
8
8
 
9
9
  .. towncrier release notes start
10
10
 
11
+ pystack 1.6.0 (2026-01-25)
12
+ --------------------------
13
+
14
+ Features
15
+ ~~~~~~~~
16
+
17
+ - Provide wheels for free-threaded builds of Python 3.13 (#271)
18
+ - Add the Python 3.14 trove classifier to our package metadata (#269)
19
+ - Improve some error messages and log messages (#260, #258)
20
+
21
+
22
+ Bug Fixes
23
+ ~~~~~~~~~
24
+
25
+ - Fix handling of duplicate ``_PyRuntime`` symbols when ctypes mmaps a statically linked Python interpreter's binary in order to create a trampoline. Previously this led to "Invalid address in remote process" errors. (#258)
26
+
27
+
11
28
  pystack 1.5.1 (2025-08-18)
12
29
  --------------------------
13
30
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pystack
3
- Version: 1.5.1
3
+ Version: 1.6.0
4
4
  Summary: Analysis of the stack of remote python processes
5
5
  Home-page: https://github.com/bloomberg/pystack
6
6
  Author: Pablo Galindo Salgado
@@ -13,6 +13,7 @@ Classifier: Programming Language :: Python :: 3.10
13
13
  Classifier: Programming Language :: Python :: 3.11
14
14
  Classifier: Programming Language :: Python :: 3.12
15
15
  Classifier: Programming Language :: Python :: 3.13
16
+ Classifier: Programming Language :: Python :: 3.14
16
17
  Classifier: Programming Language :: Python :: Implementation :: CPython
17
18
  Classifier: Topic :: Software Development :: Debuggers
18
19
  Requires-Python: >=3.7.0
@@ -122,6 +122,7 @@ setuptools.setup(
122
122
  "Programming Language :: Python :: 3.11",
123
123
  "Programming Language :: Python :: 3.12",
124
124
  "Programming Language :: Python :: 3.13",
125
+ "Programming Language :: Python :: 3.14",
125
126
  "Programming Language :: Python :: Implementation :: CPython",
126
127
  "Topic :: Software Development :: Debuggers",
127
128
  ],
@@ -401,7 +401,7 @@ getSectionInfo(const std::string& filename, const std::string& section_name, Sec
401
401
  LOG(DEBUG) << "Trying to locate .PyRuntime data offset from program headers";
402
402
  file_unique_ptr file(fopen(filename.c_str(), "r"), fclose);
403
403
  if (!file || fileno(file.get()) == -1) {
404
- LOG(ERROR) << "Cannot open ELF file " << filename;
404
+ LOG(ERROR) << "Cannot open ELF file " << filename << " (" << std::strerror(errno) << ")";
405
405
  return false;
406
406
  }
407
407
  const int fd = fileno(file.get());
@@ -559,7 +559,7 @@ getBuildId(const std::string& filename)
559
559
  LOG(DEBUG) << "Trying to locate .PyRuntime data offset from program headers";
560
560
  file_unique_ptr file(fopen(filename.c_str(), "r"), fclose);
561
561
  if (!file || fileno(file.get()) == -1) {
562
- LOG(ERROR) << "Cannot open ELF file " << filename;
562
+ LOG(ERROR) << "Cannot open ELF file " << filename << " (" << std::strerror(errno) << ")";
563
563
  return "";
564
564
  }
565
565
  const int fd = fileno(file.get());
@@ -80,7 +80,7 @@ operator<<(std::ostream& out, const ParsedPyVersion& version)
80
80
  // Use a temporary stringstream in case `out` is using hex or showbase
81
81
  std::ostringstream oss;
82
82
  oss << version.major << "." << version.minor << "." << version.patch;
83
- if (version.release_level) {
83
+ if (version.release_level[0]) {
84
84
  oss << version.release_level << version.serial;
85
85
  }
86
86
 
@@ -97,7 +97,7 @@ parsePyVersionHex(uint64_t version, ParsedPyVersion& parsed)
97
97
  int level = (version >> 4) & 0x0F;
98
98
  int count = (version >> 0) & 0x0F;
99
99
 
100
- const char* level_str = nullptr;
100
+ const char* level_str = "(unknown release level)";
101
101
  if (level == 0xA) {
102
102
  level_str = "a";
103
103
  } else if (level == 0xB) {
@@ -378,7 +378,7 @@ module_callback(
378
378
  module_arg->addr = addr;
379
379
  LOG(INFO) << "Symbol '" << sname << "' found at address " << std::hex << std::showbase
380
380
  << addr;
381
- break;
381
+ return DWARF_CB_ABORT;
382
382
  }
383
383
  }
384
384
  return DWARF_CB_OK;
@@ -389,7 +389,7 @@ AbstractUnwinder::getAddressforSymbol(const std::string& symbol, const std::stri
389
389
  {
390
390
  LOG(DEBUG) << "Trying to find address for symbol " << symbol;
391
391
  ModuleArg arg = {symbol.c_str(), modulename.c_str(), 0};
392
- if (dwfl_getmodules(Dwfl(), module_callback, &arg, 0) != 0) {
392
+ if (dwfl_getmodules(Dwfl(), module_callback, &arg, 0) == -1) {
393
393
  throw UnwinderError("Failed to fetch modules!");
394
394
  }
395
395
  LOG(DEBUG) << "Address for symbol " << symbol << " resolved to: " << std::hex << std::showbase
@@ -0,0 +1 @@
1
+ __version__ = "1.6.0"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pystack
3
- Version: 1.5.1
3
+ Version: 1.6.0
4
4
  Summary: Analysis of the stack of remote python processes
5
5
  Home-page: https://github.com/bloomberg/pystack
6
6
  Author: Pablo Galindo Salgado
@@ -13,6 +13,7 @@ Classifier: Programming Language :: Python :: 3.10
13
13
  Classifier: Programming Language :: Python :: 3.11
14
14
  Classifier: Programming Language :: Python :: 3.12
15
15
  Classifier: Programming Language :: Python :: 3.13
16
+ Classifier: Programming Language :: Python :: 3.14
16
17
  Classifier: Programming Language :: Python :: Implementation :: CPython
17
18
  Classifier: Topic :: Software Development :: Debuggers
18
19
  Requires-Python: >=3.7.0
@@ -1 +0,0 @@
1
- __version__ = "1.5.1"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes