Google
 

Trailing-Edge - PDP-10 Archives - SRI_NIC_PERM_FS_1_19910112 - kccdist/news.txt
There are 7 other files named news.txt in the archive. Click here to see a list.
04/20/88 KCC 599, LIBC 219: <2,,2>	Fifth formal distribution snapshot

General:
	Several new routines, features, and packages have been added.
The various *.DOC files have been improved somewhat, and as usual there
have been some bug fixes both to KCC (primarily the optimizer) and the
library.

KCC:
	As KCC sees wider and heavier use, progressively more obscure
over-optimization bugs get shaken out.  The arcane details are
unsuitable for listing here, but many thanks are due to those people who
found and reported them!
	In addition to bug fixes, some internal cleanup was done to
improve constant folding, regain more stack space, and remove the
previously fixed limitation on parse tree size.  Most of these changes are
not externally visible, but some that are:
	Error message output has been improved.  Although little mousy
errors still tend to panic KCC into a long series of hysterical
screams, the messages themselves are more compact, more informative, and
more well-structured.
	__COMPILER_KCC__ now exists as the sole KCC-dependent predefined
macro, so that portable programs can readily determine whether
KCC's <c-env.h> file, in particular, is available or not.
	The entry vector is now 3 words to allow for a binary
version number to be put in the 3rd word.
	Of great interest to systems programmers will be two new
built-in functions, _KCCsymfnd and _KCCsymval, which can obtain constant
symbol values from .UNV files at compile time.  <monsym.h> uses them to
provide a macro which gives very efficient access to all monitor
symbols.
	KCC now has an "-i=psect" switch to provide rudimentary support
for loading PSECT code.

LIBC:
	The C startup code now recognizes arguments of the form "@file" as
being indirect file specifications; the file is read and parsed into further
arguments.  This applies to all C programs including KCC, and provides a way
of getting around RSCAN buffer size limitations.
	modf() was changed to conform to the description in V7, ANSI,
and BSD; the description in H&S (CARM) appears to be wrong.
	The O_SYSFD flag was added to open(), to allow opening a FD with
an existing JFN.
	open() has been changed so that when opening a new file for
writing, it actually does an immediate CLOSF% and another OPENF%.  This
ensures that the file immediately exists and is visible, thus avoiding
a number of problems (invalid simultaneous access, file busy, etc) that
are hard to deal with otherwise.  The side effect of this is that if
the process is killed before it finishes, its output files will exist
with zero length, whereas before they would not exist at all.
	printf(), fprintf() and sprintf() now finally return the number
of characters they output; this will be -1 if an error occurred.
	The Un*x functions isatty() and ttyname() are provided.
	The TERMCAP functions now exist as LIBTRM.
	Fully portable time parsing and manipulation routines are
provided in LIBTMX; see LIBTMX.DOC.
09/11/87 KCC 575, LIBC 202: <2,,2>	"KCC-4" (fourth, never really released)

	The bad news is that this release is incompatible enough with
the previous versions that you will have to recompile everything you
want to link together.  This is mainly because the format of jmp_buf
(used by setjmp and longjmp) had to be expanded.  As long as this had
to happen, a few other structures were expanded too.  The $$CVER symbol
was updated to force LINK errors on any attempts to load incompatibly
compiled code.

	The good news is that this version should completely implement all
facilities described by the new 2nd edition of Harbison and Steele's "C: A
Reference Manual".  Some new system calls are also included.

KCC:
	Few changes, mostly bug fixes.  The __DATE__ and __TIME__ macros
have been implemented, which expand into the date and time of compilation.

LIBC:
	Major changes.  Many new functions were added.  In particular,
signals now work, which required some revamping of the Un*x system
call (USYS) simulation routines.  The following are the additions of
note:

	longjmp/setjmp now act like CARM/4.3BSD and can restore context
properly even from within a signal handler.
	The signal mechanism is intended to fully simulate 4.3BSD
sigvec, including the functions sigvec, sigblock, sigsetmask,
sigpause, sigreturn.  All TOPS-20 PSIs are provided for.  USYS calls
are handled atomically except when doing monitor calls; those which
are allowed to be interrupted will return EINTR errors.
	Some new ANSI functions were added to STDIO.  These include
setvbuf, remove, rename, tmpfile, tmpnam, v[fs]printf.
	Some new general ANSI utilities were added, including bsearch,
div, ldiv, strtod, strol, strtoul, onexit, strerror, clock, mktime.
	The time functions were completed and made portable.
	Several miscellaneous functions described in CARM (most from
SYSV) were added, including ctermid, cuserid, getcwd, getenv, putenv,
getlogin, getopt.
	A new "system call" was provided: forkexec(), which combines
the functions of fork() and exec() in a way which is extremely efficient
for TOPS-20 (and still portable to Un*x systems).  The system() routine
now uses this, as does the runtime when forking pipes.
	The jsys() routine was redone to provide a consistent interface
regardless of how the actual jsys returns success or failure.  It also
provides an indication of whether the jsys was interrupted, if this
was permitted for the call.
	Most important TTY ioctl() functions are now supported.
This includes the ability to set the SIGINT and SIGQUIT interrupt
characters.  RAW and CBREAK mode are implemented.
	There are some new documentation files.  LIBC.DOC and USYS.DOC
summarize the library routines in general and the USYS calls in
particular; SIGNAL.DOC provides more details on the KCC implementation
of signals.
03/17/87 KCC 560, LIBC 124: <2,,1>	Binary KCC update

	A copy of CC.EXE.560 is included which fixes a number of
annoying bugs that users encountered with KCC 557.  The sources are
still those for 557, however.  The library is unchanged.

03/06/87 KCC 557, LIBC 124: <2,,1>	Third formal distribution snapshot

	IMPORTANT: this version of KCC is incompatible with previous
versions!  The way that structures are returned from functions has
changed, and the layout of "char" and "short" objects in structures has
also changed.  In order to enforce this, the symbol $$CVER has been
updated, and any attempt to load .REL modules which have been produced
by incompatible versions of KCC will cause LINK to complain with an
error message similar to this:

	%LNKMDS Multiply-defined global symbol $$CVER
	        Detected in module PRINTF from file C:LIBC.REL
	        Defined value = 1000001, this value = 2000001

This is easily remedied by re-compiling old modules.  Fortunately, no
further incompatible changes are expected to be necessary.

	Nothing has really changed from the user's viewpoint.  However,
there are several new features available, and some inefficiencies
corrected.  The noteworthy changes are listed below, very briefly;
as usual, CC.DOC should be consulted for more complete and informative
details.

KCC: ---------------------------------------------------------------

KCC - Bug fixes:
	A multitude of minor bug fixes too trivial to mention, almost
all having to do with incorrectly optimized code.  One that wasn't
trivial was that {char c, *cp = &c;} used to produce an (int *)!

KCC - Incompatible changes:
	* "shorts" are now 18 bits long (halfwords), with sizeof(short) == 2.
	* The mechanism for returning structure values from functions
is different.  This is an internal change, invisible to the user, which
is much more efficient than the previous method.
	* Structure members of type "char" and "short" are now packed
differently (more compactly).  Any structure using these types will be
laid out differently in storage.
	* Integer narrowing and widening is now done properly in all
situations.  This may cause incorrectly written code to behave
differently.
	* Implicit arithmetic conversions now follow the ANSI
value-preserving rules rather than the old K&R and H&S
unsigned-preserving rules.  Ambiguous code may behave differently.
	* "float" values are no longer automatically converted to "double",
except for function arguments.  This conforms to the ANSI draft.
	* The "signed" keyword (introduced by ANSI) has been implemented.
	* "volatile" and "const" (also new from ANSI) are now reserved
words (but unimplemented).

KCC - Extension: New data types:
	5 new data types have been introduced, which act like "char"
but with different byte sizes.  You can now manipulate signed or
unsigned bytes of 6, 7, 8, 9, or 18 bits.  This is non-portable and
intended strictly for PDP-10 machine-dependent code where efficiency
is desirable.

KCC - Efficiency improvements:
	The change to the structure handling mechanism falls in this
category.  Structure copies used to always take two subroutine calls
and two copies; they now use a single in-line BLT (or a series of
single-word moves, whichever is best), and are much faster than
element-by-element copying.
	KCC's constant initialization code has been improved to the point
where almost all constants are now initialized at load time rather than
at run time; a similar mechanism eliminates the code that used to generate
string constant pointers.  You will see a significant difference with code
that uses many string literals; both startup time and program size are
reduced.
	KCC's pointer arithmetic for byte pointers is MUCH better.
Pointer comparison and subtraction formerly used subroutine calls and
many, many instructions; both now use a handful of in-line
instructions and some magic numbers.
	There are no more calls to internal run-time subroutines.
All of the operations which used to require this are now compiled
in-line, including double-int and int-double conversion, pointer
operations, and structure copying.

KCC - unsigned and signed data:
	KCC now fully supports "unsigned int" operations.  Some code
that uses unsigned integers will now compile differently.  Division in
particular needs many more instructions.  Any integer type, "char" in
particular, may be declared as "signed" and will behave accordingly.

KCC - Switch changes:
	-L=<str>  Passes <str> in the command string to the linking loader.
	-v=<fs>	(Verbosity) has been expanded; see CC.DOC.  -v alone prints out
		everything, including the loader command string.
	-l	Libraries loaded with the -l switch are now loaded in /SEARCH
			mode (they evidently weren't before).

KCC - Miscellaneous
	-d=sym now produces a *.CYM file instead of *.SYM, to avoid
conflicts with LINK output files.
	-P=ansi+kcc is now the default.  The effects are minor and documented
in CC.DOC.  The three new ANSI keywords of "signed", "const", and "volatile"
are recognized, although only the first has any real effect.


LIBC: ---------------------------------------------------------------

	More minor bug fixes to the LIBC stdio routines.

	open() now attempts to track down and expand logical device
names completely (thus performing what the monitor should be doing but
isn't).  Thus, open("X:subdir/filename.ext",0) will work even if X is
a search path.  Previously only the first device/directory could be tried.
This permits KCC #includes to work with C: defined as a search path.

	malloc() no longer allocates pages 770-777 (non-extended) or
37770-37777 (extended), so that obsolete forms of DDT can be mapped therein.
12/07/86 KCC 537, LIBC 93: <1,,1>	Informal distribution snapshot
	Various additional bug fixes.
There may be some stray files and other cruft as this was made just
so that Systems Concepts could get the latest stuff; some things haven't
been checked out.

10/21/86 KCC 534
	Fixed a register allocation bug which got tickled by very large
floating-point expressions.
LIBC: fixed a minor scanf bug.  Fixed system/vfork/exit to work properly.
09/28/86 KCC 533, LIBC 14: <1,,1>	Second formal distribution snapshot

	This is called a "snapshot" to emphasize that while the sources
in this distribution should be consistent and working, the compiler and
library are still under active development to remove known quirks and
deficiencies, and have already changed.
	As before, all .REL files must be recompiled; the STDIO
structures are different and there are new C runtime hooks.  Most
importantly, the symbol $$CVER is now defined in every module
(currently it is <1,,1>) so as to detect any future conflicts when
loading modules that were incompatibly compiled.
	Various change notes follow.  For all of them, see the CC.DOC
file for more details.

KCC: ---------------------------------------------------------------

KCC - Command line
	There are several new switches, and the way KCC interprets
filenames is slightly different.  A file with a .REL extension is
always ignored, but is passed on to the loader.  A file without any
extension is special if the -q switch is given; it is only compiled if
the .C source is more recent than the .REL binary.
	New switches:
	-A	Specify nonstandard assembler header file (old meaning of -H)
	-H	Specify nonstandard path for #include <> files.
	-i	Loader: load program to run with extended addressing.
	-L	Loader: nonstandard path for library files.
	-l	Loader: search specified library
	-o	Loader: specify .EXE filename.
	-P	Set portability level.
	-q	Compile extension-less files conditionally.

KCC - General
	There are no real changes in code generation.  A couple of
over-optimization bugs were fixed, and a couple of other optimizations
added.
	KCC now generates its own assembler header based on the target
CPU, assembler, and system; the file C-HDR.FAI no longer exists.
	Two more KCC extensions were added: the `ident` quoting syntax,
and the asm() in-line code mechanism.  #asm and #endasm must now appear
only within a function body.
	KCC identifiers are now unique up to 31 characters, as per the
ANSI draft (external symbols are still only unique up to 6).
	The runtime variable $EXADF no longer exists.  The decision on
whether to run extended is now made at load time, either with the -i switch
or by loading C:LIBCKX as the first module.

LIBC: --------------------------------------------------------------

LIBC - CHAR
	ispunct() was "fixed" to exclude space.  CARM claims space is
included, but neither ANSI nor BSD does so.  We assume this is a mistake
in CARM.

LIBC - STRING
	The routines memchr, memcmp, memcpy, memset were added from ANSI.

LIBC - STORAGE
	free(), malloc(), and realloc() now behave as per ANSI when given
NULL or zero as arguments.

LIBC - STDIO
	The "update" mode is now supported for streams.  In addition
to this, the library implements the ANSI concept of text vs binary
streams.  The 'R' specification was flushed; 'b', '7', '8', '9', 'C',
and "C-" were added.

LIBC - other
	system() was added.
07/26/86 KCC 512, CLIB 225:	First formal distribution version.
	
	If you already had a version of KCC on your system, you will need
to recompile any .REL modules generated by the old version, because the
new KCC uses a different STDIO package.  .EXE files do not need to be
recompiled.