mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-17 10:23:46 +00:00
Rename mmc and mgnuc options that set this grade component to --c-debug-grade.
Let the options named --c-debug of both mmc and mgnuc enable C level debugging
of only the module being compiled.
runtime/mercury_grade.h:
Rename the .ll_debug grade component to .c_debug. Also rename the C macro
that controls the presence or absence of this grade component
from MR_LL_DEBUG to MR_C_DEBUG_GRADE.
runtime/mercury_conf_param.h:
runtime/mercury_debug.c:
runtime/mercury_debug.h:
runtime/mercury_engine.c:
runtime/mercury_label.c:
runtime/mercury_memory_zones.c:
runtime/mercury_memory_zones.h:
runtime/mercury_overflow.c:
runtime/mercury_std.h:
runtime/mercury_wrapper.c:
Rename the MR_LOWLEVEL_DEBUG macro to MR_DEBUG_THE_RUNTIME.
Previously, the name of this macro wrongly implied that it had
something to do with the old .ll_debug grade component, even though
- the MR_LOWLEVEL_DEBUG macro was designed to debug LLDS grades,
since only these existed when it was created, while
- the .ll_debug grade component (now .c_debug) is useful only for
MLDS grades targeting C.
compiler/options.m:
Rename the old confusingly named low_level_debug option to c_debug_grade.
Move it to the list of grade options, and fix its documentation, which
was completely wrong:
- code in compile_target_code.m treated it as being a synonym of
the .ll_debug (now .c_debug) grade component, while
- its (commented out) documentation here in options.m said it called for
the enabling of what is now MR_DEBUG_THE_RUNTIME.
compiler/compile_target_code.m:
Conform to the rename just above.
Define MR_C_DEBUG_GRADE instead of MR_LL_DEBUG if c_debug_grade is enabled.
Pass -g to the C compiler if either c_debug_grade or target_debug
is enabled.
Add an XXX about a missing safety check for an obsolete experimental
feature.
compiler/compute_grade.m:
When given a grade with a .c_debug grade component, set only the
c_debug_grade option; don't set the target_debug option, which is NOT
a grade option. The change to compile_target_code.m above handles the
only situation in which this implication was formerly required.
scripts/canonical_grade.sh-subr:
scripts/init_grade_options.sh-subr:
scripts/parse_grade_options.sh-subr:
Look for and process the .c_debug grade component instead of .ll_debug.
Use a sh variable named c_debug_grade to record its absence/presence.
Look for and process the --c-debug-grade grade-component option,
setting the same sh variable, c_debug_grade. (All grade components
can be set piecemeal using sh options to the scripts using these
subroutines.) This replaces the old, confusingly named option
--low-level-debug.
scripts/mgnuc.in:
scripts/mgnuc_file_opts.sh-subr:
Consistently use the sh variable c_debug to record the presence of
the (non-grade) --c-debug option to mgnuc, and the sh variable
c_debug_grade to record the presence of the .c_debug grade component.
Stop looking for and handling the --low-level-debug option, which
mgnuc used to document, even though this duplicated the same documentation
in init_grade_options.sh-subr, which mgnuc includes. The difference was
that init_grade_options.sh-subr meant it to represent the old .ll_debug
MLDS grade component, while mgnuc treated it as specifying what is now
MR_DEBUG_THE_RUNTIME for LLDS grades. It didn't help that two sh variables
with quite different semantics had names that differed only in an
underscore: LLDEBUG_OPTS vs LL_DEBUG_OPTS.
scripts/Mmakefile:
Add a missing dependency to force the rebuild of mgnuc after each update
of its sh subroutine mgnuc_file_ops.sh-subr.
doc/user_guide.texi:
Document the --c-debug-grade option of mmc. This option was not publicly
documented under its original misleading name (--low-level-debug), but
its documentation is now possible without contorted dancing around the
name.
Clarify the documentation of mgnuc's --c-debug option.
README.sanitizers:
configure.ac:
Conform to the rename of the grade component.
grade_lib/grade_spec.m:
grade_lib/grade_string.m:
grade_lib/grade_structure.m:
grade_lib/try_all_grade_structs.m:
Conform to the rename of the grade component .ll_debug to .c_debug.
Don't allow the .c_debug grade component in LLDS grades.
In grade_string.m, add some obvious implications of some grade components.
grade_lib/choose_grade.m:
grade_lib/grade_lib.m:
grade_lib/test_grades.m:
grade_lib/var_value_names.m:
Fix white space.
scripts/ml.in:
tools/lmc.in:
tools/test_mercury:
Conform to the change in compile_target_code.m to the naming of
Boehm gc library variants.
550 lines
14 KiB
Bash
550 lines
14 KiB
Bash
#---------------------------------------------------------------------------#
|
|
# vim: ts=4 sw=4 expandtab ft=sh
|
|
#---------------------------------------------------------------------------#
|
|
# Copyright (C) 1997-2007, 2010 The University of Melbourne.
|
|
# Copyright (C) 2013-2014, 2016-2017, 2020 The Mercury team.
|
|
# This file may only be copied under the terms of the GNU General
|
|
# Public License - see the file COPYING in the Mercury distribution.
|
|
#---------------------------------------------------------------------------#
|
|
#
|
|
# parse_grade_options.sh-subr:
|
|
# An `sh' subroutine for parsing grade-related options.
|
|
# Used by the `ml', `mgnuc' and `c2init' scripts.
|
|
#
|
|
# The code here is intended to be inserted into the case statement
|
|
# in a script's option-parsing loop.
|
|
#
|
|
# IMPORTANT: any changes to the handling of grades here may also require
|
|
# changes to all the files indicated by runtime/mercury_grade.h.
|
|
#
|
|
# This file should handle the setting of all the shell variables defined by
|
|
# init_grade_options.sh-subr.
|
|
#
|
|
#---------------------------------------------------------------------------#
|
|
|
|
--target)
|
|
shift
|
|
case "$1" in
|
|
c|C)
|
|
target=c
|
|
;;
|
|
csharp|'C#')
|
|
target=csharp
|
|
;;
|
|
java|Java)
|
|
target=java
|
|
;;
|
|
*)
|
|
echo "$0: invalid target \`$1'" 1>&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
;;
|
|
|
|
--csharp|'--C#'|--csharp-only|'--C#-only')
|
|
target=csharp
|
|
;;
|
|
|
|
--java|--Java|--java-only|--Java-only)
|
|
target=java
|
|
;;
|
|
|
|
--high-level-code|-H)
|
|
highlevel_code=true
|
|
;;
|
|
--no-high-level-code|-H-)
|
|
highlevel_code=false
|
|
;;
|
|
|
|
--asm-labels)
|
|
asm_labels=true
|
|
;;
|
|
--no-asm-labels)
|
|
asm_labels=false
|
|
;;
|
|
|
|
--gcc-non-local-gotos)
|
|
non_local_gotos=true
|
|
;;
|
|
--no-gcc-non-local-gotos)
|
|
non_local_gotos=false
|
|
;;
|
|
|
|
--gcc-global-registers)
|
|
global_regs=true
|
|
;;
|
|
--no-gcc-global-registers)
|
|
global_regs=false
|
|
;;
|
|
|
|
--gc)
|
|
shift
|
|
case "$1" in
|
|
accurate|conservative|boehm|boehm_debug|hgc|none|automatic)
|
|
gc_method=$1
|
|
;;
|
|
*)
|
|
echo "$0: invalid gc method \`$1'" 1>&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
;;
|
|
|
|
--parallel)
|
|
thread_safe=true
|
|
;;
|
|
|
|
-p|--profiling|--time-profiling)
|
|
profile_time=true
|
|
profile_calls=true
|
|
profile_memory=false
|
|
profile_deep=false
|
|
;;
|
|
--memory-profiling)
|
|
profile_time=false
|
|
profile_calls=true
|
|
profile_memory=true
|
|
profile_deep=false
|
|
;;
|
|
--deep-profiling)
|
|
profile_time=false
|
|
profile_calls=false
|
|
profile_memory=false
|
|
profile_deep=true
|
|
;;
|
|
-p-|--no-profiling)
|
|
profile_time=false
|
|
profile_calls=false
|
|
profile_memory=false
|
|
profile_deep=false
|
|
;;
|
|
--profile-time)
|
|
profile_time=true
|
|
;;
|
|
--no-profile-time)
|
|
profile_time=false
|
|
;;
|
|
--profile-calls)
|
|
profile_calls=true
|
|
;;
|
|
--no-profile-calls)
|
|
profile_calls=false
|
|
;;
|
|
--profile-memory)
|
|
profile_memory=true
|
|
;;
|
|
--no-profile-memory)
|
|
profile_memory=false
|
|
;;
|
|
--profile-deep)
|
|
profile_deep=true
|
|
;;
|
|
--no-profile-deep)
|
|
profile_deep=false
|
|
;;
|
|
|
|
--record-term-sizes-as-words)
|
|
record_term_sizes_as_words=true
|
|
;;
|
|
--no-record-term-sizes-as-words)
|
|
record_term_sizes_as_words=false
|
|
;;
|
|
--record-term-sizes-as-cells)
|
|
record_term_sizes_as_cells=true
|
|
;;
|
|
--no-record-term-sizes-as-cells)
|
|
record_term_sizes_as_cells=false
|
|
;;
|
|
|
|
--use-trail)
|
|
use_trail=true
|
|
;;
|
|
--no-use-trail)
|
|
use_trail=false
|
|
;;
|
|
|
|
--use-minimal-model-stack-copy)
|
|
use_minimal_model_stack_copy=true
|
|
;;
|
|
--no-use-minimal-model-stack-copy)
|
|
use_minimal_model_stack_copy=false
|
|
;;
|
|
|
|
--use-minimal-model-own-stacks)
|
|
use_minimal_model_own_stacks=true
|
|
;;
|
|
--no-use-minimal-model-own-stacks)
|
|
use_minimal_model_own_stacks=false
|
|
;;
|
|
|
|
--minimal-model-debug)
|
|
minimal_model_debug=true
|
|
;;
|
|
--no-minimal-model-debug)
|
|
minimal_model_debug=false
|
|
;;
|
|
|
|
--pregenerated-dist)
|
|
pregenerated_dist=true
|
|
;;
|
|
--no-pregenerated-dist)
|
|
pregenerated_dist=false
|
|
;;
|
|
|
|
--single-prec-float)
|
|
single_prec_float=true
|
|
;;
|
|
--no-single-prec-float)
|
|
single_prec_float=false
|
|
;;
|
|
|
|
--debug)
|
|
debug=true
|
|
;;
|
|
--no-debug)
|
|
debug=false
|
|
;;
|
|
|
|
--decl-debug)
|
|
decl_debug=true
|
|
;;
|
|
--no-decl-debug)
|
|
decl_debug=false
|
|
;;
|
|
|
|
--ss-debug)
|
|
ss_debug=true
|
|
;;
|
|
--no-ss-debug)
|
|
ss_debug=false
|
|
;;
|
|
|
|
--c-debug-grade)
|
|
c_debug_grade=true
|
|
;;
|
|
--no-c-debug-grade)
|
|
c_debug_grade=false
|
|
;;
|
|
|
|
--extend-stacks-when-needed)
|
|
extend_stacks=true
|
|
;;
|
|
--no-extend-stacks-when-needed)
|
|
extend_stacks=false
|
|
;;
|
|
|
|
--stack-segments)
|
|
stack_segments=true
|
|
;;
|
|
--no-stack-segments)
|
|
stack_segments=false
|
|
;;
|
|
|
|
--use-regions)
|
|
use_regions=true;;
|
|
--no-use-regions)
|
|
use_regions=false
|
|
;;
|
|
|
|
--use-regions-debug)
|
|
use_regions_debug=true;;
|
|
--no-use-regions-debug)
|
|
use_regions_debug=false
|
|
;;
|
|
|
|
--use-regions-profiling)
|
|
use_regions_profiling=true;;
|
|
--no-use-regions-profiling)
|
|
use_regions_profiling=false
|
|
;;
|
|
|
|
-s|--grade)
|
|
shift
|
|
grade="$1";
|
|
|
|
# Convert a grade to a set of options.
|
|
#
|
|
# IMPORTANT: any changes to the handling of grades here
|
|
# may also require changes to all the files indicated by
|
|
# runtime/mercury_grade.h.
|
|
|
|
target=c
|
|
highlevel_code=false
|
|
asm_labels=false
|
|
non_local_gotos=false
|
|
global_regs=false
|
|
thread_safe=false
|
|
gc_method=none
|
|
profile_time=false
|
|
profile_calls=false
|
|
profile_memory=false
|
|
profile_deep=false
|
|
record_term_sizes_as_words=false
|
|
record_term_sizes_as_cells=false
|
|
use_trail=false
|
|
use_minimal_model_stack_copy=false
|
|
use_minimal_model_own_stacks=false
|
|
minimal_model_debug=false
|
|
pregenerated_dist=false
|
|
single_prec_float=false
|
|
debug=false
|
|
decl_debug=false
|
|
ss_debug=false
|
|
c_debug_grade=false
|
|
extend_stacks=false
|
|
stack_segments=false
|
|
use_regions=false
|
|
use_regions_debug=false
|
|
use_regions_profiling=false
|
|
|
|
grade_pieces=`echo $grade | tr '.' ' '`
|
|
for grade_piece in $grade_pieces
|
|
do
|
|
case "$grade_piece" in
|
|
csharp)
|
|
target=csharp
|
|
asm_labels=false
|
|
non_local_gotos=false
|
|
global_regs=false
|
|
highlevel_code=true
|
|
;;
|
|
java)
|
|
target=java
|
|
asm_labels=false
|
|
non_local_gotos=false
|
|
global_regs=false
|
|
highlevel_code=true
|
|
;;
|
|
hlc)
|
|
asm_labels=false
|
|
non_local_gotos=false
|
|
global_regs=false
|
|
highlevel_code=true
|
|
;;
|
|
asm_fast)
|
|
target=c
|
|
asm_labels=true
|
|
non_local_gotos=true
|
|
global_regs=true
|
|
highlevel_code=false
|
|
;;
|
|
asm_jump)
|
|
target=c
|
|
asm_labels=true
|
|
non_local_gotos=true
|
|
global_regs=false
|
|
highlevel_code=false
|
|
;;
|
|
fast)
|
|
target=c
|
|
asm_labels=false
|
|
non_local_gotos=true
|
|
global_regs=true
|
|
highlevel_code=false
|
|
;;
|
|
jump)
|
|
target=c
|
|
asm_labels=false
|
|
non_local_gotos=true
|
|
global_regs=false
|
|
highlevel_code=false
|
|
;;
|
|
reg)
|
|
target=c
|
|
asm_labels=false
|
|
non_local_gotos=false
|
|
global_regs=true
|
|
highlevel_code=false
|
|
;;
|
|
none)
|
|
target=c
|
|
asm_labels=false
|
|
non_local_gotos=false
|
|
global_regs=false
|
|
highlevel_code=false
|
|
;;
|
|
|
|
par)
|
|
thread_safe=true
|
|
;;
|
|
|
|
threadscope)
|
|
threadscope=true
|
|
;;
|
|
|
|
agc)
|
|
gc_method=accurate
|
|
;;
|
|
gc)
|
|
gc_method=boehm
|
|
;;
|
|
hgc)
|
|
gc_method=hgc
|
|
;;
|
|
gcd)
|
|
gc_method=boehm_debug
|
|
;;
|
|
nogc)
|
|
gc_method=none
|
|
;;
|
|
|
|
memprof)
|
|
profile_time=false
|
|
profile_calls=true
|
|
profile_memory=true
|
|
profile_deep=false
|
|
;;
|
|
prof)
|
|
profile_time=true
|
|
profile_calls=true
|
|
profile_memory=false
|
|
profile_deep=false
|
|
;;
|
|
proftime)
|
|
profile_time=true
|
|
profile_calls=false
|
|
profile_memory=false
|
|
profile_deep=false
|
|
;;
|
|
profcalls)
|
|
profile_time=false
|
|
profile_calls=true
|
|
profile_memory=false
|
|
profile_deep=false
|
|
;;
|
|
profall)
|
|
profile_time=true
|
|
profile_calls=true
|
|
profile_memory=true
|
|
profile_deep=false
|
|
;;
|
|
profdeep)
|
|
profile_time=false
|
|
profile_calls=false
|
|
profile_memory=false
|
|
profile_deep=true
|
|
;;
|
|
|
|
tsw)
|
|
record_term_sizes_as_words=true
|
|
record_term_sizes_as_cells=false
|
|
;;
|
|
|
|
tsc)
|
|
record_term_sizes_as_words=false
|
|
record_term_sizes_as_cells=true
|
|
;;
|
|
|
|
tr)
|
|
use_trail=true
|
|
;;
|
|
|
|
mm)
|
|
use_minimal_model_stack_copy=true
|
|
minimal_model_debug=false
|
|
;;
|
|
|
|
dmm)
|
|
use_minimal_model_stack_copy=true
|
|
minimal_model_debug=true
|
|
;;
|
|
|
|
mmsc)
|
|
use_minimal_model_stack_copy=true
|
|
minimal_model_debug=false
|
|
;;
|
|
|
|
dmmsc)
|
|
use_minimal_model_stack_copy=true
|
|
minimal_model_debug=true
|
|
;;
|
|
|
|
mmos)
|
|
use_minimal_model_own_stacks=true
|
|
minimal_model_debug=false
|
|
;;
|
|
|
|
dmmos)
|
|
use_minimal_model_own_stacks=true
|
|
minimal_model_debug=true
|
|
;;
|
|
|
|
pregen)
|
|
pregenerated_dist=true
|
|
;;
|
|
|
|
spf)
|
|
single_prec_float=true
|
|
;;
|
|
|
|
debug)
|
|
debug=true
|
|
;;
|
|
|
|
decldebug)
|
|
decl_debug=true
|
|
;;
|
|
|
|
ssdebug)
|
|
ss_debug=true
|
|
;;
|
|
|
|
c_debug)
|
|
c_debug_grade=true
|
|
;;
|
|
|
|
exts)
|
|
extend_stacks=true
|
|
;;
|
|
|
|
stseg)
|
|
stack_segments=true
|
|
;;
|
|
|
|
rbmm)
|
|
use_regions=true
|
|
use_regions_debug=false
|
|
use_regions_profiling=false
|
|
;;
|
|
|
|
rbmmd)
|
|
use_regions=true
|
|
use_regions_debug=true
|
|
use_regions_profiling=false
|
|
;;
|
|
|
|
rbmmp)
|
|
use_regions=true
|
|
use_regions_debug=false
|
|
use_regions_profiling=true
|
|
;;
|
|
|
|
rbmmdp)
|
|
use_regions=true
|
|
use_regions_debug=true
|
|
use_regions_profiling=true
|
|
;;
|
|
|
|
*)
|
|
echo "$0: unknown grade component \`$grade_piece'" 1>&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
;;
|
|
|
|
-s*)
|
|
grade="` expr $1 : '-s\(.*\)' `"
|
|
# just insert it as `--grade $grade' and then reparse it
|
|
shift
|
|
case $# in
|
|
0)
|
|
set - x --grade "$grade"
|
|
;;
|
|
*)
|
|
set - x --grade "$grade" "$@"
|
|
;;
|
|
esac
|
|
;;
|
|
|