# Linux Kernel Module Cheat

#### 23.9.4. Trace source lines

We can further use Binutils' `addr2line` to get the line that corresponds to each address:

    ./trace-boot --arch x86_64
    ./trace2line --arch x86_64
    less "$(./getvar --arch x86_64 run_dir)/trace-lines.txt"

The last commands takes several seconds.

The format is as follows:

    39368 _static_cpu_has arch/x86/include/asm/cpufeature.h:148

Where:

- `39368`: number of consecutive times that a line ran. Makes the output much shorter and more meaningful

- `_static_cpu_has`: name of the function that contains the line

- `arch/x86/include/asm/cpufeature.h:148`: file and line

This could of course all be done with GDB, but it would likely be too slow to be practical.

TODO do even more awesome offline post-mortem analysis things, such as:

- detect if we are in userspace or kernelspace. Should be a simple matter of reading the

- read kernel data structures, and determine the current thread. Maybe we can reuse / extend the kernel’s GDB Python scripts??