733 lines
		
	
	
	
		
			30 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			733 lines
		
	
	
	
		
			30 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
 8-Dec-89  Ceriel Jacobs (ceriel) at ceriel
 | 
						|
	Bug fix: one of the many ZRL encodings was decoded wrong.
 | 
						|
 | 
						|
22-Nov-89  Ceriel Jacobs (ceriel) at ceriel
 | 
						|
	Some more speed-up changes, resulting in another 5%.
 | 
						|
 | 
						|
13-Nov-89  Ceriel Jacobs (ceriel) at ceriel
 | 
						|
	Many changes for speed-up (resulting speed-up: 20-25%).
 | 
						|
	Also fixed serious problem in floating point handling: the existing
 | 
						|
	code assumed that the low order 4 bytes of a double could be used as
 | 
						|
	a float (4 bytes). This is NOT true for most floating point
 | 
						|
	implementations, notably IEEE ones.
 | 
						|
 | 
						|
 3-Oct-88  Dick Grune (dick) at dick
 | 
						|
	Since the definitions of VERSION and MAGIC are now available from
 | 
						|
	standard include files, e.out.h can be simplified.
 | 
						|
 | 
						|
27-May-88  Dick Grune (dick) at dick
 | 
						|
	Testing with the UNIX system call tester by Leonie van der Voort
 | 
						|
	revealed a few errors: when length was negative in a call of read
 | 
						|
	or write, funny values were passed to Malloc; the size of the
 | 
						|
	elements in the mtime/atime array passed to a call of utime was
 | 
						|
	wsize rather than INT4SIZE, as it probably should have been.
 | 
						|
 | 
						|
25-May-88  Dick Grune (dick) at dick
 | 
						|
	It is just too much of a drag to be able to unstack even the last
 | 
						|
	RSB, the one that contains the initial setting of the machine.
 | 
						|
	newLB has to be patched, and now it seems that also newPC has to
 | 
						|
	make an exeception for this case.  We now don't unstack the
 | 
						|
	original RSB.
 | 
						|
 | 
						|
19-May-88  Dick Grune (dick) at dick
 | 
						|
	We now also dump the Function Return Area, when giving a stack
 | 
						|
	dump.
 | 
						|
 | 
						|
17-May-88  Dick Grune (dick) at dick
 | 
						|
	Segment checking for pointers should also be done for subtraction,
 | 
						|
	and give a different warning.
 | 
						|
 | 
						|
16-May-88  Dick Grune (dick) at dick
 | 
						|
	The implementation of the MON call 'exec' was sloppy about the
 | 
						|
	buffers used: all strings were assumed to have a maximum length of
 | 
						|
	128, and the maximum number of args or environ entries was built
 | 
						|
	in.  We now scan the whole works to determine the size.
 | 
						|
 | 
						|
16-May-88  Dick Grune (dick) at dick
 | 
						|
	A stack dump with given size would look funny if the size was large
 | 
						|
	than the original stack, or when the dump happened to start in the
 | 
						|
	middle of a RSB.
 | 
						|
 | 
						|
14-May-88  Dick Grune (dick) at dick
 | 
						|
	Rethinking the start-up procedure has resulted in the removal of the
 | 
						|
	flag LB_def and the RSB is now stacked and unstacked in one blow.
 | 
						|
	LB = ML + 1 is now a special case.
 | 
						|
 | 
						|
11-May-88  Dick Grune (dick) at dick
 | 
						|
	Code handling the Function Return Area was spread over a number of
 | 
						|
	files; since there was already an include file fra.h, I made a file
 | 
						|
	fra.c.  Likewise for alloc.[ch]
 | 
						|
 | 
						|
10-May-88  Dick Grune (dick) at dick
 | 
						|
	The whole segment-checking stuff is now concentrated in segment.c
 | 
						|
	(and made correct!)
 | 
						|
 | 
						|
 9-May-88  Dick Grune (dick) at dick
 | 
						|
	Things would be a lot simpler if LB and AB and SP could start from
 | 
						|
	ML+1, but they cannot because ML+1 gives overflow.  So we now set ML
 | 
						|
	to the highest word boundary minus 1.
 | 
						|
 | 
						|
 8-May-88  Dick Grune (dick) at dick
 | 
						|
	The whole business of deriving AB from LB every time you need it is
 | 
						|
	unnatural: it is a separate register in its own right and
 | 
						|
	recalculation is only possible since we happen to have a linear
 | 
						|
	stack implementation. -> a normal register in the EM machine, set
 | 
						|
	in newLB().
 | 
						|
 | 
						|
 7-May-88  Dick Grune (dick) at dick
 | 
						|
	In the non-checking version it did not even check for bad proc
 | 
						|
	idfs, actions on double words with wsize == 4, etc., in text.h.  It
 | 
						|
	now checks.
 | 
						|
 | 
						|
 7-May-88  Dick Grune (dick) at dick
 | 
						|
	When a trap occurs it is often not at all clear why it happened;
 | 
						|
	e.g., the trap ESTACK may have several causes except stack
 | 
						|
	overflow: setting SP to an odd value, setting LB to a place where
 | 
						|
	there is no RSB, and so on.  Now all such traps are preceded by a
 | 
						|
	warning; the combined action is written as   wtrap(W..., E...)
 | 
						|
	with W... the warning number and E... the trap number.
 | 
						|
 | 
						|
 6-May-88  Dick Grune (dick) at dick
 | 
						|
	The offsets in the RSB and its size were recalculated every time;
 | 
						|
	this was especially ridiculous in accessing a formal parameter
 | 
						|
	based on AB; they are now precalculated as soon as psize and wsize
 | 
						|
	are known.
 | 
						|
 | 
						|
 6-May-88  Dick Grune (dick) at dick
 | 
						|
	The one-bit register HaltOnTrap is not powerful enough; it has to
 | 
						|
	have a special value during loading the EM file (for floating
 | 
						|
	overflow in calculations). We now have OnTrap with three values.
 | 
						|
 | 
						|
 3-May-88  Dick Grune (dick) at dick
 | 
						|
	If we want to check that PC does not jump from procedure to
 | 
						|
	procedure, we have to know which procedure is running. Introduced
 | 
						|
	an EM register PI for Procedure Identifier. We also need the limits
 | 
						|
	for each procedure; for this purpose, the procedure descriptor
 | 
						|
	table is now preprocessed on start-up. New files: proctab.[ch].
 | 
						|
 | 
						|
 3-May-88  Dick Grune (dick) at dick
 | 
						|
	There was still a considerable confusion between ignorable and
 | 
						|
	non-ignorable traps. All ignorable traps are now handled on the
 | 
						|
	spot and the procedure trap() is not called if the trap is ignored.
 | 
						|
	This means that arm_trap() has disappeared.
 | 
						|
 | 
						|
 2-May-88  Dick Grune (dick) at dick
 | 
						|
	The GTO was done by a rude store in LB, SP and PC; now it properly
 | 
						|
	unwinds the stack.
 | 
						|
 | 
						|
25-Apr-88  Dick Grune (dick) at dick
 | 
						|
	With the advent of the Sun 4 RISC machine, the use of variable length
 | 
						|
	argument lists has become a liability.  The answer is the include file
 | 
						|
	<varargs.h>.  It appears that _doprnt() is sufficiently universal,
 | 
						|
	fortunately.
 | 
						|
 | 
						|
24-Apr-88  Dick Grune (dick) at dick
 | 
						|
	There are two levels to stack dumping, the RSB list and the whole
 | 
						|
	contents; we now control the first by d1 and the rest by d2.
 | 
						|
 | 
						|
24-Apr-88  Dick Grune (dick) at dick
 | 
						|
	Dumping the GDA and heap is under control of the GDA= and HEAP=
 | 
						|
	parameters rather than under d3 or d4.  Changed their id-s to +1
 | 
						|
	and *1, so they can be set in the program but not from the
 | 
						|
	LOGMASK=.
 | 
						|
 | 
						|
24-Apr-88  Dick Grune (dick) at dick
 | 
						|
	Now that the Logging Machine has been baptized, time has come to
 | 
						|
	call the controlling define LOGGING again. Sorry for the confusion.
 | 
						|
 | 
						|
24-Apr-88  Dick Grune (dick) at dick
 | 
						|
	Trying to have the interpreter interpret itself has given rise to
 | 
						|
	many small improvements, and a considerable correction to npush() and
 | 
						|
	st_lds(). We are again trying.
 | 
						|
 | 
						|
15-Apr-88  Dick Grune (dick) at dick
 | 
						|
	The tallying does in no way belong to the logging machine, so I
 | 
						|
	removed the dependency on the flag CHECKING (see 15-Feb-88).
 | 
						|
 | 
						|
15-Apr-88  Dick Grune (dick) at dick
 | 
						|
	The instruction counter  inr  is properly speaking no part of the
 | 
						|
	EM machine, but belongs to the logging machine.
 | 
						|
 | 
						|
15-Apr-88  Dick Grune (dick) at dick
 | 
						|
	It is unnatural for the logging machine to derive the values of its
 | 
						|
	variables from shell variables.  Shell variables are very global
 | 
						|
	and represent a setting in which the user wishes to work.  The
 | 
						|
	values of the logging variables change from moment to moment.  They
 | 
						|
	are now derived from make-like assignments in the command line.
 | 
						|
 | 
						|
14-Apr-88  Dick Grune (dick) at dick
 | 
						|
	To allow testing routines that handle heap and stack overflow, two
 | 
						|
	command line parameters have been added, -hN and -sN, that limit
 | 
						|
	the heap and stack size.
 | 
						|
 | 
						|
14-Apr-88  Dick Grune (dick) at dick
 | 
						|
	The EM Manual provides two traps for undefined integers and floats.
 | 
						|
	Since the interpreter does not have special values for undefined;
 | 
						|
	since it relies on the shadow bytes to give a warning; and in view
 | 
						|
	of the frequent occurrence of such undefined values, the
 | 
						|
	interpreter just gives a warning.
 | 
						|
	It would be nice if the interpreter could also, on request, exhibit
 | 
						|
	the formally correct behaviour of giving a trap.  This is, however,
 | 
						|
	impossible, since such a trap would have to rely on the shadow bits
 | 
						|
	and the shadow bits are only present in the checking version.
 | 
						|
	The conclusion is that we do not give a trap on use of undefined,
 | 
						|
	ever.
 | 
						|
 | 
						|
 2-Apr-88  Dick Grune (dick) at dick
 | 
						|
	The warnings about type T expected left one in the dark as to what
 | 
						|
	*was* there.  Now it prints a continued warning telling about the
 | 
						|
	type found.  To this end, warningcont() prints a chained warning.
 | 
						|
 | 
						|
 1-Apr-88  Dick Grune (dick) at dick
 | 
						|
	When a pointer is needed and it turns out to be an integer, a test
 | 
						|
	is done to see if it happens to be zero, in which case all is well.
 | 
						|
	This was, however, a rather weird test; it is much simpler, when
 | 
						|
	storing a zero value, to switch on both the SH_INT bit and the
 | 
						|
	SH_DATAP bit.
 | 
						|
 | 
						|
31-Mar-88  Dick Grune (dick) at dick
 | 
						|
	The logging machine has now been separated from the EM machine as
 | 
						|
	much as is reasonably possible.  Weak points are still forking and
 | 
						|
	the handling of the abbreviations AT= and L= .
 | 
						|
 | 
						|
29-Mar-88  Dick Grune (dick) at dick
 | 
						|
	On many systems it is inappropriate to grab file descriptors 19 and
 | 
						|
	18 for messages and logging.  It now finds the highest ones (with a
 | 
						|
	limit of 99, for systems that have an unlimited supply of them).
 | 
						|
 | 
						|
29-Mar-88  Dick Grune (dick) at dick
 | 
						|
	There were some terminological inaccuracies about the difference
 | 
						|
	between a procedure identifier and a procedure descriptor.
 | 
						|
 | 
						|
29-Mar-88  Dick Grune (dick) at dick
 | 
						|
	Since the disassembler is in no way involved in the logging machine,
 | 
						|
	it seems inappropriate to use LOG(()) to produce the text.  Just
 | 
						|
	using printf() is much cleaner.
 | 
						|
 | 
						|
28-Mar-88  Dick Grune (dick) at dick
 | 
						|
	Although trap handling had a file for itself, trap.c, warning
 | 
						|
	handling was still done inside io.c.  Introduced a new file,
 | 
						|
	warn.c, to handle the warnings.
 | 
						|
 | 
						|
26-Mar-88  Dick Grune (dick) at dick
 | 
						|
	Providing a good dump of a 2/4 machine is not easy; it is not clear
 | 
						|
	where a pointer may be found.  This was solved by just printing
 | 
						|
	words everywhere, which was unsatisfactory.  Now pointers are
 | 
						|
	printed wherever the shadow bits indicate that there might be a
 | 
						|
	pointer there, i.e. when the address is a word multiple and the 4
 | 
						|
	bytes all have the pointer bit on.  This is less unsatisfactory,
 | 
						|
	though not good.
 | 
						|
 | 
						|
23-Mar-88  Dick Grune (dick) at dick
 | 
						|
	Adapted to the new u flag in ip_spec.t; this cleared up the text
 | 
						|
	segment access in text.h.
 | 
						|
 | 
						|
21-Mar-88  Dick Grune (dick) at dick
 | 
						|
	Implemented the requirement that, when doing an RET or RTT, the stack
 | 
						|
	pointer must be back where it started.  This required the proc.
 | 
						|
	idf to be recorded in the Return Status Block.
 | 
						|
 | 
						|
20-Mar-88  Dick Grune (dick) at dick
 | 
						|
	Likewise (see below) for the text of the trap messages.
 | 
						|
 | 
						|
20-Mar-88  Dick Grune (dick) at dick
 | 
						|
	Having the text, defines and numerical values in three different
 | 
						|
	files is kind of inconvenient.  They are now centralized in
 | 
						|
	../doc/appA (Appendix A of the manual) where they appear with
 | 
						|
	explanations.  The files  warn_msg (with texts)  and  warn.h (with
 | 
						|
	defines) are generated from it through  M.warn_msg and M.warn_h,
 | 
						|
	resp.
 | 
						|
 | 
						|
20-Mar-88  Dick Grune (dick) at dick
 | 
						|
	Introduced the use of $(EM)/h/em_abs.h to include the trap numbers
 | 
						|
	and the positions of LIN and FIL (although this seems a funny place
 | 
						|
	to find them).
 | 
						|
 | 
						|
20-Mar-88  Dick Grune (dick) at dick
 | 
						|
	Concentrated all e.out.h defines in e.out.h; this should probably
 | 
						|
	go into $(EM)/h one of these days.
 | 
						|
 | 
						|
20-Mar-88  Dick Grune (dick) at dick
 | 
						|
	The interpreter in the EM Manual does not use EBADLIN; we now decide
 | 
						|
	that it is raised if the line number is larger than that mentioned
 | 
						|
	in the EM header, part 2.
 | 
						|
 | 
						|
19-Mar-88  Dick Grune (dick) at dick
 | 
						|
	The EM Manual states that a number of overflow tests need not be done
 | 
						|
	if the FB_TEST bit in the second header word is not on.
 | 
						|
	Experimental implementation of this shows a speed-up of 16%, so it
 | 
						|
	is probably worth while.
 | 
						|
 | 
						|
18-Mar-88  Dick Grune (dick) at dick
 | 
						|
	Reading the opcode and the argument bytes from the text segment was
 | 
						|
	done by a procedure call, but the procedure call (newPC()) did not
 | 
						|
	test for running out of the text segment.  Replaced by a macro + a
 | 
						|
	number of other similar speed-ups.
 | 
						|
 | 
						|
18-Mar-88  Dick Grune (dick) at dick
 | 
						|
	Reraising the signal is not really useful; it is more useful never
 | 
						|
	to catch a synchronous trap.  UNIX then automatically does what it
 | 
						|
	has to do.
 | 
						|
 | 
						|
17-Mar-88  Dick Grune (dick) at dick
 | 
						|
	Redoing the trap mechanism lead to looking at the RTT vs RET
 | 
						|
	instruction; it is nice to know where a Return Status Block
 | 
						|
	originated: start-up, call, trap, non-restartable trap.  We now
 | 
						|
	push this info as topmost item on the stack.  Values etc. in rsb.h
 | 
						|
 | 
						|
15-Mar-88  Dick Grune (dick) at dick
 | 
						|
	I finally found out why the interpreter was spending 30% of
 | 
						|
	its time in the system: it did a setjmp for each and every EM
 | 
						|
	instruction, and IT does a call of signal().  Redoing this lead to
 | 
						|
	considerable hacking in the trap handling mechanism.  See the
 | 
						|
	chapter in the documentation.
 | 
						|
 | 
						|
11-Mar-88  Dick Grune (dick) at dick
 | 
						|
	Not all C compilers provide floating point operations.  Installed a
 | 
						|
	file nofloat.h with a flag NOFLOAT, which, if defined, suppresses
 | 
						|
	the use of fp operations.  The resulting interpreter will load EM
 | 
						|
	files with floats in the GDA (but ignore them) but will give a
 | 
						|
	fatal error upon attempt to execute a fp instruction.
 | 
						|
 | 
						|
10-Mar-88  Dick Grune (dick) at dick
 | 
						|
	Added procedure identifier indications in the disassembly output,
 | 
						|
	which helps in reading it.
 | 
						|
 | 
						|
 8-Mar-88  Dick Grune (dick) at dick
 | 
						|
	Implemented the other half of the type checking on ptr; this involved
 | 
						|
	a macro  i2p()  to convert from index to pointer.
 | 
						|
 | 
						|
 6-Mar-88  Dick Grune (dick) at dick
 | 
						|
	Officially C does not have a type 'unsigned long', but the
 | 
						|
	interpreter uses it heavily. Now it would be nice if we could make
 | 
						|
	a version that does not use unsigned long.  The main difficulty is
 | 
						|
	the file do_unsar.c for doing unsigned arithmetic; for the rest it
 | 
						|
	is possible and partway done.  Most sizes are now of the type  size.
 | 
						|
 | 
						|
 4-Mar-88  Dick Grune (dick) at dick
 | 
						|
	The list of warnings was fixed and contiguous, which was a nuisance
 | 
						|
	when adding warnings.  Now there is a mapping from warning numbers
 | 
						|
	to the corresponding strings through a routine which does the
 | 
						|
	lookup.
 | 
						|
 | 
						|
 3-Mar-88  Dick Grune (dick) at dick
 | 
						|
	The whole address testing for system calls in MON was shaky; most
 | 
						|
	of them just produced traps. Corrected; they now return -1 and set
 | 
						|
	errno to 14 (EFAULT).
 | 
						|
 | 
						|
 1-Mar-88  Dick Grune (dick) at dick
 | 
						|
	Some compilers use V7 ioctl request codes, some use the local
 | 
						|
	codes.  To accommodate both, we have a compile-time flag, V7IOCTL,
 | 
						|
	which, if defined, causes the ioctl requests to be interpreted as
 | 
						|
	V7 requests (of the form   't'<<8 | x)
 | 
						|
 | 
						|
 1-Mar-88  Dick Grune (dick) at dick
 | 
						|
	String arguments to system calls were, for the most part, just
 | 
						|
	picked up, without any serious testing.  Corrected in moncalls.c;
 | 
						|
	violation results in errno == 14 (EFAULT) as it should.
 | 
						|
 | 
						|
29-Feb-88  Dick Grune (dick) at dick
 | 
						|
	Concentrates all exits in a function  close_down()  which does
 | 
						|
	calls to fclose() on the opened files, may reraise a caught signal
 | 
						|
	and exits with the given return code.
 | 
						|
 | 
						|
26-Feb-88  Dick Grune (dick) at dick
 | 
						|
	The type ptr was used very loosely; tightened up the code in many,
 | 
						|
	many places.  Introduced a macro p2i(p) which converts a "pointer"
 | 
						|
	(EM address) to an index in the machine array.  This modification
 | 
						|
	necessitated a great many small changes and allowed some
 | 
						|
	considerable simplifications.
 | 
						|
 | 
						|
22-Feb-88  Dick Grune (dick) at dick
 | 
						|
	The format of a procedure identifier was a pointer in places and a
 | 
						|
	long in others.  It is now a psize unsigned integer.
 | 
						|
 | 
						|
16-Feb-88  Dick Grune (dick) at dick
 | 
						|
	The code for calculating the sizes of the environ strings and the
 | 
						|
	argument strings was unreadable.  Rewritten in init.c.
 | 
						|
 | 
						|
15-Feb-88  Dick Grune (dick) at dick
 | 
						|
	The tallying is not likely to be used by a user of the non-logging
 | 
						|
	version, so it may as well be absent then, to save space.  Made all
 | 
						|
	tallying dependent on CHECKING.
 | 
						|
 | 
						|
15-Feb-88  Dick Grune (dick) at dick
 | 
						|
	When allocating space for the stack and the global data area, the
 | 
						|
	shadow bytes were not set to SH_UNDEF.  Since the undef-ing of the
 | 
						|
	shadow bytes occurs in several places, I introduced two routines,
 | 
						|
	st_clear_area() and dt_clear_area() for the purpose.
 | 
						|
 | 
						|
12-Feb-88  Dick Grune (dick) at dick
 | 
						|
	The dumping format of the text segment (just bytes in decimal) was
 | 
						|
	unsatisfactory.  It turned out quite easy to use the mkswitch from
 | 
						|
	the switch directory to hack together a simple disassembler, which
 | 
						|
	produced readable EM instructions.
 | 
						|
	Moreover, text does not change while the program runs, so dumping
 | 
						|
	it at a given instruction is quite meaningless.  We now dump it
 | 
						|
	right at the beginning, when the -T option is given.
 | 
						|
 | 
						|
 4-Feb-88  Dick Grune (dick) at dick
 | 
						|
	The whole idea of a driver (int.c) is superfluous now.  Moreover
 | 
						|
	there were naming problems all the time.  Removed references to the
 | 
						|
	driver.
 | 
						|
 | 
						|
 1-Feb-88  Dick Grune (dick) at dick
 | 
						|
	Measurements have shown that a checking but not logging interpreter
 | 
						|
	is only a few percents faster that one that does both, at the
 | 
						|
	expense of considerably lower functionality.  So I merged logging and
 | 
						|
	checking in the file checking.h.  Made testing for logging more
 | 
						|
	efficient by having a single variable   logging   which is set as
 | 
						|
	soon as   must_log && inr >= log_start  is true.  This is faster
 | 
						|
	and much leaner code.  Exit the function  interesting().
 | 
						|
 | 
						|
 1-Feb-88  Dick Grune (dick) at dick
 | 
						|
	Removed the warning about switched-off warnings and traps; they
 | 
						|
	were a nuisance.
 | 
						|
 | 
						|
29-Jan-88  Dick Grune (dick) at dick
 | 
						|
	The zero pointer arithmetic check was implemented incorrectly.
 | 
						|
	While correcting this, I cleaned up all the checking and warning
 | 
						|
	mechanisms, up to a point.  There is much more one can do.
 | 
						|
	Unfortunately this involved renumbering the warnings, so we hack
 | 
						|
	the manual to match.
 | 
						|
 | 
						|
27-Jan-88  Dick Grune (dick) at dick
 | 
						|
	Line number and file name also in last line of stack dump, for
 | 
						|
	uniformity with RSB descriptions.
 | 
						|
 | 
						|
25-Jan-88  Dick Grune (dick) at dick
 | 
						|
	The default log mask is better at A-Z9d4twx9 than at A-Z9d1twx9.
 | 
						|
 | 
						|
23-Jan-88  Dick Grune (dick) at dick
 | 
						|
	Warnings are now tallied not only by warning number, but also by
 | 
						|
	file name and line number.  Used simple linked lists in io.c.
 | 
						|
 | 
						|
23-Jan-88  Dick Grune (dick) at dick
 | 
						|
	Having an address space of 2**32 is absurd; it will have to be 2**31
 | 
						|
	to implement uninitialized pointers.  Just to be able to give a
 | 
						|
	good example in "How To Use the Interpreter", I changed MAX_ADR4 to
 | 
						|
	I_MAXS4 (was I_MAXU4).
 | 
						|
 | 
						|
22-Jan-88  Dick Grune (dick) at dick
 | 
						|
	The grammar of a float in the manual, the grammar of an UnsignedReal
 | 
						|
	in the Pascal manual and the implementation in read.c were all
 | 
						|
	slightly different.  I made a clear distinction between the Pascal
 | 
						|
	version (OK), the more loose implementation of "acceptable float"
 | 
						|
	(with warning) and just garbage (with fatal error). ".e3" is an
 | 
						|
	acceptable float.
 | 
						|
 | 
						|
21-Jan-88  Dick Grune (dick) at dick
 | 
						|
	The interpreter did not catch stores at location 0.  Changed this
 | 
						|
	by making the LIN and FIL locations ROM.  Introduced macros for
 | 
						|
	protecting the data space (analogous to protecting the RSB in the
 | 
						|
	stack).  Moved all shadow byte handling to shadow.h.  LIN, LNI and FIL
 | 
						|
	are implemented by first lifting the write ban by dt_unprot, writing
 | 
						|
	and then restoring it by dt_prot.
 | 
						|
 | 
						|
 8-Jan-88  Dick Grune (dick) at dick
 | 
						|
	The AT shell variable stopped one instruction too late. Corrected
 | 
						|
	in main.c.
 | 
						|
 | 
						|
 8-Dec-87  Dick Grune (dick) at dick
 | 
						|
	I was explained that there is a subtle difference between the trap
 | 
						|
	routine address being 0 and the default action upon trap. It says
 | 
						|
	in the beginning of chapter 9 (Traps and Interrupts) of IR-81:
 | 
						|
	Initially the pointer used is zero and all traps halt the program
 | 
						|
	with ... The meaning of the SIG instruction is stated as: Trap
 | 
						|
	errors to proc identifier on top of stack, -2 resets default. This
 | 
						|
	means, I am told, that SIG with -2 restores the "pointer used" to
 | 
						|
	zero and "directs all traps to halt the program ...", and that SIG
 | 
						|
	with 0 just registers proc 0 as the trap routine.
 | 
						|
 | 
						|
	Although I think this raises more questions than it answers (how
 | 
						|
	can I see if the previous trap routine was 0 or default?) I
 | 
						|
	implemented it by adding an EM machine register HaltOnTrap, which
 | 
						|
	is set in the non-default case.
 | 
						|
 | 
						|
 1-Dec-87  Dick Grune (dick) at dick
 | 
						|
	When debugging with the interpreter one often uses a call like
 | 
						|
		LOG=123455 STOP=123457 int .....
 | 
						|
	Added a shell variable AT which effects the above:
 | 
						|
		AT=123456 int ...
 | 
						|
 | 
						|
27-Nov-87  Dick Grune (dick) at dick
 | 
						|
	The shift distance in shifts and rotates must be in the range 0
 | 
						|
	to object size in bits - 1, as it says in IR-81. This introduced a
 | 
						|
	lot of inline code in DoSLI .. DoROR that should maybe go into
 | 
						|
	subroutines.
 | 
						|
 | 
						|
23-Nov-87  Dick Grune (dick) at dick
 | 
						|
	It turned out that LOG(("@S was a prefix both in do_store.c and in
 | 
						|
	do_sets.c.  Changed to @Y in the latter.
 | 
						|
 | 
						|
23-Nov-87  Dick Grune (dick) at dick
 | 
						|
	SLI (shift left int) did an incorrect overflow test (failed on
 | 
						|
	negative shift argument).
 | 
						|
 | 
						|
22-Nov-87  Dick Grune (dick) at dick
 | 
						|
	Reformatted the output of the dump of the text and of the
 | 
						|
	procedure descriptors. The latter is now more or less
 | 
						|
	readable.
 | 
						|
 | 
						|
22-Nov-87  Dick Grune (dick) at dick
 | 
						|
	Took all the direct memory access actions together in memdirect.h.
 | 
						|
	This allows more readable code in dump.c and in a few other places.
 | 
						|
 | 
						|
10-Nov-87  Dick Grune (dick) at dick
 | 
						|
	The stack dump is too unstructured and does not give enough
 | 
						|
	information. Moreover, the position reporting in the various dump
 | 
						|
	lines is erratic. Changed the routine do_log() to have two
 | 
						|
	variants, one in which the format starts with @, which causes the
 | 
						|
	position to be reported, and one in which the format starts with a
 | 
						|
	blank, which is printed as is.
 | 
						|
	Added two routines st_raw() and st_rsb() to print the raw and
 | 
						|
	Return Status Block portions of the stack, resp., and displ_fil(),
 | 
						|
	to print the name of the file, if at all possible. The stack
 | 
						|
	parsing can be switched off with the -r option.
 | 
						|
 | 
						|
 9-Nov-87  Dick Grune (dick) at dick
 | 
						|
	Redressed the treatment of the Return Status Block, to give a
 | 
						|
	better dump.
 | 
						|
 | 
						|
 1-Nov-87  Dick Grune (dick) at dick
 | 
						|
	The present segment checking is not very informative and produces
 | 
						|
	complaints about intermediate results, which is annoying.
 | 
						|
	This is not easily corrected. For each pointer, one should keep
 | 
						|
	track where it originated, and when it is dereferenced a check
 | 
						|
	should be made to see if it is applied to the original segment.
 | 
						|
	This is kind of stiff to implement.
 | 
						|
	For the time being, I have made the whole segment checking subject
 | 
						|
	to a compile-time flag, SEGCHECK, to be kept in segcheck.h. The
 | 
						|
	flag will normally be off, which saves time, space and
 | 
						|
	inappropriate warnings.
 | 
						|
 | 
						|
28-Oct-87  Dick Grune (dick) at dick
 | 
						|
	Small changes:
 | 
						|
	-	put Malloc etc in a header file: alloc.h
 | 
						|
	-	removed dt_ldf() (unused)
 | 
						|
	-	make static routines and data PRIVATE, to allow both
 | 
						|
			static and extern
 | 
						|
 | 
						|
25-Oct-87  Dick Grune (dick) at dick
 | 
						|
	arg_lae() should not check against HB but against max_addr, for
 | 
						|
	funny address calculations as performed by e.g. lex.
 | 
						|
 | 
						|
14-Oct-87  Dick Grune (dick) at dick
 | 
						|
	Exece in moncalls.c cannot succeed (if it succeeds, it's gone!)
 | 
						|
	Corresponding code removed and rest straightened out.
 | 
						|
 | 
						|
13-Oct-87  Dick Grune (dick) at dick
 | 
						|
	Brought the interpreter under RCS and CVS.
 | 
						|
 | 
						|
12-Oct-87  Dick Grune (dick) at dick
 | 
						|
	Added a -t option in main.c to switch the tallying on.
 | 
						|
 | 
						|
11-Oct-87  Dick Grune (dick) at dick
 | 
						|
	Added two routines, tally() and out_tally() for (you guessed it)
 | 
						|
	tallying.  out_tally() produces a readable file with for each
 | 
						|
	source file the name followed by a number of lines, each
 | 
						|
	containing a line number, the number of times that line was
 | 
						|
	entered and the number of instructions executed on that line.
 | 
						|
	Somebody should write a program to merge this with the original
 | 
						|
	files.
 | 
						|
 | 
						|
 3-Oct-87  Dick Grune (dick) at dick
 | 
						|
	Added routines for  fabs(), pow() and floor() to avoid having to
 | 
						|
	invoke -lm.
 | 
						|
 | 
						|
 2-Oct-87  Dick Grune (dick) at dick
 | 
						|
	Floating point constants that started with a . were read
 | 
						|
	incorrectly, as the mantissa was not initialized in that case.
 | 
						|
 | 
						|
25-Sep-87  Dick Grune (dick) at tjalk
 | 
						|
	All access to the LIN and FIL information has been brought
 | 
						|
	together in a header file  linfil.h,  which contains #defines for
 | 
						|
	putLIN(), getLIN(), putFIL() and getFIL().
 | 
						|
 | 
						|
20-Sep-87  Dick Grune (dick) at tjalk
 | 
						|
	Added a routine core_dump() which dumps core after a fatal error.
 | 
						|
	The core image consists of the values of the EM parameters and
 | 
						|
	registers, by name; ie.
 | 
						|
		wsize=4
 | 
						|
		psize=4
 | 
						|
		ML=4294967295
 | 
						|
		HB=816
 | 
						|
	etc., one to a line, followed by
 | 
						|
		fwrite(text, 1, DB, core_file);
 | 
						|
		fwrite(FRA, 1, FRALimit, core_file);
 | 
						|
		fwrite(data, 1, HL, core_file);
 | 
						|
		fwrite(stack, 1, ML+1-SL, core_file);
 | 
						|
	possibly followed by
 | 
						|
		fwrite(FRA_sh, 1, FRALimit, core_file);
 | 
						|
		fwrite(data_sh, 1, HL, core_file);
 | 
						|
		fwrite(stack_sh, 1, ML+1-SL, core_file);
 | 
						|
	so somebody could write a formatter for it.
 | 
						|
 | 
						|
 | 
						|
18-Sep-87  Dick Grune (dick) at tjalk
 | 
						|
	The function return area was a fixed-size array. Now it is
 | 
						|
	allocated through Malloc(), like the other memory constituents of
 | 
						|
	the EM machine.  This introduced the -R-option, to set the size of
 | 
						|
	the return area (default is 8).
 | 
						|
 | 
						|
13-Sep-87  Dick Grune (dick) at tjalk
 | 
						|
	Restructured global.h to better reflect what are EM registers and
 | 
						|
	what are implementation variables. This introduced read.h to
 | 
						|
	concentrate the EM header quantities.
 | 
						|
 | 
						|
10-Sep-87  Dick Grune (dick) at tjalk
 | 
						|
	Implemented a shell-variable STOP= more or less analogous to LOG=
 | 
						|
	such that a call of the interpreter
 | 
						|
		STOP=321456 int ...
 | 
						|
	will stop the interpreter after an instruction count of 321456, to
 | 
						|
	avoid run-away interpreters.
 | 
						|
 | 
						|
27-Aug-87  Dick Grune (dick) at tjalk
 | 
						|
	The idea has been raised to let int read the default values of
 | 
						|
	LOG, LOGMASK, etc., for a file in the working directory, e.g.
 | 
						|
	.em_intrc or so.  I have not done so since only for the LOGMASK
 | 
						|
	a reasonable default can be given; the others are case-specific.
 | 
						|
	So I gave  LOGMASK  the default value  "A-Z9d1twx9"  instead.
 | 
						|
 | 
						|
25-Aug-87  Dick Grune (dick) at tjalk
 | 
						|
	Changed the name of the instruction counter from  ino  to  inr, to
 | 
						|
	avoid confusion with "inode numbers".
 | 
						|
 | 
						|
20-Aug-87  Dick Grune (dick) at tjalk
 | 
						|
 	The EM report specifies a list of UNIX Version 7 -like system
 | 
						|
 	calls, not full access to the system calls on the underlying
 | 
						|
 	machine.  Therefore an attempt has been made to use or emulate
 | 
						|
 	the Version 7 system calls on the various machines.
 | 
						|
 | 
						|
18-Aug-87  Dick Grune (dick) at tjalk
 | 
						|
	Introduced a file  sysidf.h  which holds the #define for the
 | 
						|
	present system:  BSD4_1,  BSD4_2  or  SYS_V0.  Based on these, it
 | 
						|
	defines generic #defines:  BSD_X  and SYS_V .  Added various
 | 
						|
	#ifdefs for the various systems, guided by cc, acc and lint.
 | 
						|
 | 
						|
16-Aug-87  Dick Grune (dick) at tjalk
 | 
						|
	There were some portability problems with  dup2 .
 | 
						|
	Since dup2 is not available on all UNIX systems, and since
 | 
						|
	it was a kludge in the first place, I implemented a routine
 | 
						|
	move_file_descriptor, again with slightly different semantics:
 | 
						|
	it closes the original file descriptor. (io.c)
 | 
						|
 | 
						|
13-Aug-87  Dick Grune (dick) at tjalk
 | 
						|
	Renamed set_log to set_lmask and set_log_file to set_lfile, all in
 | 
						|
	the name of System V compatibility.  Perhaps we should rename
 | 
						|
	everything, to SetLogMask, SetLogFile, etc., Modula-2 style.
 | 
						|
 | 
						|
13-Aug-87  Dick Grune (dick) at tjalk
 | 
						|
	And changed names like  do_LAEl4  to  DoLAEl4, to get them through
 | 
						|
	the assembler in System V.
 | 
						|
 | 
						|
11-Aug-87  Dick Grune (dick) at tjalk
 | 
						|
	Changed names like  do_LAEl4  to  do_lae_l4, to keep within 8
 | 
						|
	characters.
 | 
						|
 | 
						|
10-Jul-87  Dick Grune (dick) at tjalk
 | 
						|
	Introduced  monstruct.h and monstruct.c, to contain the code for
 | 
						|
	copying UNIX system call structures to and from EM MON call
 | 
						|
	structures.
 | 
						|
 | 
						|
 9-Jul-87  Dick Grune (dick) at tjalk
 | 
						|
	Made -W option always available.
 | 
						|
 | 
						|
 8-Jul-87  Dick Grune (dick) at tjalk
 | 
						|
	Why is the -W option available only when CHECKING is on? What am I
 | 
						|
	missing?
 | 
						|
 | 
						|
 6-Jul-87  Dick Grune (dick) at tjalk
 | 
						|
	It turned out that  emsig.h  is included in m_sigtrp.c only and
 | 
						|
	contains only definitions of functions from same m_sigtrp.c.
 | 
						|
	Eliminated  emsig.h.
 | 
						|
 | 
						|
	Better identification of the position from where a message is
 | 
						|
	given, through the new routine  position().
 | 
						|
 | 
						|
 3-Jul-87  Dick Grune (dick) at tjalk
 | 
						|
	Did the rest of dump.c (and found an error in the administration
 | 
						|
	of the undefineds in hp_dump).
 | 
						|
	Changed LOG to LOGGING, and  log((  to  LOG((, just for
 | 
						|
	readability and uniformity.
 | 
						|
 | 
						|
 2-Jul-87  Dick Grune (dick) at tjalk
 | 
						|
	Changed switch.c to be a normal file in this directory; it now
 | 
						|
	includes the cases in the switch from  ../switch/cases , which
 | 
						|
	allows greater freedom in programming the rest of switch.c.
 | 
						|
 | 
						|
 1-Jul-87  Dick Grune (dick) at tjalk
 | 
						|
	Read.c nested to excessive length. Isolated a function rd_descr()
 | 
						|
	which reads one descriptor.
 | 
						|
	There were many almost similar #defines for setting bits in
 | 
						|
	'trapped'.  Concentrated them in  arm_trap(ENUMBER).
 | 
						|
 | 
						|
30-Jun-87  Dick Grune (dick) at tjalk
 | 
						|
	Handling of failure of ftime (moncalls.c) was wrong.  Corrected.
 | 
						|
	Corrected many lint gripes.
 | 
						|
 | 
						|
28-Jun-87  Dick Grune (dick) at tjalk
 | 
						|
	The routine  st_dump  in dump.c does nothing but testing whether
 | 
						|
	or not to log at level d1.  Why not test so right at the
 | 
						|
	beginning? So I did: the same test now runs in 7 sec.  See macro
 | 
						|
	interesting()  in dump.c.
 | 
						|
 | 
						|
25-Jun-87  Dick Grune (dick) at tjalk
 | 
						|
	Restructured the file dump.c, because of excessive nesting depth.
 | 
						|
	The result, however, was an efficiency loss of 50 % (from 65 sec.
 | 
						|
	to 96 sec.!).  The restructuring will have to be rethought!
 | 
						|
 | 
						|
24-Jun-87  Dick Grune (dick) at tjalk
 | 
						|
	The shadow-byte checking macro's are used only in  data.c, dump.c
 | 
						|
	and stack.c.  They are brought into a new header file, shadow.h,
 | 
						|
	which reduces the weight of  mem.h.
 | 
						|
 | 
						|
22-Jun-87  Dick Grune (dick) at tjalk
 | 
						|
	Removed or changed macros that assign to their parameters; these
 | 
						|
	introduce a parameter mechanism that is alien to C and is misleading.
 | 
						|
 | 
						|
	Made testing calls of malloc and realloc into functions Malloc and
 | 
						|
	Realloc in init.c.
 | 
						|
 | 
						|
21-Jun-87  Dick Grune (dick) at tjalk
 | 
						|
	Created  global.c  to contain the actual definitions from
 | 
						|
	global.h.  The declarations stay behind in  global.h , thus
 | 
						|
	avoiding multiple definitions.
 | 
						|
 | 
						|
	Removed  io.h  altogether.  All handling of the EM object file is
 | 
						|
	now concentrated in read.c  (fopen was in io.c, fclose in init.c).
 | 
						|
 | 
						|
21-Jun-87  Dick Grune (dick) at tjalk
 | 
						|
	Renamed  def.h  global.h (in anticipation of  global.c ).
 | 
						|
	Removed test  if (warnmark)  from init.c.  Here  warnmark  is an
 | 
						|
	array, an error not caught by the VAX C compiler.
 | 
						|
 | 
						|
20-Jun-87  Dick Grune (dick) at tjalk
 | 
						|
	Removed initializations from .h files. This resulted in the
 | 
						|
	complete removal of trapmess.h and warnmess.h.  Concentrated data
 | 
						|
	about the return area in return.h.  Slimmed down io.h considerably.
 | 
						|
 | 
						|
19-Jun-87  Dick Grune (dick) at tjalk
 | 
						|
	Moved contents of ../include to here (src) since a separate
 | 
						|
	include directory is only meaningful if it is referenced in other
 | 
						|
	places as well.  Updated  Makefile  and all #include's.
 | 
						|
	Replaced  SECUNDAIR  by SECONDARY  and TERTIAIR  by  TERTIARY.
 | 
						|
 | 
						|
	All files included  log.h  and  nocheck.h , which contain compile
 | 
						|
	time flags.  This is not logical; only the files that use LOG and
 | 
						|
	NOCHECK should have any business of knowing about them.
 | 
						|
	Reorganized the files in this sense.  Dependencies recalculated by
 | 
						|
	$(EM)/bin/mkdep.
 | 
						|
 | 
						|
18-Jun-87  Dick Grune (dick) at tjalk
 | 
						|
	More reformatting, especially the complicated #define's.
 | 
						|
	Established a small test environment.
 | 
						|
 | 
						|
17-Jun-87  Dick Grune (dick) at tjalk
 | 
						|
	Made all indentation conform to tabulation scheme.
 | 
						|
	Replaced  register  by   register int  where appropriate.
 | 
						|
 | 
						|
16-Jun-87  Dick Grune (dick) at tjalk
 | 
						|
	Received the directory from Eddo de Groot and Leo van den Berge.
 | 
						|
 | 
						|
$Header$
 |