Reputation: 495
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
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
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