1990-01-31 10:54:26 +00:00
|
|
|
31-Jan-90 Ceriel Jacobs (ceriel) at ceriel
|
|
|
|
Fixed getpid() version of MON.
|
|
|
|
|
1990-01-26 17:12:23 +00:00
|
|
|
26-Jan-90 Ceriel Jacobs (ceriel) at ceriel
|
|
|
|
Fixed check in COM instruction.
|
|
|
|
|
1990-01-26 16:43:29 +00:00
|
|
|
26-Jan-90 Ceriel Jacobs (ceriel) at ceriel
|
|
|
|
Fixed so that two consecutive SIG's have no effect.
|
|
|
|
|
1989-12-08 15:04:37 +00:00
|
|
|
8-Dec-89 Ceriel Jacobs (ceriel) at ceriel
|
|
|
|
Bug fix: one of the many ZRL encodings was decoded wrong.
|
|
|
|
|
1989-11-22 13:38:37 +00:00
|
|
|
22-Nov-89 Ceriel Jacobs (ceriel) at ceriel
|
|
|
|
Some more speed-up changes, resulting in another 5%.
|
|
|
|
|
1989-11-13 15:36:12 +00:00
|
|
|
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.
|
|
|
|
|
1988-10-03 14:44:39 +00:00
|
|
|
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.
|
|
|
|
|
1988-06-22 16:57:09 +00:00
|
|
|
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$
|