fixed: apparently, the profil system-call does not quite work as described
authorceriel <none@none>
Mon, 19 Sep 1988 16:55:35 +0000 (16:55 +0000)
committerceriel <none@none>
Mon, 19 Sep 1988 16:55:35 +0000 (16:55 +0000)
in the manual page?

lang/cem/libcc/gen/monitor.c

index 98ac6f2..a4652e1 100644 (file)
@@ -28,15 +28,15 @@ monitor(lowpc, highpc, buffer, bufsize, nfunc)
        buffer += sizeof(char *);
        *(char **) buffer = (char *) highpc;
        buffer += sizeof(char *);
-       *(short *) buffer = nfunc;
-       buffer += 2;
+       *(int *) buffer = nfunc;
+       buffer += sizeof(int);
        buffer += (sizeof (char *) + sizeof(long)) * nfunc;
        bufsize -= ((sizeof (char *) + sizeof(long)) * nfunc + 2 * sizeof(char *) + sizeof(int)) >> 1;
        if (bufsize < 0) return;
        scale = ((char *) highpc - (char *) lowpc) >> 1;
        if (bufsize < scale)
                scale = ((long) bufsize << 15) / scale;
-       else    scale = 0x7fff;
+       else    scale = 0x8000;
        bufp = buffer;
        sc = scale << 1;
        bufs = bufsize << 1;
@@ -45,7 +45,7 @@ monitor(lowpc, highpc, buffer, bufsize, nfunc)
 
 moncontrol(mode)
 {
-       profil(bs, bufs, *(char **) bufp, !mode ? 0 : sc);
+       profil(bufp, bufs, *(char **) bp, !mode ? 0 : sc);
 }
 
 #define NCOUNTS 300
@@ -53,7 +53,7 @@ moncontrol(mode)
 monstartup(lowpc, highpc)
        int (*lowpc)(), (*highpc)();
 {
-       int sz = (((char *) highpc - (char *) lowpc + 7) & ~7) << 1;
+       int sz = (((char *) highpc - (char *) lowpc + 7) & ~7);
        char *s, *sbrk();
 
        sz += NCOUNTS * (sizeof(long) + sizeof(char *)) + 2 * sizeof(char *) + sizeof(int);