Change Log
Michael Elizabeth Chastain
<mec@duracef.shout.net>
Sat 18 Nov 1995

Copyright 1995 Michael Chastain
Licensed under the Gnu Public License, Version 2



=== Version 0.3 (in progress)

Cleanup on error exit has improved.

'Control' is implemented.  Yow!

'Control' refuses to run as root.  This is to enable better replay of
'fork'; see 'doc/design-fork.txt'.  'Trace' still runs as any user, and
'control' can replay any file regardless of original uid.

Datasets are stashed for the lifetime of the target program, rather than
being created immediately before use and destroyed immediately after.
This works around a kernel bug in Linux 1.3.37 and 1.3.38 which
manifested as 'bforget: shared buffer'.

G++ 2.7.1 cleanup.  It's a lot closer to perfect, if not perfect.

Kernel version now at Linux 1.3.42.

List is now a separate program.

Replay is gone.  Use 'control' with a viewer of 'nice' or 'time'.

Signals to the target are traced (rather than being ignored), but not
are not yet replayable.  Unfortunately, this prevents replay of programs
which use 'fork', as they get 'SIGCHLD' signals.



=== Version 0.2 (Thu 26 Oct 1995)

Distribution includes pre-built executables.  These work on Linux 1.2.X
as well as Linux 1.3.X.  Linux 1.3.36 is still needed to build.

Documentation exists.

Error messages are strings instead of undecipherable numbers.  User
errors such as 'file not found' are readable now.

File handling has improved.  'Replay' can replay executables found in
the current directory.  Files needed to replay 'execve' and 'uselib' are
written into a stash directory '/tmp/stash-$pid', instead of the current
directory.

Formatting has changed.  It's not as pretty as it was in 0.1, but it
reflects the events more accurately.

Kernel version now at Linux 1.3.36.

Mailing list!  It's a majordomo list:

    mail majordomo@pobox.org.sg
    Subject: (any)
    subscribe mec-list

Memory management is much faster.  Almost all the class data has
migrated to the heap and not copied during its lifetime.  Input files
are mmap'ed rather than read.

Replay compares register values in the replay process against recorded
register values, terminating if it finds a mismatch.  This finds bugs
faster than running on inertial guidance only.

Replay replays the 'fork' system call.

Source header file names changed from '.h' to '.hh'.

Target pointers which are zero or point to inaccessible memory are now
modelled properly.

Trace warns about unreplayable calls encountered during tracing, and
records a short string describing the reason it's unreplayable into the
event.  Replay uses this string to give a nice diagnostic.

Trace uses $PATH ('execvp' instead of 'execve').  This was harder than a
one-line change, because 'Replay' has to work a little harder to start
properly.

Trace writes out during execution instead of saving up all data for the
end.



=== Version 0.1 (Fri 22 Sep 1995)

First release.

Naked code snapshot.
