---
gcc/Makefile.in | 34 ++++++++++++++++++++++++++++++++-
gcc/common.opt | 3 +++
gcc/config.gcc | 47 ++++++++++++++++++++++++++++++++++++++++++++++
gcc/configure | 41 ++++++++++++++++++++++++++++++++++------
gcc/configure.ac | 14 ++++++++++++++
gcc/doc/tm.texi | 18 ++++++++++++++++++
gcc/doc/tm.texi.in | 9 +++++++++
gcc/dwarf2out.cc | 6 ++++++
gcc/gcc.cc | 2 ++
gcc/genhooks.cc | 1 +
10 files changed, 168 insertions(+), 7 deletions(-)
diff --git a/gcc/Makefile.in b/gcc/Makefile.in
index 2565870b812..2b4ca443833 100644
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -615,6 +615,8 @@ tm_d_file_list=@tm_d_file_list@
tm_d_include_list=@tm_d_include_list@
tm_rust_file_list=@tm_rust_file_list@
tm_rust_include_list=@tm_rust_include_list@
+tm_algol68_file_list=@tm_algol68_file_list@
+tm_algol68_include_list=@tm_algol68_include_list@
build_xm_file_list=@build_xm_file_list@
build_xm_include_list=@build_xm_include_list@
build_xm_defines=@build_xm_defines@
@@ -917,6 +919,7 @@ TCONFIG_H = tconfig.h $(xm_file_list)
TM_P_H = tm_p.h $(tm_p_file_list) $(TREE_H)
TM_D_H = tm_d.h $(tm_d_file_list)
TM_RUST_H = tm_rust.h $(tm_rust_file_list)
+TM_ALGOL68_H = tm_algol68.h $(tm_algol68_file_list)
GTM_H = tm.h $(tm_file_list) insn-constants.h
TM_H = $(GTM_H) insn-flags.h $(OPTIONS_H)
@@ -976,11 +979,13 @@ C_TARGET_DEF = c-family/c-target.def target-hooks-macros.h
COMMON_TARGET_DEF = common/common-target.def target-hooks-macros.h
D_TARGET_DEF = d/d-target.def target-hooks-macros.h
RUST_TARGET_DEF = rust/rust-target.def target-hooks-macros.h
+ALGOL68_TARGET_DEF = algol68/algol68-target.def target-hooks-macros.h
TARGET_H = $(TM_H) target.h $(TARGET_DEF) insn-modes.h insn-codes.h
C_TARGET_H = c-family/c-target.h $(C_TARGET_DEF)
COMMON_TARGET_H = common/common-target.h $(INPUT_H) $(COMMON_TARGET_DEF)
D_TARGET_H = d/d-target.h $(D_TARGET_DEF)
RUST_TARGET_H = rust/rust-target.h $(RUST_TARGET_DEF)
+ALGOL68_TARGET_H = algol68/algol68-target.h $(ALGOL68_TARGET_DEF)
MACHMODE_H = machmode.h mode-classes.def
HOOKS_H = hooks.h
HOSTHOOKS_DEF_H = hosthooks-def.h $(HOOKS_H)
@@ -1300,6 +1305,9 @@ FORTRAN_TARGET_OBJS=@fortran_target_objs@
# Target specific, Rust specific object file
RUST_TARGET_OBJS=@rust_target_objs@
+# Target specific, Algol68 specific object file
+ALGOL68_TARGET_OBJS=@algol68_target_objs@
+
# Object files for gcc many-languages driver.
GCC_OBJS = gcc.o gcc-main.o ggc-none.o gcc-urlifier.o options-urls.o
@@ -2072,6 +2080,7 @@ tm.h: cs-tm.h ; @true
tm_p.h: cs-tm_p.h ; @true
tm_d.h: cs-tm_d.h ; @true
tm_rust.h: cs-tm_rust.h ; @true
+tm_algol68.h: cs-tm_algol68.h; @true
cs-config.h: Makefile
TARGET_CPU_DEFAULT="" \
@@ -2111,6 +2120,11 @@ cs-tm_rust.h: Makefile
HEADERS="$(tm_rust_include_list)" DEFINES="" \
$(SHELL) $(srcdir)/mkconfig.sh tm_rust.h
+cs-tm_algol68.h: Makefile
+ TARGET_CPU_DEFAULT="" \
+ HEADERS="$(tm_algol68_include_list)" DEFINES="" \
+ $(SHELL) $(srcdir)/mkconfig.sh tm_algol68.h
+
# Don't automatically run autoconf, since configure.ac might be accidentally
# newer than configure. Also, this writes into the source directory which
# might be on a read-only file system. If configured for maintainer mode
@@ -2584,6 +2598,12 @@ default-rust.o: config/default-rust.cc
$(COMPILE) $<
$(POSTCOMPILE)
+# Files used by the Algol68 language front end.
+
+default-algol68.o: config/default-algol68.cc
+ $(COMPILE) $<
+ $(POSTCOMPILE)
+
# Language-independent files.
DRIVER_DEFINES = \
@@ -2930,6 +2950,15 @@ s-rust-target-hooks-def-h: build/genhooks$(build_exeext)
rust/rust-target-hooks-def.h
$(STAMP) s-rust-target-hooks-def-h
+algol68/algol68-target-hooks-def.h: s-algol68-target-hooks-def-h; @true
+
+s-algol68-target-hooks-def-h: build/genhooks$(build_exeext)
+ $(RUN_GEN) build/genhooks$(build_exeext) "Algol68 Target Hook" \
+ > tmp-algol68-target-hooks-def.h
+ $(SHELL) $(srcdir)/../move-if-change tmp-algol68-target-hooks-def.h \
+ algol68/algol68-target-hooks-def.h
+ $(STAMP) s-algol68-target-hooks-def-h
+
# check if someone mistakenly only changed tm.texi.
# We use a different pathname here to avoid a circular dependency.
s-tm-texi: $(srcdir)/doc/../doc/tm.texi
@@ -2955,6 +2984,7 @@ s-tm-texi: build/genhooks$(build_exeext)
$(srcdir)/doc/tm.texi.in
|| test $(srcdir)/doc/tm.texi -nt
$(srcdir)/common/common-target.def \
|| test $(srcdir)/doc/tm.texi -nt $(srcdir)/d/d-target.def \
|| test $(srcdir)/doc/tm.texi -nt $(srcdir)/rust/rust-target.def \
+ || test $(srcdir)/doc/tm.texi -nt
$(srcdir)/algol68/algol68-target.def \
); then \
echo >&2 ; \
echo You should edit $(srcdir)/doc/tm.texi.in rather than
$(srcdir)/doc/tm.texi . >&2 ; \
@@ -3135,6 +3165,7 @@ generated_files = config.h tm.h $(TM_P_H) $(TM_D_H)
$(TM_H) multilib.h \
gimple-match-auto.h generic-match-auto.h \
c-family/c-target-hooks-def.h d/d-target-hooks-def.h \
$(TM_RUST_H) rust/rust-target-hooks-def.h \
+ $(TM_ALGOL68_H) algol68/algol68-target-hooks-def.h \
case-cfn-macros.h \
cfn-operators.pd omp-device-properties.h
@@ -3269,7 +3300,8 @@ build/genrecog.o : genrecog.cc $(RTL_BASE_H) $(BCONFIG_H)
$(SYSTEM_H) \
$(CORETYPES_H) $(GTM_H) errors.h $(READ_MD_H) $(GENSUPPORT_H)
\
$(HASH_TABLE_H) inchash.h
build/genhooks.o : genhooks.cc $(TARGET_DEF) $(C_TARGET_DEF) \
- $(COMMON_TARGET_DEF) $(D_TARGET_DEF) $(RUST_TARGET_DEF) $(BCONFIG_H) \
+ $(COMMON_TARGET_DEF) $(D_TARGET_DEF) $(RUST_TARGET_DEF)
$(ALGOL68_TARGET_DEF) \
+ $(BCONFIG_H) \
$(SYSTEM_H) errors.h
build/genmddump.o : genmddump.cc $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H)
\
$(CORETYPES_H) $(GTM_H) errors.h $(READ_MD_H) $(GENSUPPORT_H)
diff --git a/gcc/common.opt b/gcc/common.opt
index 1b72826d44b..624ea531ff1 100644
--- a/gcc/common.opt
+++ b/gcc/common.opt
@@ -3882,6 +3882,9 @@ Driver Joined
static
Driver
+static-libgac
+Driver
+
static-libgcc
Driver
diff --git a/gcc/config.gcc b/gcc/config.gcc
index 262b38cf0e3..bf5f66c09e4 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -93,6 +93,9 @@
# tm_rust_file list of headers with definitions of target hook
# macros for the Rust compiler.
#
+# tm_algol68_file list of headers with definitions of target hook
+# macros for the Algol68 compiler.
+#
# out_file The name of the machine description C support
# file, if different from "$cpu_type/$cpu_type.c".
#
@@ -155,6 +158,9 @@
# rust_target_objs List of extra target-dependent objects that be
# linked into the Rust compiler only.
#
+# algol68_target_objs List of extra target-dependent objects that be
+# linked into the Algol68 compiler only.
+#
# target_gtfiles List of extra source files with type information.
#
# xm_defines List of macros to define when compiling for the
@@ -210,6 +216,10 @@
#
# target_has_targetrustm Set to yes or no depending on whether the target
# has its own definition of targetrustm.
+#
+# target_has_targetalgol68m
+# Set to yes or no depending on whether the target
+# has its own deinition of targetdm.
out_file=
common_out_file=
@@ -228,10 +238,12 @@ cxx_target_objs=
d_target_objs=
fortran_target_objs=
rust_target_objs=
+algol68_target_objs=
target_has_targetcm=no
target_has_targetm_common=yes
target_has_targetdm=no
target_has_targetrustm=no
+target_has_targetalgol68m=no
tm_defines=
xm_defines=
# Set this to force installation and use of collect2.
@@ -622,6 +634,16 @@ then
rust_target_objs="${rust_target_objs} ${cpu_type}-rust.o"
fi
+tm_algol68_file=
+if test -f ${srcdir}/config/${cpu_type}/${cpu_type}-algol68.h
+then
+ tm_algol68_file="${cpu_type}/${cpu_type}-algol68.h"
+fi
+if test -f ${srcdir}/config/${cpu_type}/${cpu_type}-algol68.cc
+then
+ algol68_target_objs="${algol68_target_objs} ${cpu_type}-algol68.o"
+fi
+
extra_modes=
if test -f ${srcdir}/config/${cpu_type}/${cpu_type}-modes.def
then
@@ -791,9 +813,11 @@ case ${target} in
d_target_objs="${d_target_objs} darwin-d.o"
fortran_target_objs="darwin-f.o"
rust_target_objs="${rust_target_objs} darwin-rust.o"
+ algol68_target_objs="${algol68_target_objs} darwin-algol68.o"
target_has_targetcm=yes
target_has_targetdm=yes
target_has_targetrustm=yes
+ target_has_targetalgol68m=no
extra_objs="${extra_objs} darwin.o"
extra_gcc_objs="darwin-driver.o"
default_use_cxa_atexit=yes
@@ -826,6 +850,8 @@ case ${target} in
target_has_targetdm=yes
rust_target_objs="${rust_target_objs} dragonfly-rust.o"
target_has_targetrustm=yes
+ algol68_target_objs="${algol68_target_objs} dragonfly-algol68.o"
+ target_has_targetalgol68m=yes
;;
*-*-freebsd*)
# This is the generic ELF configuration of FreeBSD. Later
@@ -879,12 +905,16 @@ case ${target} in
target_has_targetdm=yes
rust_target_objs="${rust_target_objs} freebsd-rust.o"
target_has_targetrustm=yes
+ algol68_target_objs="${algol68_target_objs} freebsd-algol68.o"
+ target_has_targetalgol68m=yes
;;
*-*-fuchsia*)
native_system_header_dir=/include
tmake_file="t-fuchsia"
rust_target_objs="${rust_target_objs} fuchsia-rust.o"
target_has_targetrustm=yes
+ algol68_target_objs="${algol68_target_objs} fuchsia-algol68.o"
+ target_has_targetalgol68m=yes
;;
*-*-linux* | frv-*-*linux* | *-*-kfreebsd*-gnu | *-*-gnu* |
*-*-kopensolaris*-gnu | *-*-uclinuxfdpiceabi)
extra_options="$extra_options gnu-user.opt"
@@ -957,6 +987,8 @@ case ${target} in
target_has_targetdm=yes
rust_target_objs="${rust_target_objs} linux-rust.o"
target_has_targetrustm=yes
+ algol68_target_objs="${algol68_target_objs} linux-algol68.o"
+ target_has_targetalgol68m=yes
;;
*-*-kfreebsd*-gnu)
d_target_objs="${d_target_objs} kfreebsd-d.o"
@@ -993,6 +1025,8 @@ case ${target} in
esac
rust_target_objs="${rust_target_objs} netbsd-rust.o"
target_has_targetrustm=yes
+ algol68_target_objs="${algol68_target_objs} netbsd-algol68.o"
+ target_has_targetalgol68m=yes
;;
*-*-openbsd*)
tmake_file="t-openbsd"
@@ -1010,6 +1044,8 @@ case ${target} in
target_has_targetdm=yes
rust_target_objs="${rust_target_objs} openbsd-rust.o"
target_has_targetrustm=yes
+ algol68_target_objs="${algol68_target_objs} openbsd-algol68.o"
+ target_has_targetalgol68m=yes
;;
*-*-phoenix*)
gas=yes
@@ -1072,6 +1108,8 @@ case ${target} in
target_has_targetdm=yes
rust_target_objs="${rust_target_objs} sol2-rust.o"
target_has_targetrustm=yes
+ algol68_target_objs="${algol68_target_objs} sol2-algol68.o"
+ target_has_targetalgol68m=yes
;;
*-*-*vms*)
extra_options="${extra_options} vms/vms.opt"
@@ -1107,6 +1145,9 @@ case ${target} in
rust_target_objs="${rust_target_objs} vxworks-rust.o"
target_has_targetrustm=yes
+ algol68_target_objs="${algol68_target_objs} vxworks-algol68.o"
+ target_has_targetalgol68m=yes
+
extra_gcc_objs="vxworks-driver.o"
# This private header exposes a consistent interface for checks on
@@ -2233,6 +2274,8 @@ i[34567]86-*-mingw* | x86_64-*-mingw*)
target_has_targetdm="yes"
rust_target_objs="${rust_target_objs} winnt-rust.o"
target_has_targetrustm="yes"
+ algol68_target_objs="${algol68_target_objs} winnt-algol68.o"
+ target_has_targetalgol68m=yes
case ${target} in
x86_64-*-* | *-w64-*)
need_64bit_isa=yes
@@ -3703,6 +3746,10 @@ if [ "$target_has_targetrustm" = "no" ]; then
rust_target_objs="$rust_target_objs default-rust.o"
fi
+if [ "$target_has_targetalgol68" = "no" ]; then
+ algol68_target_objs="$algol68_target_objs default-algol68.o"
+fi
+
# Support for --with-cpu and related options (and a few unrelated options,
# too).
case ${with_cpu} in
diff --git a/gcc/configure.ac b/gcc/configure.ac
index 5a178e056ef..66e6255ab1b 100644
--- a/gcc/configure.ac
+++ b/gcc/configure.ac
@@ -2449,6 +2449,17 @@ for f in $tm_rust_file; do
esac
done
+tm_algol68_file_list=
+tm_algol68_include_list=
+for f in $tm_algol68_file; do
+ case $f in
+ * )
+ tm_algol68_file_list="${tm_algol68_file_list} \$(srcdir)/config/$f"
+ tm_algol68_include_list="${tm_algol68_include_list} config/$f"
+ ;;
+ esac
+done
+
xm_file_list=
xm_include_list=
for f in $xm_file; do
@@ -7558,6 +7569,8 @@ AC_SUBST(tm_d_file_list)
AC_SUBST(tm_d_include_list)
AC_SUBST(tm_rust_file_list)
AC_SUBST(tm_rust_include_list)
+AC_SUBST(tm_algol68_file_list)
+AC_SUBST(tm_algol68_include_list)
AC_SUBST(xm_file_list)
AC_SUBST(xm_include_list)
AC_SUBST(xm_defines)
@@ -7567,6 +7580,7 @@ AC_SUBST(cxx_target_objs)
AC_SUBST(fortran_target_objs)
AC_SUBST(d_target_objs)
AC_SUBST(rust_target_objs)
+AC_SUBST(algol68_target_objs)
AC_SUBST(target_cpu_default)
AC_SUBST_FILE(language_hooks)
diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi
index d7170f45206..be999b0e582 100644
--- a/gcc/doc/tm.texi
+++ b/gcc/doc/tm.texi
@@ -54,6 +54,7 @@ through the macros defined in the @file{.h} file.
* C++ ABI:: Controlling C++ ABI changes.
* D Language and ABI:: Controlling D ABI changes.
* Rust Language and ABI:: Controlling Rust ABI changes.
+* ALGOL 68 Language and ABI:: Controlling ALGOL 68 ABI changes.
* Named Address Spaces:: Adding support for named address spaces
* Misc:: Everything else.
@end menu
@@ -11283,6 +11284,23 @@ Similar to @code{TARGET_RUST_CPU_INFO}, but is used
for configuration info
relating to the target operating system.
@end deftypefn
+@node ALGOL 68 Language and ABI
+@section ALGOL 68 ABI parameters
+@cindex parameters, ALGOL 68 abi
+
+@deftypefn {Algol68 Target Hook} void TARGET_ALGOL68_CPU_INFO (void)
+Declare all environmental CPU info and features relating to the target CPU
+using the function @code{algol68_add_target_info}, which takes a string
+representing the feature key and a string representing the feature value.
+Configuration pairs predefined by this hook apply to all files that are being
+compiled.
+@end deftypefn
+
+@deftypefn {Algol68 Target Hook} void TARGET_ALGOL68_OS_INFO (void)
+Similar to @code{TARGET_ALGOL68_CPU_INFO}, but is used for configuration info
+relating to the target operating system.
+@end deftypefn
+
@node Named Address Spaces
@section Adding support for named address spaces
@cindex named address spaces
diff --git a/gcc/doc/tm.texi.in b/gcc/doc/tm.texi.in
index f6657f9df1d..3fa35eb4e8c 100644
--- a/gcc/doc/tm.texi.in
+++ b/gcc/doc/tm.texi.in
@@ -54,6 +54,7 @@ through the macros defined in the @file{.h} file.
* C++ ABI:: Controlling C++ ABI changes.
* D Language and ABI:: Controlling D ABI changes.
* Rust Language and ABI:: Controlling Rust ABI changes.
+* ALGOL 68 Language and ABI:: Controlling ALGOL 68 ABI changes.
* Named Address Spaces:: Adding support for named address spaces
* Misc:: Everything else.
@end menu
@@ -7274,6 +7275,14 @@ floating-point support; they are not included in this
mechanism.
@hook TARGET_RUST_OS_INFO
+@node ALGOL 68 Language and ABI
+@section ALGOL 68 ABI parameters
+@cindex parameters, ALGOL 68 abi
+
+@hook TARGET_ALGOL68_CPU_INFO
+
+@hook TARGET_ALGOL68_OS_INFO
+
@node Named Address Spaces
@section Adding support for named address spaces
@cindex named address spaces
diff --git a/gcc/dwarf2out.cc b/gcc/dwarf2out.cc
index 1ee2ee57821..5a8d6d2211f 100644
--- a/gcc/dwarf2out.cc
+++ b/gcc/dwarf2out.cc
@@ -25432,6 +25432,12 @@ gen_compile_unit_die (const char *filename)
else if (strcmp (language_string, "GNU Rust") == 0)
language = DW_LANG_Rust;
}
+ else if (!dwarf_strict)
+ {
+ /* XXX DW_LANG_Algol68 will be defined in DWARF 6? */
+ if (strcmp (language_string, "GNU Algol68") == 0)
+ language = DW_LANG_Algol68;
+ }
}
/* Use a degraded Fortran setting in strict DWARF2 so is_fortran works. */
else if (startswith (language_string, "GNU Fortran"))
diff --git a/gcc/gcc.cc b/gcc/gcc.cc
index 92c92996401..8560a786ab9 100644
--- a/gcc/gcc.cc
+++ b/gcc/gcc.cc
@@ -4654,11 +4654,13 @@ driver_handle_option (struct gcc_options *opts,
case OPT_static_libgfortran:
case OPT_static_libquadmath:
case OPT_static_libphobos:
+ case OPT_static_libgac:
case OPT_static_libgm2:
case OPT_static_libstdc__:
/* These are always valid; gcc.cc itself understands the first two
gfortranspec.cc understands -static-libgfortran,
libgfortran.spec handles -static-libquadmath,
+ a68spec.cc understands -static-libgac,
d-spec.cc understands -static-libphobos,
gm2spec.cc understands -static-libgm2,
and g++spec.cc understands -static-libstdc++. */
diff --git a/gcc/genhooks.cc b/gcc/genhooks.cc
index 4de7f361335..16c8b35d549 100644
--- a/gcc/genhooks.cc
+++ b/gcc/genhooks.cc
@@ -36,6 +36,7 @@ static struct hook_desc hook_array[] = {
#include "common/common-target.def"
#include "d/d-target.def"
#include "rust/rust-target.def"
+#include "algol68/algol68-target.def"
#undef DEFHOOK
};
--
2.30.2