HomeFreeBSD

Rework and simplify the ksyms(4) implementation.

Description

Rework and simplify the ksyms(4) implementation.

  • Store the symbol table contents in an anonymous swap-backed object. Have mmap(/dev/ksyms) map that object, and stop mapping the symbol table into the calling process in ksyms_open(). Previously we would cache a pointer to the pmap of the opening process, and mmap(/dev/ksyms) would create a mapping using the physical address found by a pmap lookup at the initial mapping address. However, this assumes that the cached pmap is valid, which may not be the case. [1]
  • Remove the ksyms ioctl interface. It appears to have been added to work around a limitation in libelf that no longer exists; see r321842. Moreover, the interface is difficult to support and isn't present in illumos. Since ksyms was added specifically to support lockstat(1), it is expected that this removal won't have any real impact.
  • Simplify ksyms_read() to avoid unnecessary copying.
  • Don't call the device handle destructor if we fail to capture a snapshot of the kernel's symbol table. devfs will do that for us.

Reported by: Ilja van Sprundel <ivansprundel@ioactive.com> [1]
Reviewed by: kib (previous revision)
MFC after: 1 week
Differential Revision: https://reviews.freebsd.org/D11789

Details

Provenance
markjAuthored on
Reviewer
kib
Differential Revision
D11789: Implement the ksyms mmap interface using d_mmap_single.
Parents
rS321962: Use bsd.opts.mk, not src.opts.mk
Branches
Unknown
Tags
Unknown