drgn 0.0.17
New features:
- A new API representing threads was added. The
Threadclass represents a thread.Thread.stack_trace()returns the stack trace for the thread.Program.threads()returns an iterator over the threads in the program.Program.thread()returns a thread given its thread ID.Program.main_thread()returns the main thread of the program.Program.crashed_thread()returns the thread that caused the program to crash. Contributed by Kevin Svetlitski and Mykola Lysenko. Program.symbols()was added. It returns all ELF symbols in the program, optionally filtered by a name or address. Contributed by Stephen Brennan.- Support for looking up C++ classes with
Program.type()was added. Contributed by Mykola Lysenko. - Support for setting the default program language (
Program.language) was added. - Helpers for getting the Linux kernel log buffer were added (
drgn.helpers.linux.printk.get_printk_records()anddrgn.helpers.linux.printk.get_dmesg()). Contributed by Alex Zhu. - Helpers for translating between Linux kernel socket objects and inode objects were added (
drgn.helpers.linux.net.SOCKET_I()anddrgn.helpers.linux.net.SOCK_INODE()). Contributed by Peilin Ye. - A helper for getting the Linux kernel's idle tasks was added (
drgn.helpers.linux.sched.idle_task()). - A helper for decoding Linux kernel
struct pageflags was added (drgn.helpers.linux.mm.decode_page_flags()). - Generic helpers for decoding flags were added (
drgn.helpers.decode_flags()anddrgn.helpers.decode_enum_type_flags()).
Bug fixes:
- A crash when encountering kernel modules processed by
objcopy --only-keep-debugwas fixed. Contributed by Peilin Ye. - An endianness bug when debugging kernel modules that use a different byte order than the host was fixed.
- A compilation error on older versions of GCC was fixed. Contributed by Alakesh Haloi.
- libdrgn is now linked against libm to fix undefined references to
rint. drgn.helpers.linux.percpu.per_cpu_ptr()was fixed to support !SMP kernels.- A
TypeErrorwhendrgn.helpers.linux.rbtree.rb_find()doesn't find a match was fixed. - A memory leak when using an invalid
TypeTemplateParameterwas fixed. - A missing type annotation for
drgn.Language.CPPwas added. drgn_stack_trace_destroy()was fixed to allow aNULLargument like otherdestroy()functions.
Other improvements:
- Linux kernel support was tested up to v5.17-rc6.
- The CLI now diagnoses the common mistake of passing a core dump file where a script is expected.
drgn.helpers.linux.list.list_for_each_entry(),drgn.helpers.linux.list.list_for_each_entry_reverse(),drgn.helpers.linux.list.hlist_for_each_entry(),drgn.helpers.linux.list_nulls.hlist_nulls_for_each_entry(), anddrgn.helpers.linux.rbtree.rbtree_inorder_for_each_entry()were optimized to only look up the entry type once per call.- Parsing of type names in
Program.type()was slightly optimized. - Lookups of built-in kernel variables (e.g.,
UTS_RELEASE,PAGE_SIZE) were slightly optimized. Program.type()now accepts aType. This makes it easier to write helpers that accept a type name or aType.
Build system:
- Python is now required to build libdrgn even if the Python bindings are disabled.
- GNU Awk is no longer required to build drgn.
- Additional compiler warnings are now enabled by default. Developers should enable them as errors.
- Configuration options for developers to enable ASan (contributed by Kevin Svetlitski) and UBSan were added.
Internal:
- Developer documentation was improved.
pre-commitwas configured to enforce coding standards. Contributed by Stephen Brennan.- s390x and EPEL 9 builds were enabled on Packit. Contributed by Davide Cavalca.
- Test cases using
/proc/vmcorein a kdump environment were added. Contributed by Kevin Svetlitski. - Test cases for the Linux kernel red-black tree and linked list helpers were added.