Skip to content

drgn 0.0.17

Choose a tag to compare

@osandov osandov released this 03 Mar 07:43
· 1655 commits to main since this release

New features:

  • A new API representing threads was added. The Thread class 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() and drgn.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() and drgn.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 page flags was added (drgn.helpers.linux.mm.decode_page_flags()).
  • Generic helpers for decoding flags were added (drgn.helpers.decode_flags() and drgn.helpers.decode_enum_type_flags()).

Bug fixes:

  • A crash when encountering kernel modules processed by objcopy --only-keep-debug was 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 TypeError when drgn.helpers.linux.rbtree.rb_find() doesn't find a match was fixed.
  • A memory leak when using an invalid TypeTemplateParameter was fixed.
  • A missing type annotation for drgn.Language.CPP was added.
  • drgn_stack_trace_destroy() was fixed to allow a NULL argument like other destroy() 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(), and drgn.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 a Type. This makes it easier to write helpers that accept a type name or a Type.

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-commit was 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/vmcore in a kdump environment were added. Contributed by Kevin Svetlitski.
  • Test cases for the Linux kernel red-black tree and linked list helpers were added.