April 29, 2003 KSYMS 4

### NAME

ksyms - kernel symbol table interface

### SYNOPSIS

pseudo-device ksyms

### DESCRIPTION

The ```/dev/ksyms` character device provides a read-only interface to the current kernel symbol table. It can be accessed either as a sequential file, where it looks like an executable file but with zero-sized text and data segments, or via ioctl(2).

```/dev/ksyms` represents the symbol table at the time when the device is opened, and may not change until it is closed.

The in-kernel symbol manager is designed to be able to handle any type of symbol table. However, only elf(5) symbol tables are currently dealt with.

### IOCTLS

The ioctl(2) command codes below are defined in <```sys/ksyms.h`>.

The (third) argument to the ioctl(2) should be a pointer to the type indicated.

```KIOCGSIZE``(int)`
  Returns the total size of the current symbol table. This should be used when allocating a buffer to read in the whole symbol table to memory.

```KIOCGVALUE``(struct` `ksyms_gsymbol)`
  Returns the value for the given symbol name in a symtab-independent fashion.
    `

        struct ksyms_gsymbol {
                const char *kg_name;
                unsigned long *kg_value;
        };

    `

  The struct element kg_name should be set to the name of the requested value, and the address that kg_value points to will receive the symbol value.

```KIOCGSYMBOL``(struct` `ksyms_gsymbol)`
  Returns the complete symbol for the given symbol name.
    `

        struct ksyms_gsymbol {
                const char *kg_name;
                void *kg_sym;
        };

    `

  The struct element kg_name should be set to the name of the requested symbol, and the found symbol will be written to the kg_sym address. It is the callers responsibility to ensure that enough space for the symbol is allocated.

### FILES

```/dev/ksyms`

### SEE ALSO

ioctl(2), nlist(3), elf(5)

### HISTORY

A ksyms device exists in many different operating systems. This implementation is modelled in function after Solaris . This ksyms driver was written by Anders Magnusson for NetBSD.

The ksyms driver first appeared in NetBSD2.0.

### BUGS

No LKM modules can be loaded or unloaded while ```/dev/ksyms` is open.