drgn 0.0.21
This release adds lots of new helpers and fixes some important bugs.
New features:
- Helpers for lockless linked lists in the Linux kernel were added:
drgn.helpers.linux.llist. Contributed by Imran Khan. - A helper to find the slab cache that a virtual address came from was added:
drgn.helpers.linux.slab.find_containing_slab_cache(). Contributed by Nhat Pham. - A
drgn.helpers.commonpackage was created to contain helpers that can be used with any program (which may have program-specific additional behavior). - A helper to identify an arbitrary address (e.g., as a symbol or slab object) was added:
drgn.helpers.common.memory.identify_address(). Contributed by Nhat Pham. PageFoo()helpers to check variousstruct pageflags were added todrgn.helpers.linux.mm.- Helpers for working with compound pages were added to
drgn.helpers.linux.mm:compound_head(),compound_nr(),compound_order(), andpage_size(). - A helper to get the CPU that a task last ran on was added:
drgn.helpers.linux.sched.task_cpu(). - Automatic pretty-printing in IPython/Jupyter of
drgn.Object,drgn.Type,drgn.StackTrace, anddrgn.StackFramewas added. Contributed by Shung-Hsi Yu. drgn.StackTrace.progwas added as a way to get the program that a stack trace came from.
Bug fixes:
- Getting stack traces from a kernel core dump of threads that were running at the time of the crash was fixed for Linux < 4.9 and >= 5.16.
drgn.helpers.linux.per_cpu()andper_cpu_ptr()were fixed to work for per-CPU variables defined in kernel modules.- Reading from pages that were excluded by
makedumpfilewas changed to return zeroes instead of raising aFaultError. This is unfortunately necessary because we cannot distinguish between pages that were excluded because their contents were zero and pages that were excluded for other reasons. Contributed by Glen McCready. - A segfault when looking for a variable in a stack frame caused by strange debug symbols emitted by Clang in certain situations was fixed.
- A reference leak every time a
FaultErroris raised inside of drgn was fixed. - A use after free when setting an object from a part of itself in libdrgn was fixed. The Python interface is not affected.
- The recommendation for how to get VMCOREINFO in QEMU guest memory dumps was fixed to suggest the correct Linux kernel configuration options.
- A spelling error in a DWARF parsing error message was fixed. Contributed by Michel Alexandre Salim.
API changes:
escape_ascii_character(),escape_ascii_string(),decode_flags(), anddecode_enum_type_flags()were moved fromdrgn.helperstodrgn.helpers.common.format.enum_type_to_class()was moved fromdrgn.helperstodrgn.helpers.common.type.
Documentation:
- openSUSE installation instructions were added.
- libkdumpfile installation instructions were updated to reflect that it is now packaged on some Linux distributions.
- Python type signatures are now formatted more concisely in the documentation.
- Overloaded helpers are now documented more concisely.
- Various small editorial and formatting issues were fixed.
Other improvements:
- Linux kernel support was tested up to Linux 6.0.
drgn.helpers.linux.bpf.cgroup_bpf_prog_for_each()was updated to work on Linux 6.0.
Internals:
- Some racy stack tracing unit tests were fixed.
- Linux kernel memory management helper unit tests were enabled on AArch64.
- The VM testing setup no longer depends on BusyBox.
-Wimplicit-fallthroughwas enabled for builds.- A syscall number table and normalized machine name were added to
util.py
for use in test cases and the VM testing setup. - Some renaming was done to prepare for the upcoming module API.
- The libdrgn-internal
string_builderAPI was improved.