View | Details | Raw Unified | Return to bug 17555 | Differences between
and this patch

Collapse All | Expand All

(-)fstat.c (+69 lines)
Lines 74-79 Link Here
74
#include <nfs/nfsnode.h>
74
#include <nfs/nfsnode.h>
75
75
76
76
77
#include <vm/vm.h>
78
#include <vm/vm_map.h>
79
#include <vm/vm_object.h>
80
77
#include <net/route.h>
81
#include <net/route.h>
78
#include <netinet/in.h>
82
#include <netinet/in.h>
79
#include <netinet/in_systm.h>
83
#include <netinet/in_systm.h>
Lines 100-105 Link Here
100
#define	CDIR	-2
104
#define	CDIR	-2
101
#define	RDIR	-3
105
#define	RDIR	-3
102
#define	TRACE	-4
106
#define	TRACE	-4
107
#define	MMAP	-5
103
108
104
DEVS *devs;
109
DEVS *devs;
105
110
Lines 132-137 Link Here
132
kvm_t *kd;
137
kvm_t *kd;
133
138
134
void dofiles __P((struct kinfo_proc *kp));
139
void dofiles __P((struct kinfo_proc *kp));
140
void dommap __P((struct kinfo_proc *kp));
135
void vtrans __P((struct vnode *vp, int i, int flag));
141
void vtrans __P((struct vnode *vp, int i, int flag));
136
int  ufs_filestat __P((struct vnode *vp, struct filestat *fsp));
142
int  ufs_filestat __P((struct vnode *vp, struct filestat *fsp));
137
int  nfs_filestat __P((struct vnode *vp, struct filestat *fsp));
143
int  nfs_filestat __P((struct vnode *vp, struct filestat *fsp));
Lines 246-251 Link Here
246
		if (p->kp_proc.p_stat == SZOMB)
252
		if (p->kp_proc.p_stat == SZOMB)
247
			continue;
253
			continue;
248
		dofiles(p);
254
		dofiles(p);
255
		dommap(p);
249
	}
256
	}
250
	exit(0);
257
	exit(0);
251
}
258
}
Lines 267-272 Link Here
267
	case TRACE: \
274
	case TRACE: \
268
		printf("   tr"); \
275
		printf("   tr"); \
269
		break; \
276
		break; \
277
	case MMAP: \
278
		printf(" mmap"); \
279
		break; \
270
	default: \
280
	default: \
271
		printf(" %4d", i); \
281
		printf(" %4d", i); \
272
		break; \
282
		break; \
Lines 356-361 Link Here
356
			dprintf(stderr,
366
			dprintf(stderr,
357
				"unknown file type %d for file %d of pid %d\n",
367
				"unknown file type %d for file %d of pid %d\n",
358
				file.f_type, i, Pid);
368
				file.f_type, i, Pid);
369
		}
370
	}
371
}
372
373
void
374
dommap(kp)
375
	struct kinfo_proc *kp;
376
{
377
	struct proc *p = &kp->kp_proc;
378
	struct vmspace vmspace;
379
	vm_map_t map;
380
	struct vm_map_entry entry;
381
	vm_map_entry_t entryp;
382
	struct vm_object object;
383
	vm_object_t objp;
384
	int prot, fflags;
385
386
	if (!KVM_READ(p->p_vmspace, &vmspace, sizeof(vmspace))) {
387
		dprintf(stderr, "can't read vmspace at %p for pid %d\n",
388
		    (void *)p->p_vmspace, Pid);
389
		return;
390
	}
391
392
	map = &vmspace.vm_map;
393
394
	for (entryp = map->header.next; entryp != &p->p_vmspace->vm_map.header;
395
	    entryp = entry.next) {
396
		if (!KVM_READ(entryp, &entry, sizeof(entry))) {
397
			dprintf(stderr,
398
			    "can't read vm_map_entry at %p for pid %d\n",
399
			    (void *)entryp, Pid);
400
			return;
401
		}
402
403
		if (entry.eflags & MAP_ENTRY_IS_SUB_MAP)
404
			continue;
405
406
		if ((objp = entry.object.vm_object) == NULL)
407
			continue;
408
409
		for (; objp; objp = object.backing_object) {
410
			if (!KVM_READ(objp, &object, sizeof(object))) {
411
				dprintf(stderr,
412
				    "can't read vm_object at %p for pid %d\n",
413
				    (void *)objp, Pid);
414
				return;
415
			}
416
		}
417
418
		prot = entry.protection;
419
		fflags = (prot & VM_PROT_READ ? FREAD : 0) |
420
		    (prot & VM_PROT_WRITE ? FWRITE : 0);
421
422
		switch (object.type) {
423
		case OBJT_VNODE:
424
			vtrans((struct vnode *)object.handle, MMAP, fflags);
425
			break;
426
		default:
427
			break;
359
		}
428
		}
360
	}
429
	}
361
}
430
}

Return to bug 17555