-
- nlist("/vmunix", nl);
- if (nl[X_DUMPDEV].n_value == 0) {
- fprintf(stderr, "savecore: /vmunix: dumpdev not in namelist\n");
- exit(1);
- }
- if (nl[X_DUMPLO].n_value == 0) {
- fprintf(stderr, "savecore: /vmunix: dumplo not in namelist\n");
- exit(1);
- }
- if (nl[X_TIME].n_value == 0) {
- fprintf(stderr, "savecore: /vmunix: time not in namelist\n");
- exit(1);
- }
- if (nl[X_DUMPSIZE].n_value == 0) {
- fprintf(stderr, "savecore: /vmunix: dumpsize not in namelist\n");
- exit(1);
- }
- if (nl[X_VERSION].n_value == 0) {
- fprintf(stderr, "savecore: /vmunix: version not in namelist\n");
- exit(1);
- }
- if (nl[X_PANICSTR].n_value == 0) {
- fprintf(stderr, "savecore: /vmunix: panicstr not in namelist\n");
- exit(1);
- }
- if (nl[X_DUMPMAG].n_value == 0) {
- fprintf(stderr, "savecore: /vmunix: dumpmag not in namelist\n");
- exit(1);
- }
- kmem = Open("/dev/kmem", 0);
- Lseek(kmem, (long)nl[X_DUMPDEV].n_value, 0);
+ 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) {
+ syslog(LOG_ERR, "/vmunix: %s not in namelist",
+ current_nl[cursyms[i]].n_name);
+ exit(1);
+ }
+ for (i = 0; dumpsyms[i] != -1; i++)
+ if (dump_nl[dumpsyms[i]].n_value == 0) {
+ syslog(LOG_ERR, "%s: %s not in namelist", 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);