Ir S
Ir S

Reputation: 495

Where is code refers to /proc/PID/maps?

I what to observe kernel code to print /proc/PID/maps but can't find this. Could anybody tell me where this code is located

Upvotes: 4

Views: 2162

Answers (2)

Frederik Deweerdt
Frederik Deweerdt

Reputation: 5271

It's the show_pid_map() function in fs/proc/task_mmu.c (provided your system uses an MMU, which is the case of most non-embedded systems).

In general, the code for files under /proc/ can be found under fs/procfs.

Upvotes: 3

Krzysztof Adamski
Krzysztof Adamski

Reputation: 2079

The procfs code can be found in fs/proc/ subdirectory. If you open fs/proc/base.c, you can find two very similar arrays - tgid_base_stuff and tid_base_stuff. They both register file operations functions for files inside of /proc/PID/ and /proc/PID/TID/ respectivly. So you're more interested in the first one. Find the one that registers "maps" file, it looks like this:

REG("maps",       S_IRUGO, proc_pid_maps_operations),

So the structure describing file operations on this file is called proc_pid_maps_operations. This function is defined in two places - fs/proc/task_mmu.c and fs/proc/task_nommu.c. Which one is actually used depends on your kernel configuration but it's most likely the first one.

Inside of task_mmu.c, you can find the structure definition:

const struct file_operations proc_pid_maps_operations =
{
    .open       = pid_maps_open,
    .read       = seq_read,
    .llseek     = seq_lseek,
    .release    = proc_map_release,
};

So when /proc/PID/maps is opened, the kernel will use pid_maps_open function, which registers another set of operations:

static const struct seq_operations proc_pid_maps_op = {
    .start  = m_start,
    .next   = m_next,
    .stop   = m_stop,
    .show   = show_pid_map
};

So you're interested in show_pid_map function, which only calls show_map function which in turn calls show_map_vma (all in the same file).

Upvotes: 8

Related Questions