mirror of
https://github.com/ruby/ruby.git
synced 2026-08-12 20:12:28 +08:00
Replace `tool/update-deps` with a Ruby source scanner so dependency updates no longer require GNU make, a configured build, or compiler preprocessor output. Keep compact source mappings and scanner declarations in dependency files, and expand complete rules into the build directory. Avoid the temporary fixture headers required by the compiler-driven prototype. Use the generated rules from GNU make, BSD make, and NMake builds. Support out-of-tree and read-only source trees, and retain expanded dependencies shipped in release archives when baseruby is unavailable.
88 lines
2.3 KiB
C
88 lines
2.3 KiB
C
#ifdef __FreeBSD__
|
|
#include <sys/user.h>
|
|
#include <sys/sysctl.h>
|
|
#include <sys/param.h>
|
|
#include <libprocstat.h>
|
|
# ifndef KVME_TYPE_MGTDEVICE
|
|
# define KVME_TYPE_MGTDEVICE 8
|
|
# endif
|
|
void
|
|
procstat_vm(struct procstat *procstat, struct kinfo_proc *kipp, FILE *errout)
|
|
{
|
|
struct kinfo_vmentry *freep, *kve;
|
|
int ptrwidth;
|
|
unsigned int i, cnt;
|
|
const char *str;
|
|
#ifdef __x86_64__
|
|
ptrwidth = 14;
|
|
#else
|
|
ptrwidth = 2*sizeof(void *) + 2;
|
|
#endif
|
|
fprintf(errout, "%*s %*s %3s %4s %4s %3s %3s %4s %-2s %-s\n",
|
|
ptrwidth, "START", ptrwidth, "END", "PRT", "RES",
|
|
"P""RES", "REF", "SHD", "FL", "TP", "PATH");
|
|
|
|
#ifdef HAVE_PROCSTAT_GETVMMAP
|
|
freep = procstat_getvmmap(procstat, kipp, &cnt);
|
|
#else
|
|
freep = kinfo_getvmmap(kipp->ki_pid, &cnt);
|
|
#endif
|
|
if (freep == NULL)
|
|
return;
|
|
for (i = 0; i < cnt; i++) {
|
|
kve = &freep[i];
|
|
fprintf(errout, "%#*jx ", ptrwidth, (uintmax_t)kve->kve_start);
|
|
fprintf(errout, "%#*jx ", ptrwidth, (uintmax_t)kve->kve_end);
|
|
fprintf(errout, "%s", kve->kve_protection & KVME_PROT_READ ? "r" : "-");
|
|
fprintf(errout, "%s", kve->kve_protection & KVME_PROT_WRITE ? "w" : "-");
|
|
fprintf(errout, "%s ", kve->kve_protection & KVME_PROT_EXEC ? "x" : "-");
|
|
fprintf(errout, "%4d ", kve->kve_resident);
|
|
fprintf(errout, "%4d ", kve->kve_private_resident);
|
|
fprintf(errout, "%3d ", kve->kve_ref_count);
|
|
fprintf(errout, "%3d ", kve->kve_shadow_count);
|
|
fprintf(errout, "%-1s", kve->kve_flags & KVME_FLAG_COW ? "C" : "-");
|
|
fprintf(errout, "%-1s", kve->kve_flags & KVME_FLAG_NEEDS_COPY ? "N" :
|
|
"-");
|
|
fprintf(errout, "%-1s", kve->kve_flags & KVME_FLAG_SUPER ? "S" : "-");
|
|
fprintf(errout, "%-1s ", kve->kve_flags & KVME_FLAG_GROWS_UP ? "U" :
|
|
kve->kve_flags & KVME_FLAG_GROWS_DOWN ? "D" : "-");
|
|
switch (kve->kve_type) {
|
|
case KVME_TYPE_NONE:
|
|
str = "--";
|
|
break;
|
|
case KVME_TYPE_DEFAULT:
|
|
str = "df";
|
|
break;
|
|
case KVME_TYPE_VNODE:
|
|
str = "vn";
|
|
break;
|
|
case KVME_TYPE_SWAP:
|
|
str = "sw";
|
|
break;
|
|
case KVME_TYPE_DEVICE:
|
|
str = "dv";
|
|
break;
|
|
case KVME_TYPE_PHYS:
|
|
str = "ph";
|
|
break;
|
|
case KVME_TYPE_DEAD:
|
|
str = "dd";
|
|
break;
|
|
case KVME_TYPE_SG:
|
|
str = "sg";
|
|
break;
|
|
case KVME_TYPE_MGTDEVICE:
|
|
str = "md";
|
|
break;
|
|
case KVME_TYPE_UNKNOWN:
|
|
default:
|
|
str = "??";
|
|
break;
|
|
}
|
|
fprintf(errout, "%-2s ", str);
|
|
fprintf(errout, "%-s\n", kve->kve_path);
|
|
}
|
|
free(freep);
|
|
}
|
|
#endif
|