-
- nlist("/vmunix", nl);
- if (nl[X_DUMPDEV].n_value == 0) {
- fprintf(stderr, "/vmunix: dumpdev not in namelist\n");
- exit(1);
- }
- if (nl[X_DUMPLO].n_value == 0) {
- fprintf(stderr, "/vmunix: dumplo not in namelist\n");
- exit(1);
- }
- if (nl[X_TIME].n_value == 0) {
- fprintf(stderr, "/vmunix: time not in namelist\n");
- exit(1);
- }
- if (nl[X_PHYSMEM].n_value == 0) {
- fprintf(stderr, "/vmunix: physmem not in namelist\n");
- exit(1);
- }
- if (nl[X_VERSION].n_value == 0) {
- fprintf(stderr, "/vmunix: version not in namelist\n");
- exit(1);
- }
- if (nl[X_PANICSTR].n_value == 0) {
- fprintf(stderr, "/vmunix: panicstr not in namelist\n");
- exit(1);
- }
- kmem = Open("/dev/kmem", 0);
- Lseek(kmem, (long)nl[X_DUMPDEV].n_value, 0);
- Read(kmem, (char *)&dumpdev, sizeof dumpdev);
- Lseek(kmem, (long)nl[X_DUMPLO].n_value, 0);
- Read(kmem, (char *)&dumplo, sizeof dumplo);
- Lseek(kmem, (long)nl[X_PHYSMEM].n_value, 0);
- Read(kmem, (char *)&physmem, sizeof physmem);
- dumplo *= 512L;
+ FILE *fp;
+ char *dump_sys;
+ int kmem, i;
+
+ dump_sys = system ? system : "/vmunix";
+ nlist("/vmunix", current_nl);
+ nlist(dump_sys, dump_nl);
+ /*
+ * Some names we need for the currently running system,
+ * others for the system that was running when the dump was made.
+ * The values obtained from the current system are used
+ * to look for things in /dev/kmem that cannot be found
+ * in the dump_sys namelist, but are presumed to be the same
+ * (since the disk partitions are probably the same!)
+ */
+ for (i = 0; cursyms[i] != -1; i++)
+ if (current_nl[cursyms[i]].n_value == 0) {
+ log(LOG_ERR, "/vmunix: %s not in namelist\n",
+ current_nl[cursyms[i]].n_name);
+ exit(1);
+ }
+ for (i = 0; dumpsyms[i] != -1; i++)
+ if (dump_nl[dumpsyms[i]].n_value == 0) {
+ log(LOG_ERR, "%s: %s not in namelist\n", dump_sys,
+ dump_nl[dumpsyms[i]].n_name);
+ exit(1);
+ }
+ kmem = Open("/dev/kmem", O_RDONLY);
+ Lseek(kmem, (long)current_nl[X_DUMPDEV].n_value, L_SET);
+ Read(kmem, (char *)&dumpdev, sizeof (dumpdev));
+ Lseek(kmem, (long)current_nl[X_DUMPLO].n_value, L_SET);
+ Read(kmem, (char *)&dumplo, sizeof (dumplo));
+ Lseek(kmem, (long)current_nl[X_DUMPMAG].n_value, L_SET);
+ Read(kmem, (char *)&dumpmag, sizeof (dumpmag));
+ dumplo *= DEV_BSIZE;