--- zzzz-none-000/linux-2.4.17/fs/proc/base.c 2001-10-11 06:42:47.000000000 +0000 +++ sangam-fb-322/linux-2.4.17/fs/proc/base.c 2004-12-02 15:25:07.000000000 +0000 @@ -35,6 +35,7 @@ #define fake_ino(pid,ino) (((pid)<<16)|(ino)) ssize_t proc_pid_read_maps(struct task_struct*,struct file*,char*,size_t,loff_t*); +ssize_t proc_pid_read_addr(struct task_struct*,struct file*,char*,size_t,loff_t*); int proc_pid_stat(struct task_struct*,char*); int proc_pid_status(struct task_struct*,char*); int proc_pid_statm(struct task_struct*,char*); @@ -246,6 +247,21 @@ read: pid_maps_read, }; +static ssize_t pid_addr_read(struct file * file, char * buf, + size_t count, loff_t *ppos) +{ + struct inode * inode = file->f_dentry->d_inode; + struct task_struct *task = inode->u.proc_i.task; + ssize_t res; + + res = proc_pid_read_addr(task, file, buf, count, ppos); + return res; +} + +static struct file_operations proc_addr_operations = { + read: pid_addr_read, +}; + #define PROC_BLOCK_SIZE (3*1024) /* 4K page size but our output routines use some slack for overruns */ static ssize_t proc_info_read(struct file * file, char * buf, @@ -496,6 +512,7 @@ PROC_PID_STAT, PROC_PID_STATM, PROC_PID_MAPS, + PROC_PID_ADDR, PROC_PID_CPU, PROC_PID_FD_DIR = 0x8000, /* 0x8000-0xffff */ }; @@ -512,6 +529,7 @@ E(PROC_PID_CPU, "cpu", S_IFREG|S_IRUGO), #endif E(PROC_PID_MAPS, "maps", S_IFREG|S_IRUGO), + E(PROC_PID_ADDR, "addr", S_IFREG|S_IRUGO), E(PROC_PID_MEM, "mem", S_IFREG|S_IRUSR|S_IWUSR), E(PROC_PID_CWD, "cwd", S_IFLNK|S_IRWXUGO), E(PROC_PID_ROOT, "root", S_IFLNK|S_IRWXUGO), @@ -865,6 +883,9 @@ case PROC_PID_MAPS: inode->i_fop = &proc_maps_operations; break; + case PROC_PID_ADDR: + inode->i_fop = &proc_addr_operations; + break; #ifdef CONFIG_SMP case PROC_PID_CPU: inode->i_fop = &proc_info_file_operations;