[squeak-dev] Homing in on FreeBSD vm build error

Gary Dunn garydunnhi at gmail.com
Thu Mar 31 01:25:11 UTC 2011

The "missing" error function is in sqUnixX11.c, line 3076. It and the
vicinity look like this:

/* The remainder of color table defines a color cube with six steps
     for each primary color. Note that the corners of this cube repeat
     previous colors, but simplifies the mapping between RGB colors and
     color map indices. This color cube spans indices 40 through 255.
    int r, g, b;

    for (r= 0; r < 6; r++)
      for (g= 0; g < 6; g++)
        for (b= 0; b < 6; b++)
            int i= 40 + ((36 * r) + (6 * b) + g);
            if (i > 255) error("index out of range in color table
compuation"); <<<<<<< line 3076
            initColourmap(i, (r * 65535) / 5, (g * 65535) / 5, (b * 65535) / 5);

Every other error function call in that source file uses perror, so I
changed this one and recompiled. Again the vm hung, just like when I
used the define.

I checked the logic with my fingers and with maximum values of r, g
and b i will be 255, so the limit test should never succeed. But it
must be, to be triggering that function. Is one of these variables
getting whacked? I could hack in a print to stderr to show the values
through the loop ... I'll wait to hear from the experts.

I checked man 3 perror and it looks reasonable.

     The perror() function finds the error message corresponding to the cur-
     rent value of the global variable errno (intro(2)) and writes it, fol-
     lowed by a newline, to the standard error file descriptor.  If the argu-
     ment string is non-NULL and does not point to the null character, this
     string is prepended to the message string and separated from it by a
     colon and space (``: ''); otherwise, only the error message string is

However, in this case errno may not be set because this is not a
system error. The man entry is not clear what happens in that case.

But I could be way off the path here!
Gary Dunn

More information about the Squeak-dev mailing list