749 lines
		
	
	
	
		
			31 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			749 lines
		
	
	
	
		
			31 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| 21-Jun-90  Ceriel Jacobs (ceriel) at ceriel
 | |
| 	fixed bug in FEF: did not work on 0.0
 | |
| 
 | |
| 20-Jun-90  Remco Feenstra & Peter Boersma
 | |
| 	Implemented model 3 (intelligent calls)
 | |
| 	Fixed bug in INN and SET
 | |
| 
 | |
| 31-Jan-90  Ceriel Jacobs (ceriel) at ceriel
 | |
| 	Fixed getpid() version of MON.
 | |
| 
 | |
| 26-Jan-90  Ceriel Jacobs (ceriel) at ceriel
 | |
| 	Fixed check in COM instruction.
 | |
| 
 | |
| 26-Jan-90  Ceriel Jacobs (ceriel) at ceriel
 | |
| 	Fixed so that two consecutive SIG's have no effect.
 | |
| 
 | |
|  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$
 |