[3069] in Athena Bugs
Re: machtype
daemon@ATHENA.MIT.EDU (John Carr)
Fri Sep 1 20:56:35 1989
To: bugs@ATHENA.MIT.EDU
Cc: geer@ATHENA.MIT.EDU
In-Reply-To: [2746]
Date: Fri, 01 Sep 89 20:56:01 EDT
From: John Carr <jfc@ATHENA.MIT.EDU>
Here are patches to machtype to print out memory size. I've tested
this on RT, VAX, and pmax. Since the '-m' flag was taken, I made
machtype use '-M' instead for this option.
Sample output:
3100: 0x667400 user, 0x7E3000 (8 M) total
uVII: 0x3C4400 user, 0x4FF000 (5 M) total
rt: 0x629800 user, 0x800000 (8 M) total
*** /minos/source/4.3/bin.athena/machtype.c Sat Aug 5 20:38:56 1989
--- machtype.c Fri Sep 1 20:21:03 1989
***************
*** 10,15 ****
--- 10,16 ----
#include <nlist.h>
#include <sys/types.h>
#include <machine/cpu.h>
+ #include <machine/machparam.h>
#include <ctype.h>
#if defined(ibm032)
***************
*** 41,46 ****
--- 42,51 ----
{ "_udadinfo"},
#define X_udatypes 9
{ "_udatypes"},
+ #define X_maxmem 10
+ { "_maxmem" },
+ #define X_physmem 11
+ { "_physmem" },
#else
#if defined(ibm032)
#define X_cpu_model 0
***************
*** 51,56 ****
--- 56,65 ----
{ "_screen_sw" },
#define X_NSCREEN 3
{ "_NSCREEN" },
+ #define X_maxmem 4
+ { "_maxmem" },
+ #define X_physmem 5
+ { "_physmem" },
#endif
#endif
{ "" },
***************
*** 62,68 ****
char **argv;
{
int i;
! int cpuflg = 0, dpyflg = 0, raflg = 0;
char *kernel = KERNEL, *memory = MEMORY;
for (i = 1; i < argc; i++) {
--- 71,77 ----
char **argv;
{
int i;
! int cpuflg = 0, dpyflg = 0, raflg = 0, memflg = 0;
char *kernel = KERNEL, *memory = MEMORY;
for (i = 1; i < argc; i++) {
***************
*** 79,84 ****
--- 88,96 ----
case 'r':
raflg++;
break;
+ case 'M':
+ memflg++;
+ break;
case 'k':
kernel = argv[i+1];
i++;
***************
*** 98,103 ****
--- 110,117 ----
do_dpy(kernel, memory);
else if (raflg)
do_disk(kernel, memory);
+ else if (memflg)
+ do_memory(kernel, memory);
else
#if defined(vax)
printf("vax\n");
***************
*** 406,408 ****
--- 420,464 ----
}
#endif
+
+ #define MEG (1024*1024)
+ do_memory (kernel, memory)
+ char *kernel, *memory;
+
+ {
+ int mf, pos, mem;
+ if (nlist(kernel, nl) < 0) {
+ fprintf(stderr, "can't get namelist\n");
+ exit(1);
+ }
+ if ((mf = open(memory, 0)) < 0) {
+ fprintf(stderr, "can't open memory\n");
+ exit(2);
+ }
+ pos = nl[X_maxmem].n_value;
+ if(pos == 0) {
+ fprintf(stderr, "can't find maxmem\n");
+ exit(3);
+ }
+ lseek(mf,pos,0); /* Error checking ? */
+ if(read(mf,&mem,4) == -1) {
+ perror("read (kmem)");
+ exit(4);
+ } else {
+ printf("0x%06X user, ",mem * NBPG);
+ }
+ pos = nl[X_physmem].n_value;
+ if(pos == 0) {
+ fprintf(stderr, "can't find physmem\n");
+ exit(3);
+ }
+ lseek(mf,pos,0);
+ if(read(mf,&mem,4) == -1) {
+ perror("read (kmem)");
+ exit(4);
+ } else {
+ printf("0x%06X (%d M) total",mem * NBPG,(mem * NBPG + MEG/2)/MEG);
+ }
+ putchar('\n');
+ return;
+ }