orgass+@rchland.ibm.com (Dick Orgass) (04/06/91)
There's a nit mistake of mine in the source file
.ROOT/libs/aix-ps2-1-2/os/Udir.m3. Because of this nit, it is the case
that libm3aix-ps2-1-2.a is a client of libm3data.a. Since the former
library is linked with all user programs by default, this would also
force linking with libm3data.a; not a very good idea considering the
simple use of Char.NUL.
Modify line 6 of Udir.m3 to be
IMPORT Text;
Modify line 23 of Udir.m3 to be:
IF name[i] = '\000' THEN EXIT ELSE INC(nameLength) END
The distributed configuration file, util/config.dist-AIX386, uses
/usr/local/lib/cpp as the C preprocessor for imake because the product
(ANSI) cpp and imake don't get along. This is a port of the 4.3 BSD
cpp. The MIT version distributed with X11 might also work.
The same three problems that I previously reported for the RISC 6000
port also appear with AIX PS/2 and there a few additional bugs depending
on which C compiler is used. I suspect that something strange is
happening in the compilation of the intermediate C file for Thread.m3
but haven't been able to find the problem.
The three problems shared with the RISC 6000 port are:
(1) tests/ptests/p083
There is an undefined symbol when the test program
is linked; Eric reports that the link succeeds on DEC
platforms.
(2) demos/pickles/Graph4Test
This pickle test program terminates with an
unhandled exception Graph4Test.Bug which is raised
at line 120 of Graph4Test.m3; the 6000 version is at line 115.
(3) tools/pp/m3pp
The pretty printer is not working correctly. When
tools/pp/Main.m3 is formatted, there is an assert failure at
line 588 of Formatter.m3; when tools/pp/Parse.i3 is
formatted, there is an assert failure at line 913 of
Formatter.m3. Similar problems come up when formatting
other Modula-3 source files.
The following problem occurs independent of the C compiler that is used
to translate the intermediate C files:
(4) Test case p032 fails in the following strange ways.
If the input is from /dev/null (as in the imake
file), there is an unhandled exception, Rd.Failure, followed
by a error message concerning deadlock followed by a fairly
large number of messages about a run time error
dereferencing NIL; evenually the whole thing stops.
If the input is from a real terminal, the everyting
is ok unless the first input character is end-of-file (^D);
in this case the program goes into a loop without producing
any output.
If the entire system is compiled using MetaWare's High C with or without
optimization and with or without -g, the following problems come up:
(5a) Test case p007 terminates with a Modula-3 runtime
error concerning dereferencing NIL after the characters "16:
" starting at the beginning of a line are emitted.
(6a) Test case p008 terminates with a Bus Error and no
Modula-3 error message immediately after the first line of
output is produce.
If the product C compiler, without optimization and without symbol
tables is used the following problems come up:
(5b) Test case p005 fails with a Modula-3 runtime error
concerning an attempt to dereference NIL.
(6b) All of the pickle test programs in demos/pickles
fail with either a bus error or a Modula-3 runtime error
concerning an attempt to dereference NIL.
The solution that I adopted was to use the optimized High C version
except for Thread.mo. For this module, I use /bin/cc to create a .s
file. I edited the .s file to correct one incompatibility between the
two compilers. For High C, a public char is one byte while for cc a
public char is four bytes. This occurs exactly and only in identifiers
that begin M3_EXPORTS_ and M3_IMPORTS_.
This provided me with the best solution: Only p005 breaks and pickles
are very close to working.
Thanks to Eric Muller for doing a fine job on version 1.6 and for all
his help while I was working on this port.
Dick