|
@@ -122,11 +122,20 @@ int task_statm(struct mm_struct *mm, int *shared, int *text,
|
|
|
return size;
|
|
|
}
|
|
|
|
|
|
+static void pad_len_spaces(struct seq_file *m, int len)
|
|
|
+{
|
|
|
+ len = 25 + sizeof(void*) * 6 - len;
|
|
|
+ if (len < 1)
|
|
|
+ len = 1;
|
|
|
+ seq_printf(m, "%*c", len, ' ');
|
|
|
+}
|
|
|
+
|
|
|
/*
|
|
|
* display a single VMA to a sequenced file
|
|
|
*/
|
|
|
static int nommu_vma_show(struct seq_file *m, struct vm_area_struct *vma)
|
|
|
{
|
|
|
+ struct mm_struct *mm = vma->vm_mm;
|
|
|
unsigned long ino = 0;
|
|
|
struct file *file;
|
|
|
dev_t dev = 0;
|
|
@@ -155,11 +164,14 @@ static int nommu_vma_show(struct seq_file *m, struct vm_area_struct *vma)
|
|
|
MAJOR(dev), MINOR(dev), ino, &len);
|
|
|
|
|
|
if (file) {
|
|
|
- len = 25 + sizeof(void *) * 6 - len;
|
|
|
- if (len < 1)
|
|
|
- len = 1;
|
|
|
- seq_printf(m, "%*c", len, ' ');
|
|
|
+ pad_len_spaces(m, len);
|
|
|
seq_path(m, &file->f_path, "");
|
|
|
+ } else if (mm) {
|
|
|
+ if (vma->vm_start <= mm->start_stack &&
|
|
|
+ vma->vm_end >= mm->start_stack) {
|
|
|
+ pad_len_spaces(m, len);
|
|
|
+ seq_puts(m, "[stack]");
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
seq_putc(m, '\n');
|