Files
mercury/scripts/canonical_grade.sh-subr
Zoltan Somogyi c0f4d93a3c Add a new grade component, .decldebug. It is as proposed on mercury-developers,
Estimated hours taken: 2
Branches: main

Add a new grade component, .decldebug. It is as proposed on mercury-developers,
minus the implications about I/O tabling. Those will come later.

compiler/options.m:
	Add a new option, --decl-debug, that switches on declarative debugging.

compiler/trace_params.m:
	The procedure that converts strings representing trace levels to trace
	levels themselves now has an extra argument, which gives the value of
	the --decl-debug option. If set, it raises the minimum trace level,
	and turn explicitly specifying trace levels `shallow' and `deep'
	into errors (since they are not sufficient for declarative debugging).

compiler/handle_options.m:
	Pass the value of the --decl-debug option to trace_params, and handle
	the errors that may result. Handle the implications of --decl-debug
	and the .decldebug grade component.

compiler/compile_target_code.m:
	Define MR_DECL_DEBUG when invoking the C compiler if --decl-debug is
	set.

runtime/mercury_conf_param.h:
	Document MR_DECL_DEBUG, which is defined iff the grade is a .decldebug
	grade.

runtime/mercury_grade.h:
	Take MR_DECL_DEBUG into account when computing the grade component
	related to debugging.

	Update the list of places that need to be modified when adding new
	grade components.

doc/user_guide.texi:
	Document --decl-debug and the .decldebug grade component.

	Document the events used by declarative debugging, since Mark didn't.

	Fix some minor unrelated omissions.

scripts/init_grade.sh-subr:
scripts/parse_grade_options.sh-subr:
scripts/final_grade.sh-subr:
scripts/canonical_grade.sh-subr:
scripts/mgnuc.in:
scripts/ml.in:
	Add a new shell variable, decl_debug, to represent the value of
	MR_DECL_DEBUG, and handle it as appropriate.

tests/debugger/Mmakefile:
	Do not execute shallow traced tests in .decldebug grades, since we
	don't support shallow tracing in such grades.

	Specify --trace decl instead of --trace deep in .decldebug grades
	when compiling the other tests, since we don't support --trace deep
	in .decldebug grades.
2002-09-01 06:05:20 +00:00

121 lines
3.5 KiB
Plaintext

#---------------------------------------------------------------------------#
# Copyright (C) 2000-2002 The University of Melbourne.
# This file may only be copied under the terms of the GNU General
# Public License - see the file COPYING in the Mercury distribution.
#---------------------------------------------------------------------------#
#
# canonical_grade.sh-subr:
# An `sh' subroutine for computing a canonical grade string based on
# the values of grade-related options.
# It is used by the `ml', `c2init' and `canonical_grade' scripts.
#
# The code here should be inserted after init_grade_options.sh-subr,
# parse_grade_options.sh-subr and final_grade_options.sh-subr, which
# together define a set of shell variables giving the values of the
# various grade options.
#
# Canonical_grade.sh-subr defines the variable GRADE, which will contain
# the canonical string for the grade implied by the option values.
#
# If the option values are inconsistent, this script fragment will
# print an error message and exit with failure.
#
# IMPORTANT: any changes to the handling of grades here may also require
# changes to all the files indicated by runtime/mercury_grade.h.
case $non_local_gotos,$global_regs in
true,true) GRADE="fast" ;;
true,false) GRADE="jump" ;;
false,true) GRADE="reg" ;;
false,false) GRADE="none" ;;
esac
case $asm_labels in
true) GRADE="asm_$GRADE" ;;
false) ;;
esac
case $highlevel_code,$highlevel_data,$GRADE in
true,true,none)
GRADE="hl" ;;
true,false,none)
GRADE="hlc" ;;
false,false,*)
# GRADE was set above
;;
false,true,*)
progname=`basename $0`
echo "$progname: error: \`--high-level-data' requires \`--high-level-code'" 1>&2
exit 1
;;
*)
echo "$progname: error: \`--high-level-code' is incompatible with the use of" 1>&2
echo "$progname: error: low-level gcc extensions implied by grade \`$GRADE'" 1>&2
exit 1
;;
esac
case $gcc_nested_functions,$highlevel_code in
true,true) GRADE="${GRADE}_nest" ;;
*) ;;
esac
case $thread_safe in
true) GRADE="$GRADE.par" ;;
false) ;;
esac
case $gc_method in
conservative) GRADE="$GRADE.gc" ;; # deprecated; alias for boehm
boehm) GRADE="$GRADE.gc" ;;
mps) GRADE="$GRADE.mps" ;;
accurate) GRADE="$GRADE.agc" ;;
esac
case $profile_time,$profile_calls,$profile_memory,$profile_deep in
true,true,false,false) GRADE="$GRADE.prof" ;;
true,false,false,false) GRADE="$GRADE.proftime" ;;
false,true,false,false) GRADE="$GRADE.profcalls" ;;
true,true,true,false) GRADE="$GRADE.profall" ;;
false,true,true,false) GRADE="$GRADE.memprof" ;;
false,false,false,true) GRADE="$GRADE.profdeep" ;;
false,false,false,false) ;;
*) progname=`basename $0`
echo "$progname: error: invalid combination of profiling options." 1>&2
exit 1
;;
esac
case $use_trail in
true) GRADE="$GRADE.tr" ;;
false) ;;
esac
case $reserve_tag in
true) GRADE="$GRADE.rt" ;;
false) ;;
esac
case $use_minimal_model in
true) GRADE="$GRADE.mm" ;;
false) ;;
esac
# We ignore the value of $picreg in computing the name of the grade
# that we will use as a directory name in the Mercury linker.
# case $picreg in
# true) GRADE="$GRADE.picreg" ;;
# false) ;;
# esac
case $stack_trace,$require_tracing,$decl_debug in
true,true,true) GRADE="$GRADE.decldebug" ;;
true,true,false) GRADE="$GRADE.debug" ;;
false,true,false) GRADE="$GRADE.trace" ;;
true,false,false) GRADE="$GRADE.strce" ;;
false,false,false) ;;
*) echo "$progname: error: invalid combination of debugging options." 1>&2
exit 1
;;
esac