Estimated hours taken: 0.5
Fix some scripts in the tools directory to work with the new
directories and library names.
tools/binary:
tools/binary_step:
tools/linear:
Update these scripts to work properly with the new browser and
trace directories and the renamed libraries.
Mmake.common.in:
scripts/c2init.in:
scripts/ml.in:
Add tools/binary, tools/binary_step and tools/linear to the
list of files that know about library names.
Estimated hours taken: 0.2
tools/bootcheck:
Add a new option, -d <dir> or --test-dir <dir>, which runs tests
only in the named directory. This is most useful in conjunction
with -T, when you want to know whether a change in the runtime
or test setup is sufficient to cure a problem in a given test dir.
Reorder option handling to be alphabetical.
When -T is given, and the script does not do a bootstrap check,
do not treat this as the failure of the bootstrap check.
tools/binary_step:
Simplify the code a bit.
Estimated hours taken: 0.1
binary_step:
Fix a bug: don't use the stage3 libraries when running test cases
unless we have actually created the stage3 libraries.
Estimated hours taken: 1
binary_step:
Add a capability to compare stage3 to stage2.bad, not just to stage.ok,
for use when the stage3 compilation uses the Mmake parameters from
stage2.bad.
Fix a bug: when cleaning out the stage3 directories, remove not
just the source and interface files but also the date stamp and
optimization files.
binary:
Add a capability to generate stage3 using the Mmake parameters from
stage2.bad, with success being judged by comparing stage3 to
stage2.bad.
Use $RMSTAGECMD to remove the old stage2 if it is defined.
Estimated hours taken: 1
binary:
Construct a stage3 before starting the search for the bug.
We used to be able to rely on a stage3 being already present,
but this reliance has been misplaced since Fergus's modification
to bootcheck that deletes stage3 on success.
binary_step:
Impose a limit of 10 CPU-minutes on every process, to catch
malfunctioning compilers that don't crash but go into infinite loops.
Estimated hours taken: 0.5
binary, binary_step:
Add a option, -d. When used, the successful making of the stage3
dependencies is taken to indicate the absence of the bug being searched
for.
Estimated hours taken: 1
Users of the "binary" script so far could choose between testing the
correctness of the cobbled-together stage2 compiler by attempting to
create a stage3 compiler, or by running all the tests in some directories.
This change adds a third alternative: checking whether a command executes
successfully. This is useful if the symptom of failure of the stage2
compiler is that it aborts when compiling some file.
Estimated hours taken: 2
bootcheck, binary, linear:
Link to absolute, not relative path names, since relative path names
do not work back across symbolic links.
binary, linear:
Allow the user to give an initial list of suspects.
assemble, binary, linear:
Allow negative searches, i.e. searches in which the base version is
the bad version and we want to see which module "fixes" the problem
caused by the other modules, as opposed to normal searches in which
we are looking for the module that introduces the problem.
Estimated hours taken: 0.5
I moved the scripts bootcheck, binary, binary_step, divide and assemble
into the tools subdirectory from the main mercury directory.
I also added the auxiliary scripts appears, cleanint and half.
I modified binary and binary_step to compare stage3 with stage2.ok,
and only pass a stage2 compiler if the comparison finds no differences.
This requires that the Mmake.params files be copied, not linked, from
the top level's Mmake.stage2.params. The old behavior (no comparison)
is still available; just specify -c (compile-only).
Estimated hours taken: 6
configure.in:
Rename BRANCH_DELAY_SLOT to HAVE_DELAY_SLOT.
bootcheck:
Add a new option, -r. If given, this makes a copy of the runtime
directory instead of linking to it in stage[23]. This allows the
stage[23] versions to use a different grade than stage1.
Another change is that we now remake only the library and compiler
dependencies, but not the profiler dependencies.
binary:
A shell script to find code generation and optimization bugs by
performing binary search. It depends on the existence of two
directories, stage2.ok and stage2.bad, containing correct and buggy
versions of stage2, and tries different mixes of .c code from each
until it locates the offending part of the offending .c file.
Note that this script has so far been tested only in pieces.
binary_step:
Check whether a particular mix of .c files from the ok and bad
directories is able to build a stage3 compiler. It doesn't check
for differences from stage2, since stage2 is a patchwork.
divide:
Divide a .c file into its parts.
assemble:
Assemble a .c file, with the specified parts coming from the .c file
in stage2.bad and the others from stage2.ok.
NOTE: these scripts require some other auxiliary scripts. I will put these
into /usr/local/contrib when it is created on cyclone. In the meantime,
they are in ~zs/bin/script.