mirror of
https://github.com/Mercury-Language/mercury.git
synced 2025-12-16 22:35:41 +00:00
Until now, we have supported two variants of trailing grades, those that use a
fixed-size trail (.tr) and those that use trail segments (.trseg). This change
removes support for fixed sized trails, and renames the .trseg grade component
to .tr. The .trseg grade now acts a synonym for .tr; it is deprecated, since we
intend to eventually delete it. Until then, the behavior of the old .tr grade
component should be available, though to developers only, by compiling the
whole system with EXTRA_CFLAGS = -DMR_USE_FIXED_SIZE_TRAIL.
runtime/mercury_conf_param.h:
Delete the MR_TRAIL_SEGMENTS macro. Its effect is now implied by
MR_USE_TRAIL, unless a new macro, MR_USE_FIXED_SIZE_TRAIL, is defined.
Developers can use this new macro to disable trail segments, should the
need for doing that arise.
runtime/mercury_grade.h:
Add a new macro that defines a binary compatibility version number for
trailing; use that in the grade part for trailing.
Use "_trfix" or "_trseg" as the prefix of the trailing part of the
MR_GRADE_VAR depending on if MR_USE_FIXED_SIZE_TRAIL is defined or
not.
runtime/mercury_trail.[ch]:
runtime/mercury_context.h:
Enable trail segments by default, only disabling them if
MR_USE_FIXED_SIZE_TRAIL is enabled.
runtime/mercury_wrapper.c:
trace/mercury_trace_cmd_developer.c:
Conform to the above changes.
compiler/compile_target_code.m:
Do not pass options for trail segments to the C compiler.
compiler/compute_grade.m:
Treat trseg as a synonym for tr.
compiler/options.m:
Deprecate --trail-segments.
grade_lib/grade_spec.m:
grade_lib/grade_string.m:
grade_lib/grade_structure.m:
grade_lib/grade_vars.m:
grade_lib/try_all_grade_structs.m:
grade_lib/var_value_names.m:
Remove the trseg component.
scripts/canonical_grade.sh-subr:
scripts/init_grade_options.sh-subr:
scripts/mgnuc.in:
scripts/parse_grade_options.sh-subr:
Remove support for the --trail-segments option.
doc/user_guide.texi:
Update the documentation for the --trail-segments.
Comment out the documentation of the --trail-size and --trail-size-kwords
runtime options; they are no longer useful to non-developers.
NEWS:
Announce this change.
530 lines
14 KiB
Plaintext
530 lines
14 KiB
Plaintext
#---------------------------------------------------------------------------#
|
|
# vim: ts=4 sw=4 expandtab
|
|
#---------------------------------------------------------------------------#
|
|
# Copyright (C) 1997-2007, 2010 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.
|
|
#---------------------------------------------------------------------------#
|
|
#
|
|
# parse_grade_options.sh-subr:
|
|
# An `sh' subroutine for parsing grade-related options.
|
|
# Used by the `ml', `mgnuc' and `c2init' scripts.
|
|
#
|
|
# The code here should be inserted in 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 ;;
|
|
erlang|Erlang)
|
|
target=erlang ;;
|
|
*)
|
|
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 ;;
|
|
|
|
--erlang|--Erlang|--erlang-only|--Erlang-only)
|
|
target=erlang ;;
|
|
|
|
--high-level-code|-H)
|
|
highlevel_code=true ;;
|
|
--no-high-level-code|-H-)
|
|
highlevel_code=false ;;
|
|
|
|
--high-level-data)
|
|
highlevel_data=true ;;
|
|
--no-high-level-data)
|
|
highlevel_data=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 ;;
|
|
|
|
--low-level-debug)
|
|
ll_debug= true ;;
|
|
--no-low-level-debug)
|
|
ll_debug= 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
|
|
highlevel_data=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
|
|
ll_debug=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
|
|
highlevel_data=true
|
|
;;
|
|
java)
|
|
target=java
|
|
asm_labels=false
|
|
non_local_gotos=false
|
|
global_regs=false
|
|
highlevel_code=true
|
|
highlevel_data=true
|
|
;;
|
|
erlang)
|
|
target=erlang
|
|
asm_labels=false
|
|
non_local_gotos=false
|
|
global_regs=false
|
|
highlevel_code=true
|
|
highlevel_data=true
|
|
;;
|
|
hl)
|
|
asm_labels=false
|
|
non_local_gotos=false
|
|
global_regs=false
|
|
highlevel_code=true
|
|
highlevel_data=true
|
|
;;
|
|
hlc)
|
|
asm_labels=false
|
|
non_local_gotos=false
|
|
global_regs=false
|
|
highlevel_code=true
|
|
highlevel_data=false
|
|
;;
|
|
asm_fast)
|
|
target=c
|
|
asm_labels=true
|
|
non_local_gotos=true
|
|
global_regs=true
|
|
highlevel_code=false
|
|
highlevel_data=false
|
|
;;
|
|
asm_jump)
|
|
target=c
|
|
asm_labels=true
|
|
non_local_gotos=true
|
|
global_regs=false
|
|
highlevel_code=false
|
|
highlevel_data=false
|
|
;;
|
|
fast)
|
|
target=c
|
|
asm_labels=false
|
|
non_local_gotos=true
|
|
global_regs=true
|
|
highlevel_code=false
|
|
highlevel_data=false
|
|
;;
|
|
jump)
|
|
target=c
|
|
asm_labels=false
|
|
non_local_gotos=true
|
|
global_regs=false
|
|
highlevel_code=false
|
|
highlevel_data=false
|
|
;;
|
|
reg)
|
|
target=c
|
|
asm_labels=false
|
|
non_local_gotos=false
|
|
global_regs=true
|
|
highlevel_code=false
|
|
highlevel_data=false
|
|
;;
|
|
none)
|
|
target=c
|
|
asm_labels=false
|
|
non_local_gotos=false
|
|
global_regs=false
|
|
highlevel_code=false
|
|
highlevel_data=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
|
|
;;
|
|
|
|
trseg)
|
|
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
|
|
;;
|
|
|
|
ll_debug)
|
|
ll_debug=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
|
|
;;
|
|
|