drgn 0.0.23
This release adds helpers all over the place, Linux 6.3 and 6.4 support, Python 3.12 support, full s390x support, bug fixes, and lots of new scripts in contrib
.
New features:
follow_page()
,follow_pfn()
, andfollow_phys()
helpers were added todrgn.helpers.linux.mm
. These translate an arbitrary virtual address in an address space.vmalloc_to_page()
andvmalloc_to_pfn()
helpers were added todrgn.helpers.linux.mm
. These translate a vmalloc/vmap address.- The
drgn.helpers.linux.mm.totalram_pages()
helper was added. It returns the number of pages of RAM. Contributed by Martin Liška. - The
drgn.helpers.linux.sched.loadavg()
helper was added. It returns the load average as a tuple. Contributed by Martin Liška. - The
drgn.helpers.common.format.number_in_binary_units()
helper was added. It formats a number as a human-readable size (e.g., 2G, 1.5M). drgn.cli.run_interactive()
was added. It can be used to embed drgn's interactive mode in other applications. Contributed by Stephen Brennan.- The
jiffies
variable in the Linux kernel is now handled specially so that it can be accessed on all kernel versions and architectures. - Virtual address translation was implemented for s390x. Contributed by Sven Schnelle.
- The
page_to_pfn()
,page_to_phys()
,pfn_to_page()
, andphys_to_page()
helpers indrgn.helpers.linux.mm
now work on architectures usingCONFIG_FLATMEM
(e.g., Arm and i386). - Types can now be looked up in C++ namespaces. Contributed by Kevin Svetlitski.
- drgn will now use GNU-style compressed sections (
.zdebug_*
) when available.
Bug fixes:
- A crash when constructing objects on Python 3.12 was fixed. Contributed by Stephen Brennan.
- A bug that caused the ORC stack unwinder to stop prematurely or return the wrong result for IRQ stacks was fixed.
drgn.Program.crashed_thread()
was fixed for non-x86 architectures. Previously it always returned the thread on CPU 0.drgn.helpers.linux.fs.for_each_file()
now handles tasks withNULL
files
(e.g., zombie tasks). Contributed by Stephen Brennan.- The
drgn.helpers.linux.cgroup.sock_cgroup_ptr()
helper was fixed to work on Linux 5.15 and newer. Contributed by Martin Liška. - The
drgn.helpers.linux.slab
helpers were fixed to handle older stable kernels without the patch "slub: improve bit diffusion for freelist ptr obfuscation". Contributed by Stephen Brennan. - The
slab_object_info()
andfind_containing_slab_cache()
helpers indrgn.helpers.linux.slab
were fixed to ignore high memory. - A workaround for weird DWARF generated by GCC for zero-length arrays in C++ was added. Contributed by Jay Kamat.
- A memory leak in an error case when pretty-printing compound (structure/class/union) objects was fixed. Contributed by Kevin Svetlitski.
contrib
directory:
contrib/btrfs_tree.py
andcontrib/btrfs_tree_mod_log.py
were added. They contain work-in-progress helpers for Btrfs data structures. Contributed by Boris Burkov.contrib/dump_btrfs_bgs.py
was added. It prints information about block groups in a Btrfs filesystem. Contributed by Johannes Thumshirn.contrib/kcore_list.py
was added. It prints the list of memory regions registered in/proc/kcore
.contrib/kernel_sys.py
was added. It prints system information similar to the crashsys
command. Contributed by Martin Liška.contrib/mount.py
was added. It prints a mount table similar to the crashmount
command. Contributed by Martin Liška.contrib/platform_drivers.py
was added. It prints all registered platform drivers.contrib/vmmap.py
was added. It prints information about memory mappings in a process, similar to/proc/$pid/maps
. Note that it only works up to Linux 6.0. Contributed by Martin Liška.contrib/vmstat.py
was added. It prints information about kernel memory usage. Contributed by Martin Liška.contrib/ps.py
was extended to print thread state, whether a thread is a kernel thread, and memory statistics. Contributed by Martin Liška.contrib/fs_inodes.py
was fixed to to handle inodes without a path. Contributed by Martin Liška.contrib/lsmod.py
was fixed to have identical output tolsmod(8)
. Contributed by Martin Liška.contrib/tcp_sock.py
was fixed to work on Linux 4.9 and newer. Contributed by Martin Liška.
Other improvements:
- Support for Linux 6.3 and 6.4 was added.
- The
compound_order()
andcompound_nr()
helpers indrgn.helpers.linux.mm
were updated for Linux 6.3. - ORC unwinder support was updated for Linux 6.3 and 6.4.
- Kernel module detection was updated for Linux 6.4. Contributed by Ido Schimmel.
- The
for_each_disk()
andfor_each_partition()
helpers indrgn.helpers.linux.block
were updated for Linux 6.4.
- The
- The
drgn.helpers.linux.idr
helpers were extended to work with kernels older than 4.11. Contributed by Imran Khan. - Documentation was added for special objects that drgn exposes for the Linux kernel. Contributed by Stephen Brennan.
- The example in the documentation for
add_memory_segment()
was fixed. Contributed by Timothée Cocault. - Immutable attributes were marked with
Final
in type stubs. Contributed by Kevin Svetlitski.
Internals:
setup.py
no longer uses distutils (as long as setuptools is new enough).- Documentation was added for drgn's internal page table iterator interface.
- The virtual machine testing framework now supports AArch64, ppc64, s390x, and Arm. These are not tested automatically yet.
- The virtual machine testing framework now uses compilers from https://mirrors.kernel.org/pub/tools/crosstool/.
- The virtual machine testing framework now limits the number of CPUs to 8 to avoid OOMs. Contributed by Martin Liška.
- The pull request CI now only tests the oldest and latest stable Python versions, with the ability to opt into testing all supported versions. Contributed by Stephen Brennan.