public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r13-6479] Modula-2 rename autogenerated .c files to .cc
@ 2023-03-04 12:45 Gaius Mulley
  0 siblings, 0 replies; only message in thread
From: Gaius Mulley @ 2023-03-04 12:45 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:ab61100f4f00776e30bf92caac0d7b9963183cfd

commit r13-6479-gab61100f4f00776e30bf92caac0d7b9963183cfd
Author: Gaius Mulley <gaiusmod2@gmail.com>
Date:   Sat Mar 4 12:44:49 2023 +0000

    Modula-2 rename autogenerated .c files to .cc
    
    This patch renames all the pge-boot/*.c files to .cc.  It also renames
    the m2/mc-boot/*.c files to .cc.  Finally it renames some of the
    mc-boot-ch hand built interface files to .cc.
    
    gcc/m2/ChangeLog:
    
            * Make-lang.in (MC-LIB-BOOT-C): Rename to MC-LIB-BOOT-CC.
            (MC-BOOT-C): Rename to MC-BOOT-CC.
            (BUILD-MC-BOOT-C): Rename to BUILD-MC-BOOT-CC.
            (BUILD-MC-BOOT-AUTO-C): Rename to BUILD-MC-BOOT-AUTO-CC.
            (m2/mc-boot/$(SRC_PREFIX)%.o): Change source file extension to .cc.
            (m2/mc-boot-ch/$(SRC_PREFIX)%.o): Ditto.
            * Make-maintainer.in (m2/gm2-ppg-boot/$(SRC_PREFIX)%.o): Change
            source file extension to .cc.
            (m2/gm2-ppg-boot/main.o): Ditto.
            (m2/gm2-ppg-boot/$(SRC_PREFIX)%.o): Ditto.
            to .cc.
            (m2/gm2-pg-boot/main.o): Ditto.
            (m2/gm2-pge-boot/$(SRC_PREFIX)ldtoa.o): Ditto.
            (m2/gm2-pge-boot/$(SRC_PREFIX)dtoa.o): Ditto.
            (m2/gm2-pge-boot/$(SRC_PREFIX)errno.o): Ditto.
            (m2/gm2-pge-boot/$(SRC_PREFIX)M2RTS.o): Ditto.
            (m2/gm2-pge-boot/$(SRC_PREFIX)%.o): Ditto.
            (m2/gm2-pge-boot/$(SRC_PREFIX)%.o): Ditto.
            (m2/gm2-pge-boot/$(SRC_PREFIX)pge.o): Ditto.
            (m2/gm2-pge-boot/main.o): Ditto.
            (mc-push): Ditto.
            (mc-clean): Ditto.
            (mc-stage2): Ditto.
            ((objdir)/m2/mc-boot-gen): Ditto.
            (m2/mc-boot-gen/$(SRC_PREFIX)decl.c): Ditto.
            (m2/mc-boot-gen/$(SRC_PREFIX)%.c): Ditto.
            * mc-boot-ch/GBuiltins.c: Correct comment and rename.
            * mc-boot-ch/Gdtoa.c: Correct comment and rename.
            * mc-boot-ch/Gldtoa.c: Correct comment and rename
            * mc-boot-ch/Gtermios.cc: Rename from Gtermios.c.
            * mc-boot-ch/Gerrno.c: Rename.
            * mc-boot-ch/GRTco.c: Removed.
            * mc-boot/GASCII.c: Rename to mc-boot/GASCII.cc.
            * mc-boot/GArgs.c: Rename to mc-boot/GArgs.cc.
            * mc-boot/GAssertion.c: Rename to mc-boot/GAssertion.cc.
            * mc-boot/GBreak.c: Rename to mc-boot/GBreak.cc.
            * mc-boot/GCmdArgs.c: Rename to mc-boot/GCmdArgs.cc.
            * mc-boot/GDebug.c: Rename to mc-boot/GDebug.cc.
            * mc-boot/GDynamicStrings.c: Rename to mc-boot/GDynamicStrings.cc.
            * mc-boot/GEnvironment.c: Rename to mc-boot/GEnvironment.cc.
            * mc-boot/GFIO.c: Rename to mc-boot/GFIO.cc.
            * mc-boot/GFormatStrings.c: Rename to mc-boot/GFormatStrings.cc.
            * mc-boot/GFpuIO.c: Rename to mc-boot/GFpuIO.cc.
            * mc-boot/GIO.c: Rename to mc-boot/GIO.cc.
            * mc-boot/GIndexing.c: Rename to mc-boot/GIndexing.cc.
            * mc-boot/GM2Dependent.c: Rename to mc-boot/GM2Dependent.cc.
            * mc-boot/GM2EXCEPTION.c: Rename to mc-boot/GM2EXCEPTION.cc.
            * mc-boot/GM2RTS.c: Rename to mc-boot/GM2RTS.cc.
            * mc-boot/GMemUtils.c: Rename to mc-boot/GMemUtils.cc.
            * mc-boot/GNumberIO.c: Rename to mc-boot/GNumberIO.cc.
            * mc-boot/GPushBackInput.c: Rename to mc-boot/GPushBackInput.cc.
            * mc-boot/GRTExceptions.c: Rename to mc-boot/GRTExceptions.cc.
            * mc-boot/GRTint.c: Rename to mc-boot/GRTint.cc.
            * mc-boot/GSArgs.c: Rename to mc-boot/GSArgs.cc.
            * mc-boot/GSFIO.c: Rename to mc-boot/GSFIO.cc.
            * mc-boot/GStdIO.c: Rename to mc-boot/GStdIO.cc.
            * mc-boot/GStorage.c: Rename to mc-boot/GStorage.cc.
            * mc-boot/GStrCase.c: Rename to mc-boot/GStrCase.cc.
            * mc-boot/GStrIO.c: Rename to mc-boot/GStrIO.cc.
            * mc-boot/GStrLib.c: Rename to mc-boot/GStrLib.cc.
            * mc-boot/GStringConvert.c: Rename to mc-boot/GStringConvert.cc.
            * mc-boot/GSysStorage.c: Rename to mc-boot/GSysStorage.cc.
            * mc-boot/GTimeString.c: Rename to mc-boot/GTimeString.cc.
            * mc-boot/Galists.c: Rename to mc-boot/Galists.cc.
            * mc-boot/Gdecl.c: Rename to mc-boot/Gdecl.cc.
            * mc-boot/Gkeyc.c: Rename to mc-boot/Gkeyc.cc.
            * mc-boot/Glists.c: Rename to mc-boot/Glists.cc.
            * mc-boot/GmcComment.c: Rename to mc-boot/GmcComment.cc.
            * mc-boot/GmcComp.c: Rename to mc-boot/GmcComp.cc.
            * mc-boot/GmcDebug.c: Rename to mc-boot/GmcDebug.cc.
            * mc-boot/GmcError.c: Rename to mc-boot/GmcError.cc.
            * mc-boot/GmcFileName.c: Rename to mc-boot/GmcFileName.cc.
            * mc-boot/GmcLexBuf.c: Rename to mc-boot/GmcLexBuf.cc.
            * mc-boot/GmcMetaError.c: Rename to mc-boot/GmcMetaError.cc.
            * mc-boot/GmcOptions.c: Rename to mc-boot/GmcOptions.cc.
            * mc-boot/GmcPreprocess.c: Rename to mc-boot/GmcPreprocess.cc.
            * mc-boot/GmcPretty.c: Rename to mc-boot/GmcPretty.cc.
            * mc-boot/GmcPrintf.c: Rename to mc-boot/GmcPrintf.cc.
            * mc-boot/GmcQuiet.c: Rename to mc-boot/GmcQuiet.cc.
            * mc-boot/GmcReserved.c: Rename to mc-boot/GmcReserved.cc.
            * mc-boot/GmcSearch.c: Rename to mc-boot/GmcSearch.cc.
            * mc-boot/GmcStack.c: Rename to mc-boot/GmcStack.cc.
            * mc-boot/GmcStream.c: Rename to mc-boot/GmcStream.cc.
            * mc-boot/Gmcp1.c: Rename to mc-boot/Gmcp1.cc.
            * mc-boot/Gmcp2.c: Rename to mc-boot/Gmcp2.cc.
            * mc-boot/Gmcp3.c: Rename to mc-boot/Gmcp3.cc.
            * mc-boot/Gmcp4.c: Rename to mc-boot/Gmcp4.cc.
            * mc-boot/Gmcp5.c: Rename to mc-boot/Gmcp5.cc.
            * mc-boot/GnameKey.c: Rename to mc-boot/GnameKey.cc.
            * mc-boot/GsymbolKey.c: Rename to mc-boot/GsymbolKey.cc.
            * mc-boot/Gtop.c: Rename to mc-boot/Gtop.cc.
            * mc-boot/Gvarargs.c: Rename to mc-boot/Gvarargs.cc.
            * mc-boot/Gwlists.c: Rename to mc-boot/Gwlists.cc.
            * pge-boot/GASCII.c: Rename to pge-boot/GASCII.cc.
            * pge-boot/GArgs.c: Rename to pge-boot/GArgs.cc.
            * pge-boot/GAssertion.c: Rename to pge-boot/GAssertion.cc.
            * pge-boot/GBuiltins.c: Rename to pge-boot/GBuiltins.cc.
            * pge-boot/GDebug.c: Rename to pge-boot/GDebug.cc.
            * pge-boot/GDynamicStrings.c: Rename to pge-boot/GDynamicStrings.cc.
            * pge-boot/GFIO.c: Rename to pge-boot/GFIO.cc.
            * pge-boot/GIO.c: Rename to pge-boot/GIO.cc.
            * pge-boot/GIndexing.c: Rename to pge-boot/GIndexing.cc.
            * pge-boot/GLists.c: Rename to pge-boot/GLists.cc.
            * pge-boot/GM2Dependent.c: Rename to pge-boot/GM2Dependent.cc.
            * pge-boot/GM2EXCEPTION.c: Rename to pge-boot/GM2EXCEPTION.cc.
            * pge-boot/GM2LINK.c: Rename to pge-boot/GM2LINK.cc.
            * pge-boot/GM2RTS.c: Rename to pge-boot/GM2RTS.cc.
            * pge-boot/GNameKey.c: Rename to pge-boot/GNameKey.cc.
            * pge-boot/GNumberIO.c: Rename to pge-boot/GNumberIO.cc.
            * pge-boot/GOutput.c: Rename to pge-boot/GOutput.cc.
            * pge-boot/GPushBackInput.c: Rename to pge-boot/GPushBackInput.cc.
            * pge-boot/GRTExceptions.c: Rename to pge-boot/GRTExceptions.cc.
            * pge-boot/GRTco.c: Rename to pge-boot/GRTco.cc.
            * pge-boot/GSFIO.c: Rename to pge-boot/GSFIO.cc.
            * pge-boot/GSYSTEM.c: Rename to pge-boot/GSYSTEM.cc.
            * pge-boot/GSelective.c: Rename to pge-boot/GSelective.cc.
            * pge-boot/GStdIO.c: Rename to pge-boot/GStdIO.cc.
            * pge-boot/GStorage.c: Rename to pge-boot/GStorage.cc.
            * pge-boot/GStrCase.c: Rename to pge-boot/GStrCase.cc.
            * pge-boot/GStrIO.c: Rename to pge-boot/GStrIO.cc.
            * pge-boot/GStrLib.c: Rename to pge-boot/GStrLib.cc.
            * pge-boot/GSymbolKey.c: Rename to pge-boot/GSymbolKey.cc.
            * pge-boot/GSysExceptions.c: Rename to pge-boot/GSysExceptions.cc.
            * pge-boot/GSysStorage.c: Rename to pge-boot/GSysStorage.cc.
            * pge-boot/Gabort.c: Rename to pge-boot/Gabort.cc.
            * pge-boot/Gbnflex.c: Rename to pge-boot/Gbnflex.cc.
            * pge-boot/Gcbuiltin.c: Rename to pge-boot/Gcbuiltin.cc.
            * pge-boot/Gdtoa.c: Rename to pge-boot/Gdtoa.cc.
            * pge-boot/Gerrno.c: Rename to pge-boot/Gerrno.cc.
            * pge-boot/Gldtoa.c: Rename to pge-boot/Gldtoa.cc.
            * pge-boot/Glibc.c: Rename to pge-boot/Glibc.cc.
            * pge-boot/Glibm.c: Rename to pge-boot/Glibm.cc.
            * pge-boot/Gmcrts.c: Rename to pge-boot/Gmcrts.cc.
            * pge-boot/Gpge.c: Rename to pge-boot/Gpge.cc.
            * pge-boot/Gwrapc.c: Rename to pge-boot/Gwrapc.cc.
            * pge-boot/README: Correct description.
            * pge-boot/main.c: Rename to pge-boot/main.cc.
            * pge-boot/network.c: Rename to pge-boot/network.cc.
    
    Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>

Diff:
---
 gcc/m2/Make-lang.in               |    20 +-
 gcc/m2/Make-maintainer.in         |    96 +-
 gcc/m2/mc-boot-ch/GBuiltins.c     |    43 -
 gcc/m2/mc-boot-ch/GRTco.c         |   127 -
 gcc/m2/mc-boot-ch/Gdtoa.c         |   184 -
 gcc/m2/mc-boot-ch/Gerrno.c        |    54 -
 gcc/m2/mc-boot-ch/Gldtoa.c        |   107 -
 gcc/m2/mc-boot-ch/Gtermios.cc     |     2 +-
 gcc/m2/mc-boot/GASCII.c           |    86 -
 gcc/m2/mc-boot/GArgs.c            |   120 -
 gcc/m2/mc-boot/GAssertion.c       |    71 -
 gcc/m2/mc-boot/GBreak.c           |    47 -
 gcc/m2/mc-boot/GCmdArgs.c         |   322 -
 gcc/m2/mc-boot/GDebug.c           |   168 -
 gcc/m2/mc-boot/GDynamicStrings.c  |  2676 ----
 gcc/m2/mc-boot/GEnvironment.c     |   129 -
 gcc/m2/mc-boot/GFIO.c             |  2322 ----
 gcc/m2/mc-boot/GFormatStrings.c   |   845 --
 gcc/m2/mc-boot/GFpuIO.c           |   336 -
 gcc/m2/mc-boot/GIO.c              |   479 -
 gcc/m2/mc-boot/GIndexing.c        |   491 -
 gcc/m2/mc-boot/GM2Dependent.c     |  1407 --
 gcc/m2/mc-boot/GM2EXCEPTION.c     |    89 -
 gcc/m2/mc-boot/GM2RTS.c           |   819 --
 gcc/m2/mc-boot/GMemUtils.c        |   126 -
 gcc/m2/mc-boot/GNumberIO.c        |   776 --
 gcc/m2/mc-boot/GPushBackInput.c   |   488 -
 gcc/m2/mc-boot/GRTExceptions.c    |  1223 --
 gcc/m2/mc-boot/GRTint.c           |  1106 --
 gcc/m2/mc-boot/GSArgs.c           |   125 -
 gcc/m2/mc-boot/GSFIO.c            |   216 -
 gcc/m2/mc-boot/GStdIO.c           |   269 -
 gcc/m2/mc-boot/GStorage.c         |    74 -
 gcc/m2/mc-boot/GStrCase.c         |   175 -
 gcc/m2/mc-boot/GStrIO.c           |   277 -
 gcc/m2/mc-boot/GStrLib.c          |   346 -
 gcc/m2/mc-boot/GStringConvert.c   |  2005 ---
 gcc/m2/mc-boot/GSysStorage.c      |   249 -
 gcc/m2/mc-boot/GTimeString.c      |    91 -
 gcc/m2/mc-boot/Galists.c          |   440 -
 gcc/m2/mc-boot/Gdecl.c            | 26926 ------------------------------------
 gcc/m2/mc-boot/Gkeyc.c            |  1619 ---
 gcc/m2/mc-boot/Glists.c           |   439 -
 gcc/m2/mc-boot/GmcComment.c       |   468 -
 gcc/m2/mc-boot/GmcComp.c          |   660 -
 gcc/m2/mc-boot/GmcDebug.c         |    86 -
 gcc/m2/mc-boot/GmcError.c         |  1197 --
 gcc/m2/mc-boot/GmcFileName.c      |   152 -
 gcc/m2/mc-boot/GmcLexBuf.c        |  1849 ---
 gcc/m2/mc-boot/GmcMetaError.c     |  1880 ---
 gcc/m2/mc-boot/GmcOptions.c       |  1122 --
 gcc/m2/mc-boot/GmcPreprocess.c    |   181 -
 gcc/m2/mc-boot/GmcPretty.c        |   468 -
 gcc/m2/mc-boot/GmcPrintf.c        |   655 -
 gcc/m2/mc-boot/GmcQuiet.c         |   129 -
 gcc/m2/mc-boot/GmcReserved.c      |    40 -
 gcc/m2/mc-boot/GmcSearch.c        |   408 -
 gcc/m2/mc-boot/GmcStack.c         |   228 -
 gcc/m2/mc-boot/GmcStream.c        |   266 -
 gcc/m2/mc-boot/Gmcp1.c            |  7265 ----------
 gcc/m2/mc-boot/Gmcp2.c            |  7637 ----------
 gcc/m2/mc-boot/Gmcp3.c            |  7854 -----------
 gcc/m2/mc-boot/Gmcp4.c            |  7717 -----------
 gcc/m2/mc-boot/Gmcp5.c            |  8576 ------------
 gcc/m2/mc-boot/GnameKey.c         |   584 -
 gcc/m2/mc-boot/GsymbolKey.c       |   406 -
 gcc/m2/mc-boot/Gtop.c             |   100 -
 gcc/m2/mc-boot/Gvarargs.c         |   431 -
 gcc/m2/mc-boot/Gwlists.c          |   471 -
 gcc/m2/pge-boot/GASCII.c          |    84 -
 gcc/m2/pge-boot/GArgs.c           |   118 -
 gcc/m2/pge-boot/GAssertion.c      |    69 -
 gcc/m2/pge-boot/GBuiltins.c       |    43 -
 gcc/m2/pge-boot/GDebug.c          |   168 -
 gcc/m2/pge-boot/GDynamicStrings.c |  2679 ----
 gcc/m2/pge-boot/GFIO.c            |  2325 ----
 gcc/m2/pge-boot/GIO.c             |   479 -
 gcc/m2/pge-boot/GIndexing.c       |   493 -
 gcc/m2/pge-boot/GLists.c          |   427 -
 gcc/m2/pge-boot/GM2Dependent.c    |  1410 --
 gcc/m2/pge-boot/GM2EXCEPTION.c    |    88 -
 gcc/m2/pge-boot/GM2LINK.c         |    27 -
 gcc/m2/pge-boot/GM2RTS.c          |   822 --
 gcc/m2/pge-boot/GNameKey.c        |   612 -
 gcc/m2/pge-boot/GNumberIO.c       |   777 --
 gcc/m2/pge-boot/GOutput.c         |   315 -
 gcc/m2/pge-boot/GPushBackInput.c  |   489 -
 gcc/m2/pge-boot/GRTExceptions.c   |  1226 --
 gcc/m2/pge-boot/GRTco.c           |   127 -
 gcc/m2/pge-boot/GSFIO.c           |   215 -
 gcc/m2/pge-boot/GSYSTEM.c         |    38 -
 gcc/m2/pge-boot/GSelective.c      |   275 -
 gcc/m2/pge-boot/GStdIO.c          |   267 -
 gcc/m2/pge-boot/GStorage.c        |    72 -
 gcc/m2/pge-boot/GStrCase.c        |   175 -
 gcc/m2/pge-boot/GStrIO.c          |   277 -
 gcc/m2/pge-boot/GStrLib.c         |   346 -
 gcc/m2/pge-boot/GSymbolKey.c      |   556 -
 gcc/m2/pge-boot/GSysExceptions.c  |   237 -
 gcc/m2/pge-boot/GSysStorage.c     |   249 -
 gcc/m2/pge-boot/Gabort.c          |    30 -
 gcc/m2/pge-boot/Gbnflex.c         |   602 -
 gcc/m2/pge-boot/Gcbuiltin.c       |   173 -
 gcc/m2/pge-boot/Gdtoa.c           |   184 -
 gcc/m2/pge-boot/Gerrno.c          |    54 -
 gcc/m2/pge-boot/Gldtoa.c          |   107 -
 gcc/m2/pge-boot/Glibc.c           |   279 -
 gcc/m2/pge-boot/Glibm.c           |   224 -
 gcc/m2/pge-boot/Gmcrts.c          |    54 -
 gcc/m2/pge-boot/Gpge.c            |  9753 -------------
 gcc/m2/pge-boot/Gwrapc.c          |   183 -
 gcc/m2/pge-boot/README            |     6 +-
 gcc/m2/pge-boot/main.c            |   123 -
 gcc/m2/pge-boot/network.c         |    40 -
 114 files changed, 63 insertions(+), 126074 deletions(-)

diff --git a/gcc/m2/Make-lang.in b/gcc/m2/Make-lang.in
index 644dcf26772..a8d99c4fc8d 100644
--- a/gcc/m2/Make-lang.in
+++ b/gcc/m2/Make-lang.in
@@ -1224,7 +1224,7 @@ MC-LIB-MODS = \
    SysStorage.mod \
    TimeString.mod \
 
-MC-LIB-BOOT-C = $(MC-LIB-MODS:%.mod=%.c)
+MC-LIB-BOOT-CC = $(MC-LIB-MODS:%.mod=%.cc)
 
 # Definition modules for the modula-2 to C++ translator found in mc.
 
@@ -1300,7 +1300,7 @@ MC-AUTO-MODS = \
    mcp4.mod \
    mcp5.mod
 
-MC-BOOT-C = $(MC-MODS:%.mod=%.c) $(MC-AUTO-MODS:%.mod=%.c)
+MC-BOOT-CC = $(MC-MODS:%.mod=%.cc) $(MC-AUTO-MODS:%.mod=%.cc)
 
 # C interface files for mc.
 
@@ -1326,13 +1326,13 @@ MC-INTERFACE-CC = \
 BUILD-MC-BOOT-H =  $(MC-LIB-DEFS:%.def=m2/mc-boot-gen/$(SRC_PREFIX)%.h) \
                    $(MC-DEFS:%.def=m2/mc-boot-gen/$(SRC_PREFIX)%.h)
 
-BUILD-MC-BOOT-C =  $(MC-LIB-MODS:%.mod=m2/mc-boot-gen/$(SRC_PREFIX)%.c) \
-                   $(MC-MODS:%.mod=m2/mc-boot-gen/$(SRC_PREFIX)%.c)
+BUILD-MC-BOOT-CC =  $(MC-LIB-MODS:%.mod=m2/mc-boot-gen/$(SRC_PREFIX)%.cc) \
+                    $(MC-MODS:%.mod=m2/mc-boot-gen/$(SRC_PREFIX)%.cc)
 
-BUILD-MC-BOOT-AUTO-C = $(MC-AUTO-MODS:%.mod=m2/mc-boot-gen/$(SRC_PREFIX)%.c)
+BUILD-MC-BOOT-AUTO-CC = $(MC-AUTO-MODS:%.mod=m2/mc-boot-gen/$(SRC_PREFIX)%.cc)
 
-BUILD-MC-BOOT-O =  $(MC-LIB-BOOT-C:%.c=m2/mc-boot/$(SRC_PREFIX)%.o) \
-                   $(MC-BOOT-C:%.c=m2/mc-boot/$(SRC_PREFIX)%.o)
+BUILD-MC-BOOT-O =  $(MC-LIB-BOOT-CC:%.cc=m2/mc-boot/$(SRC_PREFIX)%.o) \
+                   $(MC-BOOT-CC:%.cc=m2/mc-boot/$(SRC_PREFIX)%.o)
 
 BUILD-MC-INTERFACE-O = $(MC-INTERFACE-C:%.c=m2/mc-boot-ch/$(SRC_PREFIX)%.o) \
                        $(MC-INTERFACE-CC:%.cc=m2/mc-boot-ch/$(SRC_PREFIX)%.o)
@@ -1350,7 +1350,7 @@ m2/boot-bin/mc$(exeext): $(BUILD-MC-BOOT-O) $(BUILD-MC-INTERFACE-O) \
          $(BUILD-MC-INTERFACE-O) m2/mc-boot/main.o \
          mcflex.o m2/gm2-libs-boot/RTcodummy.o -lm
 
-m2/mc-boot/$(SRC_PREFIX)%.o: m2/mc-boot/$(SRC_PREFIX)%.c m2/gm2-libs/gm2-libs-host.h
+m2/mc-boot/$(SRC_PREFIX)%.o: m2/mc-boot/$(SRC_PREFIX)%.cc m2/gm2-libs/gm2-libs-host.h
 	-test -d $(@D) || $(mkinstalldirs) $(@D)
 	$(CXX) -g -c -I. -I$(srcdir)/m2/mc-boot-ch -I$(srcdir)/m2/mc-boot -I$(srcdir)/../include -I$(srcdir) $(INCLUDES) $< -o $@
 
@@ -1364,8 +1364,8 @@ m2/mc-boot-ch/$(SRC_PREFIX)%.o: m2/mc-boot-ch/$(SRC_PREFIX)%.cc m2/gm2-libs/gm2-
 
 m2/mc-boot/main.o: $(M2LINK) $(srcdir)/m2/init/mcinit
 	-test -d $(@D) || $(mkinstalldirs) $(@D)
-	unset CC ; $(M2LINK) -s --langc++ --exit --name m2/mc-boot/main.c $(srcdir)/m2/init/mcinit
-	$(CXX) -g -c -I. -I$(srcdir)/../include -I$(srcdir) $(INCLUDES) m2/mc-boot/main.c -o $@
+	unset CC ; $(M2LINK) -s --langc++ --exit --name m2/mc-boot/main.cc $(srcdir)/m2/init/mcinit
+	$(CXX) -g -c -I. -I$(srcdir)/../include -I$(srcdir) $(INCLUDES) m2/mc-boot/main.cc -o $@
 
 mcflex.o: mcflex.c m2/gm2-libs/gm2-libs-host.h
 	$(CC) -I$(srcdir)/m2/mc -g -c $< -o $@   # remember that mcReserved.h is copied into m2/mc
diff --git a/gcc/m2/Make-maintainer.in b/gcc/m2/Make-maintainer.in
index 81f5abea59c..184c5128199 100644
--- a/gcc/m2/Make-maintainer.in
+++ b/gcc/m2/Make-maintainer.in
@@ -113,24 +113,24 @@ m2/gm2-ppg-boot/$(SRC_PREFIX)%.o: m2/mc-boot-ch/$(SRC_PREFIX)%.cc m2/gm2-libs/gm
 
 m2/gm2-ppg-boot/$(SRC_PREFIX)M2RTS.o: $(srcdir)/m2/gm2-libs/M2RTS.mod $(MCDEPS) $(BUILD-BOOT-PPG-H)
 	-test -d m2/gm2-ppg-boot || $(mkinstalldirs) m2/gm2-ppg-boot
-	$(MCC) --suppress-noreturn -o=m2/gm2-ppg-boot/$(SRC_PREFIX)M2RTS.c $(srcdir)/m2/gm2-libs/M2RTS.mod
+	$(MCC) --suppress-noreturn -o=m2/gm2-ppg-boot/$(SRC_PREFIX)M2RTS.cc $(srcdir)/m2/gm2-libs/M2RTS.mod
 	$(CXX) -I. -I$(srcdir)/../include -I$(srcdir) \
               -Im2/gm2-ppg-boot -I$(srcdir)/m2/mc-boot -Im2/gm2-libs-boot \
-              -I$(srcdir)/m2/mc-boot-ch $(INCLUDES) -g -c m2/gm2-ppg-boot/$(SRC_PREFIX)M2RTS.c -o $@
+              -I$(srcdir)/m2/mc-boot-ch $(INCLUDES) -g -c m2/gm2-ppg-boot/$(SRC_PREFIX)M2RTS.cc -o $@
 
 m2/gm2-ppg-boot/$(SRC_PREFIX)%.o: $(srcdir)/m2/gm2-libs/%.mod $(MCDEPS) $(BUILD-BOOT-PPG-H)
 	-test -d m2/gm2-ppg-boot || $(mkinstalldirs) m2/gm2-ppg-boot
-	$(MCC) -o=m2/gm2-ppg-boot/$(SRC_PREFIX)$*.c $(srcdir)/m2/gm2-libs/$*.mod
+	$(MCC) -o=m2/gm2-ppg-boot/$(SRC_PREFIX)$*.cc $(srcdir)/m2/gm2-libs/$*.mod
 	$(CXX) -I. -I$(srcdir)/../include -I$(srcdir) \
               -Im2/gm2-ppg-boot -I$(srcdir)/m2/mc-boot -Im2/gm2-libs-boot \
-              -I$(srcdir)/m2/mc-boot-ch $(INCLUDES) -g -c m2/gm2-ppg-boot/$(SRC_PREFIX)$*.c -o $@
+              -I$(srcdir)/m2/mc-boot-ch $(INCLUDES) -g -c m2/gm2-ppg-boot/$(SRC_PREFIX)$*.cc -o $@
 
 m2/gm2-ppg-boot/$(SRC_PREFIX)%.o: $(srcdir)/m2/gm2-compiler/%.mod $(MCDEPS) $(BUILD-BOOT-PPG-H)
 	-test -d m2/gm2-ppg-boot || $(mkinstalldirs) m2/gm2-ppg-boot
-	$(MCC) -o=m2/gm2-ppg-boot/$(SRC_PREFIX)$*.c $(srcdir)/m2/gm2-compiler/$*.mod
+	$(MCC) -o=m2/gm2-ppg-boot/$(SRC_PREFIX)$*.cc $(srcdir)/m2/gm2-compiler/$*.mod
 	$(CXX) -I. -I$(srcdir)/../include -I$(srcdir) \
               -Im2/mc-boot -Im2/gm2-compiler-boot -Im2/gm2-libs-boot \
-              -I$(srcdir)/m2/mc-boot-ch $(INCLUDES) -g -c m2/gm2-ppg-boot/$(SRC_PREFIX)$*.c -o $@
+              -I$(srcdir)/m2/mc-boot-ch $(INCLUDES) -g -c m2/gm2-ppg-boot/$(SRC_PREFIX)$*.cc -o $@
 
 m2/ppg$(exeext): m2/boot-bin/mc $(BUILD-PPG-O) $(BUILD-MC-INTERFACE-O) m2/gm2-ppg-boot/main.o \
                  m2/gm2-libs-boot/RTcodummy.o m2/mc-boot-ch/$(SRC_PREFIX)abort.o \
@@ -142,9 +142,9 @@ m2/ppg$(exeext): m2/boot-bin/mc $(BUILD-PPG-O) $(BUILD-MC-INTERFACE-O) m2/gm2-pp
 
 m2/gm2-ppg-boot/main.o: $(M2LINK) $(srcdir)/m2/init/mcinit
 	-test -d m2/gm2-ppg-boot || $(mkinstalldirs) m2/gm2-ppg-boot
-	unset CC ; $(M2LINK) -s --langc++ --exit --name mainppginit.c $(srcdir)/m2/init/ppginit
-	mv mainppginit.c m2/gm2-ppg-boot/main.c
-	$(CXX) $(INCLUDES) -g -c -o $@ m2/gm2-ppg-boot/main.c
+	unset CC ; $(M2LINK) -s --langc++ --exit --name mainppginit.cc $(srcdir)/m2/init/ppginit
+	mv mainppginit.cc m2/gm2-ppg-boot/main.cc
+	$(CXX) $(INCLUDES) -g -c -o $@ m2/gm2-ppg-boot/main.cc
 
 m2/gm2-auto:
 	-test -d $@ || $(mkinstalldirs) $@
@@ -265,9 +265,9 @@ m2/gm2-auto/pginit:
 
 m2/gm2-pg-boot/main.o: m2/gm2-auto/pginit $(M2LINK)
 	-test -d m2/gm2-pg-boot || $(mkinstalldirs) m2/gm2-pg-boot
-	unset CC ; $(M2LINK) -s --langc++ --exit --name mainpginit.c m2/gm2-auto/pginit
-	mv mainpginit.c m2/gm2-pg-boot/main.c
-	$(CXX) $(INCLUDES) -g -c -o $@ m2/gm2-pg-boot/main.c
+	unset CC ; $(M2LINK) -s --langc++ --exit --name mainpginit.cc m2/gm2-auto/pginit
+	mv mainpginit.cc m2/gm2-pg-boot/main.cc
+	$(CXX) $(INCLUDES) -g -c -o $@ m2/gm2-pg-boot/main.cc
 
 m2/pg-e$(exeext): m2/pg$(exeext)
 	-test -d m2 || $(mkinstalldirs) m2
@@ -331,11 +331,11 @@ m2/gm2-pge-boot/$(SRC_PREFIX)SysExceptions.o:  $(srcdir)/m2/mc-boot-ch/GSysExcep
 	-test -d m2/gm2-pge-boot || $(mkinstalldirs) m2/gm2-pge-boot
 	$(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/mc-boot-ch -Im2/gm2-libs $(INCLUDES) -g -c $< -o $@
 
-m2/gm2-pge-boot/$(SRC_PREFIX)ldtoa.o:  $(srcdir)/m2/mc-boot-ch/Gldtoa.c m2/gm2-libs/gm2-libs-host.h
+m2/gm2-pge-boot/$(SRC_PREFIX)ldtoa.o:  $(srcdir)/m2/mc-boot-ch/Gldtoa.cc m2/gm2-libs/gm2-libs-host.h
 	-test -d m2/gm2-pge-boot || $(mkinstalldirs) m2/gm2-pge-boot
 	$(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/mc-boot-ch -Im2/gm2-libs $(INCLUDES) -g -c $< -o $@
 
-m2/gm2-pge-boot/$(SRC_PREFIX)dtoa.o:  $(srcdir)/m2/mc-boot-ch/Gdtoa.c m2/gm2-libs/gm2-libs-host.h
+m2/gm2-pge-boot/$(SRC_PREFIX)dtoa.o:  $(srcdir)/m2/mc-boot-ch/Gdtoa.cc m2/gm2-libs/gm2-libs-host.h
 	-test -d m2/gm2-pge-boot || $(mkinstalldirs) m2/gm2-pge-boot
 	$(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/mc-boot-ch -Im2/gm2-libs $(INCLUDES) -g -c $< -o $@
 
@@ -347,37 +347,37 @@ m2/gm2-pge-boot/$(SRC_PREFIX)SYSTEM.o:  $(srcdir)/m2/mc-boot-ch/GSYSTEM.c $(BUIL
 	-test -d m2/gm2-pge-boot || $(mkinstalldirs) m2/gm2-pge-boot
 	$(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/mc-boot-ch $(INCLUDES) -g -c $< -o $@
 
-m2/gm2-pge-boot/$(SRC_PREFIX)errno.o:  $(srcdir)/m2/mc-boot-ch/Gerrno.c
+m2/gm2-pge-boot/$(SRC_PREFIX)errno.o:  $(srcdir)/m2/mc-boot-ch/Gerrno.cc
 	-test -d m2/gm2-pge-boot || $(mkinstalldirs) m2/gm2-pge-boot
 	$(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/mc-boot-ch $(INCLUDES) -g -c $< -o $@
 
 m2/gm2-pge-boot/$(SRC_PREFIX)M2RTS.o: $(srcdir)/m2/gm2-libs/M2RTS.mod $(MCDEPS) $(BUILD-BOOT-PGE-H)
 	-test -d m2/gm2-pge-boot || $(mkinstalldirs) m2/gm2-pge-boot
-	$(MCC) --suppress-noreturn -o=m2/gm2-pge-boot/$(SRC_PREFIX)M2RTS.c $(srcdir)/m2/gm2-libs/M2RTS.mod
+	$(MCC) --suppress-noreturn -o=m2/gm2-pge-boot/$(SRC_PREFIX)M2RTS.cc $(srcdir)/m2/gm2-libs/M2RTS.mod
 	$(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/gm2-pge-boot -I$(srcdir)/m2/mc-boot \
               -I$(srcdir)/m2/mc-boot-ch -Im2/gm2-libs-boot \
-              $(INCLUDES) -g -c m2/gm2-pge-boot/$(SRC_PREFIX)M2RTS.c -o $@
+              $(INCLUDES) -g -c m2/gm2-pge-boot/$(SRC_PREFIX)M2RTS.cc -o $@
 
 m2/gm2-pge-boot/$(SRC_PREFIX)%.o: $(srcdir)/m2/gm2-libs/%.mod $(MCDEPS) $(BUILD-BOOT-PGE-H)
 	-test -d m2/gm2-pge-boot || $(mkinstalldirs) m2/gm2-pge-boot
-	$(MCC) -o=m2/gm2-pge-boot/$(SRC_PREFIX)$*.c $(srcdir)/m2/gm2-libs/$*.mod
+	$(MCC) -o=m2/gm2-pge-boot/$(SRC_PREFIX)$*.cc $(srcdir)/m2/gm2-libs/$*.mod
 	$(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/gm2-pge-boot -I$(srcdir)/m2/mc-boot \
               -I$(srcdir)/m2/mc-boot-ch -Im2/gm2-libs-boot \
-              $(INCLUDES) -g -c m2/gm2-pge-boot/$(SRC_PREFIX)$*.c -o $@
+              $(INCLUDES) -g -c m2/gm2-pge-boot/$(SRC_PREFIX)$*.cc -o $@
 
 m2/gm2-pge-boot/$(SRC_PREFIX)%.o: $(srcdir)/m2/gm2-compiler/%.mod $(MCDEPS) $(BUILD-BOOT-PGE-H)
 	-test -d m2/gm2-pge-boot || $(mkinstalldirs) m2/gm2-pge-boot
-	$(MCC) -o=m2/gm2-pge-boot/$(SRC_PREFIX)$*.c $(srcdir)/m2/gm2-compiler/$*.mod
+	$(MCC) -o=m2/gm2-pge-boot/$(SRC_PREFIX)$*.cc $(srcdir)/m2/gm2-compiler/$*.mod
 	$(CXX) -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/mc-boot -Im2/gm2-compiler-boot \
               -Im2/gm2-libs-boot \
-              -I$(srcdir)/m2/mc-boot-ch $(INCLUDES) -g -c m2/gm2-pge-boot/$(SRC_PREFIX)$*.c -o $@
+              -I$(srcdir)/m2/mc-boot-ch $(INCLUDES) -g -c m2/gm2-pge-boot/$(SRC_PREFIX)$*.cc -o $@
 
 m2/gm2-pge-boot/$(SRC_PREFIX)pge.o:  m2/gm2-auto/pge.mod $(MCDEPS) $(BUILD-BOOT-PGE-H)
 	-test -d m2/gm2-pge-boot || $(mkinstalldirs) m2/gm2-pge-boot
-	$(MCC) -o=m2/gm2-pge-boot/$(SRC_PREFIX)pge.c m2/gm2-auto/pge.mod
+	$(MCC) -o=m2/gm2-pge-boot/$(SRC_PREFIX)pge.cc m2/gm2-auto/pge.mod
 	$(CXX) -I. -I$(srcdir)/../include -I$(srcdir) \
               -I$(srcdir)/m2/mc-boot -Im2/gm2-compiler-boot -Im2/gm2-libs-boot \
-              -I$(srcdir)/m2/mc-boot-ch $(INCLUDES) -g -c m2/gm2-pge-boot/$(SRC_PREFIX)pge.c -o $@
+              -I$(srcdir)/m2/mc-boot-ch $(INCLUDES) -g -c m2/gm2-pge-boot/$(SRC_PREFIX)pge.cc -o $@
 
 m2/pge$(exeext): m2/boot-bin/mc \
     $(BUILD-PGE-O) $(GM2-PPG-MODS:%.mod=m2/gm2-pge-boot/%.o) \
@@ -403,9 +403,9 @@ m2/gm2-auto/pgeinit:
 
 m2/gm2-pge-boot/main.o: m2/gm2-auto/pgeinit $(M2LINK)
 	-test -d m2/gm2-pge-boot || $(mkinstalldirs) m2/gm2-pge-boot
-	unset CC ; $(M2LINK) -s --langc++ --exit --name mainpgeinit.c m2/gm2-auto/pgeinit
-	mv mainpgeinit.c m2/gm2-pge-boot/main.c
-	$(CXX) $(INCLUDES) -g -c -o $@ m2/gm2-pge-boot/main.c
+	unset CC ; $(M2LINK) -s --langc++ --exit --name mainpgeinit.cc m2/gm2-auto/pgeinit
+	mv mainpgeinit.cc m2/gm2-pge-boot/main.cc
+	$(CXX) $(INCLUDES) -g -c -o $@ m2/gm2-pge-boot/main.cc
 
 $(objdir)/m2/gm2-ppg-boot:
 	-test -d $@ || $(mkinstalldirs) $@
@@ -459,7 +459,7 @@ pge-libs-push: force
         done
 
 pge-app-push: force
-	cp m2/gm2-pge-boot/*.c $(srcdir)/m2/pge-boot
+	cp m2/gm2-pge-boot/*.c* $(srcdir)/m2/pge-boot
 
 # Perform sanity checks.
 
@@ -496,11 +496,11 @@ GM2PATH=-I$(srcdir)/m2/mc \
 mc: mc-clean mc-devel
 
 mc-push: force
-	cp -p m2/mc-boot-gen/*.c $(srcdir)/m2/mc-boot/
+	cp -p m2/mc-boot-gen/*.cc $(srcdir)/m2/mc-boot/
 	cp -p m2/mc-boot-gen/*.h $(srcdir)/m2/mc-boot/
 
 mc-clean: force m2/mc-obj
-	$(RM) m2/mc-boot-gen/*.[ch] m2/boot-bin/* m2/mc-boot/* m2/mc-boot-ch/*
+	$(RM) m2/mc-boot-gen/*.{cc,h} m2/boot-bin/* m2/mc-boot/* m2/mc-boot-ch/*
 
 mc-maintainer: mc-clean mc-autogen mc-push mc-clean mc-bootstrap
 
@@ -527,26 +527,26 @@ mc-verify:  mc-clean mc-bootstrap mc
 	@echo "verifying the two generations of mc"
 	for i in $(GM2-VERIFY-MODS) ; do \
            echo -n "$$i " ; \
-           m2/boot-bin/mc $(MC_ARGS) -o=mcout.c $(srcdir)/m2/gm2-compiler/$$i > /dev/null ; \
+           m2/boot-bin/mc $(MC_ARGS) -o=mcout.cc $(srcdir)/m2/gm2-compiler/$$i > /dev/null ; \
            echo -n "[1]" ; \
            m2/boot-bin/mc.m2 $(MC_ARGS) -o=mcout.m2 $(srcdir)/m2/gm2-compiler/$$i > /dev/null ; \
            echo -n "[2]" ; \
            $(RM) $$i.mc-diff ; \
-           if [ -f mcout.c -a -f mcout.m2 ] ; then \
-              if diff mcout.c mcout.m2 > /dev/null ; then \
+           if [ -f mcout.cc -a -f mcout.m2 ] ; then \
+              if diff mcout.cc mcout.m2 > /dev/null ; then \
                  echo "[passed]" ; \
               else \
                  echo "[*** failed ***]" ; \
-                 diff mcout.c mcout.m2 > $$i.mc-diff ; \
+                 diff mcout.cc mcout.m2 > $$i.mc-diff ; \
               fi \
            fi ; \
-	   $(RM) mcout.c mcout.m2 ; \
+	   $(RM) mcout.cc mcout.m2 ; \
         done
 
 mc-stage2:  force
-	m2/boot-bin/mc$(exeext) -I$(srcdir)/m2/mc:$(srcdir)/m2/gm2-libs:$(srcdir)/m2/gm2-libs-iso $(EXTENDED_OPAQUE) --h-file-prefix=$(SRC_PREFIX) -o=m2/mc-boot-gen/GmcStream.c $(srcdir)/m2/mc/mcStream.mod
-	m2/boot-bin/mc$(exeext) -I$(srcdir)/m2/mc:$(srcdir)/m2/gm2-libs:$(srcdir)/m2/gm2-libs-iso $(EXTENDED_OPAQUE) --h-file-prefix=$(SRC_PREFIX) -o=m2/mc-boot-gen/Gdecl.c $(srcdir)/m2/mc/decl.mod
-	if diff m2/mc-boot-gen/Gdecl.c $(srcdir)/m2/mc-boot/Gdecl.c ; then echo "passed" ; else echo "failed" ; fi
+	m2/boot-bin/mc$(exeext) -I$(srcdir)/m2/mc:$(srcdir)/m2/gm2-libs:$(srcdir)/m2/gm2-libs-iso $(EXTENDED_OPAQUE) --h-file-prefix=$(SRC_PREFIX) -o=m2/mc-boot-gen/GmcStream.cc $(srcdir)/m2/mc/mcStream.mod
+	m2/boot-bin/mc$(exeext) -I$(srcdir)/m2/mc:$(srcdir)/m2/gm2-libs:$(srcdir)/m2/gm2-libs-iso $(EXTENDED_OPAQUE) --h-file-prefix=$(SRC_PREFIX) -o=m2/mc-boot-gen/Gdecl.cc $(srcdir)/m2/mc/decl.mod
+	if diff m2/mc-boot-gen/Gdecl.cc $(srcdir)/m2/mc-boot/Gdecl.cc ; then echo "passed" ; else echo "failed" ; fi
 
 
 
@@ -637,15 +637,15 @@ $(objdir)/m2/mc-boot-gen:
 	-test -d $@ || $(mkinstalldirs) $@
 
 mc-autogen: mc-clean mc-devel \
-            $(BUILD-MC-BOOT-H) $(BUILD-MC-BOOT-C) \
-            $(BUILD-MC-BOOT-AUTO-C)
-	for i in m2/mc-boot-gen/*.c ; do \
-           echo $(CXX) -g -c -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/mc-boot-ch -Im2/mc-boot-gen/ $$i -o m2/mc-boot-gen/`basename $$i .c`.o ; \
-                $(CXX) -g -c -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/mc-boot-ch -Im2/mc-boot-gen/ $$i -o m2/mc-boot-gen/`basename $$i .c`.o ; done
+            $(BUILD-MC-BOOT-H) $(BUILD-MC-BOOT-CC) \
+            $(BUILD-MC-BOOT-AUTO-CC)
+	for i in m2/mc-boot-gen/*.cc ; do \
+           echo $(CXX) -g -c -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/mc-boot-ch -Im2/mc-boot-gen/ $$i -o m2/mc-boot-gen/`basename $$i .cc`.o ; \
+                $(CXX) -g -c -I. -I$(srcdir)/../include -I$(srcdir) -I$(srcdir)/m2/mc-boot-ch -Im2/mc-boot-gen/ $$i -o m2/mc-boot-gen/`basename $$i .cc`.o ; done
 	@echo -n "built "
 	@cd m2/mc-boot-gen ; ls *.o | wc -l
 	@echo -n "out of "
-	@cd m2/mc-boot-gen ; ls *.c | wc -l
+	@cd m2/mc-boot-gen ; ls *.cc | wc -l
 	@echo "modules"
 
 # EXTENDED_OPAQUE = --extended-opaque
@@ -664,19 +664,19 @@ m2/mc-boot-gen/$(SRC_PREFIX)%.h: $(srcdir)/m2/gm2-libs/%.def
 	-test -d m2/mc-boot-gen || $(mkinstalldirs) m2/mc-boot-gen
 	./mc $(MC_OPTIONS) -I$(srcdir)/m2/mc -I$(srcdir)/m2/gm2-libs -I$(srcdir)/m2/gm2-libs-iso $(EXTENDED_OPAQUE) --h-file-prefix=$(SRC_PREFIX) -o=$@ $<
 
-m2/mc-boot-gen/$(SRC_PREFIX)decl.c: $(srcdir)/m2/mc/decl.mod
+m2/mc-boot-gen/$(SRC_PREFIX)decl.cc: $(srcdir)/m2/mc/decl.mod
 	-test -d m2/mc-boot-gen || $(mkinstalldirs) m2/mc-boot-gen
 	./mc $(MC_OPTIONS) --extended-opaque -I$(srcdir)/m2/mc -I$(srcdir)/m2/gm2-libs -I$(srcdir)/m2/gm2-libs-iso --h-file-prefix=$(SRC_PREFIX) -o=$@ $<
 
-m2/mc-boot-gen/$(SRC_PREFIX)%.c: $(srcdir)/m2/mc/%.mod
+m2/mc-boot-gen/$(SRC_PREFIX)%.cc: $(srcdir)/m2/mc/%.mod
 	-test -d m2/mc-boot-gen || $(mkinstalldirs) m2/mc-boot-gen
 	./mc $(MC_OPTIONS) -I$(srcdir)/m2/mc -I$(srcdir)/m2/gm2-libs -I$(srcdir)/m2/gm2-libs-iso $(EXTENDED_OPAQUE) --h-file-prefix=$(SRC_PREFIX) -o=$@ $<
 
-m2/mc-boot-gen/$(SRC_PREFIX)%.c: $(srcdir)/m2/gm2-libs/%.mod
+m2/mc-boot-gen/$(SRC_PREFIX)%.cc: $(srcdir)/m2/gm2-libs/%.mod
 	-test -d m2/mc-boot-gen || $(mkinstalldirs) m2/mc-boot-gen
 	./mc $(MC_OPTIONS) -I$(srcdir)/m2/mc -I$(srcdir)/m2/gm2-libs -I$(srcdir)/m2/gm2-libs-iso $(EXTENDED_OPAQUE) --h-file-prefix=$(SRC_PREFIX) -o=$@ $<
 
-m2/mc-boot-gen/$(SRC_PREFIX)%.c: $(srcdir)/m2/gm2-libs-iso/%.mod
+m2/mc-boot-gen/$(SRC_PREFIX)%.cc: $(srcdir)/m2/gm2-libs-iso/%.mod
 	-test -d m2/mc-boot-gen || $(mkinstalldirs) m2/mc-boot-gen
 	./mc $(MC_OPTIONS) -I$(srcdir)/m2/mc -I$(srcdir)/m2/gm2-libs -I$(srcdir)/m2/gm2-libs-iso $(EXTENDED_OPAQUE) --h-file-prefix=$(SRC_PREFIX) -o=$@ $<
 
@@ -684,7 +684,7 @@ m2/mc-boot-gen/$(SRC_PREFIX)%.h: $(srcdir)/m2/gm2-libs-iso/%.def
 	-test -d m2/mc-boot-gen || $(mkinstalldirs) m2/mc-boot-gen
 	./mc $(MC_OPTIONS) -I$(srcdir)/m2/mc -I$(srcdir)/m2/gm2-libs -I$(srcdir)/m2/gm2-libs-iso $(EXTENDED_OPAQUE) --h-file-prefix=$(SRC_PREFIX) -o=$@ $<
 
-m2/mc-boot-gen/$(SRC_PREFIX)%.c: m2/mc-obj/%.mod
+m2/mc-boot-gen/$(SRC_PREFIX)%.cc: m2/mc-obj/%.mod
 	-test -d m2/mc-boot-gen || $(mkinstalldirs) m2/mc-boot-gen
 	./mc $(MC_OPTIONS) -I$(srcdir)/m2/mc -I$(srcdir)/m2/gm2-libs -I$(srcdir)/m2/gm2-libs-iso $(EXTENDED_OPAQUE) --h-file-prefix=$(SRC_PREFIX) -o=$@ $<
 
diff --git a/gcc/m2/mc-boot-ch/GBuiltins.c b/gcc/m2/mc-boot-ch/GBuiltins.c
deleted file mode 100644
index 28a41c0427a..00000000000
--- a/gcc/m2/mc-boot-ch/GBuiltins.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/* GBuiltins.c dummy module to aid linking mc projects.
-
-Copyright (C) 2016-2023 Free Software Foundation, Inc.
-Contributed by Gaius Mulley <gaius@glam.ac.uk>.
-
-This file is part of GNU Modula-2.
-
-GNU Modula-2 is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
-
-GNU Modula-2 is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Modula-2; see the file COPYING3.  If not see
-<http://www.gnu.org/licenses/>.  */
-
-#if defined(__cplusplus)
-#define EXTERN extern "C"
-#else
-#define EXTERN
-#endif
-
-
-/* init module constructor.  */
-
-EXTERN
-void
-_M2_Builtins_init (void)
-{
-}
-
-/* finish module deconstructor.  */
-
-EXTERN
-void
-_M2_Builtins_fini (void)
-{
-}
diff --git a/gcc/m2/mc-boot-ch/GRTco.c b/gcc/m2/mc-boot-ch/GRTco.c
deleted file mode 100644
index cb6f5152f5a..00000000000
--- a/gcc/m2/mc-boot-ch/GRTco.c
+++ /dev/null
@@ -1,127 +0,0 @@
-/* RTco.c provides dummy access to thread primitives.
-
-Copyright (C) 2019-2023 Free Software Foundation, Inc.
-Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>.
-
-This file is part of GNU Modula-2.
-
-GNU Modula-2 is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
-
-GNU Modula-2 is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-General Public License for more details.
-
-Under Section 7 of GPL version 3, you are granted additional
-permissions described in the GCC Runtime Library Exception, version
-3.1, as published by the Free Software Foundation.
-
-You should have received a copy of the GNU General Public License and
-a copy of the GCC Runtime Library Exception along with this program;
-see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
-<http://www.gnu.org/licenses/>.  */
-
-#if defined(__cplusplus)
-#define EXTERN extern "C"
-#else
-#define EXTERN
-#endif
-
-EXTERN
-void
-RTco_wait (__attribute__ ((unused)) int sid)
-{
-}
-
-
-EXTERN
-void
-RTco_signal (__attribute__ ((unused)) int sid)
-{
-}
-
-
-EXTERN
-int
-RTco_init (void)
-{
-  return 0;
-}
-
-
-EXTERN
-int
-RTco_initSemaphore (__attribute__ ((unused)) int value)
-{
-  return 0;
-}
-
-
-/* signalThread signal the semaphore associated with thread tid.  */
-
-EXTERN
-void
-RTco_signalThread (__attribute__ ((unused)) int tid)
-{
-}
-
-
-/* waitThread wait on the semaphore associated with thread tid.  */
-
-EXTERN
-void
-RTco_waitThread (__attribute__ ((unused)) int tid)
-{
-}
-
-
-EXTERN
-int
-RTco_currentThread (void)
-{
-  return 0;
-}
-
-
-EXTERN
-int
-RTco_initThread (__attribute__ ((unused)) void (*proc)(void),
-		 __attribute__ ((unused)) unsigned int stackSize)
-{
-  return 0;
-}
-
-
-EXTERN
-void
-RTco_transfer (__attribute__ ((unused)) int *p1, __attribute__ ((unused)) int p2)
-{
-}
-
-
-EXTERN
-int
-RTco_select (__attribute__ ((unused)) int p1,
-	     __attribute__ ((unused)) void *p2,
-	     __attribute__ ((unused)) void *p3,
-	     __attribute__ ((unused)) void *p4,
-	     __attribute__ ((unused)) void *p5)
-{
-  return 0;
-}
-
-
-EXTERN
-void
-_M2_RTco_init (void)
-{
-}
-
-EXTERN
-void
-_M2_RTco_fini (void)
-{
-}
diff --git a/gcc/m2/mc-boot-ch/Gdtoa.c b/gcc/m2/mc-boot-ch/Gdtoa.c
deleted file mode 100644
index 77a7ae50e02..00000000000
--- a/gcc/m2/mc-boot-ch/Gdtoa.c
+++ /dev/null
@@ -1,184 +0,0 @@
-/* Gdtoa.c provides access to double string conversion.
-
-Copyright (C) 2016-2023 Free Software Foundation, Inc.
-Contributed by Gaius Mulley <gaius@glam.ac.uk>.
-
-This file is part of GNU Modula-2.
-
-GNU Modula-2 is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
-
-GNU Modula-2 is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Modula-2; see the file COPYING3.  If not see
-<http://www.gnu.org/licenses/>.  */
-
-#define GM2
-
-#include "config.h"
-#include "system.h"
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define MAX_FP_DIGITS 500
-
-typedef enum Mode { maxsignicant, decimaldigits } Mode;
-
-/* maxsignicant: return a string containing max(1,ndigits)
-   significant digits.  The return string contains the string
-   produced by ecvt.  decimaldigits: return a string produced by
-   fcvt.  The string will contain ndigits past the decimal point
-   (ndigits may be negative).  */
-
-double
-dtoa_strtod (const char *s, int *error)
-{
-  char *endp;
-  double d;
-
-  errno = 0;
-  d = strtod (s, &endp);
-  if (endp != NULL && (*endp == '\0'))
-    *error = (errno != 0);
-  else
-    *error = TRUE;
-  return d;
-}
-
-/* dtoa_calcmaxsig - calculates the position of the decimal point it
-   also removes the decimal point and exponent from string, p.  */
-
-int
-dtoa_calcmaxsig (char *p, int ndigits)
-{
-  char *e;
-  char *o;
-  int x;
-
-  e = index (p, 'E');
-  if (e == NULL)
-    x = 0;
-  else
-    {
-      *e = (char)0;
-      x = atoi (e + 1);
-    }
-
-  o = index (p, '.');
-  if (o == NULL)
-    return strlen (p) + x;
-  else
-    {
-      memmove (o, o + 1, ndigits - (o - p));
-      return o - p + x;
-    }
-}
-
-/* dtoa_calcdecimal - calculates the position of the decimal point it
-   also removes the decimal point and exponent from string, p.  It
-   truncates the digits in p accordingly to ndigits.  Ie ndigits is
-   the number of digits after the '.' */
-
-int
-dtoa_calcdecimal (char *p, int str_size, int ndigits)
-{
-  char *e;
-  char *o;
-  int x;
-  int l;
-
-  e = index (p, 'E');
-  if (e == NULL)
-    x = 0;
-  else
-    {
-      *e = (char)0;
-      x = atoi (e + 1);
-    }
-
-  l = strlen (p);
-  o = index (p, '.');
-  if (o == NULL)
-    x += strlen (p);
-  else
-    {
-      int m = strlen (o);
-      memmove (o, o + 1, l - (o - p));
-      if (m > 0)
-        o[m - 1] = '0';
-      x += o - p;
-    }
-  if ((x + ndigits >= 0) && (x + ndigits < str_size))
-    p[x + ndigits] = (char)0;
-  return x;
-}
-
-
-int
-dtoa_calcsign (char *p, int str_size)
-{
-  if (p[0] == '-')
-    {
-      memmove (p, p + 1, str_size - 1);
-      return TRUE;
-    }
-  else
-    return FALSE;
-}
-
-
-char *
-dtoa_dtoa (double d, int mode, int ndigits, int *decpt, int *sign)
-{
-  char format[50];
-  char *p;
-  int r;
-  switch (mode)
-    {
-
-    case maxsignicant:
-      ndigits += 20; /* enough for exponent.  */
-      p = (char *) malloc (ndigits);
-      snprintf (format, 50, "%s%d%s", "%.", ndigits - 20, "E");
-      snprintf (p, ndigits, format, d);
-      *sign = dtoa_calcsign (p, ndigits);
-      *decpt = dtoa_calcmaxsig (p, ndigits);
-      return p;
-    case decimaldigits:
-      p = (char *) malloc (MAX_FP_DIGITS + 20);
-      snprintf (format, 50, "%s%d%s", "%.", MAX_FP_DIGITS, "E");
-      snprintf (p, MAX_FP_DIGITS + 20, format, d);
-      *sign = dtoa_calcsign (p, MAX_FP_DIGITS + 20);
-      *decpt = dtoa_calcdecimal (p, MAX_FP_DIGITS + 20, ndigits);
-      return p;
-    default:
-      abort ();
-    }
-}
-
-#if defined(GM2)
-/* GNU Modula-2 hooks */
-
-void
-_M2_dtoa_init (void)
-{
-}
-
-void
-_M2_dtoa_fini (void)
-{
-}
-#endif
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/gcc/m2/mc-boot-ch/Gerrno.c b/gcc/m2/mc-boot-ch/Gerrno.c
deleted file mode 100644
index c65c48630af..00000000000
--- a/gcc/m2/mc-boot-ch/Gerrno.c
+++ /dev/null
@@ -1,54 +0,0 @@
-/* Gerrno.c provides access to errno for Modula-2.
-
-Copyright (C) 2016-2023 Free Software Foundation, Inc.
-Contributed by Gaius Mulley <gaius@glam.ac.uk>.
-
-This file is part of GNU Modula-2.
-
-GNU Modula-2 is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
-
-GNU Modula-2 is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Modula-2; see the file COPYING3.  If not see
-<http://www.gnu.org/licenses/>.  */
-
-#include "config.h"
-#include "system.h"
-#include "ansidecl.h"
-
-#   ifdef __cplusplus
-extern "C" {
-#   endif
-
-/* geterrno returns errno.  */
-
-int
-errno_geterrno (void)
-{
-  return errno;
-}
-
-/* init constructor for the module.  */
-
-void
-_M2_errno_init (int argc, char *p)
-{
-}
-
-/* finish deconstructor for the module.  */
-
-void
-_M2_errno_fini (int argc, char *p)
-{
-}
-
-#   ifdef __cplusplus
-}
-#   endif
diff --git a/gcc/m2/mc-boot-ch/Gldtoa.c b/gcc/m2/mc-boot-ch/Gldtoa.c
deleted file mode 100644
index a918cfc2d67..00000000000
--- a/gcc/m2/mc-boot-ch/Gldtoa.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/* Gldtoa.c provides access to long double string conversion.
-
-Copyright (C) 2016-2023 Free Software Foundation, Inc.
-Contributed by Gaius Mulley <gaius@glam.ac.uk>.
-
-This file is part of GNU Modula-2.
-
-GNU Modula-2 is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
-
-GNU Modula-2 is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Modula-2; see the file COPYING3.  If not see
-<http://www.gnu.org/licenses/>.  */
-
-#include "config.h"
-#include "system.h"
-
-#include "gm2-libs-host.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define MAX_FP_DIGITS 500
-
-typedef enum Mode { maxsignicant, decimaldigits } Mode;
-
-extern int dtoa_calcmaxsig (char *p, int ndigits);
-extern int dtoa_calcdecimal (char *p, int str_size, int ndigits);
-extern int dtoa_calcsign (char *p, int str_size);
-
-/* maxsignicant: return a string containing max(1,ndigits)
-   significant digits.  The return string contains the string
-   produced by snprintf.  decimaldigits: return a string produced by
-   fcvt.  The string will contain ndigits past the decimal point
-   (ndigits may be negative).  */
-
-long double
-ldtoa_strtold (const char *s, int *error)
-{
-  char *endp;
-  long double d;
-
-  errno = 0;
-#if defined(HAVE_STRTOLD)
-  d = strtold (s, &endp);
-#else
-  /* fall back to using strtod.  */
-  d = (long double)strtod (s, &endp);
-#endif
-  if (endp != NULL && (*endp == '\0'))
-    *error = (errno != 0);
-  else
-    *error = TRUE;
-  return d;
-}
-
-char *
-ldtoa_ldtoa (long double d, int mode, int ndigits, int *decpt, int *sign)
-{
-  char format[50];
-  char *p;
-  int r;
-  switch (mode)
-    {
-
-    case maxsignicant:
-      ndigits += 20; /* enough for exponent.  */
-      p = (char *)malloc (ndigits);
-      snprintf (format, 50, "%s%d%s", "%.", ndigits - 20, "LE");
-      snprintf (p, ndigits, format, d);
-      *sign = dtoa_calcsign (p, ndigits);
-      *decpt = dtoa_calcmaxsig (p, ndigits);
-      return p;
-    case decimaldigits:
-      p = (char *)malloc (MAX_FP_DIGITS + 20);
-      snprintf (format, 50, "%s%d%s", "%.", MAX_FP_DIGITS, "LE");
-      snprintf (p, MAX_FP_DIGITS + 20, format, d);
-      *sign = dtoa_calcsign (p, MAX_FP_DIGITS + 20);
-      *decpt = dtoa_calcdecimal (p, MAX_FP_DIGITS + 20, ndigits);
-      return p;
-    default:
-      abort ();
-    }
-}
-
-/* GNU Modula-2 hooks */
-
-void
-_M2_ldtoa_init (void)
-{
-}
-
-void
-_M2_ldtoa_fini (void)
-{
-}
-#   ifdef __cplusplus
-}
-#   endif
diff --git a/gcc/m2/mc-boot-ch/Gtermios.cc b/gcc/m2/mc-boot-ch/Gtermios.cc
index e6f6ac898b3..a3f970d1361 100644
--- a/gcc/m2/mc-boot-ch/Gtermios.cc
+++ b/gcc/m2/mc-boot-ch/Gtermios.cc
@@ -1,4 +1,4 @@
-/* Gtermios.c handwritten module for mc.
+/* Gtermios.cc handwritten module for mc.
 
 Copyright (C) 2010-2023 Free Software Foundation, Inc.
 Contributed by Gaius Mulley <gaius@glam.ac.uk>.
diff --git a/gcc/m2/mc-boot/GASCII.c b/gcc/m2/mc-boot/GASCII.c
deleted file mode 100644
index 2f768ce24c8..00000000000
--- a/gcc/m2/mc-boot/GASCII.c
+++ /dev/null
@@ -1,86 +0,0 @@
-/* do not edit automatically generated by mc from ASCII.  */
-/* ASCII.mod dummy companion module for the definition.
-
-Copyright (C) 2001-2023 Free Software Foundation, Inc.
-Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>.
-
-This file is part of GNU Modula-2.
-
-GNU Modula-2 is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
-
-GNU Modula-2 is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-General Public License for more details.
-
-Under Section 7 of GPL version 3, you are granted additional
-permissions described in the GCC Runtime Library Exception, version
-3.1, as published by the Free Software Foundation.
-
-You should have received a copy of the GNU General Public License and
-a copy of the GCC Runtime Library Exception along with this program;
-see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
-<http://www.gnu.org/licenses/>.  */
-
-#include "config.h"
-#include "system.h"
-#   if !defined (PROC_D)
-#      define PROC_D
-       typedef void (*PROC_t) (void);
-       typedef struct { PROC_t proc; } PROC;
-#   endif
-
-#define _ASCII_H
-#define _ASCII_C
-
-
-#   define ASCII_nul (char) 000
-#   define ASCII_soh (char) 001
-#   define ASCII_stx (char) 002
-#   define ASCII_etx (char) 003
-#   define ASCII_eot (char) 004
-#   define ASCII_enq (char) 005
-#   define ASCII_ack (char) 006
-#   define ASCII_bel (char) 007
-#   define ASCII_bs (char) 010
-#   define ASCII_ht (char) 011
-#   define ASCII_nl (char) 012
-#   define ASCII_vt (char) 013
-#   define ASCII_np (char) 014
-#   define ASCII_cr (char) 015
-#   define ASCII_so (char) 016
-#   define ASCII_si (char) 017
-#   define ASCII_dle (char) 020
-#   define ASCII_dc1 (char) 021
-#   define ASCII_dc2 (char) 022
-#   define ASCII_dc3 (char) 023
-#   define ASCII_dc4 (char) 024
-#   define ASCII_nak (char) 025
-#   define ASCII_syn (char) 026
-#   define ASCII_etb (char) 027
-#   define ASCII_can (char) 030
-#   define ASCII_em (char) 031
-#   define ASCII_sub (char) 032
-#   define ASCII_esc (char) 033
-#   define ASCII_fs (char) 034
-#   define ASCII_gs (char) 035
-#   define ASCII_rs (char) 036
-#   define ASCII_us (char) 037
-#   define ASCII_sp (char) 040
-#   define ASCII_lf ASCII_nl
-#   define ASCII_ff ASCII_np
-#   define ASCII_eof ASCII_eot
-#   define ASCII_tab ASCII_ht
-#   define ASCII_del (char) 0177
-#   define ASCII_EOL ASCII_nl
-
-extern "C" void _M2_ASCII_init (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-}
-
-extern "C" void _M2_ASCII_fini (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-}
diff --git a/gcc/m2/mc-boot/GArgs.c b/gcc/m2/mc-boot/GArgs.c
deleted file mode 100644
index 106ddfd30c6..00000000000
--- a/gcc/m2/mc-boot/GArgs.c
+++ /dev/null
@@ -1,120 +0,0 @@
-/* do not edit automatically generated by mc from Args.  */
-/* Args.mod provide access to command line arguments.
-
-Copyright (C) 2001-2023 Free Software Foundation, Inc.
-Contributed by Gaius Mulley <gaius@glam.ac.uk>.
-
-This file is part of GNU Modula-2.
-
-GNU Modula-2 is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
-
-GNU Modula-2 is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-General Public License for more details.
-
-Under Section 7 of GPL version 3, you are granted additional
-permissions described in the GCC Runtime Library Exception, version
-3.1, as published by the Free Software Foundation.
-
-You should have received a copy of the GNU General Public License and
-a copy of the GCC Runtime Library Exception along with this program;
-see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
-<http://www.gnu.org/licenses/>.  */
-
-#include "config.h"
-#include "system.h"
-#   if !defined (PROC_D)
-#      define PROC_D
-       typedef void (*PROC_t) (void);
-       typedef struct { PROC_t proc; } PROC;
-#   endif
-
-#define _Args_H
-#define _Args_C
-
-#   include "GUnixArgs.h"
-#   include "GASCII.h"
-
-#   define MaxArgs 255
-#   define MaxString 4096
-typedef struct Args__T2_a Args__T2;
-
-typedef Args__T2 *Args__T1;
-
-typedef struct Args__T3_a Args__T3;
-
-struct Args__T2_a { Args__T3 * array[MaxArgs+1]; };
-struct Args__T3_a { char array[MaxString+1]; };
-static Args__T1 Source;
-
-/*
-   GetArg - returns the nth argument from the command line.
-            The success of the operation is returned.
-*/
-
-extern "C" unsigned int Args_GetArg (char *a, unsigned int _a_high, unsigned int n);
-
-/*
-   Narg - returns the number of arguments available from
-          command line.
-*/
-
-extern "C" unsigned int Args_Narg (void);
-
-
-/*
-   GetArg - returns the nth argument from the command line.
-            The success of the operation is returned.
-*/
-
-extern "C" unsigned int Args_GetArg (char *a, unsigned int _a_high, unsigned int n)
-{
-  int i;
-  unsigned int High;
-  unsigned int j;
-
-  i = (int ) (n);
-  j = 0;
-  High = _a_high;
-  if (i < (UnixArgs_GetArgC ()))
-    {
-      Source = static_cast<Args__T1> (UnixArgs_GetArgV ());
-      while ((j < High) && ((*(*Source).array[i]).array[j] != ASCII_nul))
-        {
-          a[j] = (*(*Source).array[i]).array[j];
-          j += 1;
-        }
-    }
-  if (j <= High)
-    {
-      a[j] = ASCII_nul;
-    }
-  return i < (UnixArgs_GetArgC ());
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   Narg - returns the number of arguments available from
-          command line.
-*/
-
-extern "C" unsigned int Args_Narg (void)
-{
-  return UnixArgs_GetArgC ();
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-extern "C" void _M2_Args_init (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-}
-
-extern "C" void _M2_Args_fini (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-}
diff --git a/gcc/m2/mc-boot/GAssertion.c b/gcc/m2/mc-boot/GAssertion.c
deleted file mode 100644
index 21ee6c0b2f2..00000000000
--- a/gcc/m2/mc-boot/GAssertion.c
+++ /dev/null
@@ -1,71 +0,0 @@
-/* do not edit automatically generated by mc from Assertion.  */
-/* Assertion.mod provides an assert procedure.
-
-Copyright (C) 2001-2023 Free Software Foundation, Inc.
-Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>.
-
-This file is part of GNU Modula-2.
-
-GNU Modula-2 is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
-
-GNU Modula-2 is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-General Public License for more details.
-
-Under Section 7 of GPL version 3, you are granted additional
-permissions described in the GCC Runtime Library Exception, version
-3.1, as published by the Free Software Foundation.
-
-You should have received a copy of the GNU General Public License and
-a copy of the GCC Runtime Library Exception along with this program;
-see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
-<http://www.gnu.org/licenses/>.  */
-
-#include "config.h"
-#include "system.h"
-#   if !defined (PROC_D)
-#      define PROC_D
-       typedef void (*PROC_t) (void);
-       typedef struct { PROC_t proc; } PROC;
-#   endif
-
-#define _Assertion_H
-#define _Assertion_C
-
-#   include "GStrIO.h"
-#   include "GM2RTS.h"
-
-
-/*
-   Assert - tests the boolean Condition, if it fails then HALT is called.
-*/
-
-extern "C" void Assertion_Assert (unsigned int Condition);
-
-
-/*
-   Assert - tests the boolean Condition, if it fails then HALT is called.
-*/
-
-extern "C" void Assertion_Assert (unsigned int Condition)
-{
-  if (! Condition)
-    {
-      StrIO_WriteString ((const char *) "assert failed - halting system", 30);
-      StrIO_WriteLn ();
-      M2RTS_HALT (-1);
-      __builtin_unreachable ();
-    }
-}
-
-extern "C" void _M2_Assertion_init (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-}
-
-extern "C" void _M2_Assertion_fini (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-}
diff --git a/gcc/m2/mc-boot/GBreak.c b/gcc/m2/mc-boot/GBreak.c
deleted file mode 100644
index 9be003bd619..00000000000
--- a/gcc/m2/mc-boot/GBreak.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/* do not edit automatically generated by mc from Break.  */
-/* Break.mod provides a dummy compatibility library for legacy systems.
-
-Copyright (C) 2001-2023 Free Software Foundation, Inc.
-Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>.
-
-This file is part of GNU Modula-2.
-
-GNU Modula-2 is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
-
-GNU Modula-2 is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-General Public License for more details.
-
-Under Section 7 of GPL version 3, you are granted additional
-permissions described in the GCC Runtime Library Exception, version
-3.1, as published by the Free Software Foundation.
-
-You should have received a copy of the GNU General Public License and
-a copy of the GCC Runtime Library Exception along with this program;
-see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
-<http://www.gnu.org/licenses/>.  */
-
-#include "config.h"
-#include "system.h"
-#   if !defined (PROC_D)
-#      define PROC_D
-       typedef void (*PROC_t) (void);
-       typedef struct { PROC_t proc; } PROC;
-#   endif
-
-#define _Break_H
-#define _Break_C
-
-
-
-extern "C" void _M2_Break_init (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-}
-
-extern "C" void _M2_Break_fini (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-}
diff --git a/gcc/m2/mc-boot/GCmdArgs.c b/gcc/m2/mc-boot/GCmdArgs.c
deleted file mode 100644
index c304a407182..00000000000
--- a/gcc/m2/mc-boot/GCmdArgs.c
+++ /dev/null
@@ -1,322 +0,0 @@
-/* do not edit automatically generated by mc from CmdArgs.  */
-/* CmdArgs.mod provides procedures to retrieve arguments from strings.
-
-Copyright (C) 2001-2023 Free Software Foundation, Inc.
-Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>.
-
-This file is part of GNU Modula-2.
-
-GNU Modula-2 is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
-
-GNU Modula-2 is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-General Public License for more details.
-
-Under Section 7 of GPL version 3, you are granted additional
-permissions described in the GCC Runtime Library Exception, version
-3.1, as published by the Free Software Foundation.
-
-You should have received a copy of the GNU General Public License and
-a copy of the GCC Runtime Library Exception along with this program;
-see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
-<http://www.gnu.org/licenses/>.  */
-
-#include "config.h"
-#include "system.h"
-#   if !defined (PROC_D)
-#      define PROC_D
-       typedef void (*PROC_t) (void);
-       typedef struct { PROC_t proc; } PROC;
-#   endif
-
-#define _CmdArgs_H
-#define _CmdArgs_C
-
-#   include "GASCII.h"
-#   include "GStrLib.h"
-
-#   define esc '\\'
-#   define space ' '
-#   define squote '\''
-#   define dquote '"'
-#   define tab ' '
-
-/*
-   GetArg - takes a command line and attempts to extract argument, n,
-            from CmdLine. The resulting argument is placed into, a.
-            The result of the operation is returned.
-*/
-
-extern "C" unsigned int CmdArgs_GetArg (const char *CmdLine_, unsigned int _CmdLine_high, unsigned int n, char *Argi, unsigned int _Argi_high);
-
-/*
-   Narg - returns the number of arguments available from
-          command line, CmdLine.
-*/
-
-extern "C" unsigned int CmdArgs_Narg (const char *CmdLine_, unsigned int _CmdLine_high);
-
-/*
-   GetNextArg - Returns true if another argument may be found.
-                The argument is taken from CmdLine at position Index,
-                Arg is filled with the found argument.
-*/
-
-static unsigned int GetNextArg (const char *CmdLine_, unsigned int _CmdLine_high, unsigned int *CmdIndex, char *Arg, unsigned int _Arg_high);
-
-/*
-   CopyUntilSpace - copies characters until a Space character is found.
-*/
-
-static void CopyUntilSpace (const char *From_, unsigned int _From_high, unsigned int *FromIndex, unsigned int FromHigh, char *To, unsigned int _To_high, unsigned int *ToIndex, unsigned int ToHigh);
-
-/*
-   CopyUntil - copies characters until the UntilChar is found.
-*/
-
-static void CopyUntil (const char *From_, unsigned int _From_high, unsigned int *FromIndex, unsigned int FromHigh, char *To, unsigned int _To_high, unsigned int *ToIndex, unsigned int ToHigh, char UntilChar);
-
-/*
-   CopyChar - copies a character from string From to string To and
-              takes into consideration escape characters. ie \x
-              Where x is any character.
-*/
-
-static void CopyChar (const char *From_, unsigned int _From_high, unsigned int *FromIndex, unsigned int FromHigh, char *To, unsigned int _To_high, unsigned int *ToIndex, unsigned int ToHigh);
-static unsigned int Escape (char ch);
-static unsigned int Space (char ch);
-static unsigned int DoubleQuote (char ch);
-static unsigned int SingleQuote (char ch);
-
-
-/*
-   GetNextArg - Returns true if another argument may be found.
-                The argument is taken from CmdLine at position Index,
-                Arg is filled with the found argument.
-*/
-
-static unsigned int GetNextArg (const char *CmdLine_, unsigned int _CmdLine_high, unsigned int *CmdIndex, char *Arg, unsigned int _Arg_high)
-{
-  unsigned int ArgIndex;
-  unsigned int HighA;
-  unsigned int HighC;
-  char CmdLine[_CmdLine_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (CmdLine, CmdLine_, _CmdLine_high+1);
-
-  HighA = _Arg_high;  /* Index into Arg  */
-  HighC = StrLib_StrLen ((const char *) CmdLine, _CmdLine_high);
-  ArgIndex = 0;
-  /* Skip spaces  */
-  while (((*CmdIndex) < HighC) && (Space (CmdLine[(*CmdIndex)])))
-    {
-      (*CmdIndex) += 1;
-    }
-  if ((*CmdIndex) < HighC)
-    {
-      /* avoid gcc warning by using compound statement even if not strictly necessary.  */
-      if (SingleQuote (CmdLine[(*CmdIndex)]))
-        {
-          /* Skip over the single quote  */
-          (*CmdIndex) += 1;
-          CopyUntil ((const char *) CmdLine, _CmdLine_high, CmdIndex, HighC, (char *) Arg, _Arg_high, &ArgIndex, HighA, squote);
-          (*CmdIndex) += 1;
-        }
-      else if (DoubleQuote (CmdLine[(*CmdIndex)]))
-        {
-          /* avoid dangling else.  */
-          /* Skip over the double quote  */
-          (*CmdIndex) += 1;
-          CopyUntil ((const char *) CmdLine, _CmdLine_high, CmdIndex, HighC, (char *) Arg, _Arg_high, &ArgIndex, HighA, dquote);
-          (*CmdIndex) += 1;
-        }
-      else
-        {
-          /* avoid dangling else.  */
-          CopyUntilSpace ((const char *) CmdLine, _CmdLine_high, CmdIndex, HighC, (char *) Arg, _Arg_high, &ArgIndex, HighA);
-        }
-    }
-  /* Skip spaces  */
-  while (((*CmdIndex) < HighC) && (Space (CmdLine[(*CmdIndex)])))
-    {
-      (*CmdIndex) += 1;
-    }
-  if (ArgIndex < HighA)
-    {
-      Arg[ArgIndex] = ASCII_nul;
-    }
-  return (*CmdIndex) < HighC;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   CopyUntilSpace - copies characters until a Space character is found.
-*/
-
-static void CopyUntilSpace (const char *From_, unsigned int _From_high, unsigned int *FromIndex, unsigned int FromHigh, char *To, unsigned int _To_high, unsigned int *ToIndex, unsigned int ToHigh)
-{
-  char From[_From_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (From, From_, _From_high+1);
-
-  while ((((*FromIndex) < FromHigh) && ((*ToIndex) < ToHigh)) && (! (Space (From[(*FromIndex)]))))
-    {
-      CopyChar ((const char *) From, _From_high, FromIndex, FromHigh, (char *) To, _To_high, ToIndex, ToHigh);
-    }
-}
-
-
-/*
-   CopyUntil - copies characters until the UntilChar is found.
-*/
-
-static void CopyUntil (const char *From_, unsigned int _From_high, unsigned int *FromIndex, unsigned int FromHigh, char *To, unsigned int _To_high, unsigned int *ToIndex, unsigned int ToHigh, char UntilChar)
-{
-  char From[_From_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (From, From_, _From_high+1);
-
-  while ((((*FromIndex) < FromHigh) && ((*ToIndex) < ToHigh)) && (From[(*FromIndex)] != UntilChar))
-    {
-      CopyChar ((const char *) From, _From_high, FromIndex, FromHigh, (char *) To, _To_high, ToIndex, ToHigh);
-    }
-}
-
-
-/*
-   CopyChar - copies a character from string From to string To and
-              takes into consideration escape characters. ie \x
-              Where x is any character.
-*/
-
-static void CopyChar (const char *From_, unsigned int _From_high, unsigned int *FromIndex, unsigned int FromHigh, char *To, unsigned int _To_high, unsigned int *ToIndex, unsigned int ToHigh)
-{
-  char From[_From_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (From, From_, _From_high+1);
-
-  if (((*FromIndex) < FromHigh) && ((*ToIndex) < ToHigh))
-    {
-      if (Escape (From[(*FromIndex)]))
-        {
-          /* Skip over Escape Character  */
-          (*FromIndex) += 1;
-        }
-      if ((*FromIndex) < FromHigh)
-        {
-          /* Copy Normal Character  */
-          To[(*ToIndex)] = From[(*FromIndex)];
-          (*ToIndex) += 1;
-          (*FromIndex) += 1;
-        }
-    }
-}
-
-static unsigned int Escape (char ch)
-{
-  return ch == esc;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-static unsigned int Space (char ch)
-{
-  return (ch == space) || (ch == tab);
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-static unsigned int DoubleQuote (char ch)
-{
-  return ch == dquote;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-static unsigned int SingleQuote (char ch)
-{
-  return ch == squote;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   GetArg - takes a command line and attempts to extract argument, n,
-            from CmdLine. The resulting argument is placed into, a.
-            The result of the operation is returned.
-*/
-
-extern "C" unsigned int CmdArgs_GetArg (const char *CmdLine_, unsigned int _CmdLine_high, unsigned int n, char *Argi, unsigned int _Argi_high)
-{
-  unsigned int Index;
-  unsigned int i;
-  unsigned int Another;
-  char CmdLine[_CmdLine_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (CmdLine, CmdLine_, _CmdLine_high+1);
-
-  Index = 0;
-  /* Continually retrieve an argument until we get the n th argument.  */
-  i = 0;
-  do {
-    Another = GetNextArg ((const char *) CmdLine, _CmdLine_high, &Index, (char *) Argi, _Argi_high);
-    i += 1;
-  } while (! ((i > n) || ! Another));
-  return i > n;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   Narg - returns the number of arguments available from
-          command line, CmdLine.
-*/
-
-extern "C" unsigned int CmdArgs_Narg (const char *CmdLine_, unsigned int _CmdLine_high)
-{
-  typedef struct Narg__T1_a Narg__T1;
-
-  struct Narg__T1_a { char array[1000+1]; };
-  Narg__T1 a;
-  unsigned int ArgNo;
-  char CmdLine[_CmdLine_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (CmdLine, CmdLine_, _CmdLine_high+1);
-
-  ArgNo = 0;
-  while (CmdArgs_GetArg ((const char *) CmdLine, _CmdLine_high, ArgNo, (char *) &a.array[0], 1000))
-    {
-      ArgNo += 1;
-    }
-  /* 
-   IF ArgNo>0
-   THEN
-      DEC(ArgNo)
-   END ;
-  */
-  return ArgNo;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-extern "C" void _M2_CmdArgs_init (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-}
-
-extern "C" void _M2_CmdArgs_fini (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-}
diff --git a/gcc/m2/mc-boot/GDebug.c b/gcc/m2/mc-boot/GDebug.c
deleted file mode 100644
index 6329abb11b1..00000000000
--- a/gcc/m2/mc-boot/GDebug.c
+++ /dev/null
@@ -1,168 +0,0 @@
-/* do not edit automatically generated by mc from Debug.  */
-/* Debug.mod provides some simple debugging routines.
-
-Copyright (C) 2001-2023 Free Software Foundation, Inc.
-Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>.
-
-This file is part of GNU Modula-2.
-
-GNU Modula-2 is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
-
-GNU Modula-2 is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-General Public License for more details.
-
-Under Section 7 of GPL version 3, you are granted additional
-permissions described in the GCC Runtime Library Exception, version
-3.1, as published by the Free Software Foundation.
-
-You should have received a copy of the GNU General Public License and
-a copy of the GCC Runtime Library Exception along with this program;
-see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
-<http://www.gnu.org/licenses/>.  */
-
-#include "config.h"
-#include "system.h"
-#   if !defined (PROC_D)
-#      define PROC_D
-       typedef void (*PROC_t) (void);
-       typedef struct { PROC_t proc; } PROC;
-#   endif
-
-#define _Debug_H
-#define _Debug_C
-
-#   include "GASCII.h"
-#   include "GNumberIO.h"
-#   include "GStdIO.h"
-#   include "Glibc.h"
-#   include "GM2RTS.h"
-
-#   define MaxNoOfDigits 12
-
-/*
-   Halt - writes a message in the format:
-          Module:Line:Message
-
-          It then terminates by calling HALT.
-*/
-
-extern "C" void Debug_Halt (const char *Message_, unsigned int _Message_high, unsigned int LineNo, const char *Module_, unsigned int _Module_high);
-
-/*
-   DebugString - writes a string to the debugging device (Scn.Write).
-                 It interprets 
- as carriage return, linefeed.
-*/
-
-extern "C" void Debug_DebugString (const char *a_, unsigned int _a_high);
-
-/*
-   WriteLn - writes a carriage return and a newline
-             character.
-*/
-
-static void WriteLn (void);
-
-
-/*
-   WriteLn - writes a carriage return and a newline
-             character.
-*/
-
-static void WriteLn (void)
-{
-  StdIO_Write (ASCII_cr);
-  StdIO_Write (ASCII_lf);
-}
-
-
-/*
-   Halt - writes a message in the format:
-          Module:Line:Message
-
-          It then terminates by calling HALT.
-*/
-
-extern "C" void Debug_Halt (const char *Message_, unsigned int _Message_high, unsigned int LineNo, const char *Module_, unsigned int _Module_high)
-{
-  typedef struct Halt__T1_a Halt__T1;
-
-  struct Halt__T1_a { char array[MaxNoOfDigits+1]; };
-  Halt__T1 No;
-  char Message[_Message_high+1];
-  char Module[_Module_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (Message, Message_, _Message_high+1);
-  memcpy (Module, Module_, _Module_high+1);
-
-  Debug_DebugString ((const char *) Module, _Module_high);  /* should be large enough for most source files..  */
-  NumberIO_CardToStr (LineNo, 0, (char *) &No.array[0], MaxNoOfDigits);
-  Debug_DebugString ((const char *) ":", 1);
-  Debug_DebugString ((const char *) &No.array[0], MaxNoOfDigits);
-  Debug_DebugString ((const char *) ":", 1);
-  Debug_DebugString ((const char *) Message, _Message_high);
-  Debug_DebugString ((const char *) "\\n", 2);
-  M2RTS_HALT (-1);
-  __builtin_unreachable ();
-}
-
-
-/*
-   DebugString - writes a string to the debugging device (Scn.Write).
-                 It interprets 
- as carriage return, linefeed.
-*/
-
-extern "C" void Debug_DebugString (const char *a_, unsigned int _a_high)
-{
-  unsigned int n;
-  unsigned int high;
-  char a[_a_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (a, a_, _a_high+1);
-
-  high = _a_high;
-  n = 0;
-  while ((n <= high) && (a[n] != ASCII_nul))
-    {
-      if (a[n] == '\\')
-        {
-          /* avoid dangling else.  */
-          if ((n+1) <= high)
-            {
-              /* avoid gcc warning by using compound statement even if not strictly necessary.  */
-              if (a[n+1] == 'n')
-                {
-                  WriteLn ();
-                  n += 1;
-                }
-              else if (a[n+1] == '\\')
-                {
-                  /* avoid dangling else.  */
-                  StdIO_Write ('\\');
-                  n += 1;
-                }
-            }
-        }
-      else
-        {
-          StdIO_Write (a[n]);
-        }
-      n += 1;
-    }
-}
-
-extern "C" void _M2_Debug_init (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-}
-
-extern "C" void _M2_Debug_fini (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-}
diff --git a/gcc/m2/mc-boot/GDynamicStrings.c b/gcc/m2/mc-boot/GDynamicStrings.c
deleted file mode 100644
index dfc163646bb..00000000000
--- a/gcc/m2/mc-boot/GDynamicStrings.c
+++ /dev/null
@@ -1,2676 +0,0 @@
-/* do not edit automatically generated by mc from DynamicStrings.  */
-/* DynamicStrings.mod provides a dynamic string type and procedures.
-
-Copyright (C) 2001-2023 Free Software Foundation, Inc.
-Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>.
-
-This file is part of GNU Modula-2.
-
-GNU Modula-2 is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
-
-GNU Modula-2 is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-General Public License for more details.
-
-Under Section 7 of GPL version 3, you are granted additional
-permissions described in the GCC Runtime Library Exception, version
-3.1, as published by the Free Software Foundation.
-
-You should have received a copy of the GNU General Public License and
-a copy of the GCC Runtime Library Exception along with this program;
-see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
-<http://www.gnu.org/licenses/>.  */
-
-#include "config.h"
-#include "system.h"
-#   if !defined (PROC_D)
-#      define PROC_D
-       typedef void (*PROC_t) (void);
-       typedef struct { PROC_t proc; } PROC;
-#   endif
-
-#   if !defined (TRUE)
-#      define TRUE (1==1)
-#   endif
-
-#   if !defined (FALSE)
-#      define FALSE (1==0)
-#   endif
-
-#   include "GStorage.h"
-#if defined(__cplusplus)
-#   undef NULL
-#   define NULL 0
-#endif
-#define _DynamicStrings_H
-#define _DynamicStrings_C
-
-#   include "Glibc.h"
-#   include "GStrLib.h"
-#   include "GStorage.h"
-#   include "GAssertion.h"
-#   include "GSYSTEM.h"
-#   include "GASCII.h"
-#   include "GM2RTS.h"
-
-#   define MaxBuf 127
-#   define PoisonOn FALSE
-#   define DebugOn FALSE
-#   define CheckOn FALSE
-#   define TraceOn FALSE
-typedef struct DynamicStrings_Contents_r DynamicStrings_Contents;
-
-typedef struct DynamicStrings_DebugInfo_r DynamicStrings_DebugInfo;
-
-typedef struct DynamicStrings_stringRecord_r DynamicStrings_stringRecord;
-
-typedef struct DynamicStrings_descriptor_r DynamicStrings_descriptor;
-
-typedef DynamicStrings_descriptor *DynamicStrings_Descriptor;
-
-typedef struct DynamicStrings_frameRec_r DynamicStrings_frameRec;
-
-typedef DynamicStrings_frameRec *DynamicStrings_frame;
-
-typedef struct DynamicStrings__T3_a DynamicStrings__T3;
-
-typedef enum {DynamicStrings_inuse, DynamicStrings_marked, DynamicStrings_onlist, DynamicStrings_poisoned} DynamicStrings_desState;
-
-typedef DynamicStrings_stringRecord *DynamicStrings_String;
-
-struct DynamicStrings_DebugInfo_r {
-                                    DynamicStrings_String next;
-                                    void *file;
-                                    unsigned int line;
-                                    void *proc;
-                                  };
-
-struct DynamicStrings_descriptor_r {
-                                     unsigned int charStarUsed;
-                                     void *charStar;
-                                     unsigned int charStarSize;
-                                     unsigned int charStarValid;
-                                     DynamicStrings_desState state;
-                                     DynamicStrings_String garbage;
-                                   };
-
-struct DynamicStrings_frameRec_r {
-                                   DynamicStrings_String alloc;
-                                   DynamicStrings_String dealloc;
-                                   DynamicStrings_frame next;
-                                 };
-
-struct DynamicStrings__T3_a { char array[(MaxBuf-1)+1]; };
-struct DynamicStrings_Contents_r {
-                                   DynamicStrings__T3 buf;
-                                   unsigned int len;
-                                   DynamicStrings_String next;
-                                 };
-
-struct DynamicStrings_stringRecord_r {
-                                       DynamicStrings_Contents contents;
-                                       DynamicStrings_Descriptor head;
-                                       DynamicStrings_DebugInfo debug;
-                                     };
-
-static unsigned int Initialized;
-static DynamicStrings_frame frameHead;
-static DynamicStrings_String captured;
-
-/*
-   InitString - creates and returns a String type object.
-                Initial contents are, a.
-*/
-
-extern "C" DynamicStrings_String DynamicStrings_InitString (const char *a_, unsigned int _a_high);
-
-/*
-   KillString - frees String, s, and its contents.
-                NIL is returned.
-*/
-
-extern "C" DynamicStrings_String DynamicStrings_KillString (DynamicStrings_String s);
-
-/*
-   Fin - finishes with a string, it calls KillString with, s.
-         The purpose of the procedure is to provide a short cut
-         to calling KillString and then testing the return result.
-*/
-
-extern "C" void DynamicStrings_Fin (DynamicStrings_String s);
-
-/*
-   InitStringCharStar - initializes and returns a String to contain the C string.
-*/
-
-extern "C" DynamicStrings_String DynamicStrings_InitStringCharStar (void * a);
-
-/*
-   InitStringChar - initializes and returns a String to contain the single character, ch.
-*/
-
-extern "C" DynamicStrings_String DynamicStrings_InitStringChar (char ch);
-
-/*
-   Mark - marks String, s, ready for garbage collection.
-*/
-
-extern "C" DynamicStrings_String DynamicStrings_Mark (DynamicStrings_String s);
-
-/*
-   Length - returns the length of the String, s.
-*/
-
-extern "C" unsigned int DynamicStrings_Length (DynamicStrings_String s);
-
-/*
-   ConCat - returns String, a, after the contents of, b, have been appended.
-*/
-
-extern "C" DynamicStrings_String DynamicStrings_ConCat (DynamicStrings_String a, DynamicStrings_String b);
-
-/*
-   ConCatChar - returns String, a, after character, ch, has been appended.
-*/
-
-extern "C" DynamicStrings_String DynamicStrings_ConCatChar (DynamicStrings_String a, char ch);
-
-/*
-   Assign - assigns the contents of, b, into, a.
-            String, a, is returned.
-*/
-
-extern "C" DynamicStrings_String DynamicStrings_Assign (DynamicStrings_String a, DynamicStrings_String b);
-
-/*
-   Dup - duplicate a String, s, returning the copy of s.
-*/
-
-extern "C" DynamicStrings_String DynamicStrings_Dup (DynamicStrings_String s);
-
-/*
-   Add - returns a new String which contains the contents of a and b.
-*/
-
-extern "C" DynamicStrings_String DynamicStrings_Add (DynamicStrings_String a, DynamicStrings_String b);
-
-/*
-   Equal - returns TRUE if String, a, and, b, are equal.
-*/
-
-extern "C" unsigned int DynamicStrings_Equal (DynamicStrings_String a, DynamicStrings_String b);
-
-/*
-   EqualCharStar - returns TRUE if contents of String, s, is the same as the
-                   string, a.
-*/
-
-extern "C" unsigned int DynamicStrings_EqualCharStar (DynamicStrings_String s, void * a);
-
-/*
-   EqualArray - returns TRUE if contents of String, s, is the same as the
-                string, a.
-*/
-
-extern "C" unsigned int DynamicStrings_EqualArray (DynamicStrings_String s, const char *a_, unsigned int _a_high);
-
-/*
-   Mult - returns a new string which is n concatenations of String, s.
-*/
-
-extern "C" DynamicStrings_String DynamicStrings_Mult (DynamicStrings_String s, unsigned int n);
-
-/*
-   Slice - returns a new string which contains the elements
-           low..high-1
-
-           strings start at element 0
-           Slice(s, 0, 2)  will return elements 0, 1 but not 2
-           Slice(s, 1, 3)  will return elements 1, 2 but not 3
-           Slice(s, 2, 0)  will return elements 2..max
-           Slice(s, 3, -1) will return elements 3..max-1
-           Slice(s, 4, -2) will return elements 4..max-2
-*/
-
-extern "C" DynamicStrings_String DynamicStrings_Slice (DynamicStrings_String s, int low, int high);
-
-/*
-   Index - returns the indice of the first occurance of, ch, in
-           String, s. -1 is returned if, ch, does not exist.
-           The search starts at position, o.
-*/
-
-extern "C" int DynamicStrings_Index (DynamicStrings_String s, char ch, unsigned int o);
-
-/*
-   RIndex - returns the indice of the last occurance of, ch,
-            in String, s. The search starts at position, o.
-            -1 is returned if, ch, is not found.
-*/
-
-extern "C" int DynamicStrings_RIndex (DynamicStrings_String s, char ch, unsigned int o);
-
-/*
-   RemoveComment - assuming that, comment, is a comment delimiter
-                   which indicates anything to its right is a comment
-                   then strip off the comment and also any white space
-                   on the remaining right hand side.
-                   It leaves any white space on the left hand side alone.
-*/
-
-extern "C" DynamicStrings_String DynamicStrings_RemoveComment (DynamicStrings_String s, char comment);
-
-/*
-   RemoveWhitePrefix - removes any leading white space from String, s.
-                       A new string is returned.
-*/
-
-extern "C" DynamicStrings_String DynamicStrings_RemoveWhitePrefix (DynamicStrings_String s);
-
-/*
-   RemoveWhitePostfix - removes any leading white space from String, s.
-                        A new string is returned.
-*/
-
-extern "C" DynamicStrings_String DynamicStrings_RemoveWhitePostfix (DynamicStrings_String s);
-
-/*
-   ToUpper - returns string, s, after it has had its lower case characters
-             replaced by upper case characters.
-             The string, s, is not duplicated.
-*/
-
-extern "C" DynamicStrings_String DynamicStrings_ToUpper (DynamicStrings_String s);
-
-/*
-   ToLower - returns string, s, after it has had its upper case characters
-             replaced by lower case characters.
-             The string, s, is not duplicated.
-*/
-
-extern "C" DynamicStrings_String DynamicStrings_ToLower (DynamicStrings_String s);
-
-/*
-   CopyOut - copies string, s, to a.
-*/
-
-extern "C" void DynamicStrings_CopyOut (char *a, unsigned int _a_high, DynamicStrings_String s);
-
-/*
-   char - returns the character, ch, at position, i, in String, s.
-*/
-
-extern "C" char DynamicStrings_char (DynamicStrings_String s, int i);
-
-/*
-   string - returns the C style char * of String, s.
-*/
-
-extern "C" void * DynamicStrings_string (DynamicStrings_String s);
-
-/*
-   InitStringDB - the debug version of InitString.
-*/
-
-extern "C" DynamicStrings_String DynamicStrings_InitStringDB (const char *a_, unsigned int _a_high, const char *file_, unsigned int _file_high, unsigned int line);
-
-/*
-   InitStringCharStarDB - the debug version of InitStringCharStar.
-*/
-
-extern "C" DynamicStrings_String DynamicStrings_InitStringCharStarDB (void * a, const char *file_, unsigned int _file_high, unsigned int line);
-
-/*
-   InitStringCharDB - the debug version of InitStringChar.
-*/
-
-extern "C" DynamicStrings_String DynamicStrings_InitStringCharDB (char ch, const char *file_, unsigned int _file_high, unsigned int line);
-
-/*
-   MultDB - the debug version of MultDB.
-*/
-
-extern "C" DynamicStrings_String DynamicStrings_MultDB (DynamicStrings_String s, unsigned int n, const char *file_, unsigned int _file_high, unsigned int line);
-
-/*
-   DupDB - the debug version of Dup.
-*/
-
-extern "C" DynamicStrings_String DynamicStrings_DupDB (DynamicStrings_String s, const char *file_, unsigned int _file_high, unsigned int line);
-
-/*
-   SliceDB - debug version of Slice.
-*/
-
-extern "C" DynamicStrings_String DynamicStrings_SliceDB (DynamicStrings_String s, int low, int high, const char *file_, unsigned int _file_high, unsigned int line);
-
-/*
-   PushAllocation - pushes the current allocation/deallocation lists.
-*/
-
-extern "C" void DynamicStrings_PushAllocation (void);
-
-/*
-   PopAllocation - test to see that all strings are deallocated since
-                   the last push.  Then it pops to the previous
-                   allocation/deallocation lists.
-
-                   If halt is true then the application terminates
-                   with an exit code of 1.
-*/
-
-extern "C" void DynamicStrings_PopAllocation (unsigned int halt);
-
-/*
-   PopAllocationExemption - test to see that all strings are deallocated, except
-                            string, e, since the last push.
-                            Then it pops to the previous allocation/deallocation
-                            lists.
-
-                            If halt is true then the application terminates
-                            with an exit code of 1.
-*/
-
-extern "C" DynamicStrings_String DynamicStrings_PopAllocationExemption (unsigned int halt, DynamicStrings_String e);
-
-/*
- writeStringDesc write out debugging information about string, s.  */
-
-static void writeStringDesc (DynamicStrings_String s);
-
-/*
-   writeNspace -
-*/
-
-static void writeNspace (unsigned int n);
-
-/*
-   DumpStringInfo -
-*/
-
-static void DumpStringInfo (DynamicStrings_String s, unsigned int i);
-
-/*
-   DumpStringInfo -
-*/
-
-static void stop (void);
-
-/*
-   doDSdbEnter -
-*/
-
-static void doDSdbEnter (void);
-
-/*
-   doDSdbExit -
-*/
-
-static void doDSdbExit (DynamicStrings_String s);
-
-/*
-   DSdbEnter -
-*/
-
-static void DSdbEnter (void);
-
-/*
-   DSdbExit -
-*/
-
-static void DSdbExit (DynamicStrings_String s);
-static unsigned int Capture (DynamicStrings_String s);
-
-/*
-   Min -
-*/
-
-static unsigned int Min (unsigned int a, unsigned int b);
-
-/*
-   Max -
-*/
-
-static unsigned int Max (unsigned int a, unsigned int b);
-
-/*
-   writeString - writes a string to stdout.
-*/
-
-static void writeString (const char *a_, unsigned int _a_high);
-
-/*
-   writeCstring - writes a C string to stdout.
-*/
-
-static void writeCstring (void * a);
-
-/*
-   writeCard -
-*/
-
-static void writeCard (unsigned int c);
-
-/*
-   writeLongcard -
-*/
-
-static void writeLongcard (long unsigned int l);
-
-/*
-   writeAddress -
-*/
-
-static void writeAddress (void * a);
-
-/*
-   writeLn - writes a newline.
-*/
-
-static void writeLn (void);
-
-/*
-   AssignDebug - assigns, file, and, line, information to string, s.
-*/
-
-static DynamicStrings_String AssignDebug (DynamicStrings_String s, const char *file_, unsigned int _file_high, unsigned int line, const char *proc_, unsigned int _proc_high);
-
-/*
-   IsOn - returns TRUE if, s, is on one of the debug lists.
-*/
-
-static unsigned int IsOn (DynamicStrings_String list, DynamicStrings_String s);
-
-/*
-   AddTo - adds string, s, to, list.
-*/
-
-static void AddTo (DynamicStrings_String *list, DynamicStrings_String s);
-
-/*
-   SubFrom - removes string, s, from, list.
-*/
-
-static void SubFrom (DynamicStrings_String *list, DynamicStrings_String s);
-
-/*
-   AddAllocated - adds string, s, to the head of the allocated list.
-*/
-
-static void AddAllocated (DynamicStrings_String s);
-
-/*
-   AddDeallocated - adds string, s, to the head of the deallocated list.
-*/
-
-static void AddDeallocated (DynamicStrings_String s);
-
-/*
-   IsOnAllocated - returns TRUE if the string, s, has ever been allocated.
-*/
-
-static unsigned int IsOnAllocated (DynamicStrings_String s);
-
-/*
-   IsOnDeallocated - returns TRUE if the string, s, has ever been deallocated.
-*/
-
-static unsigned int IsOnDeallocated (DynamicStrings_String s);
-
-/*
-   SubAllocated - removes string, s, from the list of allocated strings.
-*/
-
-static void SubAllocated (DynamicStrings_String s);
-
-/*
-   SubDeallocated - removes string, s, from the list of deallocated strings.
-*/
-
-static void SubDeallocated (DynamicStrings_String s);
-
-/*
-   SubDebugInfo - removes string, s, from the list of allocated strings.
-*/
-
-static void SubDebugInfo (DynamicStrings_String s);
-
-/*
-   AddDebugInfo - adds string, s, to the list of allocated strings.
-*/
-
-static void AddDebugInfo (DynamicStrings_String s);
-
-/*
-   ConcatContents - add the contents of string, a, where, h, is the
-                    total length of, a. The offset is in, o.
-*/
-
-static void ConcatContents (DynamicStrings_Contents *c, const char *a_, unsigned int _a_high, unsigned int h, unsigned int o);
-
-/*
-   DeallocateCharStar - deallocates any charStar.
-*/
-
-static void DeallocateCharStar (DynamicStrings_String s);
-
-/*
-   CheckPoisoned - checks for a poisoned string, s.
-*/
-
-static DynamicStrings_String CheckPoisoned (DynamicStrings_String s);
-
-/*
-   MarkInvalid - marks the char * version of String, s, as invalid.
-*/
-
-static void MarkInvalid (DynamicStrings_String s);
-
-/*
-   ConcatContentsAddress - concatenate the string, a, where, h, is the
-                           total length of, a.
-*/
-
-static void ConcatContentsAddress (DynamicStrings_Contents *c, void * a, unsigned int h);
-
-/*
-   AddToGarbage - adds String, b, onto the garbage list of, a.  Providing
-                  the state of b is marked.  The state is then altered to
-                  onlist.  String, a, is returned.
-*/
-
-static DynamicStrings_String AddToGarbage (DynamicStrings_String a, DynamicStrings_String b);
-
-/*
-   IsOnGarbage - returns TRUE if, s, is on string, e, garbage list.
-*/
-
-static unsigned int IsOnGarbage (DynamicStrings_String e, DynamicStrings_String s);
-
-/*
-   IsWhite - returns TRUE if, ch, is a space or a tab.
-*/
-
-static unsigned int IsWhite (char ch);
-
-/*
-   DumpState -
-*/
-
-static void DumpState (DynamicStrings_String s);
-
-/*
-   DumpStringSynopsis -
-*/
-
-static void DumpStringSynopsis (DynamicStrings_String s);
-
-/*
-   DumpString - displays the contents of string, s.
-*/
-
-static void DumpString (DynamicStrings_String s);
-
-/*
-   Init - initialize the module.
-*/
-
-static void Init (void);
-
-
-/*
- writeStringDesc write out debugging information about string, s.  */
-
-static void writeStringDesc (DynamicStrings_String s)
-{
-  writeCstring (s->debug.file);
-  writeString ((const char *) ":", 1);
-  writeCard (s->debug.line);
-  writeString ((const char *) ":", 1);
-  writeCstring (s->debug.proc);
-  writeString ((const char *) " ", 1);
-  writeAddress (reinterpret_cast<void *> (s));
-  writeString ((const char *) " ", 1);
-  switch (s->head->state)
-    {
-      case DynamicStrings_inuse:
-        writeString ((const char *) "still in use (", 14);
-        writeCard (s->contents.len);
-        writeString ((const char *) ") characters", 12);
-        break;
-
-      case DynamicStrings_marked:
-        writeString ((const char *) "marked", 6);
-        break;
-
-      case DynamicStrings_onlist:
-        writeString ((const char *) "on a (lost) garbage list", 24);
-        break;
-
-      case DynamicStrings_poisoned:
-        writeString ((const char *) "poisoned", 8);
-        break;
-
-
-      default:
-        writeString ((const char *) "unknown state", 13);
-        break;
-    }
-}
-
-
-/*
-   writeNspace -
-*/
-
-static void writeNspace (unsigned int n)
-{
-  while (n > 0)
-    {
-      writeString ((const char *) " ", 1);
-      n -= 1;
-    }
-}
-
-
-/*
-   DumpStringInfo -
-*/
-
-static void DumpStringInfo (DynamicStrings_String s, unsigned int i)
-{
-  DynamicStrings_String t;
-
-  if (s != NULL)
-    {
-      writeNspace (i);
-      writeStringDesc (s);
-      writeLn ();
-      if (s->head->garbage != NULL)
-        {
-          writeNspace (i);
-          writeString ((const char *) "garbage list:", 13);
-          writeLn ();
-          do {
-            s = s->head->garbage;
-            DumpStringInfo (s, i+1);
-            writeLn ();
-          } while (! (s == NULL));
-        }
-    }
-}
-
-
-/*
-   DumpStringInfo -
-*/
-
-static void stop (void)
-{
-}
-
-
-/*
-   doDSdbEnter -
-*/
-
-static void doDSdbEnter (void)
-{
-  if (CheckOn)
-    {
-      DynamicStrings_PushAllocation ();
-    }
-}
-
-
-/*
-   doDSdbExit -
-*/
-
-static void doDSdbExit (DynamicStrings_String s)
-{
-  if (CheckOn)
-    {
-      s = DynamicStrings_PopAllocationExemption (TRUE, s);
-    }
-}
-
-
-/*
-   DSdbEnter -
-*/
-
-static void DSdbEnter (void)
-{
-}
-
-
-/*
-   DSdbExit -
-*/
-
-static void DSdbExit (DynamicStrings_String s)
-{
-}
-
-static unsigned int Capture (DynamicStrings_String s)
-{
-  /* 
- *   #undef GM2_DEBUG_DYNAMICSTINGS
- *   #if defined(GM2_DEBUG_DYNAMICSTINGS)
- *   #  define DSdbEnter doDSdbEnter
- *   #  define DSdbExit  doDSdbExit
- *   #  define CheckOn   TRUE
- *   #  define TraceOn   TRUE
- *   #endif
-  */
-  captured = s;
-  return 1;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   Min -
-*/
-
-static unsigned int Min (unsigned int a, unsigned int b)
-{
-  if (a < b)
-    {
-      return a;
-    }
-  else
-    {
-      return b;
-    }
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   Max -
-*/
-
-static unsigned int Max (unsigned int a, unsigned int b)
-{
-  if (a > b)
-    {
-      return a;
-    }
-  else
-    {
-      return b;
-    }
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   writeString - writes a string to stdout.
-*/
-
-static void writeString (const char *a_, unsigned int _a_high)
-{
-  int i;
-  char a[_a_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (a, a_, _a_high+1);
-
-  i = static_cast<int> (libc_write (1, &a, static_cast<size_t> (StrLib_StrLen ((const char *) a, _a_high))));
-}
-
-
-/*
-   writeCstring - writes a C string to stdout.
-*/
-
-static void writeCstring (void * a)
-{
-  int i;
-
-  if (a == NULL)
-    {
-      writeString ((const char *) "(null)", 6);
-    }
-  else
-    {
-      i = static_cast<int> (libc_write (1, a, libc_strlen (a)));
-    }
-}
-
-
-/*
-   writeCard -
-*/
-
-static void writeCard (unsigned int c)
-{
-  char ch;
-  int i;
-
-  if (c > 9)
-    {
-      writeCard (c / 10);
-      writeCard (c % 10);
-    }
-  else
-    {
-      ch = ((char) ( ((unsigned int) ('0'))+c));
-      i = static_cast<int> (libc_write (1, &ch, static_cast<size_t> (1)));
-    }
-}
-
-
-/*
-   writeLongcard -
-*/
-
-static void writeLongcard (long unsigned int l)
-{
-  char ch;
-  int i;
-
-  if (l > 16)
-    {
-      writeLongcard (l / 16);
-      writeLongcard (l % 16);
-    }
-  else if (l < 10)
-    {
-      /* avoid dangling else.  */
-      ch = ((char) ( ((unsigned int) ('0'))+((unsigned int ) (l))));
-      i = static_cast<int> (libc_write (1, &ch, static_cast<size_t> (1)));
-    }
-  else if (l < 16)
-    {
-      /* avoid dangling else.  */
-      ch = ((char) (( ((unsigned int) ('a'))+((unsigned int ) (l)))-10));
-      i = static_cast<int> (libc_write (1, &ch, static_cast<size_t> (1)));
-    }
-}
-
-
-/*
-   writeAddress -
-*/
-
-static void writeAddress (void * a)
-{
-  writeLongcard ((long unsigned int ) (a));
-}
-
-
-/*
-   writeLn - writes a newline.
-*/
-
-static void writeLn (void)
-{
-  char ch;
-  int i;
-
-  ch = ASCII_lf;
-  i = static_cast<int> (libc_write (1, &ch, static_cast<size_t> (1)));
-}
-
-
-/*
-   AssignDebug - assigns, file, and, line, information to string, s.
-*/
-
-static DynamicStrings_String AssignDebug (DynamicStrings_String s, const char *file_, unsigned int _file_high, unsigned int line, const char *proc_, unsigned int _proc_high)
-{
-  void * f;
-  void * p;
-  char file[_file_high+1];
-  char proc[_proc_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (file, file_, _file_high+1);
-  memcpy (proc, proc_, _proc_high+1);
-
-  f = &file;
-  p = &proc;
-  Storage_ALLOCATE (&s->debug.file, (StrLib_StrLen ((const char *) file, _file_high))+1);
-  if ((libc_strncpy (s->debug.file, f, (StrLib_StrLen ((const char *) file, _file_high))+1)) == NULL)
-    {}  /* empty.  */
-  s->debug.line = line;
-  Storage_ALLOCATE (&s->debug.proc, (StrLib_StrLen ((const char *) proc, _proc_high))+1);
-  if ((libc_strncpy (s->debug.proc, p, (StrLib_StrLen ((const char *) proc, _proc_high))+1)) == NULL)
-    {}  /* empty.  */
-  return s;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   IsOn - returns TRUE if, s, is on one of the debug lists.
-*/
-
-static unsigned int IsOn (DynamicStrings_String list, DynamicStrings_String s)
-{
-  while ((list != s) && (list != NULL))
-    {
-      list = list->debug.next;
-    }
-  return list == s;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   AddTo - adds string, s, to, list.
-*/
-
-static void AddTo (DynamicStrings_String *list, DynamicStrings_String s)
-{
-  if ((*list) == NULL)
-    {
-      (*list) = s;
-      s->debug.next = NULL;
-    }
-  else
-    {
-      s->debug.next = (*list);
-      (*list) = s;
-    }
-}
-
-
-/*
-   SubFrom - removes string, s, from, list.
-*/
-
-static void SubFrom (DynamicStrings_String *list, DynamicStrings_String s)
-{
-  DynamicStrings_String p;
-
-  if ((*list) == s)
-    {
-      (*list) = s->debug.next;
-    }
-  else
-    {
-      p = (*list);
-      while ((p->debug.next != NULL) && (p->debug.next != s))
-        {
-          p = p->debug.next;
-        }
-      if (p->debug.next == s)
-        {
-          p->debug.next = s->debug.next;
-        }
-      else
-        {
-          /* not found, quit  */
-          return ;
-        }
-    }
-  s->debug.next = NULL;
-}
-
-
-/*
-   AddAllocated - adds string, s, to the head of the allocated list.
-*/
-
-static void AddAllocated (DynamicStrings_String s)
-{
-  Init ();
-  AddTo (&frameHead->alloc, s);
-}
-
-
-/*
-   AddDeallocated - adds string, s, to the head of the deallocated list.
-*/
-
-static void AddDeallocated (DynamicStrings_String s)
-{
-  Init ();
-  AddTo (&frameHead->dealloc, s);
-}
-
-
-/*
-   IsOnAllocated - returns TRUE if the string, s, has ever been allocated.
-*/
-
-static unsigned int IsOnAllocated (DynamicStrings_String s)
-{
-  DynamicStrings_frame f;
-
-  Init ();
-  f = frameHead;
-  do {
-    if (IsOn (f->alloc, s))
-      {
-        return TRUE;
-      }
-    else
-      {
-        f = f->next;
-      }
-  } while (! (f == NULL));
-  return FALSE;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   IsOnDeallocated - returns TRUE if the string, s, has ever been deallocated.
-*/
-
-static unsigned int IsOnDeallocated (DynamicStrings_String s)
-{
-  DynamicStrings_frame f;
-
-  Init ();
-  f = frameHead;
-  do {
-    if (IsOn (f->dealloc, s))
-      {
-        return TRUE;
-      }
-    else
-      {
-        f = f->next;
-      }
-  } while (! (f == NULL));
-  return FALSE;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   SubAllocated - removes string, s, from the list of allocated strings.
-*/
-
-static void SubAllocated (DynamicStrings_String s)
-{
-  DynamicStrings_frame f;
-
-  Init ();
-  f = frameHead;
-  do {
-    if (IsOn (f->alloc, s))
-      {
-        SubFrom (&f->alloc, s);
-        return ;
-      }
-    else
-      {
-        f = f->next;
-      }
-  } while (! (f == NULL));
-}
-
-
-/*
-   SubDeallocated - removes string, s, from the list of deallocated strings.
-*/
-
-static void SubDeallocated (DynamicStrings_String s)
-{
-  DynamicStrings_frame f;
-
-  Init ();
-  f = frameHead;
-  do {
-    if (IsOn (f->dealloc, s))
-      {
-        SubFrom (&f->dealloc, s);
-        return ;
-      }
-    else
-      {
-        f = f->next;
-      }
-  } while (! (f == NULL));
-}
-
-
-/*
-   SubDebugInfo - removes string, s, from the list of allocated strings.
-*/
-
-static void SubDebugInfo (DynamicStrings_String s)
-{
-  if (IsOnDeallocated (s))
-    {
-      Assertion_Assert (! DebugOn);
-      /* string has already been deallocated  */
-      return ;
-    }
-  if (IsOnAllocated (s))
-    {
-      SubAllocated (s);
-      AddDeallocated (s);
-    }
-  else
-    {
-      /* string has not been allocated  */
-      Assertion_Assert (! DebugOn);
-    }
-}
-
-
-/*
-   AddDebugInfo - adds string, s, to the list of allocated strings.
-*/
-
-static void AddDebugInfo (DynamicStrings_String s)
-{
-  s->debug.next = NULL;
-  s->debug.file = NULL;
-  s->debug.line = 0;
-  s->debug.proc = NULL;
-  if (CheckOn)
-    {
-      AddAllocated (s);
-    }
-}
-
-
-/*
-   ConcatContents - add the contents of string, a, where, h, is the
-                    total length of, a. The offset is in, o.
-*/
-
-static void ConcatContents (DynamicStrings_Contents *c, const char *a_, unsigned int _a_high, unsigned int h, unsigned int o)
-{
-  unsigned int i;
-  char a[_a_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (a, a_, _a_high+1);
-
-  i = (*c).len;
-  while ((o < h) && (i < MaxBuf))
-    {
-      (*c).buf.array[i] = a[o];
-      o += 1;
-      i += 1;
-    }
-  if (o < h)
-    {
-      (*c).len = MaxBuf;
-      Storage_ALLOCATE ((void **) &(*c).next, sizeof (DynamicStrings_stringRecord));
-      (*c).next->head = NULL;
-      (*c).next->contents.len = 0;
-      (*c).next->contents.next = NULL;
-      ConcatContents (&(*c).next->contents, (const char *) a, _a_high, h, o);
-      AddDebugInfo ((*c).next);
-      (*c).next = AssignDebug ((*c).next, (const char *) "../../gcc-read-write/gcc/m2/gm2-libs/DynamicStrings.mod", 55, 722, (const char *) "ConcatContents", 14);
-    }
-  else
-    {
-      (*c).len = i;
-    }
-}
-
-
-/*
-   DeallocateCharStar - deallocates any charStar.
-*/
-
-static void DeallocateCharStar (DynamicStrings_String s)
-{
-  if ((s != NULL) && (s->head != NULL))
-    {
-      if (s->head->charStarUsed && (s->head->charStar != NULL))
-        {
-          Storage_DEALLOCATE (&s->head->charStar, s->head->charStarSize);
-        }
-      s->head->charStarUsed = FALSE;
-      s->head->charStar = NULL;
-      s->head->charStarSize = 0;
-      s->head->charStarValid = FALSE;
-    }
-}
-
-
-/*
-   CheckPoisoned - checks for a poisoned string, s.
-*/
-
-static DynamicStrings_String CheckPoisoned (DynamicStrings_String s)
-{
-  if (((PoisonOn && (s != NULL)) && (s->head != NULL)) && (s->head->state == DynamicStrings_poisoned))
-    {
-      M2RTS_HALT (-1);
-      __builtin_unreachable ();
-    }
-  return s;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   MarkInvalid - marks the char * version of String, s, as invalid.
-*/
-
-static void MarkInvalid (DynamicStrings_String s)
-{
-  if (PoisonOn)
-    {
-      s = CheckPoisoned (s);
-    }
-  if (s->head != NULL)
-    {
-      s->head->charStarValid = FALSE;
-    }
-}
-
-
-/*
-   ConcatContentsAddress - concatenate the string, a, where, h, is the
-                           total length of, a.
-*/
-
-static void ConcatContentsAddress (DynamicStrings_Contents *c, void * a, unsigned int h)
-{
-  typedef char *ConcatContentsAddress__T1;
-
-  ConcatContentsAddress__T1 p;
-  unsigned int i;
-  unsigned int j;
-
-  j = 0;
-  i = (*c).len;
-  p = static_cast<ConcatContentsAddress__T1> (a);
-  while ((j < h) && (i < MaxBuf))
-    {
-      (*c).buf.array[i] = (*p);
-      i += 1;
-      j += 1;
-      p += 1;
-    }
-  if (j < h)
-    {
-      /* avoid dangling else.  */
-      (*c).len = MaxBuf;
-      Storage_ALLOCATE ((void **) &(*c).next, sizeof (DynamicStrings_stringRecord));
-      (*c).next->head = NULL;
-      (*c).next->contents.len = 0;
-      (*c).next->contents.next = NULL;
-      ConcatContentsAddress (&(*c).next->contents, reinterpret_cast<void *> (p), h-j);
-      AddDebugInfo ((*c).next);
-      if (TraceOn)
-        {
-          (*c).next = AssignDebug ((*c).next, (const char *) "../../gcc-read-write/gcc/m2/gm2-libs/DynamicStrings.mod", 55, 917, (const char *) "ConcatContentsAddress", 21);
-        }
-    }
-  else
-    {
-      (*c).len = i;
-      (*c).next = NULL;
-    }
-}
-
-
-/*
-   AddToGarbage - adds String, b, onto the garbage list of, a.  Providing
-                  the state of b is marked.  The state is then altered to
-                  onlist.  String, a, is returned.
-*/
-
-static DynamicStrings_String AddToGarbage (DynamicStrings_String a, DynamicStrings_String b)
-{
-  DynamicStrings_String c;
-
-  if (PoisonOn)
-    {
-      a = CheckPoisoned (a);
-      b = CheckPoisoned (b);
-    }
-  /* 
-   IF (a#NIL) AND (a#b) AND (a^.head^.state=marked)
-   THEN
-      writeString('warning trying to add to a marked string') ; writeLn
-   END ;
-  */
-  if (((((a != b) && (a != NULL)) && (b != NULL)) && (b->head->state == DynamicStrings_marked)) && (a->head->state == DynamicStrings_inuse))
-    {
-      c = a;
-      while (c->head->garbage != NULL)
-        {
-          c = c->head->garbage;
-        }
-      c->head->garbage = b;
-      b->head->state = DynamicStrings_onlist;
-      if (CheckOn)
-        {
-          SubDebugInfo (b);
-        }
-    }
-  return a;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   IsOnGarbage - returns TRUE if, s, is on string, e, garbage list.
-*/
-
-static unsigned int IsOnGarbage (DynamicStrings_String e, DynamicStrings_String s)
-{
-  if ((e != NULL) && (s != NULL))
-    {
-      while (e->head->garbage != NULL)
-        {
-          if (e->head->garbage == s)
-            {
-              return TRUE;
-            }
-          else
-            {
-              e = e->head->garbage;
-            }
-        }
-    }
-  return FALSE;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   IsWhite - returns TRUE if, ch, is a space or a tab.
-*/
-
-static unsigned int IsWhite (char ch)
-{
-  return (ch == ' ') || (ch == ASCII_tab);
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   DumpState -
-*/
-
-static void DumpState (DynamicStrings_String s)
-{
-  switch (s->head->state)
-    {
-      case DynamicStrings_inuse:
-        writeString ((const char *) "still in use (", 14);
-        writeCard (s->contents.len);
-        writeString ((const char *) ") characters", 12);
-        break;
-
-      case DynamicStrings_marked:
-        writeString ((const char *) "marked", 6);
-        break;
-
-      case DynamicStrings_onlist:
-        writeString ((const char *) "on a garbage list", 17);
-        break;
-
-      case DynamicStrings_poisoned:
-        writeString ((const char *) "poisoned", 8);
-        break;
-
-
-      default:
-        writeString ((const char *) "unknown state", 13);
-        break;
-    }
-}
-
-
-/*
-   DumpStringSynopsis -
-*/
-
-static void DumpStringSynopsis (DynamicStrings_String s)
-{
-  writeCstring (s->debug.file);
-  writeString ((const char *) ":", 1);
-  writeCard (s->debug.line);
-  writeString ((const char *) ":", 1);
-  writeCstring (s->debug.proc);
-  writeString ((const char *) " string ", 8);
-  writeAddress (reinterpret_cast<void *> (s));
-  writeString ((const char *) " ", 1);
-  DumpState (s);
-  if (IsOnAllocated (s))
-    {
-      writeString ((const char *) " globally allocated", 19);
-    }
-  else if (IsOnDeallocated (s))
-    {
-      /* avoid dangling else.  */
-      writeString ((const char *) " globally deallocated", 21);
-    }
-  else
-    {
-      /* avoid dangling else.  */
-      writeString ((const char *) " globally unknown", 17);
-    }
-  writeLn ();
-}
-
-
-/*
-   DumpString - displays the contents of string, s.
-*/
-
-static void DumpString (DynamicStrings_String s)
-{
-  DynamicStrings_String t;
-
-  if (s != NULL)
-    {
-      DumpStringSynopsis (s);
-      if ((s->head != NULL) && (s->head->garbage != NULL))
-        {
-          writeString ((const char *) "display chained strings on the garbage list", 43);
-          writeLn ();
-          t = s->head->garbage;
-          while (t != NULL)
-            {
-              DumpStringSynopsis (t);
-              t = t->head->garbage;
-            }
-        }
-    }
-}
-
-
-/*
-   Init - initialize the module.
-*/
-
-static void Init (void)
-{
-  if (! Initialized)
-    {
-      Initialized = TRUE;
-      frameHead = NULL;
-      DynamicStrings_PushAllocation ();
-    }
-}
-
-
-/*
-   InitString - creates and returns a String type object.
-                Initial contents are, a.
-*/
-
-extern "C" DynamicStrings_String DynamicStrings_InitString (const char *a_, unsigned int _a_high)
-{
-  DynamicStrings_String s;
-  char a[_a_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (a, a_, _a_high+1);
-
-  Storage_ALLOCATE ((void **) &s, sizeof (DynamicStrings_stringRecord));
-  s->contents.len = 0;
-  s->contents.next = NULL;
-  ConcatContents (&s->contents, (const char *) a, _a_high, StrLib_StrLen ((const char *) a, _a_high), 0);
-  Storage_ALLOCATE ((void **) &s->head, sizeof (DynamicStrings_descriptor));
-  s->head->charStarUsed = FALSE;
-  s->head->charStar = NULL;
-  s->head->charStarSize = 0;
-  s->head->charStarValid = FALSE;
-  s->head->garbage = NULL;
-  s->head->state = DynamicStrings_inuse;
-  AddDebugInfo (s);
-  if (TraceOn)
-    {
-      s = AssignDebug (s, (const char *) "../../gcc-read-write/gcc/m2/gm2-libs/DynamicStrings.mod", 55, 758, (const char *) "InitString", 10);
-    }
-  return s;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   KillString - frees String, s, and its contents.
-                NIL is returned.
-*/
-
-extern "C" DynamicStrings_String DynamicStrings_KillString (DynamicStrings_String s)
-{
-  DynamicStrings_String t;
-
-  if (PoisonOn)
-    {
-      s = CheckPoisoned (s);
-    }
-  if (s != NULL)
-    {
-      if (CheckOn)
-        {
-          /* avoid gcc warning by using compound statement even if not strictly necessary.  */
-          if (IsOnAllocated (s))
-            {
-              SubAllocated (s);
-            }
-          else if (IsOnDeallocated (s))
-            {
-              /* avoid dangling else.  */
-              SubDeallocated (s);
-            }
-        }
-      if (s->head != NULL)
-        {
-          s->head->state = DynamicStrings_poisoned;
-          s->head->garbage = DynamicStrings_KillString (s->head->garbage);
-          if (! PoisonOn)
-            {
-              DeallocateCharStar (s);
-            }
-          if (! PoisonOn)
-            {
-              Storage_DEALLOCATE ((void **) &s->head, sizeof (DynamicStrings_descriptor));
-              s->head = NULL;
-            }
-        }
-      t = DynamicStrings_KillString (s->contents.next);
-      if (! PoisonOn)
-        {
-          Storage_DEALLOCATE ((void **) &s, sizeof (DynamicStrings_stringRecord));
-        }
-    }
-  return NULL;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   Fin - finishes with a string, it calls KillString with, s.
-         The purpose of the procedure is to provide a short cut
-         to calling KillString and then testing the return result.
-*/
-
-extern "C" void DynamicStrings_Fin (DynamicStrings_String s)
-{
-  if ((DynamicStrings_KillString (s)) != NULL)
-    {
-      M2RTS_HALT (-1);
-      __builtin_unreachable ();
-    }
-}
-
-
-/*
-   InitStringCharStar - initializes and returns a String to contain the C string.
-*/
-
-extern "C" DynamicStrings_String DynamicStrings_InitStringCharStar (void * a)
-{
-  DynamicStrings_String s;
-
-  Storage_ALLOCATE ((void **) &s, sizeof (DynamicStrings_stringRecord));
-  s->contents.len = 0;
-  s->contents.next = NULL;
-  if (a != NULL)
-    {
-      ConcatContentsAddress (&s->contents, a, static_cast<unsigned int> (libc_strlen (a)));
-    }
-  Storage_ALLOCATE ((void **) &s->head, sizeof (DynamicStrings_descriptor));
-  s->head->charStarUsed = FALSE;
-  s->head->charStar = NULL;
-  s->head->charStarSize = 0;
-  s->head->charStarValid = FALSE;
-  s->head->garbage = NULL;
-  s->head->state = DynamicStrings_inuse;
-  AddDebugInfo (s);
-  if (TraceOn)
-    {
-      s = AssignDebug (s, (const char *) "../../gcc-read-write/gcc/m2/gm2-libs/DynamicStrings.mod", 55, 957, (const char *) "InitStringCharStar", 18);
-    }
-  return s;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   InitStringChar - initializes and returns a String to contain the single character, ch.
-*/
-
-extern "C" DynamicStrings_String DynamicStrings_InitStringChar (char ch)
-{
-  typedef struct InitStringChar__T4_a InitStringChar__T4;
-
-  struct InitStringChar__T4_a { char array[1+1]; };
-  InitStringChar__T4 a;
-  DynamicStrings_String s;
-
-  a.array[0] = ch;
-  a.array[1] = ASCII_nul;
-  s = DynamicStrings_InitString ((const char *) &a.array[0], 1);
-  if (TraceOn)
-    {
-      s = AssignDebug (s, (const char *) "../../gcc-read-write/gcc/m2/gm2-libs/DynamicStrings.mod", 55, 977, (const char *) "InitStringChar", 14);
-    }
-  return s;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   Mark - marks String, s, ready for garbage collection.
-*/
-
-extern "C" DynamicStrings_String DynamicStrings_Mark (DynamicStrings_String s)
-{
-  if (PoisonOn)
-    {
-      s = CheckPoisoned (s);
-    }
-  if ((s != NULL) && (s->head->state == DynamicStrings_inuse))
-    {
-      s->head->state = DynamicStrings_marked;
-    }
-  return s;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   Length - returns the length of the String, s.
-*/
-
-extern "C" unsigned int DynamicStrings_Length (DynamicStrings_String s)
-{
-  if (s == NULL)
-    {
-      return 0;
-    }
-  else
-    {
-      return s->contents.len+(DynamicStrings_Length (s->contents.next));
-    }
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   ConCat - returns String, a, after the contents of, b, have been appended.
-*/
-
-extern "C" DynamicStrings_String DynamicStrings_ConCat (DynamicStrings_String a, DynamicStrings_String b)
-{
-  DynamicStrings_String t;
-
-  if (PoisonOn)
-    {
-      a = CheckPoisoned (a);
-      b = CheckPoisoned (b);
-    }
-  if (a == b)
-    {
-      return DynamicStrings_ConCat (a, DynamicStrings_Mark (DynamicStrings_Dup (b)));
-    }
-  else if (a != NULL)
-    {
-      /* avoid dangling else.  */
-      a = AddToGarbage (a, b);
-      MarkInvalid (a);
-      t = a;
-      while (b != NULL)
-        {
-          while ((t->contents.len == MaxBuf) && (t->contents.next != NULL))
-            {
-              t = t->contents.next;
-            }
-          ConcatContents (&t->contents, (const char *) &b->contents.buf.array[0], (MaxBuf-1), b->contents.len, 0);
-          b = b->contents.next;
-        }
-    }
-  if ((a == NULL) && (b != NULL))
-    {
-      M2RTS_HALT (-1);
-      __builtin_unreachable ();
-    }
-  return a;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   ConCatChar - returns String, a, after character, ch, has been appended.
-*/
-
-extern "C" DynamicStrings_String DynamicStrings_ConCatChar (DynamicStrings_String a, char ch)
-{
-  typedef struct ConCatChar__T5_a ConCatChar__T5;
-
-  struct ConCatChar__T5_a { char array[1+1]; };
-  ConCatChar__T5 b;
-  DynamicStrings_String t;
-
-  if (PoisonOn)
-    {
-      a = CheckPoisoned (a);
-    }
-  b.array[0] = ch;
-  b.array[1] = ASCII_nul;
-  t = a;
-  MarkInvalid (a);
-  while ((t->contents.len == MaxBuf) && (t->contents.next != NULL))
-    {
-      t = t->contents.next;
-    }
-  ConcatContents (&t->contents, (const char *) &b.array[0], 1, 1, 0);
-  return a;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   Assign - assigns the contents of, b, into, a.
-            String, a, is returned.
-*/
-
-extern "C" DynamicStrings_String DynamicStrings_Assign (DynamicStrings_String a, DynamicStrings_String b)
-{
-  if (PoisonOn)
-    {
-      a = CheckPoisoned (a);
-      b = CheckPoisoned (b);
-    }
-  if ((a != NULL) && (b != NULL))
-    {
-      a->contents.next = DynamicStrings_KillString (a->contents.next);
-      a->contents.len = 0;
-    }
-  return DynamicStrings_ConCat (a, b);
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   Dup - duplicate a String, s, returning the copy of s.
-*/
-
-extern "C" DynamicStrings_String DynamicStrings_Dup (DynamicStrings_String s)
-{
-  if (PoisonOn)
-    {
-      s = CheckPoisoned (s);
-    }
-  s = DynamicStrings_Assign (DynamicStrings_InitString ((const char *) "", 0), s);
-  if (TraceOn)
-    {
-      s = AssignDebug (s, (const char *) "../../gcc-read-write/gcc/m2/gm2-libs/DynamicStrings.mod", 55, 1173, (const char *) "Dup", 3);
-    }
-  return s;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   Add - returns a new String which contains the contents of a and b.
-*/
-
-extern "C" DynamicStrings_String DynamicStrings_Add (DynamicStrings_String a, DynamicStrings_String b)
-{
-  if (PoisonOn)
-    {
-      a = CheckPoisoned (a);
-      b = CheckPoisoned (b);
-    }
-  a = DynamicStrings_ConCat (DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "", 0), a), b);
-  if (TraceOn)
-    {
-      a = AssignDebug (a, (const char *) "../../gcc-read-write/gcc/m2/gm2-libs/DynamicStrings.mod", 55, 1193, (const char *) "Add", 3);
-    }
-  return a;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   Equal - returns TRUE if String, a, and, b, are equal.
-*/
-
-extern "C" unsigned int DynamicStrings_Equal (DynamicStrings_String a, DynamicStrings_String b)
-{
-  unsigned int i;
-
-  if (PoisonOn)
-    {
-      a = CheckPoisoned (a);
-      b = CheckPoisoned (b);
-    }
-  if ((DynamicStrings_Length (a)) == (DynamicStrings_Length (b)))
-    {
-      while ((a != NULL) && (b != NULL))
-        {
-          i = 0;
-          Assertion_Assert (a->contents.len == b->contents.len);
-          while (i < a->contents.len)
-            {
-              if (a->contents.buf.array[i] != b->contents.buf.array[i])
-                {
-                  return FALSE;
-                }
-              i += 1;
-            }
-          a = a->contents.next;
-          b = b->contents.next;
-        }
-      return TRUE;
-    }
-  else
-    {
-      return FALSE;
-    }
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   EqualCharStar - returns TRUE if contents of String, s, is the same as the
-                   string, a.
-*/
-
-extern "C" unsigned int DynamicStrings_EqualCharStar (DynamicStrings_String s, void * a)
-{
-  DynamicStrings_String t;
-
-  if (PoisonOn)
-    {
-      s = CheckPoisoned (s);
-    }
-  t = DynamicStrings_InitStringCharStar (a);
-  if (TraceOn)
-    {
-      t = AssignDebug (t, (const char *) "../../gcc-read-write/gcc/m2/gm2-libs/DynamicStrings.mod", 55, 1250, (const char *) "EqualCharStar", 13);
-    }
-  t = AddToGarbage (t, s);
-  if (DynamicStrings_Equal (t, s))
-    {
-      t = DynamicStrings_KillString (t);
-      return TRUE;
-    }
-  else
-    {
-      t = DynamicStrings_KillString (t);
-      return FALSE;
-    }
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   EqualArray - returns TRUE if contents of String, s, is the same as the
-                string, a.
-*/
-
-extern "C" unsigned int DynamicStrings_EqualArray (DynamicStrings_String s, const char *a_, unsigned int _a_high)
-{
-  DynamicStrings_String t;
-  char a[_a_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (a, a_, _a_high+1);
-
-  if (PoisonOn)
-    {
-      s = CheckPoisoned (s);
-    }
-  t = DynamicStrings_InitString ((const char *) a, _a_high);
-  if (TraceOn)
-    {
-      t = AssignDebug (t, (const char *) "../../gcc-read-write/gcc/m2/gm2-libs/DynamicStrings.mod", 55, 1280, (const char *) "EqualArray", 10);
-    }
-  t = AddToGarbage (t, s);
-  if (DynamicStrings_Equal (t, s))
-    {
-      t = DynamicStrings_KillString (t);
-      return TRUE;
-    }
-  else
-    {
-      t = DynamicStrings_KillString (t);
-      return FALSE;
-    }
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   Mult - returns a new string which is n concatenations of String, s.
-*/
-
-extern "C" DynamicStrings_String DynamicStrings_Mult (DynamicStrings_String s, unsigned int n)
-{
-  if (PoisonOn)
-    {
-      s = CheckPoisoned (s);
-    }
-  if (n <= 0)
-    {
-      s = AddToGarbage (DynamicStrings_InitString ((const char *) "", 0), s);
-    }
-  else
-    {
-      s = DynamicStrings_ConCat (DynamicStrings_Mult (s, n-1), s);
-    }
-  if (TraceOn)
-    {
-      s = AssignDebug (s, (const char *) "../../gcc-read-write/gcc/m2/gm2-libs/DynamicStrings.mod", 55, 1312, (const char *) "Mult", 4);
-    }
-  return s;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   Slice - returns a new string which contains the elements
-           low..high-1
-
-           strings start at element 0
-           Slice(s, 0, 2)  will return elements 0, 1 but not 2
-           Slice(s, 1, 3)  will return elements 1, 2 but not 3
-           Slice(s, 2, 0)  will return elements 2..max
-           Slice(s, 3, -1) will return elements 3..max-1
-           Slice(s, 4, -2) will return elements 4..max-2
-*/
-
-extern "C" DynamicStrings_String DynamicStrings_Slice (DynamicStrings_String s, int low, int high)
-{
-  DynamicStrings_String d;
-  DynamicStrings_String t;
-  int start;
-  int end;
-  int o;
-
-  if (PoisonOn)
-    {
-      s = CheckPoisoned (s);
-    }
-  if (low < 0)
-    {
-      low = ((int ) (DynamicStrings_Length (s)))+low;
-    }
-  if (high <= 0)
-    {
-      high = ((int ) (DynamicStrings_Length (s)))+high;
-    }
-  else
-    {
-      /* make sure high is <= Length (s)  */
-      high = Min (DynamicStrings_Length (s), static_cast<unsigned int> (high));
-    }
-  d = DynamicStrings_InitString ((const char *) "", 0);
-  d = AddToGarbage (d, s);
-  o = 0;
-  t = d;
-  while (s != NULL)
-    {
-      if (low < (o+((int ) (s->contents.len))))
-        {
-          if (o > high)
-            {
-              s = NULL;
-            }
-          else
-            {
-              /* found sliceable unit  */
-              if (low < o)
-                {
-                  start = 0;
-                }
-              else
-                {
-                  start = low-o;
-                }
-              end = Max (Min (MaxBuf, static_cast<unsigned int> (high-o)), 0);
-              while (t->contents.len == MaxBuf)
-                {
-                  if (t->contents.next == NULL)
-                    {
-                      Storage_ALLOCATE ((void **) &t->contents.next, sizeof (DynamicStrings_stringRecord));
-                      t->contents.next->head = NULL;
-                      t->contents.next->contents.len = 0;
-                      AddDebugInfo (t->contents.next);
-                      if (TraceOn)
-                        {
-                          t->contents.next = AssignDebug (t->contents.next, (const char *) "../../gcc-read-write/gcc/m2/gm2-libs/DynamicStrings.mod", 55, 1380, (const char *) "Slice", 5);
-                        }
-                    }
-                  t = t->contents.next;
-                }
-              ConcatContentsAddress (&t->contents, &s->contents.buf.array[start], static_cast<unsigned int> (end-start));
-              o += s->contents.len;
-              s = s->contents.next;
-            }
-        }
-      else
-        {
-          o += s->contents.len;
-          s = s->contents.next;
-        }
-    }
-  if (TraceOn)
-    {
-      d = AssignDebug (d, (const char *) "../../gcc-read-write/gcc/m2/gm2-libs/DynamicStrings.mod", 55, 1397, (const char *) "Slice", 5);
-    }
-  return d;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   Index - returns the indice of the first occurance of, ch, in
-           String, s. -1 is returned if, ch, does not exist.
-           The search starts at position, o.
-*/
-
-extern "C" int DynamicStrings_Index (DynamicStrings_String s, char ch, unsigned int o)
-{
-  unsigned int i;
-  unsigned int k;
-
-  if (PoisonOn)
-    {
-      s = CheckPoisoned (s);
-    }
-  k = 0;
-  while (s != NULL)
-    {
-      if ((k+s->contents.len) < o)
-        {
-          k += s->contents.len;
-        }
-      else
-        {
-          i = o-k;
-          while (i < s->contents.len)
-            {
-              if (s->contents.buf.array[i] == ch)
-                {
-                  return k+i;
-                }
-              i += 1;
-            }
-          k += i;
-          o = k;
-        }
-      s = s->contents.next;
-    }
-  return -1;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   RIndex - returns the indice of the last occurance of, ch,
-            in String, s. The search starts at position, o.
-            -1 is returned if, ch, is not found.
-*/
-
-extern "C" int DynamicStrings_RIndex (DynamicStrings_String s, char ch, unsigned int o)
-{
-  unsigned int i;
-  unsigned int k;
-  int j;
-
-  if (PoisonOn)
-    {
-      s = CheckPoisoned (s);
-    }
-  j = -1;
-  k = 0;
-  while (s != NULL)
-    {
-      if ((k+s->contents.len) < o)
-        {
-          k += s->contents.len;
-        }
-      else
-        {
-          if (o < k)
-            {
-              i = 0;
-            }
-          else
-            {
-              i = o-k;
-            }
-          while (i < s->contents.len)
-            {
-              if (s->contents.buf.array[i] == ch)
-                {
-                  j = k;
-                }
-              k += 1;
-              i += 1;
-            }
-        }
-      s = s->contents.next;
-    }
-  return j;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   RemoveComment - assuming that, comment, is a comment delimiter
-                   which indicates anything to its right is a comment
-                   then strip off the comment and also any white space
-                   on the remaining right hand side.
-                   It leaves any white space on the left hand side alone.
-*/
-
-extern "C" DynamicStrings_String DynamicStrings_RemoveComment (DynamicStrings_String s, char comment)
-{
-  int i;
-
-  i = DynamicStrings_Index (s, comment, 0);
-  if (i == 0)
-    {
-      s = DynamicStrings_InitString ((const char *) "", 0);
-    }
-  else if (i > 0)
-    {
-      /* avoid dangling else.  */
-      s = DynamicStrings_RemoveWhitePostfix (DynamicStrings_Slice (DynamicStrings_Mark (s), 0, i));
-    }
-  if (TraceOn)
-    {
-      s = AssignDebug (s, (const char *) "../../gcc-read-write/gcc/m2/gm2-libs/DynamicStrings.mod", 55, 1509, (const char *) "RemoveComment", 13);
-    }
-  return s;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   RemoveWhitePrefix - removes any leading white space from String, s.
-                       A new string is returned.
-*/
-
-extern "C" DynamicStrings_String DynamicStrings_RemoveWhitePrefix (DynamicStrings_String s)
-{
-  unsigned int i;
-
-  i = 0;
-  while (IsWhite (DynamicStrings_char (s, static_cast<int> (i))))
-    {
-      i += 1;
-    }
-  s = DynamicStrings_Slice (s, (int ) (i), 0);
-  if (TraceOn)
-    {
-      s = AssignDebug (s, (const char *) "../../gcc-read-write/gcc/m2/gm2-libs/DynamicStrings.mod", 55, 1621, (const char *) "RemoveWhitePrefix", 17);
-    }
-  return s;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   RemoveWhitePostfix - removes any leading white space from String, s.
-                        A new string is returned.
-*/
-
-extern "C" DynamicStrings_String DynamicStrings_RemoveWhitePostfix (DynamicStrings_String s)
-{
-  int i;
-
-  i = ((int ) (DynamicStrings_Length (s)))-1;
-  while ((i >= 0) && (IsWhite (DynamicStrings_char (s, i))))
-    {
-      i -= 1;
-    }
-  s = DynamicStrings_Slice (s, 0, i+1);
-  if (TraceOn)
-    {
-      s = AssignDebug (s, (const char *) "../../gcc-read-write/gcc/m2/gm2-libs/DynamicStrings.mod", 55, 1643, (const char *) "RemoveWhitePostfix", 18);
-    }
-  return s;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   ToUpper - returns string, s, after it has had its lower case characters
-             replaced by upper case characters.
-             The string, s, is not duplicated.
-*/
-
-extern "C" DynamicStrings_String DynamicStrings_ToUpper (DynamicStrings_String s)
-{
-  char ch;
-  unsigned int i;
-  DynamicStrings_String t;
-
-  if (s != NULL)
-    {
-      MarkInvalid (s);
-      t = s;
-      while (t != NULL)
-        {
-          i = 0;
-          while (i < t->contents.len)
-            {
-              ch = t->contents.buf.array[i];
-              if ((ch >= 'a') && (ch <= 'z'))
-                {
-                  t->contents.buf.array[i] = ((char) (( ((unsigned int) (ch))- ((unsigned int) ('a')))+ ((unsigned int) ('A'))));
-                }
-              i += 1;
-            }
-          t = t->contents.next;
-        }
-    }
-  return s;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   ToLower - returns string, s, after it has had its upper case characters
-             replaced by lower case characters.
-             The string, s, is not duplicated.
-*/
-
-extern "C" DynamicStrings_String DynamicStrings_ToLower (DynamicStrings_String s)
-{
-  char ch;
-  unsigned int i;
-  DynamicStrings_String t;
-
-  if (s != NULL)
-    {
-      MarkInvalid (s);
-      t = s;
-      while (t != NULL)
-        {
-          i = 0;
-          while (i < t->contents.len)
-            {
-              ch = t->contents.buf.array[i];
-              if ((ch >= 'A') && (ch <= 'Z'))
-                {
-                  t->contents.buf.array[i] = ((char) (( ((unsigned int) (ch))- ((unsigned int) ('A')))+ ((unsigned int) ('a'))));
-                }
-              i += 1;
-            }
-          t = t->contents.next;
-        }
-    }
-  return s;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   CopyOut - copies string, s, to a.
-*/
-
-extern "C" void DynamicStrings_CopyOut (char *a, unsigned int _a_high, DynamicStrings_String s)
-{
-  unsigned int i;
-  unsigned int l;
-
-  l = Min (_a_high+1, DynamicStrings_Length (s));
-  i = 0;
-  while (i < l)
-    {
-      a[i] = DynamicStrings_char (s, static_cast<int> (i));
-      i += 1;
-    }
-  if (i <= _a_high)
-    {
-      a[i] = ASCII_nul;
-    }
-}
-
-
-/*
-   char - returns the character, ch, at position, i, in String, s.
-*/
-
-extern "C" char DynamicStrings_char (DynamicStrings_String s, int i)
-{
-  unsigned int c;
-
-  if (PoisonOn)
-    {
-      s = CheckPoisoned (s);
-    }
-  if (i < 0)
-    {
-      c = (unsigned int ) (((int ) (DynamicStrings_Length (s)))+i);
-    }
-  else
-    {
-      c = i;
-    }
-  while ((s != NULL) && (c >= s->contents.len))
-    {
-      c -= s->contents.len;
-      s = s->contents.next;
-    }
-  if ((s == NULL) || (c >= s->contents.len))
-    {
-      return ASCII_nul;
-    }
-  else
-    {
-      return s->contents.buf.array[c];
-    }
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   string - returns the C style char * of String, s.
-*/
-
-extern "C" void * DynamicStrings_string (DynamicStrings_String s)
-{
-  typedef char *string__T2;
-
-  DynamicStrings_String a;
-  unsigned int l;
-  unsigned int i;
-  string__T2 p;
-
-  if (PoisonOn)
-    {
-      s = CheckPoisoned (s);
-    }
-  if (s == NULL)
-    {
-      return NULL;
-    }
-  else
-    {
-      if (! s->head->charStarValid)
-        {
-          l = DynamicStrings_Length (s);
-          if (! (s->head->charStarUsed && (s->head->charStarSize > l)))
-            {
-              DeallocateCharStar (s);
-              Storage_ALLOCATE (&s->head->charStar, l+1);
-              s->head->charStarSize = l+1;
-              s->head->charStarUsed = TRUE;
-            }
-          p = static_cast<string__T2> (s->head->charStar);
-          a = s;
-          while (a != NULL)
-            {
-              i = 0;
-              while (i < a->contents.len)
-                {
-                  (*p) = a->contents.buf.array[i];
-                  i += 1;
-                  p += 1;
-                }
-              a = a->contents.next;
-            }
-          (*p) = ASCII_nul;
-          s->head->charStarValid = TRUE;
-        }
-      return s->head->charStar;
-    }
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   InitStringDB - the debug version of InitString.
-*/
-
-extern "C" DynamicStrings_String DynamicStrings_InitStringDB (const char *a_, unsigned int _a_high, const char *file_, unsigned int _file_high, unsigned int line)
-{
-  char a[_a_high+1];
-  char file[_file_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (a, a_, _a_high+1);
-  memcpy (file, file_, _file_high+1);
-
-  return AssignDebug (DynamicStrings_InitString ((const char *) a, _a_high), (const char *) file, _file_high, line, (const char *) "InitString", 10);
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   InitStringCharStarDB - the debug version of InitStringCharStar.
-*/
-
-extern "C" DynamicStrings_String DynamicStrings_InitStringCharStarDB (void * a, const char *file_, unsigned int _file_high, unsigned int line)
-{
-  char file[_file_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (file, file_, _file_high+1);
-
-  return AssignDebug (DynamicStrings_InitStringCharStar (a), (const char *) file, _file_high, line, (const char *) "InitStringCharStar", 18);
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   InitStringCharDB - the debug version of InitStringChar.
-*/
-
-extern "C" DynamicStrings_String DynamicStrings_InitStringCharDB (char ch, const char *file_, unsigned int _file_high, unsigned int line)
-{
-  char file[_file_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (file, file_, _file_high+1);
-
-  return AssignDebug (DynamicStrings_InitStringChar (ch), (const char *) file, _file_high, line, (const char *) "InitStringChar", 14);
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   MultDB - the debug version of MultDB.
-*/
-
-extern "C" DynamicStrings_String DynamicStrings_MultDB (DynamicStrings_String s, unsigned int n, const char *file_, unsigned int _file_high, unsigned int line)
-{
-  char file[_file_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (file, file_, _file_high+1);
-
-  return AssignDebug (DynamicStrings_Mult (s, n), (const char *) file, _file_high, line, (const char *) "Mult", 4);
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   DupDB - the debug version of Dup.
-*/
-
-extern "C" DynamicStrings_String DynamicStrings_DupDB (DynamicStrings_String s, const char *file_, unsigned int _file_high, unsigned int line)
-{
-  char file[_file_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (file, file_, _file_high+1);
-
-  return AssignDebug (DynamicStrings_Dup (s), (const char *) file, _file_high, line, (const char *) "Dup", 3);
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   SliceDB - debug version of Slice.
-*/
-
-extern "C" DynamicStrings_String DynamicStrings_SliceDB (DynamicStrings_String s, int low, int high, const char *file_, unsigned int _file_high, unsigned int line)
-{
-  char file[_file_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (file, file_, _file_high+1);
-
-  DSdbEnter ();
-  s = AssignDebug (DynamicStrings_Slice (s, low, high), (const char *) file, _file_high, line, (const char *) "Slice", 5);
-  DSdbExit (s);
-  return s;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   PushAllocation - pushes the current allocation/deallocation lists.
-*/
-
-extern "C" void DynamicStrings_PushAllocation (void)
-{
-  DynamicStrings_frame f;
-
-  if (CheckOn)
-    {
-      Init ();
-      Storage_ALLOCATE ((void **) &f, sizeof (DynamicStrings_frameRec));
-      f->next = frameHead;
-      f->alloc = NULL;
-      f->dealloc = NULL;
-      frameHead = f;
-    }
-}
-
-
-/*
-   PopAllocation - test to see that all strings are deallocated since
-                   the last push.  Then it pops to the previous
-                   allocation/deallocation lists.
-
-                   If halt is true then the application terminates
-                   with an exit code of 1.
-*/
-
-extern "C" void DynamicStrings_PopAllocation (unsigned int halt)
-{
-  if (CheckOn)
-    {
-      if ((DynamicStrings_PopAllocationExemption (halt, NULL)) == NULL)
-        {}  /* empty.  */
-    }
-}
-
-
-/*
-   PopAllocationExemption - test to see that all strings are deallocated, except
-                            string, e, since the last push.
-                            Then it pops to the previous allocation/deallocation
-                            lists.
-
-                            If halt is true then the application terminates
-                            with an exit code of 1.
-*/
-
-extern "C" DynamicStrings_String DynamicStrings_PopAllocationExemption (unsigned int halt, DynamicStrings_String e)
-{
-  DynamicStrings_String s;
-  DynamicStrings_frame f;
-  unsigned int b;
-
-  Init ();
-  if (CheckOn)
-    {
-      /* avoid gcc warning by using compound statement even if not strictly necessary.  */
-      if (frameHead == NULL)
-        {
-          stop ();
-          /* writeString ("mismatched number of PopAllocation's compared to PushAllocation's")  */
-          M2RTS_Halt ((const char *) "../../gcc-read-write/gcc/m2/gm2-libs/DynamicStrings.mod", 55, 176, (const char *) "PopAllocationExemption", 22, (const char *) "mismatched number of PopAllocation's compared to PushAllocation's", 65);
-        }
-      else
-        {
-          if (frameHead->alloc != NULL)
-            {
-              b = FALSE;
-              s = frameHead->alloc;
-              while (s != NULL)
-                {
-                  if (! (((e == s) || (IsOnGarbage (e, s))) || (IsOnGarbage (s, e))))
-                    {
-                      if (! b)
-                        {
-                          writeString ((const char *) "the following strings have been lost", 36);
-                          writeLn ();
-                          b = TRUE;
-                        }
-                      DumpStringInfo (s, 0);
-                    }
-                  s = s->debug.next;
-                }
-              if (b && halt)
-                {
-                  libc_exit (1);
-                }
-            }
-          frameHead = frameHead->next;
-        }
-    }
-  return e;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-extern "C" void _M2_DynamicStrings_init (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-  Initialized = FALSE;
-  Init ();
-}
-
-extern "C" void _M2_DynamicStrings_fini (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-}
diff --git a/gcc/m2/mc-boot/GEnvironment.c b/gcc/m2/mc-boot/GEnvironment.c
deleted file mode 100644
index aa5e7662873..00000000000
--- a/gcc/m2/mc-boot/GEnvironment.c
+++ /dev/null
@@ -1,129 +0,0 @@
-/* do not edit automatically generated by mc from Environment.  */
-/* Environment.mod provides access to the environment settings of a process.
-
-Copyright (C) 2001-2023 Free Software Foundation, Inc.
-Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>.
-
-This file is part of GNU Modula-2.
-
-GNU Modula-2 is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
-
-GNU Modula-2 is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-General Public License for more details.
-
-Under Section 7 of GPL version 3, you are granted additional
-permissions described in the GCC Runtime Library Exception, version
-3.1, as published by the Free Software Foundation.
-
-You should have received a copy of the GNU General Public License and
-a copy of the GCC Runtime Library Exception along with this program;
-see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
-<http://www.gnu.org/licenses/>.  */
-
-#include "config.h"
-#include "system.h"
-#   if !defined (PROC_D)
-#      define PROC_D
-       typedef void (*PROC_t) (void);
-       typedef struct { PROC_t proc; } PROC;
-#   endif
-
-#if defined(__cplusplus)
-#   undef NULL
-#   define NULL 0
-#endif
-#define _Environment_H
-#define _Environment_C
-
-#   include "GSYSTEM.h"
-#   include "Glibc.h"
-#   include "GASCII.h"
-#   include "GStrLib.h"
-
-
-/*
-   GetEnvironment - gets the environment variable Env and places
-      	       	    a copy of its value into string, dest.
-                    It returns TRUE if the string Env was found in
-                    the processes environment.
-*/
-
-extern "C" unsigned int Environment_GetEnvironment (const char *Env_, unsigned int _Env_high, char *dest, unsigned int _dest_high);
-
-/*
-   PutEnvironment - change or add an environment variable definition EnvDef.
-                    TRUE is returned if the environment variable was
-                    set or changed successfully.
-*/
-
-extern "C" unsigned int Environment_PutEnvironment (const char *EnvDef_, unsigned int _EnvDef_high);
-
-
-/*
-   GetEnvironment - gets the environment variable Env and places
-      	       	    a copy of its value into string, dest.
-                    It returns TRUE if the string Env was found in
-                    the processes environment.
-*/
-
-extern "C" unsigned int Environment_GetEnvironment (const char *Env_, unsigned int _Env_high, char *dest, unsigned int _dest_high)
-{
-  typedef char *GetEnvironment__T1;
-
-  unsigned int High;
-  unsigned int i;
-  GetEnvironment__T1 Addr;
-  char Env[_Env_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (Env, Env_, _Env_high+1);
-
-  i = 0;
-  High = _dest_high;
-  Addr = static_cast<GetEnvironment__T1> (libc_getenv (&Env));
-  while (((i < High) && (Addr != NULL)) && ((*Addr) != ASCII_nul))
-    {
-      dest[i] = (*Addr);
-      Addr += 1;
-      i += 1;
-    }
-  if (i < High)
-    {
-      dest[i] = ASCII_nul;
-    }
-  return Addr != NULL;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   PutEnvironment - change or add an environment variable definition EnvDef.
-                    TRUE is returned if the environment variable was
-                    set or changed successfully.
-*/
-
-extern "C" unsigned int Environment_PutEnvironment (const char *EnvDef_, unsigned int _EnvDef_high)
-{
-  char EnvDef[_EnvDef_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (EnvDef, EnvDef_, _EnvDef_high+1);
-
-  return (libc_putenv (&EnvDef)) == 0;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-extern "C" void _M2_Environment_init (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-}
-
-extern "C" void _M2_Environment_fini (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-}
diff --git a/gcc/m2/mc-boot/GFIO.c b/gcc/m2/mc-boot/GFIO.c
deleted file mode 100644
index 65819a10a4b..00000000000
--- a/gcc/m2/mc-boot/GFIO.c
+++ /dev/null
@@ -1,2322 +0,0 @@
-/* do not edit automatically generated by mc from FIO.  */
-/* FIO.mod provides a simple buffered file input/output library.
-
-Copyright (C) 2001-2023 Free Software Foundation, Inc.
-Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>.
-
-This file is part of GNU Modula-2.
-
-GNU Modula-2 is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
-
-GNU Modula-2 is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-General Public License for more details.
-
-Under Section 7 of GPL version 3, you are granted additional
-permissions described in the GCC Runtime Library Exception, version
-3.1, as published by the Free Software Foundation.
-
-You should have received a copy of the GNU General Public License and
-a copy of the GCC Runtime Library Exception along with this program;
-see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
-<http://www.gnu.org/licenses/>.  */
-
-#include "config.h"
-#include "system.h"
-#   if !defined (PROC_D)
-#      define PROC_D
-       typedef void (*PROC_t) (void);
-       typedef struct { PROC_t proc; } PROC;
-#   endif
-
-#   if !defined (TRUE)
-#      define TRUE (1==1)
-#   endif
-
-#   if !defined (FALSE)
-#      define FALSE (1==0)
-#   endif
-
-#   include "GStorage.h"
-#   include "Gmcrts.h"
-#if defined(__cplusplus)
-#   undef NULL
-#   define NULL 0
-#endif
-#define _FIO_H
-#define _FIO_C
-
-#   include "GSYSTEM.h"
-#   include "GASCII.h"
-#   include "GStrLib.h"
-#   include "GStorage.h"
-#   include "GNumberIO.h"
-#   include "Glibc.h"
-#   include "GIndexing.h"
-#   include "GM2RTS.h"
-
-typedef unsigned int FIO_File;
-
-FIO_File FIO_StdErr;
-FIO_File FIO_StdOut;
-FIO_File FIO_StdIn;
-#   define SEEK_SET 0
-#   define SEEK_END 2
-#   define UNIXREADONLY 0
-#   define UNIXWRITEONLY 1
-#   define CreatePermissions 0666
-#   define MaxBufferLength (1024*16)
-#   define MaxErrorString (1024*8)
-typedef struct FIO_NameInfo_r FIO_NameInfo;
-
-typedef struct FIO_buf_r FIO_buf;
-
-typedef FIO_buf *FIO_Buffer;
-
-typedef struct FIO_fds_r FIO_fds;
-
-typedef FIO_fds *FIO_FileDescriptor;
-
-typedef struct FIO__T7_a FIO__T7;
-
-typedef char *FIO_PtrToChar;
-
-typedef enum {FIO_successful, FIO_outofmemory, FIO_toomanyfilesopen, FIO_failed, FIO_connectionfailure, FIO_endofline, FIO_endoffile} FIO_FileStatus;
-
-typedef enum {FIO_unused, FIO_openedforread, FIO_openedforwrite, FIO_openedforrandom} FIO_FileUsage;
-
-struct FIO_NameInfo_r {
-                        void *address;
-                        unsigned int size;
-                      };
-
-struct FIO_buf_r {
-                   unsigned int valid;
-                   long int bufstart;
-                   unsigned int position;
-                   void *address;
-                   unsigned int filled;
-                   unsigned int size;
-                   unsigned int left;
-                   FIO__T7 *contents;
-                 };
-
-struct FIO__T7_a { char array[MaxBufferLength+1]; };
-struct FIO_fds_r {
-                   int unixfd;
-                   FIO_NameInfo name;
-                   FIO_FileStatus state;
-                   FIO_FileUsage usage;
-                   unsigned int output;
-                   FIO_Buffer buffer;
-                   long int abspos;
-                 };
-
-static Indexing_Index FileInfo;
-static FIO_File Error;
-
-/*
-   IsNoError - returns a TRUE if no error has occured on file, f.
-*/
-
-extern "C" unsigned int FIO_IsNoError (FIO_File f);
-
-/*
-   IsActive - returns TRUE if the file, f, is still active.
-*/
-
-extern "C" unsigned int FIO_IsActive (FIO_File f);
-extern "C" unsigned int FIO_Exists (const char *fname_, unsigned int _fname_high);
-extern "C" FIO_File FIO_OpenToRead (const char *fname_, unsigned int _fname_high);
-extern "C" FIO_File FIO_OpenToWrite (const char *fname_, unsigned int _fname_high);
-extern "C" FIO_File FIO_OpenForRandom (const char *fname_, unsigned int _fname_high, unsigned int towrite, unsigned int newfile);
-
-/*
-   Close - close a file which has been previously opened using:
-           OpenToRead, OpenToWrite, OpenForRandom.
-           It is correct to close a file which has an error status.
-*/
-
-extern "C" void FIO_Close (FIO_File f);
-
-/*
-   exists - returns TRUE if a file named, fname exists for reading.
-*/
-
-extern "C" unsigned int FIO_exists (void * fname, unsigned int flength);
-
-/*
-   openToRead - attempts to open a file, fname, for reading and
-                it returns this file.
-                The success of this operation can be checked by
-                calling IsNoError.
-*/
-
-extern "C" FIO_File FIO_openToRead (void * fname, unsigned int flength);
-
-/*
-   openToWrite - attempts to open a file, fname, for write and
-                 it returns this file.
-                 The success of this operation can be checked by
-                 calling IsNoError.
-*/
-
-extern "C" FIO_File FIO_openToWrite (void * fname, unsigned int flength);
-
-/*
-   openForRandom - attempts to open a file, fname, for random access
-                   read or write and it returns this file.
-                   The success of this operation can be checked by
-                   calling IsNoError.
-                   towrite, determines whether the file should be
-                   opened for writing or reading.
-*/
-
-extern "C" FIO_File FIO_openForRandom (void * fname, unsigned int flength, unsigned int towrite, unsigned int newfile);
-
-/*
-   FlushBuffer - flush contents of file, f.
-*/
-
-extern "C" void FIO_FlushBuffer (FIO_File f);
-
-/*
-   ReadNBytes - reads nBytes of a file into memory area, dest, returning
-                the number of bytes actually read.
-                This function will consume from the buffer and then
-                perform direct libc reads. It is ideal for large reads.
-*/
-
-extern "C" unsigned int FIO_ReadNBytes (FIO_File f, unsigned int nBytes, void * dest);
-
-/*
-   ReadAny - reads HIGH(a) bytes into, a. All input
-             is fully buffered, unlike ReadNBytes and thus is more
-             suited to small reads.
-*/
-
-extern "C" void FIO_ReadAny (FIO_File f, unsigned char *a, unsigned int _a_high);
-
-/*
-   WriteNBytes - writes nBytes from memory area src to a file
-                 returning the number of bytes actually written.
-                 This function will flush the buffer and then
-                 write the nBytes using a direct write from libc.
-                 It is ideal for large writes.
-*/
-
-extern "C" unsigned int FIO_WriteNBytes (FIO_File f, unsigned int nBytes, void * src);
-
-/*
-   WriteAny - writes HIGH(a) bytes onto, file, f. All output
-              is fully buffered, unlike WriteNBytes and thus is more
-              suited to small writes.
-*/
-
-extern "C" void FIO_WriteAny (FIO_File f, unsigned char *a, unsigned int _a_high);
-
-/*
-   WriteChar - writes a single character to file, f.
-*/
-
-extern "C" void FIO_WriteChar (FIO_File f, char ch);
-
-/*
-   EOF - tests to see whether a file, f, has reached end of file.
-*/
-
-extern "C" unsigned int FIO_EOF (FIO_File f);
-
-/*
-   EOLN - tests to see whether a file, f, is upon a newline.
-          It does NOT consume the newline.
-*/
-
-extern "C" unsigned int FIO_EOLN (FIO_File f);
-
-/*
-   WasEOLN - tests to see whether a file, f, has just seen a newline.
-*/
-
-extern "C" unsigned int FIO_WasEOLN (FIO_File f);
-
-/*
-   ReadChar - returns a character read from file f.
-              Sensible to check with IsNoError or EOF after calling
-              this function.
-*/
-
-extern "C" char FIO_ReadChar (FIO_File f);
-
-/*
-   UnReadChar - replaces a character, ch, back into file f.
-                This character must have been read by ReadChar
-                and it does not allow successive calls.  It may
-                only be called if the previous read was successful
-                or end of file was seen.
-                If the state was previously endoffile then it
-                is altered to successful.
-                Otherwise it is left alone.
-*/
-
-extern "C" void FIO_UnReadChar (FIO_File f, char ch);
-
-/*
-   WriteLine - writes out a linefeed to file, f.
-*/
-
-extern "C" void FIO_WriteLine (FIO_File f);
-
-/*
-   WriteString - writes a string to file, f.
-*/
-
-extern "C" void FIO_WriteString (FIO_File f, const char *a_, unsigned int _a_high);
-
-/*
-   ReadString - reads a string from file, f, into string, a.
-                It terminates the string if HIGH is reached or
-                if a newline is seen or an error occurs.
-*/
-
-extern "C" void FIO_ReadString (FIO_File f, char *a, unsigned int _a_high);
-
-/*
-   WriteCardinal - writes a CARDINAL to file, f.
-                   It writes the binary image of the cardinal
-                   to file, f.
-*/
-
-extern "C" void FIO_WriteCardinal (FIO_File f, unsigned int c);
-
-/*
-   ReadCardinal - reads a CARDINAL from file, f.
-                  It reads a binary image of a CARDINAL
-                  from a file, f.
-*/
-
-extern "C" unsigned int FIO_ReadCardinal (FIO_File f);
-
-/*
-   GetUnixFileDescriptor - returns the UNIX file descriptor of a file.
-*/
-
-extern "C" int FIO_GetUnixFileDescriptor (FIO_File f);
-
-/*
-   SetPositionFromBeginning - sets the position from the beginning of the file.
-*/
-
-extern "C" void FIO_SetPositionFromBeginning (FIO_File f, long int pos);
-
-/*
-   SetPositionFromEnd - sets the position from the end of the file.
-*/
-
-extern "C" void FIO_SetPositionFromEnd (FIO_File f, long int pos);
-
-/*
-   FindPosition - returns the current absolute position in file, f.
-*/
-
-extern "C" long int FIO_FindPosition (FIO_File f);
-
-/*
-   GetFileName - assigns, a, with the filename associated with, f.
-*/
-
-extern "C" void FIO_GetFileName (FIO_File f, char *a, unsigned int _a_high);
-
-/*
-   getFileName - returns the address of the filename associated with, f.
-*/
-
-extern "C" void * FIO_getFileName (FIO_File f);
-
-/*
-   getFileNameLength - returns the number of characters associated with filename, f.
-*/
-
-extern "C" unsigned int FIO_getFileNameLength (FIO_File f);
-
-/*
-   FlushOutErr - flushes, StdOut, and, StdErr.
-                 It is also called when the application calls M2RTS.Terminate.
-                 (which is automatically placed in program modules by the GM2
-                 scaffold).
-*/
-
-extern "C" void FIO_FlushOutErr (void);
-
-/*
-   Max - returns the maximum of two values.
-*/
-
-static unsigned int Max (unsigned int a, unsigned int b);
-
-/*
-   Min - returns the minimum of two values.
-*/
-
-static unsigned int Min (unsigned int a, unsigned int b);
-
-/*
-   GetNextFreeDescriptor - returns the index to the FileInfo array indicating
-                           the next free slot.
-*/
-
-static FIO_File GetNextFreeDescriptor (void);
-
-/*
-   SetState - sets the field, state, of file, f, to, s.
-*/
-
-static void SetState (FIO_File f, FIO_FileStatus s);
-
-/*
-   InitializeFile - initialize a file descriptor
-*/
-
-static FIO_File InitializeFile (FIO_File f, void * fname, unsigned int flength, FIO_FileStatus fstate, FIO_FileUsage use, unsigned int towrite, unsigned int buflength);
-
-/*
-   ConnectToUnix - connects a FIO file to a UNIX file descriptor.
-*/
-
-static void ConnectToUnix (FIO_File f, unsigned int towrite, unsigned int newfile);
-
-/*
-   ReadFromBuffer - attempts to read, nBytes, from file, f.
-                    It firstly consumes the buffer and then performs
-                    direct unbuffered reads. This should only be used
-                    when wishing to read large files.
-
-                    The actual number of bytes read is returned.
-                    -1 is returned if EOF is reached.
-*/
-
-static int ReadFromBuffer (FIO_File f, void * a, unsigned int nBytes);
-
-/*
-   BufferedRead - will read, nBytes, through the buffer.
-                  Similar to ReadFromBuffer, but this function will always
-                  read into the buffer before copying into memory.
-
-                  Useful when performing small reads.
-*/
-
-static int BufferedRead (FIO_File f, unsigned int nBytes, void * a);
-
-/*
-   HandleEscape - translates 
- and \t into their respective ascii codes.
-*/
-
-static void HandleEscape (char *dest, unsigned int _dest_high, const char *src_, unsigned int _src_high, unsigned int *i, unsigned int *j, unsigned int HighSrc, unsigned int HighDest);
-
-/*
-   Cast - casts a := b
-*/
-
-static void Cast (unsigned char *a, unsigned int _a_high, const unsigned char *b_, unsigned int _b_high);
-
-/*
-   StringFormat1 - converts string, src, into, dest, together with encapsulated
-                   entity, w. It only formats the first %s or %d with n.
-*/
-
-static void StringFormat1 (char *dest, unsigned int _dest_high, const char *src_, unsigned int _src_high, const unsigned char *w_, unsigned int _w_high);
-
-/*
-   FormatError - provides a orthoganal counterpart to the procedure below.
-*/
-
-static void FormatError (const char *a_, unsigned int _a_high);
-
-/*
-   FormatError1 - generic error procedure taking standard format string
-                  and single parameter.
-*/
-
-static void FormatError1 (const char *a_, unsigned int _a_high, const unsigned char *w_, unsigned int _w_high);
-
-/*
-   FormatError2 - generic error procedure taking standard format string
-                  and two parameters.
-*/
-
-static void FormatError2 (const char *a_, unsigned int _a_high, const unsigned char *w1_, unsigned int _w1_high, const unsigned char *w2_, unsigned int _w2_high);
-
-/*
-   CheckAccess - checks to see whether a file f has been
-                 opened for read/write.
-*/
-
-static void CheckAccess (FIO_File f, FIO_FileUsage use, unsigned int towrite);
-
-/*
-   SetEndOfLine -
-*/
-
-static void SetEndOfLine (FIO_File f, char ch);
-
-/*
-   BufferedWrite - will write, nBytes, through the buffer.
-                   Similar to WriteNBytes, but this function will always
-                   write into the buffer before copying into memory.
-
-                   Useful when performing small writes.
-*/
-
-static int BufferedWrite (FIO_File f, unsigned int nBytes, void * a);
-
-/*
-   PreInitialize - preinitialize the file descriptor.
-*/
-
-static void PreInitialize (FIO_File f, const char *fname_, unsigned int _fname_high, FIO_FileStatus state, FIO_FileUsage use, unsigned int towrite, int osfd, unsigned int bufsize);
-
-/*
-   Init - initialize the modules, global variables.
-*/
-
-static void Init (void);
-
-
-/*
-   Max - returns the maximum of two values.
-*/
-
-static unsigned int Max (unsigned int a, unsigned int b)
-{
-  if (a > b)
-    {
-      return a;
-    }
-  else
-    {
-      return b;
-    }
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   Min - returns the minimum of two values.
-*/
-
-static unsigned int Min (unsigned int a, unsigned int b)
-{
-  if (a < b)
-    {
-      return a;
-    }
-  else
-    {
-      return b;
-    }
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   GetNextFreeDescriptor - returns the index to the FileInfo array indicating
-                           the next free slot.
-*/
-
-static FIO_File GetNextFreeDescriptor (void)
-{
-  FIO_File f;
-  FIO_File h;
-  FIO_FileDescriptor fd;
-
-  f = Error+1;
-  h = Indexing_HighIndice (FileInfo);
-  for (;;)
-  {
-    if (f <= h)
-      {
-        fd = static_cast<FIO_FileDescriptor> (Indexing_GetIndice (FileInfo, f));
-        if (fd == NULL)
-          {
-            return f;
-          }
-      }
-    f += 1;
-    if (f > h)
-      {
-        Indexing_PutIndice (FileInfo, f, NULL);  /* create new slot  */
-        return f;  /* create new slot  */
-      }
-  }
-  ReturnException ("../../gcc-read-write/gcc/m2/gm2-libs/FIO.def", 25, 1);
-  __builtin_unreachable ();
-}
-
-
-/*
-   SetState - sets the field, state, of file, f, to, s.
-*/
-
-static void SetState (FIO_File f, FIO_FileStatus s)
-{
-  FIO_FileDescriptor fd;
-
-  fd = static_cast<FIO_FileDescriptor> (Indexing_GetIndice (FileInfo, f));
-  fd->state = s;
-}
-
-
-/*
-   InitializeFile - initialize a file descriptor
-*/
-
-static FIO_File InitializeFile (FIO_File f, void * fname, unsigned int flength, FIO_FileStatus fstate, FIO_FileUsage use, unsigned int towrite, unsigned int buflength)
-{
-  FIO_PtrToChar p;
-  FIO_FileDescriptor fd;
-
-  Storage_ALLOCATE ((void **) &fd, sizeof (FIO_fds));
-  if (fd == NULL)
-    {
-      SetState (Error, FIO_outofmemory);
-      return Error;
-    }
-  else
-    {
-      Indexing_PutIndice (FileInfo, f, reinterpret_cast<void *> (fd));
-      fd->name.size = flength+1;  /* need to guarantee the nul for C  */
-      fd->usage = use;  /* need to guarantee the nul for C  */
-      fd->output = towrite;
-      Storage_ALLOCATE (&fd->name.address, fd->name.size);
-      if (fd->name.address == NULL)
-        {
-          fd->state = FIO_outofmemory;
-          return f;
-        }
-      fd->name.address = libc_strncpy (fd->name.address, fname, flength);
-      /* and assign nul to the last byte  */
-      p = static_cast<FIO_PtrToChar> (fd->name.address);
-      p += flength;
-      (*p) = ASCII_nul;
-      fd->abspos = 0;
-      /* now for the buffer  */
-      Storage_ALLOCATE ((void **) &fd->buffer, sizeof (FIO_buf));
-      if (fd->buffer == NULL)
-        {
-          SetState (Error, FIO_outofmemory);
-          return Error;
-        }
-      else
-        {
-          fd->buffer->valid = FALSE;
-          fd->buffer->bufstart = 0;
-          fd->buffer->size = buflength;
-          fd->buffer->position = 0;
-          fd->buffer->filled = 0;
-          if (fd->buffer->size == 0)
-            {
-              fd->buffer->address = NULL;
-            }
-          else
-            {
-              Storage_ALLOCATE (&fd->buffer->address, fd->buffer->size);
-              if (fd->buffer->address == NULL)
-                {
-                  fd->state = FIO_outofmemory;
-                  return f;
-                }
-            }
-          if (towrite)
-            {
-              fd->buffer->left = fd->buffer->size;
-            }
-          else
-            {
-              fd->buffer->left = 0;
-            }
-          fd->buffer->contents = reinterpret_cast<FIO__T7 *> (fd->buffer->address);  /* provides easy access for reading characters  */
-          fd->state = fstate;  /* provides easy access for reading characters  */
-        }
-    }
-  return f;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   ConnectToUnix - connects a FIO file to a UNIX file descriptor.
-*/
-
-static void ConnectToUnix (FIO_File f, unsigned int towrite, unsigned int newfile)
-{
-  FIO_FileDescriptor fd;
-
-  if (f != Error)
-    {
-      fd = static_cast<FIO_FileDescriptor> (Indexing_GetIndice (FileInfo, f));
-      if (fd != NULL)
-        {
-          if (towrite)
-            {
-              if (newfile)
-                {
-                  fd->unixfd = libc_creat (fd->name.address, CreatePermissions);
-                }
-              else
-                {
-                  fd->unixfd = libc_open (fd->name.address, UNIXWRITEONLY, 0);
-                }
-            }
-          else
-            {
-              fd->unixfd = libc_open (fd->name.address, UNIXREADONLY, 0);
-            }
-          if (fd->unixfd < 0)
-            {
-              fd->state = FIO_connectionfailure;
-            }
-        }
-    }
-}
-
-
-/*
-   ReadFromBuffer - attempts to read, nBytes, from file, f.
-                    It firstly consumes the buffer and then performs
-                    direct unbuffered reads. This should only be used
-                    when wishing to read large files.
-
-                    The actual number of bytes read is returned.
-                    -1 is returned if EOF is reached.
-*/
-
-static int ReadFromBuffer (FIO_File f, void * a, unsigned int nBytes)
-{
-  typedef unsigned char *ReadFromBuffer__T1;
-
-  void * t;
-  int result;
-  unsigned int total;
-  unsigned int n;
-  ReadFromBuffer__T1 p;
-  FIO_FileDescriptor fd;
-
-  if (f != Error)
-    {
-      total = 0;  /* how many bytes have we read  */
-      fd = static_cast<FIO_FileDescriptor> (Indexing_GetIndice (FileInfo, f));  /* how many bytes have we read  */
-      /* extract from the buffer first  */
-      if ((fd->buffer != NULL) && fd->buffer->valid)
-        {
-          if (fd->buffer->left > 0)
-            {
-              /* avoid gcc warning by using compound statement even if not strictly necessary.  */
-              if (nBytes == 1)
-                {
-                  /* too expensive to call memcpy for 1 character  */
-                  p = static_cast<ReadFromBuffer__T1> (a);
-                  (*p) = static_cast<unsigned char> ((*fd->buffer->contents).array[fd->buffer->position]);
-                  fd->buffer->left -= 1;  /* remove consumed bytes  */
-                  fd->buffer->position += 1;  /* move onwards n bytes  */
-                  nBytes = 0;
-                  /* read  */
-                  return 1;
-                }
-              else
-                {
-                  n = Min (fd->buffer->left, nBytes);
-                  t = fd->buffer->address;
-                  t = reinterpret_cast<void *> (reinterpret_cast<char *> (t)+fd->buffer->position);
-                  p = static_cast<ReadFromBuffer__T1> (libc_memcpy (a, t, static_cast<size_t> (n)));
-                  fd->buffer->left -= n;  /* remove consumed bytes  */
-                  fd->buffer->position += n;  /* move onwards n bytes  */
-                  /* move onwards ready for direct reads  */
-                  a = reinterpret_cast<void *> (reinterpret_cast<char *> (a)+n);
-                  nBytes -= n;  /* reduce the amount for future direct  */
-                  /* read  */
-                  total += n;
-                  return total;  /* much cleaner to return now,  */
-                }
-               /* difficult to record an error if  */
-            }
-           /* the read below returns -1  */
-        }
-      if (nBytes > 0)
-        {
-          /* still more to read  */
-          result = static_cast<int> (libc_read (fd->unixfd, a, static_cast<size_t> ((int ) (nBytes))));
-          if (result > 0)
-            {
-              /* avoid dangling else.  */
-              total += result;
-              fd->abspos += result;
-              /* now disable the buffer as we read directly into, a.  */
-              if (fd->buffer != NULL)
-                {
-                  fd->buffer->valid = FALSE;
-                }
-            }
-          else
-            {
-              if (result == 0)
-                {
-                  /* eof reached  */
-                  fd->state = FIO_endoffile;
-                }
-              else
-                {
-                  fd->state = FIO_failed;
-                }
-              /* indicate buffer is empty  */
-              if (fd->buffer != NULL)
-                {
-                  fd->buffer->valid = FALSE;
-                  fd->buffer->left = 0;
-                  fd->buffer->position = 0;
-                  if (fd->buffer->address != NULL)
-                    {
-                      (*fd->buffer->contents).array[fd->buffer->position] = ASCII_nul;
-                    }
-                }
-              return -1;
-            }
-        }
-      return total;
-    }
-  else
-    {
-      return -1;
-    }
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   BufferedRead - will read, nBytes, through the buffer.
-                  Similar to ReadFromBuffer, but this function will always
-                  read into the buffer before copying into memory.
-
-                  Useful when performing small reads.
-*/
-
-static int BufferedRead (FIO_File f, unsigned int nBytes, void * a)
-{
-  typedef unsigned char *BufferedRead__T3;
-
-  void * t;
-  int result;
-  int total;
-  int n;
-  BufferedRead__T3 p;
-  FIO_FileDescriptor fd;
-
-  if (f != Error)
-    {
-      fd = static_cast<FIO_FileDescriptor> (Indexing_GetIndice (FileInfo, f));
-      total = 0;  /* how many bytes have we read  */
-      if (fd != NULL)  /* how many bytes have we read  */
-        {
-          /* extract from the buffer first  */
-          if (fd->buffer != NULL)
-            {
-              while (nBytes > 0)
-                {
-                  if ((fd->buffer->left > 0) && fd->buffer->valid)
-                    {
-                      if (nBytes == 1)
-                        {
-                          /* too expensive to call memcpy for 1 character  */
-                          p = static_cast<BufferedRead__T3> (a);
-                          (*p) = static_cast<unsigned char> ((*fd->buffer->contents).array[fd->buffer->position]);
-                          fd->buffer->left -= 1;  /* remove consumed byte  */
-                          fd->buffer->position += 1;  /* move onwards n byte  */
-                          total += 1;  /* move onwards n byte  */
-                          return total;
-                        }
-                      else
-                        {
-                          n = Min (fd->buffer->left, nBytes);
-                          t = fd->buffer->address;
-                          t = reinterpret_cast<void *> (reinterpret_cast<char *> (t)+fd->buffer->position);
-                          p = static_cast<BufferedRead__T3> (libc_memcpy (a, t, static_cast<size_t> (n)));
-                          fd->buffer->left -= n;  /* remove consumed bytes  */
-                          fd->buffer->position += n;  /* move onwards n bytes  */
-                          /* move onwards ready for direct reads  */
-                          a = reinterpret_cast<void *> (reinterpret_cast<char *> (a)+n);
-                          nBytes -= n;  /* reduce the amount for future direct  */
-                          /* read  */
-                          total += n;
-                        }
-                    }
-                  else
-                    {
-                      /* refill buffer  */
-                      n = static_cast<int> (libc_read (fd->unixfd, fd->buffer->address, static_cast<size_t> (fd->buffer->size)));
-                      if (n >= 0)
-                        {
-                          /* avoid dangling else.  */
-                          fd->buffer->valid = TRUE;
-                          fd->buffer->position = 0;
-                          fd->buffer->left = n;
-                          fd->buffer->filled = n;
-                          fd->buffer->bufstart = fd->abspos;
-                          fd->abspos += n;
-                          if (n == 0)
-                            {
-                              /* eof reached  */
-                              fd->state = FIO_endoffile;
-                              return -1;
-                            }
-                        }
-                      else
-                        {
-                          fd->buffer->valid = FALSE;
-                          fd->buffer->position = 0;
-                          fd->buffer->left = 0;
-                          fd->buffer->filled = 0;
-                          fd->state = FIO_failed;
-                          return total;
-                        }
-                    }
-                }
-              return total;
-            }
-        }
-    }
-  return -1;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   HandleEscape - translates 
- and \t into their respective ascii codes.
-*/
-
-static void HandleEscape (char *dest, unsigned int _dest_high, const char *src_, unsigned int _src_high, unsigned int *i, unsigned int *j, unsigned int HighSrc, unsigned int HighDest)
-{
-  char src[_src_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (src, src_, _src_high+1);
-
-  if (((((*i)+1) < HighSrc) && (src[(*i)] == '\\')) && ((*j) < HighDest))
-    {
-      /* avoid gcc warning by using compound statement even if not strictly necessary.  */
-      if (src[(*i)+1] == 'n')
-        {
-          /* requires a newline  */
-          dest[(*j)] = ASCII_nl;
-          (*j) += 1;
-          (*i) += 2;
-        }
-      else if (src[(*i)+1] == 't')
-        {
-          /* avoid dangling else.  */
-          /* requires a tab (yuck) tempted to fake this but I better not..  */
-          dest[(*j)] = ASCII_tab;
-          (*j) += 1;
-          (*i) += 2;
-        }
-      else
-        {
-          /* avoid dangling else.  */
-          /* copy escaped character  */
-          (*i) += 1;
-          dest[(*j)] = src[(*i)];
-          (*j) += 1;
-          (*i) += 1;
-        }
-    }
-}
-
-
-/*
-   Cast - casts a := b
-*/
-
-static void Cast (unsigned char *a, unsigned int _a_high, const unsigned char *b_, unsigned int _b_high)
-{
-  unsigned int i;
-  unsigned char b[_b_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (b, b_, _b_high+1);
-
-  if (_a_high == _b_high)
-    {
-      for (i=0; i<=_a_high; i++)
-        {
-          a[i] = b[i];
-        }
-    }
-  else
-    {
-      FormatError ((const char *) "cast failed", 11);
-    }
-}
-
-
-/*
-   StringFormat1 - converts string, src, into, dest, together with encapsulated
-                   entity, w. It only formats the first %s or %d with n.
-*/
-
-static void StringFormat1 (char *dest, unsigned int _dest_high, const char *src_, unsigned int _src_high, const unsigned char *w_, unsigned int _w_high)
-{
-  typedef struct StringFormat1__T8_a StringFormat1__T8;
-
-  typedef char *StringFormat1__T4;
-
-  struct StringFormat1__T8_a { char array[MaxErrorString+1]; };
-  unsigned int HighSrc;
-  unsigned int HighDest;
-  unsigned int c;
-  unsigned int i;
-  unsigned int j;
-  StringFormat1__T8 str;
-  StringFormat1__T4 p;
-  char src[_src_high+1];
-  unsigned char w[_w_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (src, src_, _src_high+1);
-  memcpy (w, w_, _w_high+1);
-
-  HighSrc = StrLib_StrLen ((const char *) src, _src_high);
-  HighDest = _dest_high;
-  p = NULL;
-  c = 0;
-  i = 0;
-  j = 0;
-  while ((((i < HighSrc) && (src[i] != ASCII_nul)) && (j < HighDest)) && (src[i] != '%'))
-    {
-      if (src[i] == '\\')
-        {
-          HandleEscape ((char *) dest, _dest_high, (const char *) src, _src_high, &i, &j, HighSrc, HighDest);
-        }
-      else
-        {
-          dest[j] = src[i];
-          i += 1;
-          j += 1;
-        }
-    }
-  if ((((i+1) < HighSrc) && (src[i] == '%')) && (j < HighDest))
-    {
-      /* avoid gcc warning by using compound statement even if not strictly necessary.  */
-      if (src[i+1] == 's')
-        {
-          Cast ((unsigned char *) &p, (sizeof (p)-1), (const unsigned char *) w, _w_high);
-          while ((j < HighDest) && ((*p) != ASCII_nul))
-            {
-              dest[j] = (*p);
-              j += 1;
-              p += 1;
-            }
-          if (j < HighDest)
-            {
-              dest[j] = ASCII_nul;
-            }
-          j = StrLib_StrLen ((const char *) dest, _dest_high);
-          i += 2;
-        }
-      else if (src[i+1] == 'd')
-        {
-          /* avoid dangling else.  */
-          dest[j] = ASCII_nul;
-          Cast ((unsigned char *) &c, (sizeof (c)-1), (const unsigned char *) w, _w_high);
-          NumberIO_CardToStr (c, 0, (char *) &str.array[0], MaxErrorString);
-          StrLib_StrConCat ((const char *) dest, _dest_high, (const char *) &str.array[0], MaxErrorString, (char *) dest, _dest_high);
-          j = StrLib_StrLen ((const char *) dest, _dest_high);
-          i += 2;
-        }
-      else
-        {
-          /* avoid dangling else.  */
-          dest[j] = src[i];
-          i += 1;
-          j += 1;
-        }
-    }
-  /* and finish off copying src into dest  */
-  while (((i < HighSrc) && (src[i] != ASCII_nul)) && (j < HighDest))
-    {
-      if (src[i] == '\\')
-        {
-          HandleEscape ((char *) dest, _dest_high, (const char *) src, _src_high, &i, &j, HighSrc, HighDest);
-        }
-      else
-        {
-          dest[j] = src[i];
-          i += 1;
-          j += 1;
-        }
-    }
-  if (j < HighDest)
-    {
-      dest[j] = ASCII_nul;
-    }
-}
-
-
-/*
-   FormatError - provides a orthoganal counterpart to the procedure below.
-*/
-
-static void FormatError (const char *a_, unsigned int _a_high)
-{
-  char a[_a_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (a, a_, _a_high+1);
-
-  FIO_WriteString (FIO_StdErr, (const char *) a, _a_high);
-}
-
-
-/*
-   FormatError1 - generic error procedure taking standard format string
-                  and single parameter.
-*/
-
-static void FormatError1 (const char *a_, unsigned int _a_high, const unsigned char *w_, unsigned int _w_high)
-{
-  typedef struct FormatError1__T9_a FormatError1__T9;
-
-  struct FormatError1__T9_a { char array[MaxErrorString+1]; };
-  FormatError1__T9 s;
-  char a[_a_high+1];
-  unsigned char w[_w_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (a, a_, _a_high+1);
-  memcpy (w, w_, _w_high+1);
-
-  StringFormat1 ((char *) &s.array[0], MaxErrorString, (const char *) a, _a_high, (const unsigned char *) w, _w_high);
-  FormatError ((const char *) &s.array[0], MaxErrorString);
-}
-
-
-/*
-   FormatError2 - generic error procedure taking standard format string
-                  and two parameters.
-*/
-
-static void FormatError2 (const char *a_, unsigned int _a_high, const unsigned char *w1_, unsigned int _w1_high, const unsigned char *w2_, unsigned int _w2_high)
-{
-  typedef struct FormatError2__T10_a FormatError2__T10;
-
-  struct FormatError2__T10_a { char array[MaxErrorString+1]; };
-  FormatError2__T10 s;
-  char a[_a_high+1];
-  unsigned char w1[_w1_high+1];
-  unsigned char w2[_w2_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (a, a_, _a_high+1);
-  memcpy (w1, w1_, _w1_high+1);
-  memcpy (w2, w2_, _w2_high+1);
-
-  StringFormat1 ((char *) &s.array[0], MaxErrorString, (const char *) a, _a_high, (const unsigned char *) w1, _w1_high);
-  FormatError1 ((const char *) &s.array[0], MaxErrorString, (const unsigned char *) w2, _w2_high);
-}
-
-
-/*
-   CheckAccess - checks to see whether a file f has been
-                 opened for read/write.
-*/
-
-static void CheckAccess (FIO_File f, FIO_FileUsage use, unsigned int towrite)
-{
-  FIO_FileDescriptor fd;
-
-  if (f != Error)
-    {
-      /* avoid dangling else.  */
-      fd = static_cast<FIO_FileDescriptor> (Indexing_GetIndice (FileInfo, f));
-      if (fd == NULL)
-        {
-          if (f != FIO_StdErr)
-            {
-              FormatError ((const char *) "this file has probably been closed and not reopened successfully or alternatively never opened\\n", 96);
-            }
-          M2RTS_HALT (-1);
-          __builtin_unreachable ();
-        }
-      else
-        {
-          if ((use == FIO_openedforwrite) && (fd->usage == FIO_openedforread))
-            {
-              FormatError1 ((const char *) "this file (%s) has been opened for reading but is now being written\\n", 69, (const unsigned char *) &fd->name.address, (sizeof (fd->name.address)-1));
-              M2RTS_HALT (-1);
-              __builtin_unreachable ();
-            }
-          else if ((use == FIO_openedforread) && (fd->usage == FIO_openedforwrite))
-            {
-              /* avoid dangling else.  */
-              FormatError1 ((const char *) "this file (%s) has been opened for writing but is now being read\\n", 66, (const unsigned char *) &fd->name.address, (sizeof (fd->name.address)-1));
-              M2RTS_HALT (-1);
-              __builtin_unreachable ();
-            }
-          else if (fd->state == FIO_connectionfailure)
-            {
-              /* avoid dangling else.  */
-              FormatError1 ((const char *) "this file (%s) was not successfully opened\\n", 44, (const unsigned char *) &fd->name.address, (sizeof (fd->name.address)-1));
-              M2RTS_HALT (-1);
-              __builtin_unreachable ();
-            }
-          else if (towrite != fd->output)
-            {
-              /* avoid dangling else.  */
-              if (fd->output)
-                {
-                  FormatError1 ((const char *) "this file (%s) was opened for writing but is now being read\\n", 61, (const unsigned char *) &fd->name.address, (sizeof (fd->name.address)-1));
-                  M2RTS_HALT (-1);
-                  __builtin_unreachable ();
-                }
-              else
-                {
-                  FormatError1 ((const char *) "this file (%s) was opened for reading but is now being written\\n", 64, (const unsigned char *) &fd->name.address, (sizeof (fd->name.address)-1));
-                  M2RTS_HALT (-1);
-                  __builtin_unreachable ();
-                }
-            }
-        }
-    }
-  else
-    {
-      FormatError ((const char *) "this file has not been opened successfully\\n", 44);
-      M2RTS_HALT (-1);
-      __builtin_unreachable ();
-    }
-}
-
-
-/*
-   SetEndOfLine -
-*/
-
-static void SetEndOfLine (FIO_File f, char ch)
-{
-  FIO_FileDescriptor fd;
-
-  CheckAccess (f, FIO_openedforread, FALSE);
-  if (f != Error)
-    {
-      fd = static_cast<FIO_FileDescriptor> (Indexing_GetIndice (FileInfo, f));
-      if (ch == ASCII_nl)
-        {
-          fd->state = FIO_endofline;
-        }
-      else
-        {
-          fd->state = FIO_successful;
-        }
-    }
-}
-
-
-/*
-   BufferedWrite - will write, nBytes, through the buffer.
-                   Similar to WriteNBytes, but this function will always
-                   write into the buffer before copying into memory.
-
-                   Useful when performing small writes.
-*/
-
-static int BufferedWrite (FIO_File f, unsigned int nBytes, void * a)
-{
-  typedef unsigned char *BufferedWrite__T5;
-
-  void * t;
-  int result;
-  int total;
-  int n;
-  BufferedWrite__T5 p;
-  FIO_FileDescriptor fd;
-
-  if (f != Error)
-    {
-      fd = static_cast<FIO_FileDescriptor> (Indexing_GetIndice (FileInfo, f));
-      if (fd != NULL)
-        {
-          total = 0;  /* how many bytes have we read  */
-          if (fd->buffer != NULL)  /* how many bytes have we read  */
-            {
-              /* place into the buffer first  */
-              while (nBytes > 0)
-                {
-                  if (fd->buffer->left > 0)
-                    {
-                      if (nBytes == 1)
-                        {
-                          /* too expensive to call memcpy for 1 character  */
-                          p = static_cast<BufferedWrite__T5> (a);
-                          (*fd->buffer->contents).array[fd->buffer->position] = static_cast<char> ((*p));
-                          fd->buffer->left -= 1;  /* reduce space  */
-                          fd->buffer->position += 1;  /* move onwards n byte  */
-                          total += 1;  /* move onwards n byte  */
-                          return total;
-                        }
-                      else
-                        {
-                          n = Min (fd->buffer->left, nBytes);
-                          t = fd->buffer->address;
-                          t = reinterpret_cast<void *> (reinterpret_cast<char *> (t)+fd->buffer->position);
-                          p = static_cast<BufferedWrite__T5> (libc_memcpy (a, t, static_cast<size_t> ((unsigned int ) (n))));
-                          fd->buffer->left -= n;  /* remove consumed bytes  */
-                          fd->buffer->position += n;  /* move onwards n bytes  */
-                          /* move ready for further writes  */
-                          a = reinterpret_cast<void *> (reinterpret_cast<char *> (a)+n);
-                          nBytes -= n;  /* reduce the amount for future writes  */
-                          total += n;  /* reduce the amount for future writes  */
-                        }
-                    }
-                  else
-                    {
-                      FIO_FlushBuffer (f);
-                      if ((fd->state != FIO_successful) && (fd->state != FIO_endofline))
-                        {
-                          nBytes = 0;
-                        }
-                    }
-                }
-              return total;
-            }
-        }
-    }
-  return -1;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   PreInitialize - preinitialize the file descriptor.
-*/
-
-static void PreInitialize (FIO_File f, const char *fname_, unsigned int _fname_high, FIO_FileStatus state, FIO_FileUsage use, unsigned int towrite, int osfd, unsigned int bufsize)
-{
-  FIO_FileDescriptor fd;
-  FIO_FileDescriptor fe;
-  char fname[_fname_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (fname, fname_, _fname_high+1);
-
-  if ((InitializeFile (f, &fname, StrLib_StrLen ((const char *) fname, _fname_high), state, use, towrite, bufsize)) == f)
-    {
-      fd = static_cast<FIO_FileDescriptor> (Indexing_GetIndice (FileInfo, f));
-      if (f == Error)
-        {
-          fe = static_cast<FIO_FileDescriptor> (Indexing_GetIndice (FileInfo, FIO_StdErr));
-          if (fe == NULL)
-            {
-              M2RTS_HALT (-1);
-              __builtin_unreachable ();
-            }
-          else
-            {
-              fd->unixfd = fe->unixfd;  /* the error channel  */
-            }
-        }
-      else
-        {
-          fd->unixfd = osfd;
-        }
-    }
-  else
-    {
-      M2RTS_HALT (-1);
-      __builtin_unreachable ();
-    }
-}
-
-
-/*
-   Init - initialize the modules, global variables.
-*/
-
-static void Init (void)
-{
-  FileInfo = Indexing_InitIndex (0);
-  Error = 0;
-  PreInitialize (Error, (const char *) "error", 5, FIO_toomanyfilesopen, FIO_unused, FALSE, -1, 0);
-  FIO_StdIn = 1;
-  PreInitialize (FIO_StdIn, (const char *) "<stdin>", 7, FIO_successful, FIO_openedforread, FALSE, 0, MaxBufferLength);
-  FIO_StdOut = 2;
-  PreInitialize (FIO_StdOut, (const char *) "<stdout>", 8, FIO_successful, FIO_openedforwrite, TRUE, 1, MaxBufferLength);
-  FIO_StdErr = 3;
-  PreInitialize (FIO_StdErr, (const char *) "<stderr>", 8, FIO_successful, FIO_openedforwrite, TRUE, 2, MaxBufferLength);
-  if (! (M2RTS_InstallTerminationProcedure ((PROC ) {(PROC_t) FIO_FlushOutErr})))
-    {
-      M2RTS_HALT (-1);
-      __builtin_unreachable ();
-    }
-}
-
-
-/*
-   IsNoError - returns a TRUE if no error has occured on file, f.
-*/
-
-extern "C" unsigned int FIO_IsNoError (FIO_File f)
-{
-  FIO_FileDescriptor fd;
-
-  if (f == Error)
-    {
-      return FALSE;
-    }
-  else
-    {
-      fd = static_cast<FIO_FileDescriptor> (Indexing_GetIndice (FileInfo, f));
-      return (fd != NULL) && (((fd->state == FIO_successful) || (fd->state == FIO_endoffile)) || (fd->state == FIO_endofline));
-    }
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   IsActive - returns TRUE if the file, f, is still active.
-*/
-
-extern "C" unsigned int FIO_IsActive (FIO_File f)
-{
-  if (f == Error)
-    {
-      return FALSE;
-    }
-  else
-    {
-      return (Indexing_GetIndice (FileInfo, f)) != NULL;
-    }
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-extern "C" unsigned int FIO_Exists (const char *fname_, unsigned int _fname_high)
-{
-  char fname[_fname_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (fname, fname_, _fname_high+1);
-
-  /* 
-   The following functions are wrappers for the above.
-  */
-  return FIO_exists (&fname, StrLib_StrLen ((const char *) fname, _fname_high));
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-extern "C" FIO_File FIO_OpenToRead (const char *fname_, unsigned int _fname_high)
-{
-  char fname[_fname_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (fname, fname_, _fname_high+1);
-
-  return FIO_openToRead (&fname, StrLib_StrLen ((const char *) fname, _fname_high));
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-extern "C" FIO_File FIO_OpenToWrite (const char *fname_, unsigned int _fname_high)
-{
-  char fname[_fname_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (fname, fname_, _fname_high+1);
-
-  return FIO_openToWrite (&fname, StrLib_StrLen ((const char *) fname, _fname_high));
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-extern "C" FIO_File FIO_OpenForRandom (const char *fname_, unsigned int _fname_high, unsigned int towrite, unsigned int newfile)
-{
-  char fname[_fname_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (fname, fname_, _fname_high+1);
-
-  return FIO_openForRandom (&fname, StrLib_StrLen ((const char *) fname, _fname_high), towrite, newfile);
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   Close - close a file which has been previously opened using:
-           OpenToRead, OpenToWrite, OpenForRandom.
-           It is correct to close a file which has an error status.
-*/
-
-extern "C" void FIO_Close (FIO_File f)
-{
-  FIO_FileDescriptor fd;
-
-  if (f != Error)
-    {
-      fd = static_cast<FIO_FileDescriptor> (Indexing_GetIndice (FileInfo, f));
-      /* 
-         we allow users to close files which have an error status
-  */
-      if (fd != NULL)
-        {
-          FIO_FlushBuffer (f);
-          if (fd->unixfd >= 0)
-            {
-              if ((libc_close (fd->unixfd)) != 0)
-                {
-                  FormatError1 ((const char *) "failed to close file (%s)\\n", 27, (const unsigned char *) &fd->name.address, (sizeof (fd->name.address)-1));
-                  fd->state = FIO_failed;  /* --fixme-- too late to notify user (unless we return a BOOLEAN)  */
-                }
-            }
-          if (fd->name.address != NULL)
-            {
-              Storage_DEALLOCATE (&fd->name.address, fd->name.size);
-            }
-          if (fd->buffer != NULL)
-            {
-              if (fd->buffer->address != NULL)
-                {
-                  Storage_DEALLOCATE (&fd->buffer->address, fd->buffer->size);
-                }
-              Storage_DEALLOCATE ((void **) &fd->buffer, sizeof (FIO_buf));
-              fd->buffer = NULL;
-            }
-          Storage_DEALLOCATE ((void **) &fd, sizeof (FIO_fds));
-          Indexing_PutIndice (FileInfo, f, NULL);
-        }
-    }
-}
-
-
-/*
-   exists - returns TRUE if a file named, fname exists for reading.
-*/
-
-extern "C" unsigned int FIO_exists (void * fname, unsigned int flength)
-{
-  FIO_File f;
-
-  f = FIO_openToRead (fname, flength);
-  if (FIO_IsNoError (f))
-    {
-      FIO_Close (f);
-      return TRUE;
-    }
-  else
-    {
-      FIO_Close (f);
-      return FALSE;
-    }
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   openToRead - attempts to open a file, fname, for reading and
-                it returns this file.
-                The success of this operation can be checked by
-                calling IsNoError.
-*/
-
-extern "C" FIO_File FIO_openToRead (void * fname, unsigned int flength)
-{
-  FIO_File f;
-
-  f = GetNextFreeDescriptor ();
-  if (f == Error)
-    {
-      SetState (f, FIO_toomanyfilesopen);
-    }
-  else
-    {
-      f = InitializeFile (f, fname, flength, FIO_successful, FIO_openedforread, FALSE, MaxBufferLength);
-      ConnectToUnix (f, FALSE, FALSE);
-    }
-  return f;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   openToWrite - attempts to open a file, fname, for write and
-                 it returns this file.
-                 The success of this operation can be checked by
-                 calling IsNoError.
-*/
-
-extern "C" FIO_File FIO_openToWrite (void * fname, unsigned int flength)
-{
-  FIO_File f;
-
-  f = GetNextFreeDescriptor ();
-  if (f == Error)
-    {
-      SetState (f, FIO_toomanyfilesopen);
-    }
-  else
-    {
-      f = InitializeFile (f, fname, flength, FIO_successful, FIO_openedforwrite, TRUE, MaxBufferLength);
-      ConnectToUnix (f, TRUE, TRUE);
-    }
-  return f;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   openForRandom - attempts to open a file, fname, for random access
-                   read or write and it returns this file.
-                   The success of this operation can be checked by
-                   calling IsNoError.
-                   towrite, determines whether the file should be
-                   opened for writing or reading.
-*/
-
-extern "C" FIO_File FIO_openForRandom (void * fname, unsigned int flength, unsigned int towrite, unsigned int newfile)
-{
-  FIO_File f;
-
-  f = GetNextFreeDescriptor ();
-  if (f == Error)
-    {
-      SetState (f, FIO_toomanyfilesopen);
-    }
-  else
-    {
-      f = InitializeFile (f, fname, flength, FIO_successful, FIO_openedforrandom, towrite, MaxBufferLength);
-      ConnectToUnix (f, towrite, newfile);
-    }
-  return f;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   FlushBuffer - flush contents of file, f.
-*/
-
-extern "C" void FIO_FlushBuffer (FIO_File f)
-{
-  FIO_FileDescriptor fd;
-
-  if (f != Error)
-    {
-      fd = static_cast<FIO_FileDescriptor> (Indexing_GetIndice (FileInfo, f));
-      if (fd != NULL)
-        {
-          if (fd->output && (fd->buffer != NULL))
-            {
-              if ((fd->buffer->position == 0) || ((libc_write (fd->unixfd, fd->buffer->address, static_cast<size_t> (fd->buffer->position))) == ((int ) (fd->buffer->position))))
-                {
-                  fd->abspos += fd->buffer->position;
-                  fd->buffer->bufstart = fd->abspos;
-                  fd->buffer->position = 0;
-                  fd->buffer->filled = 0;
-                  fd->buffer->left = fd->buffer->size;
-                }
-              else
-                {
-                  fd->state = FIO_failed;
-                }
-            }
-        }
-    }
-}
-
-
-/*
-   ReadNBytes - reads nBytes of a file into memory area, dest, returning
-                the number of bytes actually read.
-                This function will consume from the buffer and then
-                perform direct libc reads. It is ideal for large reads.
-*/
-
-extern "C" unsigned int FIO_ReadNBytes (FIO_File f, unsigned int nBytes, void * dest)
-{
-  typedef char *ReadNBytes__T2;
-
-  int n;
-  ReadNBytes__T2 p;
-
-  if (f != Error)
-    {
-      CheckAccess (f, FIO_openedforread, FALSE);
-      n = ReadFromBuffer (f, dest, nBytes);
-      if (n <= 0)
-        {
-          return 0;
-        }
-      else
-        {
-          p = static_cast<ReadNBytes__T2> (dest);
-          p += n-1;
-          SetEndOfLine (f, (*p));
-          return n;
-        }
-    }
-  else
-    {
-      return 0;
-    }
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   ReadAny - reads HIGH(a) bytes into, a. All input
-             is fully buffered, unlike ReadNBytes and thus is more
-             suited to small reads.
-*/
-
-extern "C" void FIO_ReadAny (FIO_File f, unsigned char *a, unsigned int _a_high)
-{
-  CheckAccess (f, FIO_openedforread, FALSE);
-  if ((BufferedRead (f, _a_high, a)) == ((int ) (_a_high)))
-    {
-      SetEndOfLine (f, static_cast<char> (a[_a_high]));
-    }
-}
-
-
-/*
-   WriteNBytes - writes nBytes from memory area src to a file
-                 returning the number of bytes actually written.
-                 This function will flush the buffer and then
-                 write the nBytes using a direct write from libc.
-                 It is ideal for large writes.
-*/
-
-extern "C" unsigned int FIO_WriteNBytes (FIO_File f, unsigned int nBytes, void * src)
-{
-  int total;
-  FIO_FileDescriptor fd;
-
-  CheckAccess (f, FIO_openedforwrite, TRUE);
-  FIO_FlushBuffer (f);
-  if (f != Error)
-    {
-      fd = static_cast<FIO_FileDescriptor> (Indexing_GetIndice (FileInfo, f));
-      if (fd != NULL)
-        {
-          total = static_cast<int> (libc_write (fd->unixfd, src, static_cast<size_t> ((int ) (nBytes))));
-          if (total < 0)
-            {
-              fd->state = FIO_failed;
-              return 0;
-            }
-          else
-            {
-              fd->abspos += (unsigned int ) (total);
-              if (fd->buffer != NULL)
-                {
-                  fd->buffer->bufstart = fd->abspos;
-                }
-              return (unsigned int ) (total);
-            }
-        }
-    }
-  return 0;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   WriteAny - writes HIGH(a) bytes onto, file, f. All output
-              is fully buffered, unlike WriteNBytes and thus is more
-              suited to small writes.
-*/
-
-extern "C" void FIO_WriteAny (FIO_File f, unsigned char *a, unsigned int _a_high)
-{
-  CheckAccess (f, FIO_openedforwrite, TRUE);
-  if ((BufferedWrite (f, _a_high, a)) == ((int ) (_a_high)))
-    {}  /* empty.  */
-}
-
-
-/*
-   WriteChar - writes a single character to file, f.
-*/
-
-extern "C" void FIO_WriteChar (FIO_File f, char ch)
-{
-  CheckAccess (f, FIO_openedforwrite, TRUE);
-  if ((BufferedWrite (f, sizeof (ch), &ch)) == ((int ) (sizeof (ch))))
-    {}  /* empty.  */
-}
-
-
-/*
-   EOF - tests to see whether a file, f, has reached end of file.
-*/
-
-extern "C" unsigned int FIO_EOF (FIO_File f)
-{
-  FIO_FileDescriptor fd;
-
-  CheckAccess (f, FIO_openedforread, FALSE);
-  if (f != Error)
-    {
-      fd = static_cast<FIO_FileDescriptor> (Indexing_GetIndice (FileInfo, f));
-      if (fd != NULL)
-        {
-          return fd->state == FIO_endoffile;
-        }
-    }
-  return TRUE;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   EOLN - tests to see whether a file, f, is upon a newline.
-          It does NOT consume the newline.
-*/
-
-extern "C" unsigned int FIO_EOLN (FIO_File f)
-{
-  char ch;
-  FIO_FileDescriptor fd;
-
-  CheckAccess (f, FIO_openedforread, FALSE);
-  /* 
-      we will read a character and then push it back onto the input stream,
-      having noted the file status, we also reset the status.
-  */
-  if (f != Error)
-    {
-      fd = static_cast<FIO_FileDescriptor> (Indexing_GetIndice (FileInfo, f));
-      if (fd != NULL)
-        {
-          if ((fd->state == FIO_successful) || (fd->state == FIO_endofline))
-            {
-              ch = FIO_ReadChar (f);
-              if ((fd->state == FIO_successful) || (fd->state == FIO_endofline))
-                {
-                  FIO_UnReadChar (f, ch);
-                }
-              return ch == ASCII_nl;
-            }
-        }
-    }
-  return FALSE;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   WasEOLN - tests to see whether a file, f, has just seen a newline.
-*/
-
-extern "C" unsigned int FIO_WasEOLN (FIO_File f)
-{
-  FIO_FileDescriptor fd;
-
-  CheckAccess (f, FIO_openedforread, FALSE);
-  if (f == Error)
-    {
-      return FALSE;
-    }
-  else
-    {
-      fd = static_cast<FIO_FileDescriptor> (Indexing_GetIndice (FileInfo, f));
-      return (fd != NULL) && (fd->state == FIO_endofline);
-    }
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   ReadChar - returns a character read from file f.
-              Sensible to check with IsNoError or EOF after calling
-              this function.
-*/
-
-extern "C" char FIO_ReadChar (FIO_File f)
-{
-  char ch;
-
-  CheckAccess (f, FIO_openedforread, FALSE);
-  if ((BufferedRead (f, sizeof (ch), &ch)) == ((int ) (sizeof (ch))))
-    {
-      SetEndOfLine (f, ch);
-      return ch;
-    }
-  else
-    {
-      return ASCII_nul;
-    }
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   UnReadChar - replaces a character, ch, back into file f.
-                This character must have been read by ReadChar
-                and it does not allow successive calls.  It may
-                only be called if the previous read was successful
-                or end of file was seen.
-                If the state was previously endoffile then it
-                is altered to successful.
-                Otherwise it is left alone.
-*/
-
-extern "C" void FIO_UnReadChar (FIO_File f, char ch)
-{
-  FIO_FileDescriptor fd;
-  unsigned int n;
-  void * a;
-  void * b;
-
-  CheckAccess (f, FIO_openedforread, FALSE);
-  if (f != Error)
-    {
-      fd = static_cast<FIO_FileDescriptor> (Indexing_GetIndice (FileInfo, f));
-      if (((fd->state == FIO_successful) || (fd->state == FIO_endoffile)) || (fd->state == FIO_endofline))
-        {
-          /* avoid dangling else.  */
-          if ((fd->buffer != NULL) && fd->buffer->valid)
-            {
-              /* we assume that a ReadChar has occurred, we will check just in case.  */
-              if (fd->state == FIO_endoffile)
-                {
-                  fd->buffer->position = MaxBufferLength;
-                  fd->buffer->left = 0;
-                  fd->buffer->filled = 0;
-                  fd->state = FIO_successful;
-                }
-              if (fd->buffer->position > 0)
-                {
-                  fd->buffer->position -= 1;
-                  fd->buffer->left += 1;
-                  (*fd->buffer->contents).array[fd->buffer->position] = ch;
-                }
-              else
-                {
-                  /* if possible make room and store ch  */
-                  if (fd->buffer->filled == fd->buffer->size)
-                    {
-                      FormatError1 ((const char *) "performing too many UnReadChar calls on file (%d)\\n", 51, (const unsigned char *) &f, (sizeof (f)-1));
-                    }
-                  else
-                    {
-                      n = fd->buffer->filled-fd->buffer->position;
-                      b = &(*fd->buffer->contents).array[fd->buffer->position];
-                      a = &(*fd->buffer->contents).array[fd->buffer->position+1];
-                      a = libc_memcpy (a, b, static_cast<size_t> (n));
-                      fd->buffer->filled += 1;
-                      (*fd->buffer->contents).array[fd->buffer->position] = ch;
-                    }
-                }
-            }
-        }
-      else
-        {
-          FormatError1 ((const char *) "UnReadChar can only be called if the previous read was successful or end of file, error on file (%d)\\n", 102, (const unsigned char *) &f, (sizeof (f)-1));
-        }
-    }
-}
-
-
-/*
-   WriteLine - writes out a linefeed to file, f.
-*/
-
-extern "C" void FIO_WriteLine (FIO_File f)
-{
-  FIO_WriteChar (f, ASCII_nl);
-}
-
-
-/*
-   WriteString - writes a string to file, f.
-*/
-
-extern "C" void FIO_WriteString (FIO_File f, const char *a_, unsigned int _a_high)
-{
-  unsigned int l;
-  char a[_a_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (a, a_, _a_high+1);
-
-  l = StrLib_StrLen ((const char *) a, _a_high);
-  if ((FIO_WriteNBytes (f, l, &a)) != l)
-    {}  /* empty.  */
-}
-
-
-/*
-   ReadString - reads a string from file, f, into string, a.
-                It terminates the string if HIGH is reached or
-                if a newline is seen or an error occurs.
-*/
-
-extern "C" void FIO_ReadString (FIO_File f, char *a, unsigned int _a_high)
-{
-  unsigned int high;
-  unsigned int i;
-  char ch;
-
-  CheckAccess (f, FIO_openedforread, FALSE);
-  high = _a_high;
-  i = 0;
-  do {
-    ch = FIO_ReadChar (f);
-    if (i <= high)
-      {
-        /* avoid gcc warning by using compound statement even if not strictly necessary.  */
-        if (((ch == ASCII_nl) || (! (FIO_IsNoError (f)))) || (FIO_EOF (f)))
-          {
-            a[i] = ASCII_nul;
-            i += 1;
-          }
-        else
-          {
-            a[i] = ch;
-            i += 1;
-          }
-      }
-  } while (! ((((ch == ASCII_nl) || (i > high)) || (! (FIO_IsNoError (f)))) || (FIO_EOF (f))));
-}
-
-
-/*
-   WriteCardinal - writes a CARDINAL to file, f.
-                   It writes the binary image of the cardinal
-                   to file, f.
-*/
-
-extern "C" void FIO_WriteCardinal (FIO_File f, unsigned int c)
-{
-  FIO_WriteAny (f, (unsigned char *) &c, (sizeof (c)-1));
-}
-
-
-/*
-   ReadCardinal - reads a CARDINAL from file, f.
-                  It reads a binary image of a CARDINAL
-                  from a file, f.
-*/
-
-extern "C" unsigned int FIO_ReadCardinal (FIO_File f)
-{
-  unsigned int c;
-
-  FIO_ReadAny (f, (unsigned char *) &c, (sizeof (c)-1));
-  return c;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   GetUnixFileDescriptor - returns the UNIX file descriptor of a file.
-*/
-
-extern "C" int FIO_GetUnixFileDescriptor (FIO_File f)
-{
-  FIO_FileDescriptor fd;
-
-  if (f != Error)
-    {
-      fd = static_cast<FIO_FileDescriptor> (Indexing_GetIndice (FileInfo, f));
-      if (fd != NULL)
-        {
-          return fd->unixfd;
-        }
-    }
-  FormatError1 ((const char *) "file %d has not been opened or is out of range\\n", 48, (const unsigned char *) &f, (sizeof (f)-1));
-  return -1;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   SetPositionFromBeginning - sets the position from the beginning of the file.
-*/
-
-extern "C" void FIO_SetPositionFromBeginning (FIO_File f, long int pos)
-{
-  long int offset;
-  FIO_FileDescriptor fd;
-
-  if (f != Error)
-    {
-      fd = static_cast<FIO_FileDescriptor> (Indexing_GetIndice (FileInfo, f));
-      if (fd != NULL)
-        {
-          /* always force the lseek, until we are confident that abspos is always correct,
-               basically it needs some hard testing before we should remove the OR TRUE.  */
-          if ((fd->abspos != pos) || TRUE)
-            {
-              FIO_FlushBuffer (f);
-              if (fd->buffer != NULL)
-                {
-                  if (fd->output)
-                    {
-                      fd->buffer->left = fd->buffer->size;
-                    }
-                  else
-                    {
-                      fd->buffer->left = 0;
-                    }
-                  fd->buffer->position = 0;
-                  fd->buffer->filled = 0;
-                }
-              offset = libc_lseek (fd->unixfd, pos, SEEK_SET);
-              if ((offset >= 0) && (pos == offset))
-                {
-                  fd->abspos = pos;
-                }
-              else
-                {
-                  fd->state = FIO_failed;
-                  fd->abspos = 0;
-                }
-              if (fd->buffer != NULL)
-                {
-                  fd->buffer->valid = FALSE;
-                  fd->buffer->bufstart = fd->abspos;
-                }
-            }
-        }
-    }
-}
-
-
-/*
-   SetPositionFromEnd - sets the position from the end of the file.
-*/
-
-extern "C" void FIO_SetPositionFromEnd (FIO_File f, long int pos)
-{
-  long int offset;
-  FIO_FileDescriptor fd;
-
-  if (f != Error)
-    {
-      fd = static_cast<FIO_FileDescriptor> (Indexing_GetIndice (FileInfo, f));
-      if (fd != NULL)
-        {
-          FIO_FlushBuffer (f);
-          if (fd->buffer != NULL)
-            {
-              if (fd->output)
-                {
-                  fd->buffer->left = fd->buffer->size;
-                }
-              else
-                {
-                  fd->buffer->left = 0;
-                }
-              fd->buffer->position = 0;
-              fd->buffer->filled = 0;
-            }
-          offset = libc_lseek (fd->unixfd, pos, SEEK_END);
-          if (offset >= 0)
-            {
-              fd->abspos = offset;
-            }
-          else
-            {
-              fd->state = FIO_failed;
-              fd->abspos = 0;
-              offset = 0;
-            }
-          if (fd->buffer != NULL)
-            {
-              fd->buffer->valid = FALSE;
-              fd->buffer->bufstart = offset;
-            }
-        }
-    }
-}
-
-
-/*
-   FindPosition - returns the current absolute position in file, f.
-*/
-
-extern "C" long int FIO_FindPosition (FIO_File f)
-{
-  FIO_FileDescriptor fd;
-
-  if (f != Error)
-    {
-      fd = static_cast<FIO_FileDescriptor> (Indexing_GetIndice (FileInfo, f));
-      if (fd != NULL)
-        {
-          if ((fd->buffer == NULL) || ! fd->buffer->valid)
-            {
-              return fd->abspos;
-            }
-          else
-            {
-              return fd->buffer->bufstart+((long int ) (fd->buffer->position));
-            }
-        }
-    }
-  return 0;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   GetFileName - assigns, a, with the filename associated with, f.
-*/
-
-extern "C" void FIO_GetFileName (FIO_File f, char *a, unsigned int _a_high)
-{
-  typedef char *GetFileName__T6;
-
-  unsigned int i;
-  GetFileName__T6 p;
-  FIO_FileDescriptor fd;
-
-  if (f != Error)
-    {
-      fd = static_cast<FIO_FileDescriptor> (Indexing_GetIndice (FileInfo, f));
-      if (fd == NULL)
-        {
-          FormatError ((const char *) "this file has probably been closed and not reopened successfully or alternatively never opened\\n", 96);
-          M2RTS_HALT (-1);
-          __builtin_unreachable ();
-        }
-      else
-        {
-          if (fd->name.address == NULL)
-            {
-              StrLib_StrCopy ((const char *) "", 0, (char *) a, _a_high);
-            }
-          else
-            {
-              p = static_cast<GetFileName__T6> (fd->name.address);
-              i = 0;
-              while (((*p) != ASCII_nul) && (i <= _a_high))
-                {
-                  a[i] = (*p);
-                  p += 1;
-                  i += 1;
-                }
-            }
-        }
-    }
-}
-
-
-/*
-   getFileName - returns the address of the filename associated with, f.
-*/
-
-extern "C" void * FIO_getFileName (FIO_File f)
-{
-  FIO_FileDescriptor fd;
-
-  if (f != Error)
-    {
-      fd = static_cast<FIO_FileDescriptor> (Indexing_GetIndice (FileInfo, f));
-      if (fd == NULL)
-        {
-          FormatError ((const char *) "this file has probably been closed and not reopened successfully or alternatively never opened\\n", 96);
-          M2RTS_HALT (-1);
-          __builtin_unreachable ();
-        }
-      else
-        {
-          return fd->name.address;
-        }
-    }
-  return NULL;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   getFileNameLength - returns the number of characters associated with filename, f.
-*/
-
-extern "C" unsigned int FIO_getFileNameLength (FIO_File f)
-{
-  FIO_FileDescriptor fd;
-
-  if (f != Error)
-    {
-      fd = static_cast<FIO_FileDescriptor> (Indexing_GetIndice (FileInfo, f));
-      if (fd == NULL)
-        {
-          FormatError ((const char *) "this file has probably been closed and not reopened successfully or alternatively never opened\\n", 96);
-          M2RTS_HALT (-1);
-          __builtin_unreachable ();
-        }
-      else
-        {
-          return fd->name.size;
-        }
-    }
-  return 0;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   FlushOutErr - flushes, StdOut, and, StdErr.
-                 It is also called when the application calls M2RTS.Terminate.
-                 (which is automatically placed in program modules by the GM2
-                 scaffold).
-*/
-
-extern "C" void FIO_FlushOutErr (void)
-{
-  if (FIO_IsNoError (FIO_StdOut))
-    {
-      FIO_FlushBuffer (FIO_StdOut);
-    }
-  if (FIO_IsNoError (FIO_StdErr))
-    {
-      FIO_FlushBuffer (FIO_StdErr);
-    }
-}
-
-extern "C" void _M2_FIO_init (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-  Init ();
-}
-
-extern "C" void _M2_FIO_fini (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-  FIO_FlushOutErr ();
-}
diff --git a/gcc/m2/mc-boot/GFormatStrings.c b/gcc/m2/mc-boot/GFormatStrings.c
deleted file mode 100644
index 78e7a5a559c..00000000000
--- a/gcc/m2/mc-boot/GFormatStrings.c
+++ /dev/null
@@ -1,845 +0,0 @@
-/* do not edit automatically generated by mc from FormatStrings.  */
-/* FormatStrings.mod provides a pseudo printf capability.
-
-Copyright (C) 2005-2023 Free Software Foundation, Inc.
-Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>.
-
-This file is part of GNU Modula-2.
-
-GNU Modula-2 is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
-
-GNU Modula-2 is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-General Public License for more details.
-
-Under Section 7 of GPL version 3, you are granted additional
-permissions described in the GCC Runtime Library Exception, version
-3.1, as published by the Free Software Foundation.
-
-You should have received a copy of the GNU General Public License and
-a copy of the GCC Runtime Library Exception along with this program;
-see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
-<http://www.gnu.org/licenses/>.  */
-
-#include "config.h"
-#include "system.h"
-#   if !defined (PROC_D)
-#      define PROC_D
-       typedef void (*PROC_t) (void);
-       typedef struct { PROC_t proc; } PROC;
-#   endif
-
-#   if !defined (TRUE)
-#      define TRUE (1==1)
-#   endif
-
-#   if !defined (FALSE)
-#      define FALSE (1==0)
-#   endif
-
-#if defined(__cplusplus)
-#   undef NULL
-#   define NULL 0
-#endif
-#define _FormatStrings_H
-#define _FormatStrings_C
-
-#   include "GDynamicStrings.h"
-#   include "GStringConvert.h"
-#   include "GSYSTEM.h"
-#   include "GASCII.h"
-#   include "GM2RTS.h"
-
-
-/*
-   Sprintf0 - returns a String containing, s, after it has had its
-              escape sequences translated.
-*/
-
-extern "C" DynamicStrings_String FormatStrings_Sprintf0 (DynamicStrings_String fmt);
-
-/*
-   Sprintf1 - returns a String containing, s, together with encapsulated
-              entity, w. It only formats the first %s or %d with n.
-*/
-
-extern "C" DynamicStrings_String FormatStrings_Sprintf1 (DynamicStrings_String fmt, const unsigned char *w_, unsigned int _w_high);
-
-/*
-   Sprintf2 - returns a string, s, which has been formatted.
-*/
-
-extern "C" DynamicStrings_String FormatStrings_Sprintf2 (DynamicStrings_String fmt, const unsigned char *w1_, unsigned int _w1_high, const unsigned char *w2_, unsigned int _w2_high);
-
-/*
-   Sprintf3 - returns a string, s, which has been formatted.
-*/
-
-extern "C" DynamicStrings_String FormatStrings_Sprintf3 (DynamicStrings_String fmt, const unsigned char *w1_, unsigned int _w1_high, const unsigned char *w2_, unsigned int _w2_high, const unsigned char *w3_, unsigned int _w3_high);
-
-/*
-   Sprintf4 - returns a string, s, which has been formatted.
-*/
-
-extern "C" DynamicStrings_String FormatStrings_Sprintf4 (DynamicStrings_String fmt, const unsigned char *w1_, unsigned int _w1_high, const unsigned char *w2_, unsigned int _w2_high, const unsigned char *w3_, unsigned int _w3_high, const unsigned char *w4_, unsigned int _w4_high);
-
-/*
-   HandleEscape - translates \a, \b, \e, \f, 
-, \r, \x[hex] \[octal] into
-                  their respective ascii codes.  It also converts \[any] into
-                  a single [any] character.
-*/
-
-extern "C" DynamicStrings_String FormatStrings_HandleEscape (DynamicStrings_String s);
-
-/*
-   doDSdbEnter -
-*/
-
-static void doDSdbEnter (void);
-
-/*
-   doDSdbExit -
-*/
-
-static void doDSdbExit (DynamicStrings_String s);
-
-/*
-   DSdbEnter -
-*/
-
-static void DSdbEnter (void);
-
-/*
-   DSdbExit -
-*/
-
-static void DSdbExit (DynamicStrings_String s);
-
-/*
-   IsDigit - returns TRUE if ch lies in the range: 0..9
-*/
-
-static unsigned int IsDigit (char ch);
-
-/*
-   Cast - casts a := b
-*/
-
-static void Cast (unsigned char *a, unsigned int _a_high, const unsigned char *b_, unsigned int _b_high);
-
-/*
-   isHex -
-*/
-
-static unsigned int isHex (char ch);
-
-/*
-   toHex -
-*/
-
-static unsigned int toHex (char ch);
-
-/*
-   toOct -
-*/
-
-static unsigned int toOct (char ch);
-
-/*
-   isOct -
-*/
-
-static unsigned int isOct (char ch);
-
-/*
-   FormatString - returns a String containing, s, together with encapsulated
-                  entity, w. It only formats the first %s or %d or %u with n.
-                  A new string is returned.
-*/
-
-static DynamicStrings_String FormatString (DynamicStrings_String fmt, int *startpos, DynamicStrings_String in, const unsigned char *w_, unsigned int _w_high);
-
-/*
-   FormatString - returns a String containing, s, together with encapsulated
-                  entity, w. It only formats the first %s or %d or %u with n.
-                  A new string is returned.
-*/
-
-static DynamicStrings_String PerformFormatString (DynamicStrings_String fmt, int *startpos, DynamicStrings_String in, const unsigned char *w_, unsigned int _w_high);
-
-/*
-   Copy - copies, fmt[start:end] -> in and returns in.  Providing that start >= 0.
-*/
-
-static DynamicStrings_String Copy (DynamicStrings_String fmt, DynamicStrings_String in, int start, int end);
-
-/*
-   HandlePercent - pre-condition:  s, is a string.
-                   Post-condition:  a new string is returned which is a copy of,
-                   s, except %% is transformed into %.
-*/
-
-static DynamicStrings_String HandlePercent (DynamicStrings_String fmt, DynamicStrings_String s, int startpos);
-
-
-/*
-   doDSdbEnter -
-*/
-
-static void doDSdbEnter (void)
-{
-  DynamicStrings_PushAllocation ();
-}
-
-
-/*
-   doDSdbExit -
-*/
-
-static void doDSdbExit (DynamicStrings_String s)
-{
-  s = DynamicStrings_PopAllocationExemption (TRUE, s);
-}
-
-
-/*
-   DSdbEnter -
-*/
-
-static void DSdbEnter (void)
-{
-}
-
-
-/*
-   DSdbExit -
-*/
-
-static void DSdbExit (DynamicStrings_String s)
-{
-}
-
-
-/*
-   IsDigit - returns TRUE if ch lies in the range: 0..9
-*/
-
-static unsigned int IsDigit (char ch)
-{
-  return (ch >= '0') && (ch <= '9');
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   Cast - casts a := b
-*/
-
-static void Cast (unsigned char *a, unsigned int _a_high, const unsigned char *b_, unsigned int _b_high)
-{
-  unsigned int i;
-  unsigned char b[_b_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (b, b_, _b_high+1);
-
-  if (_a_high == _b_high)
-    {
-      for (i=0; i<=_a_high; i++)
-        {
-          a[i] = b[i];
-        }
-    }
-  else
-    {
-      M2RTS_HALT (-1);
-      __builtin_unreachable ();
-    }
-}
-
-
-/*
-   isHex -
-*/
-
-static unsigned int isHex (char ch)
-{
-  return (((ch >= '0') && (ch <= '9')) || ((ch >= 'A') && (ch <= 'F'))) || ((ch >= 'a') && (ch <= 'f'));
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   toHex -
-*/
-
-static unsigned int toHex (char ch)
-{
-  if ((ch >= '0') && (ch <= '9'))
-    {
-      return ((unsigned int) (ch))- ((unsigned int) ('0'));
-    }
-  else if ((ch >= 'A') && (ch <= 'F'))
-    {
-      /* avoid dangling else.  */
-      return ( ((unsigned int) (ch))- ((unsigned int) ('A')))+10;
-    }
-  else
-    {
-      /* avoid dangling else.  */
-      return ( ((unsigned int) (ch))- ((unsigned int) ('a')))+10;
-    }
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   toOct -
-*/
-
-static unsigned int toOct (char ch)
-{
-  return ((unsigned int) (ch))- ((unsigned int) ('0'));
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   isOct -
-*/
-
-static unsigned int isOct (char ch)
-{
-  return (ch >= '0') && (ch <= '8');
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   FormatString - returns a String containing, s, together with encapsulated
-                  entity, w. It only formats the first %s or %d or %u with n.
-                  A new string is returned.
-*/
-
-static DynamicStrings_String FormatString (DynamicStrings_String fmt, int *startpos, DynamicStrings_String in, const unsigned char *w_, unsigned int _w_high)
-{
-  DynamicStrings_String s;
-  unsigned char w[_w_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (w, w_, _w_high+1);
-
-  DSdbEnter ();
-  if ((*startpos) >= 0)
-    {
-      s = PerformFormatString (fmt, startpos, in, (const unsigned char *) w, _w_high);
-    }
-  else
-    {
-      s = DynamicStrings_Dup (in);
-    }
-  DSdbExit (s);
-  return s;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   FormatString - returns a String containing, s, together with encapsulated
-                  entity, w. It only formats the first %s or %d or %u with n.
-                  A new string is returned.
-*/
-
-static DynamicStrings_String PerformFormatString (DynamicStrings_String fmt, int *startpos, DynamicStrings_String in, const unsigned char *w_, unsigned int _w_high)
-{
-  unsigned int left;
-  unsigned int u;
-  int c;
-  int width;
-  int nextperc;
-  int afterperc;
-  int endpos;
-  char leader;
-  char ch;
-  char ch2;
-  DynamicStrings_String p;
-  unsigned char w[_w_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (w, w_, _w_high+1);
-
-  while ((*startpos) >= 0)
-    {
-      nextperc = DynamicStrings_Index (fmt, '%', static_cast<unsigned int> ((*startpos)));
-      afterperc = nextperc;
-      if (nextperc >= 0)
-        {
-          afterperc += 1;
-          if ((DynamicStrings_char (fmt, afterperc)) == '-')
-            {
-              left = TRUE;
-              afterperc += 1;
-            }
-          else
-            {
-              left = FALSE;
-            }
-          ch = DynamicStrings_char (fmt, afterperc);
-          if (ch == '0')
-            {
-              leader = '0';
-            }
-          else
-            {
-              leader = ' ';
-            }
-          width = 0;
-          while (IsDigit (ch))
-            {
-              width = (width*10)+((int ) ( ((unsigned int) (ch))- ((unsigned int) ('0'))));
-              afterperc += 1;
-              ch = DynamicStrings_char (fmt, afterperc);
-            }
-          if ((ch == 'c') || (ch == 's'))
-            {
-              afterperc += 1;
-              if (ch == 'c')
-                {
-                  ch2 = static_cast<char> (w[0]);
-                  p = DynamicStrings_ConCatChar (DynamicStrings_InitString ((const char *) "", 0), ch2);
-                }
-              else
-                {
-                  Cast ((unsigned char *) &p, (sizeof (p)-1), (const unsigned char *) w, _w_high);
-                  p = DynamicStrings_Dup (p);
-                }
-              if ((width > 0) && (((int ) (DynamicStrings_Length (p))) < width))
-                {
-                  /* avoid gcc warning by using compound statement even if not strictly necessary.  */
-                  if (left)
-                    {
-                      /* place trailing spaces after, p.  */
-                      p = DynamicStrings_ConCat (p, DynamicStrings_Mark (DynamicStrings_Mult (DynamicStrings_Mark (DynamicStrings_InitString ((const char *) " ", 1)), static_cast<unsigned int> (width-((int ) (DynamicStrings_Length (p)))))));
-                    }
-                  else
-                    {
-                      /* padd string, p, with leading spaces.  */
-                      p = DynamicStrings_ConCat (DynamicStrings_Mult (DynamicStrings_Mark (DynamicStrings_InitString ((const char *) " ", 1)), static_cast<unsigned int> (width-((int ) (DynamicStrings_Length (p))))), DynamicStrings_Mark (p));
-                    }
-                }
-              /* include string, p, into, in.  */
-              if (nextperc > 0)
-                {
-                  in = DynamicStrings_ConCat (in, DynamicStrings_Slice (fmt, (*startpos), nextperc));
-                }
-              in = DynamicStrings_ConCat (in, p);
-              (*startpos) = afterperc;
-              DSdbExit (static_cast<DynamicStrings_String> (NULL));
-              return in;
-            }
-          else if (ch == 'd')
-            {
-              /* avoid dangling else.  */
-              afterperc += 1;
-              Cast ((unsigned char *) &c, (sizeof (c)-1), (const unsigned char *) w, _w_high);
-              in = Copy (fmt, in, (*startpos), nextperc);
-              in = DynamicStrings_ConCat (in, StringConvert_IntegerToString (c, static_cast<unsigned int> (width), leader, FALSE, 10, FALSE));
-              (*startpos) = afterperc;
-              DSdbExit (static_cast<DynamicStrings_String> (NULL));
-              return in;
-            }
-          else if (ch == 'x')
-            {
-              /* avoid dangling else.  */
-              afterperc += 1;
-              Cast ((unsigned char *) &u, (sizeof (u)-1), (const unsigned char *) w, _w_high);
-              in = DynamicStrings_ConCat (in, DynamicStrings_Slice (fmt, (*startpos), nextperc));
-              in = DynamicStrings_ConCat (in, StringConvert_CardinalToString (u, static_cast<unsigned int> (width), leader, 16, TRUE));
-              (*startpos) = afterperc;
-              DSdbExit (static_cast<DynamicStrings_String> (NULL));
-              return in;
-            }
-          else if (ch == 'u')
-            {
-              /* avoid dangling else.  */
-              afterperc += 1;
-              Cast ((unsigned char *) &u, (sizeof (u)-1), (const unsigned char *) w, _w_high);
-              in = DynamicStrings_ConCat (in, DynamicStrings_Slice (fmt, (*startpos), nextperc));
-              in = DynamicStrings_ConCat (in, StringConvert_CardinalToString (u, static_cast<unsigned int> (width), leader, 10, FALSE));
-              (*startpos) = afterperc;
-              DSdbExit (static_cast<DynamicStrings_String> (NULL));
-              return in;
-            }
-          else
-            {
-              /* avoid dangling else.  */
-              afterperc += 1;
-              /* copy format string.  */
-              if (nextperc > 0)
-                {
-                  in = DynamicStrings_ConCat (in, DynamicStrings_Slice (fmt, (*startpos), nextperc));
-                }
-              /* and the character after the %.  */
-              in = DynamicStrings_ConCat (in, DynamicStrings_Mark (DynamicStrings_InitStringChar (ch)));
-            }
-          (*startpos) = afterperc;
-        }
-      else
-        {
-          /* nothing to do.  */
-          DSdbExit (static_cast<DynamicStrings_String> (NULL));
-          return in;
-        }
-    }
-  DSdbExit (static_cast<DynamicStrings_String> (NULL));
-  return in;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   Copy - copies, fmt[start:end] -> in and returns in.  Providing that start >= 0.
-*/
-
-static DynamicStrings_String Copy (DynamicStrings_String fmt, DynamicStrings_String in, int start, int end)
-{
-  if (start >= 0)
-    {
-      /* avoid gcc warning by using compound statement even if not strictly necessary.  */
-      if (end > 0)
-        {
-          in = DynamicStrings_ConCat (in, DynamicStrings_Mark (DynamicStrings_Slice (fmt, start, end)));
-        }
-      else if (end < 0)
-        {
-          /* avoid dangling else.  */
-          in = DynamicStrings_ConCat (in, DynamicStrings_Mark (DynamicStrings_Slice (fmt, start, 0)));
-        }
-    }
-  return in;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   HandlePercent - pre-condition:  s, is a string.
-                   Post-condition:  a new string is returned which is a copy of,
-                   s, except %% is transformed into %.
-*/
-
-static DynamicStrings_String HandlePercent (DynamicStrings_String fmt, DynamicStrings_String s, int startpos)
-{
-  int prevpos;
-  DynamicStrings_String result;
-
-  if ((startpos == ((int ) (DynamicStrings_Length (fmt)))) || (startpos < 0))
-    {
-      return s;
-    }
-  else
-    {
-      prevpos = startpos;
-      while ((startpos >= 0) && (prevpos < ((int ) (DynamicStrings_Length (fmt)))))
-        {
-          startpos = DynamicStrings_Index (fmt, '%', static_cast<unsigned int> (startpos));
-          if (startpos >= prevpos)
-            {
-              if (startpos > 0)
-                {
-                  s = DynamicStrings_ConCat (s, DynamicStrings_Mark (DynamicStrings_Slice (fmt, prevpos, startpos)));
-                }
-              startpos += 1;
-              if ((DynamicStrings_char (fmt, startpos)) == '%')
-                {
-                  s = DynamicStrings_ConCatChar (s, '%');
-                  startpos += 1;
-                }
-              prevpos = startpos;
-            }
-        }
-      if (prevpos < ((int ) (DynamicStrings_Length (fmt))))
-        {
-          s = DynamicStrings_ConCat (s, DynamicStrings_Mark (DynamicStrings_Slice (fmt, prevpos, 0)));
-        }
-      return s;
-    }
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   Sprintf0 - returns a String containing, s, after it has had its
-              escape sequences translated.
-*/
-
-extern "C" DynamicStrings_String FormatStrings_Sprintf0 (DynamicStrings_String fmt)
-{
-  DynamicStrings_String s;
-
-  DSdbEnter ();
-  fmt = FormatStrings_HandleEscape (fmt);
-  s = HandlePercent (fmt, DynamicStrings_InitString ((const char *) "", 0), 0);
-  DSdbExit (s);
-  return s;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   Sprintf1 - returns a String containing, s, together with encapsulated
-              entity, w. It only formats the first %s or %d with n.
-*/
-
-extern "C" DynamicStrings_String FormatStrings_Sprintf1 (DynamicStrings_String fmt, const unsigned char *w_, unsigned int _w_high)
-{
-  int i;
-  DynamicStrings_String s;
-  unsigned char w[_w_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (w, w_, _w_high+1);
-
-  DSdbEnter ();
-  fmt = FormatStrings_HandleEscape (fmt);
-  i = 0;
-  s = FormatString (fmt, &i, DynamicStrings_InitString ((const char *) "", 0), (const unsigned char *) w, _w_high);
-  s = HandlePercent (fmt, s, i);
-  DSdbExit (s);
-  return s;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   Sprintf2 - returns a string, s, which has been formatted.
-*/
-
-extern "C" DynamicStrings_String FormatStrings_Sprintf2 (DynamicStrings_String fmt, const unsigned char *w1_, unsigned int _w1_high, const unsigned char *w2_, unsigned int _w2_high)
-{
-  int i;
-  DynamicStrings_String s;
-  unsigned char w1[_w1_high+1];
-  unsigned char w2[_w2_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (w1, w1_, _w1_high+1);
-  memcpy (w2, w2_, _w2_high+1);
-
-  DSdbEnter ();
-  fmt = FormatStrings_HandleEscape (fmt);
-  i = 0;
-  s = FormatString (fmt, &i, DynamicStrings_InitString ((const char *) "", 0), (const unsigned char *) w1, _w1_high);
-  s = FormatString (fmt, &i, s, (const unsigned char *) w2, _w2_high);
-  s = HandlePercent (fmt, s, i);
-  DSdbExit (s);
-  return s;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   Sprintf3 - returns a string, s, which has been formatted.
-*/
-
-extern "C" DynamicStrings_String FormatStrings_Sprintf3 (DynamicStrings_String fmt, const unsigned char *w1_, unsigned int _w1_high, const unsigned char *w2_, unsigned int _w2_high, const unsigned char *w3_, unsigned int _w3_high)
-{
-  int i;
-  DynamicStrings_String s;
-  unsigned char w1[_w1_high+1];
-  unsigned char w2[_w2_high+1];
-  unsigned char w3[_w3_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (w1, w1_, _w1_high+1);
-  memcpy (w2, w2_, _w2_high+1);
-  memcpy (w3, w3_, _w3_high+1);
-
-  DSdbEnter ();
-  fmt = FormatStrings_HandleEscape (fmt);
-  i = 0;
-  s = FormatString (fmt, &i, DynamicStrings_InitString ((const char *) "", 0), (const unsigned char *) w1, _w1_high);
-  s = FormatString (fmt, &i, s, (const unsigned char *) w2, _w2_high);
-  s = FormatString (fmt, &i, s, (const unsigned char *) w3, _w3_high);
-  s = HandlePercent (fmt, s, i);
-  DSdbExit (s);
-  return s;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   Sprintf4 - returns a string, s, which has been formatted.
-*/
-
-extern "C" DynamicStrings_String FormatStrings_Sprintf4 (DynamicStrings_String fmt, const unsigned char *w1_, unsigned int _w1_high, const unsigned char *w2_, unsigned int _w2_high, const unsigned char *w3_, unsigned int _w3_high, const unsigned char *w4_, unsigned int _w4_high)
-{
-  int i;
-  DynamicStrings_String s;
-  unsigned char w1[_w1_high+1];
-  unsigned char w2[_w2_high+1];
-  unsigned char w3[_w3_high+1];
-  unsigned char w4[_w4_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (w1, w1_, _w1_high+1);
-  memcpy (w2, w2_, _w2_high+1);
-  memcpy (w3, w3_, _w3_high+1);
-  memcpy (w4, w4_, _w4_high+1);
-
-  DSdbEnter ();
-  fmt = FormatStrings_HandleEscape (fmt);
-  i = 0;
-  s = FormatString (fmt, &i, DynamicStrings_InitString ((const char *) "", 0), (const unsigned char *) w1, _w1_high);
-  s = FormatString (fmt, &i, s, (const unsigned char *) w2, _w2_high);
-  s = FormatString (fmt, &i, s, (const unsigned char *) w3, _w3_high);
-  s = FormatString (fmt, &i, s, (const unsigned char *) w4, _w4_high);
-  s = HandlePercent (fmt, s, i);
-  DSdbExit (s);
-  return s;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   HandleEscape - translates \a, \b, \e, \f, 
-, \r, \x[hex] \[octal] into
-                  their respective ascii codes.  It also converts \[any] into
-                  a single [any] character.
-*/
-
-extern "C" DynamicStrings_String FormatStrings_HandleEscape (DynamicStrings_String s)
-{
-  DynamicStrings_String d;
-  int i;
-  int j;
-  char ch;
-  unsigned char b;
-
-  DSdbEnter ();
-  d = DynamicStrings_InitString ((const char *) "", 0);
-  i = DynamicStrings_Index (s, '\\', 0);
-  j = 0;
-  while (i >= 0)
-    {
-      if (i > 0)
-        {
-          /* initially i might be zero which means the end of the string, which is not what we want.  */
-          d = DynamicStrings_ConCat (d, DynamicStrings_Slice (s, j, i));
-        }
-      ch = DynamicStrings_char (s, i+1);
-      if (ch == 'a')
-        {
-          /* requires a bell.  */
-          d = DynamicStrings_ConCat (d, DynamicStrings_Mark (DynamicStrings_InitStringChar (ASCII_bel)));
-        }
-      else if (ch == 'b')
-        {
-          /* avoid dangling else.  */
-          /* requires a backspace.  */
-          d = DynamicStrings_ConCat (d, DynamicStrings_Mark (DynamicStrings_InitStringChar (ASCII_bs)));
-        }
-      else if (ch == 'e')
-        {
-          /* avoid dangling else.  */
-          /* requires a escape.  */
-          d = DynamicStrings_ConCat (d, DynamicStrings_Mark (DynamicStrings_InitStringChar (ASCII_esc)));
-        }
-      else if (ch == 'f')
-        {
-          /* avoid dangling else.  */
-          /* requires a formfeed.  */
-          d = DynamicStrings_ConCat (d, DynamicStrings_Mark (DynamicStrings_InitStringChar (ASCII_ff)));
-        }
-      else if (ch == 'n')
-        {
-          /* avoid dangling else.  */
-          /* requires a newline.  */
-          d = DynamicStrings_ConCat (d, DynamicStrings_Mark (DynamicStrings_InitStringChar (ASCII_nl)));
-        }
-      else if (ch == 'r')
-        {
-          /* avoid dangling else.  */
-          /* requires a carriage return.  */
-          d = DynamicStrings_ConCat (d, DynamicStrings_Mark (DynamicStrings_InitStringChar (ASCII_cr)));
-        }
-      else if (ch == 't')
-        {
-          /* avoid dangling else.  */
-          /* requires a tab.  */
-          d = DynamicStrings_ConCat (d, DynamicStrings_Mark (DynamicStrings_InitStringChar (ASCII_tab)));
-        }
-      else if (ch == 'x')
-        {
-          /* avoid dangling else.  */
-          i += 1;
-          if (isHex (DynamicStrings_char (s, i+1)))
-            {
-              b = (unsigned char ) (toHex (DynamicStrings_char (s, i+1)));
-              i += 1;
-              if (isHex (DynamicStrings_char (s, i+1)))
-                {
-                  b = (unsigned char ) ((((unsigned int ) (b))*0x010)+(toHex (DynamicStrings_char (s, i+1))));
-                  d = DynamicStrings_ConCat (d, DynamicStrings_Mark (DynamicStrings_InitStringChar ((char ) (b))));
-                }
-            }
-        }
-      else if (isOct (ch))
-        {
-          /* avoid dangling else.  */
-          b = (unsigned char ) (toOct (ch));
-          i += 1;
-          if (isOct (DynamicStrings_char (s, i+1)))
-            {
-              b = (unsigned char ) ((((unsigned int ) (b))*8)+(toOct (DynamicStrings_char (s, i+1))));
-              i += 1;
-              if (isOct (DynamicStrings_char (s, i+1)))
-                {
-                  b = (unsigned char ) ((((unsigned int ) (b))*8)+(toOct (DynamicStrings_char (s, i+1))));
-                }
-            }
-          d = DynamicStrings_ConCat (d, DynamicStrings_Mark (DynamicStrings_InitStringChar ((char ) (b))));
-        }
-      else
-        {
-          /* avoid dangling else.  */
-          /* copy escaped character.  */
-          d = DynamicStrings_ConCat (d, DynamicStrings_Mark (DynamicStrings_InitStringChar (ch)));
-        }
-      i += 2;
-      j = i;
-      i = DynamicStrings_Index (s, '\\', (unsigned int ) (i));
-    }
-  /* s := Assign(s, Mark(ConCat(d, Mark(Slice(s, j, 0))))) ;    dont Mark(s) in the Slice as we Assign contents  */
-  s = DynamicStrings_ConCat (d, DynamicStrings_Mark (DynamicStrings_Slice (DynamicStrings_Mark (s), j, 0)));
-  DSdbExit (s);
-  return s;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-extern "C" void _M2_FormatStrings_init (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-}
-
-extern "C" void _M2_FormatStrings_fini (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-}
diff --git a/gcc/m2/mc-boot/GFpuIO.c b/gcc/m2/mc-boot/GFpuIO.c
deleted file mode 100644
index 205c27b811e..00000000000
--- a/gcc/m2/mc-boot/GFpuIO.c
+++ /dev/null
@@ -1,336 +0,0 @@
-/* do not edit automatically generated by mc from FpuIO.  */
-/* FpuIO.mod implements a fixed format input/output for REAL/LONGREAL.
-
-Copyright (C) 2001-2023 Free Software Foundation, Inc.
-Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>.
-
-This file is part of GNU Modula-2.
-
-GNU Modula-2 is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
-
-GNU Modula-2 is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-General Public License for more details.
-
-Under Section 7 of GPL version 3, you are granted additional
-permissions described in the GCC Runtime Library Exception, version
-3.1, as published by the Free Software Foundation.
-
-You should have received a copy of the GNU General Public License and
-a copy of the GCC Runtime Library Exception along with this program;
-see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
-<http://www.gnu.org/licenses/>.  */
-
-#include "config.h"
-#include "system.h"
-#   if !defined (PROC_D)
-#      define PROC_D
-       typedef void (*PROC_t) (void);
-       typedef struct { PROC_t proc; } PROC;
-#   endif
-
-#   if !defined (TRUE)
-#      define TRUE (1==1)
-#   endif
-
-#   if !defined (FALSE)
-#      define FALSE (1==0)
-#   endif
-
-#define _FpuIO_H
-#define _FpuIO_C
-
-#   include "GStrIO.h"
-#   include "GStrLib.h"
-#   include "GASCII.h"
-#   include "GDynamicStrings.h"
-#   include "GStringConvert.h"
-
-#   define MaxLineLength 100
-extern "C" void FpuIO_ReadReal (double *x);
-
-/*
-   WriteReal - converts a REAL number, x, which has a, TotalWidth, and
-               FractionWidth into, string, a.
-*/
-
-extern "C" void FpuIO_WriteReal (double x, unsigned int TotalWidth, unsigned int FractionWidth);
-
-/*
-   WriteReal - converts a REAL number, x, which has a, TotalWidth, and
-               FractionWidth into, string, a.
-*/
-
-extern "C" void FpuIO_StrToReal (const char *a_, unsigned int _a_high, double *x);
-
-/*
-   RealToStr - converts a LONGREAL number, Real, which has, TotalWidth, and
-               FractionWidth into a string.
-*/
-
-extern "C" void FpuIO_RealToStr (double x, unsigned int TotalWidth, unsigned int FractionWidth, char *a, unsigned int _a_high);
-extern "C" void FpuIO_ReadLongReal (long double *x);
-
-/*
-   WriteLongReal - converts a LONGREAL number, x, which has a, TotalWidth, and
-                   FractionWidth into a string.
-*/
-
-extern "C" void FpuIO_WriteLongReal (long double x, unsigned int TotalWidth, unsigned int FractionWidth);
-
-/*
-   WriteLongReal - converts a LONGREAL number, x, which has a, TotalWidth, and
-                   FractionWidth into a string.
-*/
-
-extern "C" void FpuIO_StrToLongReal (const char *a_, unsigned int _a_high, long double *x);
-
-/*
-   LongRealToStr - converts a LONGREAL number, Real, which has, TotalWidth, and
-                   FractionWidth into a string.
-*/
-
-extern "C" void FpuIO_LongRealToStr (long double x, unsigned int TotalWidth, unsigned int FractionWidth, char *a, unsigned int _a_high);
-
-/*
-   LongRealToStr - converts a LONGREAL number, Real, which has, TotalWidth, and
-                   FractionWidth into a string.
-*/
-
-extern "C" void FpuIO_ReadLongInt (long int *x);
-
-/*
-   LongRealToStr - converts a LONGREAL number, Real, which has, TotalWidth, and
-                   FractionWidth into a string.
-*/
-
-extern "C" void FpuIO_WriteLongInt (long int x, unsigned int n);
-
-/*
-   LongRealToStr - converts a LONGREAL number, Real, which has, TotalWidth, and
-                   FractionWidth into a string.
-*/
-
-extern "C" void FpuIO_StrToLongInt (const char *a_, unsigned int _a_high, long int *x);
-
-/*
-   LongRealToStr - converts a LONGREAL number, Real, which has, TotalWidth, and
-                   FractionWidth into a string.
-*/
-
-extern "C" void FpuIO_LongIntToStr (long int x, unsigned int n, char *a, unsigned int _a_high);
-
-extern "C" void FpuIO_ReadReal (double *x)
-{
-  typedef struct ReadReal__T1_a ReadReal__T1;
-
-  struct ReadReal__T1_a { char array[MaxLineLength+1]; };
-  ReadReal__T1 a;
-
-  /* 
-#undef GM2_DEBUG_FPUIO
-if defined(GM2_DEBUG_FPUIO)
-#  define InitString(X) InitStringDB(X, __FILE__, __LINE__)
-#  define InitStringCharStar(X) InitStringCharStarDB(X, __FILE__, __LINE__)
-#  define InitStringChar(X) InitStringCharDB(X, __FILE__, __LINE__)
-#  define Mult(X,Y) MultDB(X, Y, __FILE__, __LINE__)
-#  define Dup(X) DupDB(X, __FILE__, __LINE__)
-#  define Slice(X,Y,Z) SliceDB(X, Y, Z, __FILE__, __LINE__)
-#endif
-  */
-  StrIO_ReadString ((char *) &a.array[0], MaxLineLength);
-  FpuIO_StrToReal ((const char *) &a.array[0], MaxLineLength, x);
-}
-
-
-/*
-   WriteReal - converts a REAL number, x, which has a, TotalWidth, and
-               FractionWidth into, string, a.
-*/
-
-extern "C" void FpuIO_WriteReal (double x, unsigned int TotalWidth, unsigned int FractionWidth)
-{
-  typedef struct WriteReal__T2_a WriteReal__T2;
-
-  struct WriteReal__T2_a { char array[MaxLineLength+1]; };
-  WriteReal__T2 a;
-
-  FpuIO_RealToStr (x, TotalWidth, FractionWidth, (char *) &a.array[0], MaxLineLength);
-  StrIO_WriteString ((const char *) &a.array[0], MaxLineLength);
-}
-
-
-/*
-   WriteReal - converts a REAL number, x, which has a, TotalWidth, and
-               FractionWidth into, string, a.
-*/
-
-extern "C" void FpuIO_StrToReal (const char *a_, unsigned int _a_high, double *x)
-{
-  long double lr;
-  char a[_a_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (a, a_, _a_high+1);
-
-  FpuIO_StrToLongReal ((const char *) a, _a_high, &lr);  /* let StrToLongReal do the work and we convert the result back to REAL  */
-  (*x) = (double ) (lr);  /* let StrToLongReal do the work and we convert the result back to REAL  */
-}
-
-
-/*
-   RealToStr - converts a LONGREAL number, Real, which has, TotalWidth, and
-               FractionWidth into a string.
-*/
-
-extern "C" void FpuIO_RealToStr (double x, unsigned int TotalWidth, unsigned int FractionWidth, char *a, unsigned int _a_high)
-{
-  long double lr;
-
-  lr = (long double ) (x);
-  FpuIO_LongRealToStr (lr, TotalWidth, FractionWidth, (char *) a, _a_high);
-}
-
-extern "C" void FpuIO_ReadLongReal (long double *x)
-{
-  typedef struct ReadLongReal__T3_a ReadLongReal__T3;
-
-  struct ReadLongReal__T3_a { char array[MaxLineLength+1]; };
-  ReadLongReal__T3 a;
-
-  StrIO_ReadString ((char *) &a.array[0], MaxLineLength);
-  FpuIO_StrToLongReal ((const char *) &a.array[0], MaxLineLength, x);
-}
-
-
-/*
-   WriteLongReal - converts a LONGREAL number, x, which has a, TotalWidth, and
-                   FractionWidth into a string.
-*/
-
-extern "C" void FpuIO_WriteLongReal (long double x, unsigned int TotalWidth, unsigned int FractionWidth)
-{
-  typedef struct WriteLongReal__T4_a WriteLongReal__T4;
-
-  struct WriteLongReal__T4_a { char array[MaxLineLength+1]; };
-  WriteLongReal__T4 a;
-
-  FpuIO_LongRealToStr (x, TotalWidth, FractionWidth, (char *) &a.array[0], MaxLineLength);
-  StrIO_WriteString ((const char *) &a.array[0], MaxLineLength);
-}
-
-
-/*
-   WriteLongReal - converts a LONGREAL number, x, which has a, TotalWidth, and
-                   FractionWidth into a string.
-*/
-
-extern "C" void FpuIO_StrToLongReal (const char *a_, unsigned int _a_high, long double *x)
-{
-  unsigned int found;
-  DynamicStrings_String s;
-  char a[_a_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (a, a_, _a_high+1);
-
-  s = DynamicStrings_InitString ((const char *) a, _a_high);
-  (*x) = StringConvert_StringToLongreal (s, &found);
-  s = DynamicStrings_KillString (s);
-}
-
-
-/*
-   LongRealToStr - converts a LONGREAL number, Real, which has, TotalWidth, and
-                   FractionWidth into a string.
-*/
-
-extern "C" void FpuIO_LongRealToStr (long double x, unsigned int TotalWidth, unsigned int FractionWidth, char *a, unsigned int _a_high)
-{
-  DynamicStrings_String s;
-
-  s = StringConvert_LongrealToString (x, TotalWidth, FractionWidth);
-  DynamicStrings_CopyOut ((char *) a, _a_high, s);
-  s = DynamicStrings_KillString (s);
-}
-
-
-/*
-   LongRealToStr - converts a LONGREAL number, Real, which has, TotalWidth, and
-                   FractionWidth into a string.
-*/
-
-extern "C" void FpuIO_ReadLongInt (long int *x)
-{
-  typedef struct ReadLongInt__T5_a ReadLongInt__T5;
-
-  struct ReadLongInt__T5_a { char array[MaxLineLength+1]; };
-  ReadLongInt__T5 a;
-
-  StrIO_ReadString ((char *) &a.array[0], MaxLineLength);
-  FpuIO_StrToLongInt ((const char *) &a.array[0], MaxLineLength, x);
-}
-
-
-/*
-   LongRealToStr - converts a LONGREAL number, Real, which has, TotalWidth, and
-                   FractionWidth into a string.
-*/
-
-extern "C" void FpuIO_WriteLongInt (long int x, unsigned int n)
-{
-  typedef struct WriteLongInt__T6_a WriteLongInt__T6;
-
-  struct WriteLongInt__T6_a { char array[MaxLineLength+1]; };
-  WriteLongInt__T6 a;
-
-  FpuIO_LongIntToStr (x, n, (char *) &a.array[0], MaxLineLength);
-  StrIO_WriteString ((const char *) &a.array[0], MaxLineLength);
-}
-
-
-/*
-   LongRealToStr - converts a LONGREAL number, Real, which has, TotalWidth, and
-                   FractionWidth into a string.
-*/
-
-extern "C" void FpuIO_StrToLongInt (const char *a_, unsigned int _a_high, long int *x)
-{
-  DynamicStrings_String s;
-  unsigned int found;
-  char a[_a_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (a, a_, _a_high+1);
-
-  s = DynamicStrings_InitString ((const char *) a, _a_high);
-  (*x) = StringConvert_StringToLongInteger (s, 10, &found);
-  s = DynamicStrings_KillString (s);
-}
-
-
-/*
-   LongRealToStr - converts a LONGREAL number, Real, which has, TotalWidth, and
-                   FractionWidth into a string.
-*/
-
-extern "C" void FpuIO_LongIntToStr (long int x, unsigned int n, char *a, unsigned int _a_high)
-{
-  DynamicStrings_String s;
-
-  s = StringConvert_LongIntegerToString (x, n, ' ', FALSE, 10, TRUE);
-  DynamicStrings_CopyOut ((char *) a, _a_high, s);
-  s = DynamicStrings_KillString (s);
-}
-
-extern "C" void _M2_FpuIO_init (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-}
-
-extern "C" void _M2_FpuIO_fini (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-}
diff --git a/gcc/m2/mc-boot/GIO.c b/gcc/m2/mc-boot/GIO.c
deleted file mode 100644
index e56c74382f5..00000000000
--- a/gcc/m2/mc-boot/GIO.c
+++ /dev/null
@@ -1,479 +0,0 @@
-/* do not edit automatically generated by mc from IO.  */
-/* IO.mod provides Read, Write, Errors procedures mapping onto 0, 1 and 2.
-
-Copyright (C) 2001-2023 Free Software Foundation, Inc.
-Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>.
-
-This file is part of GNU Modula-2.
-
-GNU Modula-2 is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
-
-GNU Modula-2 is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-General Public License for more details.
-
-Under Section 7 of GPL version 3, you are granted additional
-permissions described in the GCC Runtime Library Exception, version
-3.1, as published by the Free Software Foundation.
-
-You should have received a copy of the GNU General Public License and
-a copy of the GCC Runtime Library Exception along with this program;
-see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
-<http://www.gnu.org/licenses/>.  */
-
-#include "config.h"
-#include "system.h"
-#   if !defined (PROC_D)
-#      define PROC_D
-       typedef void (*PROC_t) (void);
-       typedef struct { PROC_t proc; } PROC;
-#   endif
-
-#   if !defined (TRUE)
-#      define TRUE (1==1)
-#   endif
-
-#   if !defined (FALSE)
-#      define FALSE (1==0)
-#   endif
-
-#define _IO_H
-#define _IO_C
-
-#   include "GStrLib.h"
-#   include "GSYSTEM.h"
-#   include "Glibc.h"
-#   include "GFIO.h"
-#   include "Gerrno.h"
-#   include "GASCII.h"
-#   include "Gtermios.h"
-
-#   define MaxDefaultFd 2
-typedef struct IO_BasicFds_r IO_BasicFds;
-
-typedef struct IO__T1_a IO__T1;
-
-struct IO_BasicFds_r {
-                       unsigned int IsEof;
-                       unsigned int IsRaw;
-                     };
-
-struct IO__T1_a { IO_BasicFds array[MaxDefaultFd+1]; };
-static IO__T1 fdState;
-
-/*
-   IsDefaultFd - returns TRUE if, fd, is 0, 1 or 2.
-*/
-
-extern "C" void IO_Read (char *ch);
-
-/*
-   doWrite - performs the write of a single character, ch,
-             onto fd or f.
-*/
-
-extern "C" void IO_Write (char ch);
-
-/*
-   doWrite - performs the write of a single character, ch,
-             onto fd or f.
-*/
-
-extern "C" void IO_Error (char ch);
-extern "C" void IO_UnBufferedMode (int fd, unsigned int input);
-extern "C" void IO_BufferedMode (int fd, unsigned int input);
-
-/*
-   EchoOn - turns on echoing for file descriptor, fd.  This
-            only really makes sence for a file descriptor opened
-            for terminal input or maybe some specific file descriptor
-            which is attached to a particular piece of hardware.
-*/
-
-extern "C" void IO_EchoOn (int fd, unsigned int input);
-
-/*
-   EchoOff - turns off echoing for file descriptor, fd.  This
-             only really makes sence for a file descriptor opened
-             for terminal input or maybe some specific file descriptor
-             which is attached to a particular piece of hardware.
-*/
-
-extern "C" void IO_EchoOff (int fd, unsigned int input);
-
-/*
-   IsDefaultFd - returns TRUE if, fd, is 0, 1 or 2.
-*/
-
-static unsigned int IsDefaultFd (int fd);
-
-/*
-   doWrite - performs the write of a single character, ch,
-             onto fd or f.
-*/
-
-static void doWrite (int fd, FIO_File f, char ch);
-
-/*
-   setFlag - sets or unsets the appropriate flag in, t.
-*/
-
-static void setFlag (termios_TERMIOS t, termios_Flag f, unsigned int b);
-
-/*
-   doraw - sets all the flags associated with making this
-           file descriptor into raw input/output.
-*/
-
-static void doraw (termios_TERMIOS term);
-
-/*
-   dononraw - sets all the flags associated with making this
-              file descriptor into non raw input/output.
-*/
-
-static void dononraw (termios_TERMIOS term);
-
-/*
-   Init -
-*/
-
-static void Init (void);
-
-
-/*
-   IsDefaultFd - returns TRUE if, fd, is 0, 1 or 2.
-*/
-
-static unsigned int IsDefaultFd (int fd)
-{
-  return (fd <= MaxDefaultFd) && (fd >= 0);
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   doWrite - performs the write of a single character, ch,
-             onto fd or f.
-*/
-
-static void doWrite (int fd, FIO_File f, char ch)
-{
-  int r;
-
-  if (fdState.array[fd].IsRaw)
-    {
-      /* avoid dangling else.  */
-      if (! fdState.array[fd].IsEof)
-        {
-          for (;;)
-          {
-            r = static_cast<int> (libc_write (FIO_GetUnixFileDescriptor (f), &ch, static_cast<size_t> (1)));
-            if (r == 1)
-              {
-                return ;
-              }
-            else if (r == -1)
-              {
-                /* avoid dangling else.  */
-                r = errno_geterrno ();
-                if ((r != errno_EAGAIN) && (r != errno_EINTR))
-                  {
-                    fdState.array[fd].IsEof = TRUE;
-                    return ;
-                  }
-              }
-          }
-        }
-    }
-  else
-    {
-      FIO_WriteChar (f, ch);
-    }
-}
-
-
-/*
-   setFlag - sets or unsets the appropriate flag in, t.
-*/
-
-static void setFlag (termios_TERMIOS t, termios_Flag f, unsigned int b)
-{
-  if (termios_SetFlag (t, f, b))
-    {}  /* empty.  */
-}
-
-
-/*
-   doraw - sets all the flags associated with making this
-           file descriptor into raw input/output.
-*/
-
-static void doraw (termios_TERMIOS term)
-{
-  /* 
-    * from man 3 termios
-    *           termios_p->c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP
-    *                                   | INLCR | IGNCR | ICRNL | IXON);
-    *           termios_p->c_oflag &= ~OPOST;
-    *           termios_p->c_lflag &= ~(ECHO | ECHONL | ICANON | ISIG | IEXTEN);
-    *           termios_p->c_cflag &= ~(CSIZE | PARENB);
-    *           termios_p->c_cflag |= CS8;
-  */
-  setFlag (term, termios_ignbrk, FALSE);
-  setFlag (term, termios_ibrkint, FALSE);
-  setFlag (term, termios_iparmrk, FALSE);
-  setFlag (term, termios_istrip, FALSE);
-  setFlag (term, termios_inlcr, FALSE);
-  setFlag (term, termios_igncr, FALSE);
-  setFlag (term, termios_icrnl, FALSE);
-  setFlag (term, termios_ixon, FALSE);
-  setFlag (term, termios_opost, FALSE);
-  setFlag (term, termios_lecho, FALSE);
-  setFlag (term, termios_lechonl, FALSE);
-  setFlag (term, termios_licanon, FALSE);
-  setFlag (term, termios_lisig, FALSE);
-  setFlag (term, termios_liexten, FALSE);
-  setFlag (term, termios_parenb, FALSE);
-  setFlag (term, termios_cs8, TRUE);
-}
-
-
-/*
-   dononraw - sets all the flags associated with making this
-              file descriptor into non raw input/output.
-*/
-
-static void dononraw (termios_TERMIOS term)
-{
-  /* 
-    * we undo these settings, (although we leave the character size alone)
-    *
-    * from man 3 termios
-    *           termios_p->c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP
-    *                                   | INLCR | IGNCR | ICRNL | IXON);
-    *           termios_p->c_oflag &= ~OPOST;
-    *           termios_p->c_lflag &= ~(ECHO | ECHONL | ICANON | ISIG | IEXTEN);
-    *           termios_p->c_cflag &= ~(CSIZE | PARENB);
-    *           termios_p->c_cflag |= CS8;
-  */
-  setFlag (term, termios_ignbrk, TRUE);
-  setFlag (term, termios_ibrkint, TRUE);
-  setFlag (term, termios_iparmrk, TRUE);
-  setFlag (term, termios_istrip, TRUE);
-  setFlag (term, termios_inlcr, TRUE);
-  setFlag (term, termios_igncr, TRUE);
-  setFlag (term, termios_icrnl, TRUE);
-  setFlag (term, termios_ixon, TRUE);
-  setFlag (term, termios_opost, TRUE);
-  setFlag (term, termios_lecho, TRUE);
-  setFlag (term, termios_lechonl, TRUE);
-  setFlag (term, termios_licanon, TRUE);
-  setFlag (term, termios_lisig, TRUE);
-  setFlag (term, termios_liexten, TRUE);
-}
-
-
-/*
-   Init -
-*/
-
-static void Init (void)
-{
-  fdState.array[0].IsEof = FALSE;
-  fdState.array[0].IsRaw = FALSE;
-  fdState.array[1].IsEof = FALSE;
-  fdState.array[1].IsRaw = FALSE;
-  fdState.array[2].IsEof = FALSE;
-  fdState.array[2].IsRaw = FALSE;
-}
-
-
-/*
-   IsDefaultFd - returns TRUE if, fd, is 0, 1 or 2.
-*/
-
-extern "C" void IO_Read (char *ch)
-{
-  int r;
-
-  FIO_FlushBuffer (FIO_StdOut);
-  FIO_FlushBuffer (FIO_StdErr);
-  if (fdState.array[0].IsRaw)
-    {
-      if (fdState.array[0].IsEof)
-        {
-          (*ch) = ASCII_eof;
-        }
-      else
-        {
-          for (;;)
-          {
-            r = static_cast<int> (libc_read (FIO_GetUnixFileDescriptor (FIO_StdIn), ch, static_cast<size_t> (1)));
-            if (r == 1)
-              {
-                return ;
-              }
-            else if (r == -1)
-              {
-                /* avoid dangling else.  */
-                r = errno_geterrno ();
-                if (r != errno_EAGAIN)
-                  {
-                    fdState.array[0].IsEof = TRUE;
-                    (*ch) = ASCII_eof;
-                    return ;
-                  }
-              }
-          }
-        }
-    }
-  else
-    {
-      (*ch) = FIO_ReadChar (FIO_StdIn);
-    }
-}
-
-
-/*
-   doWrite - performs the write of a single character, ch,
-             onto fd or f.
-*/
-
-extern "C" void IO_Write (char ch)
-{
-  doWrite (1, FIO_StdOut, ch);
-}
-
-
-/*
-   doWrite - performs the write of a single character, ch,
-             onto fd or f.
-*/
-
-extern "C" void IO_Error (char ch)
-{
-  doWrite (2, FIO_StdErr, ch);
-}
-
-extern "C" void IO_UnBufferedMode (int fd, unsigned int input)
-{
-  termios_TERMIOS term;
-  int result;
-
-  if (IsDefaultFd (fd))
-    {
-      fdState.array[fd].IsRaw = TRUE;
-    }
-  term = termios_InitTermios ();
-  if ((termios_tcgetattr (fd, term)) == 0)
-    {
-      doraw (term);
-      if (input)
-        {
-          result = termios_tcsetattr (fd, termios_tcsflush (), term);
-        }
-      else
-        {
-          result = termios_tcsetattr (fd, termios_tcsdrain (), term);
-        }
-    }
-  term = termios_KillTermios (term);
-}
-
-extern "C" void IO_BufferedMode (int fd, unsigned int input)
-{
-  termios_TERMIOS term;
-  int r;
-
-  if (IsDefaultFd (fd))
-    {
-      fdState.array[fd].IsRaw = FALSE;
-    }
-  term = termios_InitTermios ();
-  if ((termios_tcgetattr (fd, term)) == 0)
-    {
-      dononraw (term);
-      if (input)
-        {
-          r = termios_tcsetattr (fd, termios_tcsflush (), term);
-        }
-      else
-        {
-          r = termios_tcsetattr (fd, termios_tcsdrain (), term);
-        }
-    }
-  term = termios_KillTermios (term);
-}
-
-
-/*
-   EchoOn - turns on echoing for file descriptor, fd.  This
-            only really makes sence for a file descriptor opened
-            for terminal input or maybe some specific file descriptor
-            which is attached to a particular piece of hardware.
-*/
-
-extern "C" void IO_EchoOn (int fd, unsigned int input)
-{
-  termios_TERMIOS term;
-  int result;
-
-  term = termios_InitTermios ();
-  if ((termios_tcgetattr (fd, term)) == 0)
-    {
-      setFlag (term, termios_lecho, TRUE);
-      if (input)
-        {
-          result = termios_tcsetattr (fd, termios_tcsflush (), term);
-        }
-      else
-        {
-          result = termios_tcsetattr (fd, termios_tcsdrain (), term);
-        }
-    }
-  term = termios_KillTermios (term);
-}
-
-
-/*
-   EchoOff - turns off echoing for file descriptor, fd.  This
-             only really makes sence for a file descriptor opened
-             for terminal input or maybe some specific file descriptor
-             which is attached to a particular piece of hardware.
-*/
-
-extern "C" void IO_EchoOff (int fd, unsigned int input)
-{
-  termios_TERMIOS term;
-  int result;
-
-  term = termios_InitTermios ();
-  if ((termios_tcgetattr (fd, term)) == 0)
-    {
-      setFlag (term, termios_lecho, FALSE);
-      if (input)
-        {
-          result = termios_tcsetattr (fd, termios_tcsflush (), term);
-        }
-      else
-        {
-          result = termios_tcsetattr (fd, termios_tcsdrain (), term);
-        }
-    }
-  term = termios_KillTermios (term);
-}
-
-extern "C" void _M2_IO_init (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-  Init ();
-}
-
-extern "C" void _M2_IO_fini (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-}
diff --git a/gcc/m2/mc-boot/GIndexing.c b/gcc/m2/mc-boot/GIndexing.c
deleted file mode 100644
index 0817ff36ca2..00000000000
--- a/gcc/m2/mc-boot/GIndexing.c
+++ /dev/null
@@ -1,491 +0,0 @@
-/* do not edit automatically generated by mc from Indexing.  */
-/* Indexing provides a dynamic array of pointers.
-   Copyright (C) 2015-2023 Free Software Foundation, Inc.
-
-This file is part of GNU Modula-2.
-
-GNU Modula-2 is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 3, or (at your option) any later
-version.
-
-GNU Modula-2 is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with gm2; see the file COPYING.  If not, write to the Free Software
-Foundation, 51 Franklin Street, Fifth Floor,
-Boston, MA 02110-1301, USA.  */
-
-#include "config.h"
-#include "system.h"
-#   if !defined (PROC_D)
-#      define PROC_D
-       typedef void (*PROC_t) (void);
-       typedef struct { PROC_t proc; } PROC;
-#   endif
-
-#   if !defined (TRUE)
-#      define TRUE (1==1)
-#   endif
-
-#   if !defined (FALSE)
-#      define FALSE (1==0)
-#   endif
-
-#   include "GStorage.h"
-#   include "Gmcrts.h"
-#if defined(__cplusplus)
-#   undef NULL
-#   define NULL 0
-#endif
-#define _Indexing_H
-#define _Indexing_C
-
-#   include "Glibc.h"
-#   include "GStorage.h"
-#   include "GSYSTEM.h"
-#   include "GmcDebug.h"
-#   include "GM2RTS.h"
-
-typedef struct Indexing_IndexProcedure_p Indexing_IndexProcedure;
-
-#   define MinSize 128
-typedef struct Indexing__T2_r Indexing__T2;
-
-typedef void * *Indexing_PtrToAddress;
-
-typedef Indexing__T2 *Indexing_Index;
-
-typedef unsigned char *Indexing_PtrToByte;
-
-typedef void (*Indexing_IndexProcedure_t) (void *);
-struct Indexing_IndexProcedure_p { Indexing_IndexProcedure_t proc; };
-
-struct Indexing__T2_r {
-                        void *ArrayStart;
-                        unsigned int ArraySize;
-                        unsigned int Used;
-                        unsigned int Low;
-                        unsigned int High;
-                        unsigned int Debug;
-                        unsigned int Map;
-                      };
-
-
-/*
-   InitIndex - creates and returns an Index.
-*/
-
-extern "C" Indexing_Index Indexing_InitIndex (unsigned int low);
-
-/*
-   KillIndex - returns Index to free storage.
-*/
-
-extern "C" Indexing_Index Indexing_KillIndex (Indexing_Index i);
-
-/*
-   DebugIndex - turns on debugging within an index.
-*/
-
-extern "C" Indexing_Index Indexing_DebugIndex (Indexing_Index i);
-
-/*
-   InBounds - returns TRUE if indice, n, is within the bounds
-              of the dynamic array.
-*/
-
-extern "C" unsigned int Indexing_InBounds (Indexing_Index i, unsigned int n);
-
-/*
-   HighIndice - returns the last legally accessible indice of this array.
-*/
-
-extern "C" unsigned int Indexing_HighIndice (Indexing_Index i);
-
-/*
-   LowIndice - returns the first legally accessible indice of this array.
-*/
-
-extern "C" unsigned int Indexing_LowIndice (Indexing_Index i);
-
-/*
-   PutIndice - places, a, into the dynamic array at position i[n]
-*/
-
-extern "C" void Indexing_PutIndice (Indexing_Index i, unsigned int n, void * a);
-
-/*
-   GetIndice - retrieves, element i[n] from the dynamic array.
-*/
-
-extern "C" void * Indexing_GetIndice (Indexing_Index i, unsigned int n);
-
-/*
-   IsIndiceInIndex - returns TRUE if, a, is in the index, i.
-*/
-
-extern "C" unsigned int Indexing_IsIndiceInIndex (Indexing_Index i, void * a);
-
-/*
-   RemoveIndiceFromIndex - removes, a, from Index, i.
-*/
-
-extern "C" void Indexing_RemoveIndiceFromIndex (Indexing_Index i, void * a);
-
-/*
-   DeleteIndice - delete i[j] from the array.
-*/
-
-extern "C" void Indexing_DeleteIndice (Indexing_Index i, unsigned int j);
-
-/*
-   IncludeIndiceIntoIndex - if the indice is not in the index, then
-                            add it at the end.
-*/
-
-extern "C" void Indexing_IncludeIndiceIntoIndex (Indexing_Index i, void * a);
-
-/*
-   ForeachIndiceInIndexDo - for each j indice of i, call procedure p(i[j])
-*/
-
-extern "C" void Indexing_ForeachIndiceInIndexDo (Indexing_Index i, Indexing_IndexProcedure p);
-
-
-/*
-   InitIndex - creates and returns an Index.
-*/
-
-extern "C" Indexing_Index Indexing_InitIndex (unsigned int low)
-{
-  Indexing_Index i;
-
-  Storage_ALLOCATE ((void **) &i, sizeof (Indexing__T2));
-  i->Low = low;
-  i->High = 0;
-  i->ArraySize = MinSize;
-  Storage_ALLOCATE (&i->ArrayStart, MinSize);
-  i->ArrayStart = libc_memset (i->ArrayStart, 0, static_cast<size_t> (i->ArraySize));
-  i->Debug = FALSE;
-  i->Used = 0;
-  i->Map = (unsigned int) 0;
-  return i;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   KillIndex - returns Index to free storage.
-*/
-
-extern "C" Indexing_Index Indexing_KillIndex (Indexing_Index i)
-{
-  Storage_DEALLOCATE (&i->ArrayStart, i->ArraySize);
-  Storage_DEALLOCATE ((void **) &i, sizeof (Indexing__T2));
-  return NULL;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   DebugIndex - turns on debugging within an index.
-*/
-
-extern "C" Indexing_Index Indexing_DebugIndex (Indexing_Index i)
-{
-  i->Debug = TRUE;
-  return i;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   InBounds - returns TRUE if indice, n, is within the bounds
-              of the dynamic array.
-*/
-
-extern "C" unsigned int Indexing_InBounds (Indexing_Index i, unsigned int n)
-{
-  if (i == NULL)
-    {
-      M2RTS_HALT (-1);
-      __builtin_unreachable ();
-    }
-  else
-    {
-      return (n >= i->Low) && (n <= i->High);
-    }
-  ReturnException ("../../gcc-read-write/gcc/m2/mc/Indexing.def", 20, 1);
-  __builtin_unreachable ();
-}
-
-
-/*
-   HighIndice - returns the last legally accessible indice of this array.
-*/
-
-extern "C" unsigned int Indexing_HighIndice (Indexing_Index i)
-{
-  if (i == NULL)
-    {
-      M2RTS_HALT (-1);
-      __builtin_unreachable ();
-    }
-  else
-    {
-      return i->High;
-    }
-  ReturnException ("../../gcc-read-write/gcc/m2/mc/Indexing.def", 20, 1);
-  __builtin_unreachable ();
-}
-
-
-/*
-   LowIndice - returns the first legally accessible indice of this array.
-*/
-
-extern "C" unsigned int Indexing_LowIndice (Indexing_Index i)
-{
-  if (i == NULL)
-    {
-      M2RTS_HALT (-1);
-      __builtin_unreachable ();
-    }
-  else
-    {
-      return i->Low;
-    }
-  ReturnException ("../../gcc-read-write/gcc/m2/mc/Indexing.def", 20, 1);
-  __builtin_unreachable ();
-}
-
-
-/*
-   PutIndice - places, a, into the dynamic array at position i[n]
-*/
-
-extern "C" void Indexing_PutIndice (Indexing_Index i, unsigned int n, void * a)
-{
-  typedef unsigned int * *PutIndice__T1;
-
-  unsigned int oldSize;
-  void * b;
-  PutIndice__T1 p;
-
-  if (! (Indexing_InBounds (i, n)))
-    {
-      /* avoid gcc warning by using compound statement even if not strictly necessary.  */
-      if (n < i->Low)
-        {
-          M2RTS_HALT (-1);
-          __builtin_unreachable ();
-        }
-      else
-        {
-          oldSize = i->ArraySize;
-          while (((n-i->Low)*sizeof (void *)) >= i->ArraySize)
-            {
-              i->ArraySize = i->ArraySize*2;
-            }
-          if (oldSize != i->ArraySize)
-            {
-              /* 
-               IF Debug
-               THEN
-                  printf2('increasing memory hunk from %d to %d
-              ',
-                          oldSize, ArraySize)
-               END ;
-  */
-              Storage_REALLOCATE (&i->ArrayStart, i->ArraySize);
-              /* and initialize the remainder of the array to NIL  */
-              b = i->ArrayStart;
-              b = reinterpret_cast<void *> (reinterpret_cast<char *> (b)+oldSize);
-              b = libc_memset (b, 0, static_cast<size_t> (i->ArraySize-oldSize));
-            }
-          i->High = n;
-        }
-    }
-  b = i->ArrayStart;
-  b = reinterpret_cast<void *> (reinterpret_cast<char *> (b)+(n-i->Low)*sizeof (void *));
-  p = static_cast<PutIndice__T1> (b);
-  (*p) = reinterpret_cast<unsigned int *> (a);
-  i->Used += 1;
-  if (i->Debug)
-    {
-      if (n < 32)
-        {
-          i->Map |= (1 << (n ));
-        }
-    }
-}
-
-
-/*
-   GetIndice - retrieves, element i[n] from the dynamic array.
-*/
-
-extern "C" void * Indexing_GetIndice (Indexing_Index i, unsigned int n)
-{
-  Indexing_PtrToByte b;
-  Indexing_PtrToAddress p;
-
-  if (! (Indexing_InBounds (i, n)))
-    {
-      M2RTS_HALT (-1);
-      __builtin_unreachable ();
-    }
-  b = static_cast<Indexing_PtrToByte> (i->ArrayStart);
-  b += (n-i->Low)*sizeof (void *);
-  p = (Indexing_PtrToAddress) (b);
-  if (i->Debug)
-    {
-      if (((n < 32) && (! ((((1 << (n)) & (i->Map)) != 0)))) && ((*p) != NULL))
-        {
-          M2RTS_HALT (-1);
-          __builtin_unreachable ();
-        }
-    }
-  return (*p);
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   IsIndiceInIndex - returns TRUE if, a, is in the index, i.
-*/
-
-extern "C" unsigned int Indexing_IsIndiceInIndex (Indexing_Index i, void * a)
-{
-  unsigned int j;
-  Indexing_PtrToByte b;
-  Indexing_PtrToAddress p;
-
-  j = i->Low;
-  b = static_cast<Indexing_PtrToByte> (i->ArrayStart);
-  while (j <= i->High)
-    {
-      p = (Indexing_PtrToAddress) (b);
-      if ((*p) == a)
-        {
-          return TRUE;
-        }
-      /* we must not INC(p, ..) as p2c gets confused  */
-      b += sizeof (void *);
-      j += 1;
-    }
-  return FALSE;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   RemoveIndiceFromIndex - removes, a, from Index, i.
-*/
-
-extern "C" void Indexing_RemoveIndiceFromIndex (Indexing_Index i, void * a)
-{
-  unsigned int j;
-  unsigned int k;
-  Indexing_PtrToAddress p;
-  Indexing_PtrToByte b;
-
-  j = i->Low;
-  b = static_cast<Indexing_PtrToByte> (i->ArrayStart);
-  while (j <= i->High)
-    {
-      p = (Indexing_PtrToAddress) (b);
-      b += sizeof (void *);
-      if ((*p) == a)
-        {
-          Indexing_DeleteIndice (i, j);
-        }
-      j += 1;
-    }
-}
-
-
-/*
-   DeleteIndice - delete i[j] from the array.
-*/
-
-extern "C" void Indexing_DeleteIndice (Indexing_Index i, unsigned int j)
-{
-  Indexing_PtrToAddress p;
-  Indexing_PtrToByte b;
-
-  if (Indexing_InBounds (i, j))
-    {
-      b = static_cast<Indexing_PtrToByte> (i->ArrayStart);
-      b += sizeof (void *)*(j-i->Low);
-      p = (Indexing_PtrToAddress) (b);
-      b += sizeof (void *);
-      p = static_cast<Indexing_PtrToAddress> (libc_memmove (reinterpret_cast<void *> (p), reinterpret_cast<void *> (b), static_cast<size_t> ((i->High-j)*sizeof (void *))));
-      i->High -= 1;
-      i->Used -= 1;
-    }
-  else
-    {
-      M2RTS_HALT (-1);
-      __builtin_unreachable ();
-    }
-}
-
-
-/*
-   IncludeIndiceIntoIndex - if the indice is not in the index, then
-                            add it at the end.
-*/
-
-extern "C" void Indexing_IncludeIndiceIntoIndex (Indexing_Index i, void * a)
-{
-  if (! (Indexing_IsIndiceInIndex (i, a)))
-    {
-      /* avoid gcc warning by using compound statement even if not strictly necessary.  */
-      if (i->Used == 0)
-        {
-          Indexing_PutIndice (i, Indexing_LowIndice (i), a);
-        }
-      else
-        {
-          Indexing_PutIndice (i, (Indexing_HighIndice (i))+1, a);
-        }
-    }
-}
-
-
-/*
-   ForeachIndiceInIndexDo - for each j indice of i, call procedure p(i[j])
-*/
-
-extern "C" void Indexing_ForeachIndiceInIndexDo (Indexing_Index i, Indexing_IndexProcedure p)
-{
-  unsigned int j;
-  Indexing_IndexProcedure q;
-
-  j = Indexing_LowIndice (i);
-  q = p;
-  while (j <= (Indexing_HighIndice (i)))
-    {
-      mcDebug_assert (q.proc == p.proc);
-      (*p.proc) (Indexing_GetIndice (i, j));
-      j += 1;
-    }
-}
-
-extern "C" void _M2_Indexing_init (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-}
-
-extern "C" void _M2_Indexing_fini (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-}
diff --git a/gcc/m2/mc-boot/GM2Dependent.c b/gcc/m2/mc-boot/GM2Dependent.c
deleted file mode 100644
index 64441fff642..00000000000
--- a/gcc/m2/mc-boot/GM2Dependent.c
+++ /dev/null
@@ -1,1407 +0,0 @@
-/* do not edit automatically generated by mc from M2Dependent.  */
-/* M2Dependent.mod implements the run time module dependencies.
-
-Copyright (C) 2022-2023 Free Software Foundation, Inc.
-Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>.
-
-This file is part of GNU Modula-2.
-
-GNU Modula-2 is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
-
-GNU Modula-2 is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-General Public License for more details.
-
-Under Section 7 of GPL version 3, you are granted additional
-permissions described in the GCC Runtime Library Exception, version
-3.1, as published by the Free Software Foundation.
-
-You should have received a copy of the GNU General Public License and
-a copy of the GCC Runtime Library Exception along with this program;
-see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
-<http://www.gnu.org/licenses/>.  */
-
-#include "config.h"
-#include "system.h"
-#   if !defined (PROC_D)
-#      define PROC_D
-       typedef void (*PROC_t) (void);
-       typedef struct { PROC_t proc; } PROC;
-#   endif
-
-#   if !defined (TRUE)
-#      define TRUE (1==1)
-#   endif
-
-#   if !defined (FALSE)
-#      define FALSE (1==0)
-#   endif
-
-#   include "GStorage.h"
-#if defined(__cplusplus)
-#   undef NULL
-#   define NULL 0
-#endif
-#define _M2Dependent_H
-#define _M2Dependent_C
-
-#   include "Glibc.h"
-#   include "GM2LINK.h"
-#   include "GASCII.h"
-#   include "GSYSTEM.h"
-#   include "GStorage.h"
-#   include "GStrLib.h"
-#   include "GM2RTS.h"
-
-typedef struct M2Dependent_ArgCVEnvP_p M2Dependent_ArgCVEnvP;
-
-typedef struct M2Dependent_DependencyList_r M2Dependent_DependencyList;
-
-typedef struct M2Dependent__T2_r M2Dependent__T2;
-
-typedef M2Dependent__T2 *M2Dependent_ModuleChain;
-
-typedef struct M2Dependent__T3_a M2Dependent__T3;
-
-typedef enum {M2Dependent_unregistered, M2Dependent_unordered, M2Dependent_started, M2Dependent_ordered, M2Dependent_user} M2Dependent_DependencyState;
-
-typedef void (*M2Dependent_ArgCVEnvP_t) (int, void *, void *);
-struct M2Dependent_ArgCVEnvP_p { M2Dependent_ArgCVEnvP_t proc; };
-
-struct M2Dependent_DependencyList_r {
-                                      PROC proc;
-                                      unsigned int forced;
-                                      unsigned int forc;
-                                      unsigned int appl;
-                                      M2Dependent_DependencyState state;
-                                    };
-
-struct M2Dependent__T3_a { M2Dependent_ModuleChain array[M2Dependent_user-M2Dependent_unregistered+1]; };
-struct M2Dependent__T2_r {
-                           void *name;
-                           void *libname;
-                           M2Dependent_ArgCVEnvP init;
-                           M2Dependent_ArgCVEnvP fini;
-                           M2Dependent_DependencyList dependency;
-                           M2Dependent_ModuleChain prev;
-                           M2Dependent_ModuleChain next;
-                         };
-
-static M2Dependent__T3 Modules;
-static unsigned int Initialized;
-static unsigned int WarningTrace;
-static unsigned int ModuleTrace;
-static unsigned int HexTrace;
-static unsigned int DependencyTrace;
-static unsigned int PreTrace;
-static unsigned int PostTrace;
-static unsigned int ForceTrace;
-
-/*
-   ConstructModules - resolve dependencies and then call each
-                      module constructor in turn.
-*/
-
-extern "C" void M2Dependent_ConstructModules (void * applicationmodule, void * libname, int argc, void * argv, void * envp);
-
-/*
-   DeconstructModules - resolve dependencies and then call each
-                        module constructor in turn.
-*/
-
-extern "C" void M2Dependent_DeconstructModules (void * applicationmodule, void * libname, int argc, void * argv, void * envp);
-
-/*
-   RegisterModule - adds module name to the list of outstanding
-                    modules which need to have their dependencies
-                    explored to determine initialization order.
-*/
-
-extern "C" void M2Dependent_RegisterModule (void * modulename, void * libname, M2Dependent_ArgCVEnvP init, M2Dependent_ArgCVEnvP fini, PROC dependencies);
-
-/*
-   RequestDependant - used to specify that modulename is dependant upon
-                      module dependantmodule.  It only takes effect
-                      if we are not using StaticInitialization.
-*/
-
-extern "C" void M2Dependent_RequestDependant (void * modulename, void * libname, void * dependantmodule, void * dependantlibname);
-
-/*
-   CreateModule - creates a new module entry and returns the
-                  ModuleChain.
-*/
-
-static M2Dependent_ModuleChain CreateModule (void * name, void * libname, M2Dependent_ArgCVEnvP init, M2Dependent_ArgCVEnvP fini, PROC dependencies);
-
-/*
-   AppendModule - append chain to end of the list.
-*/
-
-static void AppendModule (M2Dependent_ModuleChain *head, M2Dependent_ModuleChain chain);
-
-/*
-   RemoveModule - remove chain from double linked list head.
-*/
-
-static void RemoveModule (M2Dependent_ModuleChain *head, M2Dependent_ModuleChain chain);
-
-/*
-   onChain - returns TRUE if mptr is on the Modules[state] list.
-*/
-
-static unsigned int onChain (M2Dependent_DependencyState state, M2Dependent_ModuleChain mptr);
-
-/*
-   max -
-*/
-
-static unsigned int max (unsigned int a, unsigned int b);
-
-/*
-   min -
-*/
-
-static unsigned int min (unsigned int a, unsigned int b);
-
-/*
-   LookupModuleN - lookup module from the state list.
-                   The strings lengths are known.
-*/
-
-static M2Dependent_ModuleChain LookupModuleN (M2Dependent_DependencyState state, void * name, unsigned int namelen, void * libname, unsigned int libnamelen);
-
-/*
-   LookupModule - lookup and return the ModuleChain pointer containing
-                  module name from a particular list.
-*/
-
-static M2Dependent_ModuleChain LookupModule (M2Dependent_DependencyState state, void * name, void * libname);
-
-/*
-   toCString - replace any character sequence 
- into a newline.
-*/
-
-static void toCString (char *str, unsigned int _str_high);
-
-/*
-   strcmp - return 0 if both strings are equal.
-            We cannot use Builtins.def during bootstrap.
-*/
-
-static int strcmp (M2LINK_PtrToChar a, M2LINK_PtrToChar b);
-
-/*
-   strncmp - return 0 if both strings are equal.
-             We cannot use Builtins.def during bootstrap.
-*/
-
-static int strncmp (M2LINK_PtrToChar a, M2LINK_PtrToChar b, unsigned int n);
-
-/*
-   strlen - returns the length of string.
-*/
-
-static int strlen_ (M2LINK_PtrToChar string);
-
-/*
-   traceprintf - wrap printf with a boolean flag.
-*/
-
-static void traceprintf (unsigned int flag, const char *str_, unsigned int _str_high);
-
-/*
-   traceprintf2 - wrap printf with a boolean flag.
-*/
-
-static void traceprintf2 (unsigned int flag, const char *str_, unsigned int _str_high, void * arg);
-
-/*
-   traceprintf3 - wrap printf with a boolean flag.
-*/
-
-static void traceprintf3 (unsigned int flag, const char *str_, unsigned int _str_high, void * arg1, void * arg2);
-
-/*
-   moveTo - moves mptr to the new list determined by newstate.
-            It updates the mptr state appropriately.
-*/
-
-static void moveTo (M2Dependent_DependencyState newstate, M2Dependent_ModuleChain mptr);
-
-/*
-   ResolveDependant -
-*/
-
-static void ResolveDependant (M2Dependent_ModuleChain mptr, void * currentmodule, void * libname);
-
-/*
-   PerformRequestDependant - the current modulename has a dependancy upon
-                             dependantmodule.  If dependantmodule is NIL then
-                             modulename has no further dependants and it can be
-                             resolved.
-*/
-
-static void PerformRequestDependant (void * modulename, void * libname, void * dependantmodule, void * dependantlibname);
-
-/*
-   ResolveDependencies - resolve dependencies for currentmodule, libname.
-*/
-
-static void ResolveDependencies (void * currentmodule, void * libname);
-
-/*
-   DisplayModuleInfo - displays all module in the state.
-*/
-
-static void DisplayModuleInfo (M2Dependent_DependencyState state, const char *desc_, unsigned int _desc_high);
-
-/*
-   DumpModuleData -
-*/
-
-static void DumpModuleData (unsigned int flag);
-
-/*
-   combine - dest := src + dest.  Places src at the front of list dest.
-             Pre condition:  src, dest are lists.
-             Post condition : dest := src + dest
-                              src := NIL.
-*/
-
-static void combine (M2Dependent_DependencyState src, M2Dependent_DependencyState dest);
-
-/*
-   tracemodule -
-*/
-
-static void tracemodule (unsigned int flag, void * modname, unsigned int modlen, void * libname, unsigned int liblen);
-
-/*
-   ForceModule -
-*/
-
-static void ForceModule (void * modname, unsigned int modlen, void * libname, unsigned int liblen);
-
-/*
-   ForceDependencies - if the user has specified a forced order then we override
-                       the dynamic ordering with the preference.
-*/
-
-static void ForceDependencies (void);
-
-/*
-   CheckApplication - check to see that the application is the last entry in the list.
-                      This might happen if the application only imports FOR C modules.
-*/
-
-static void CheckApplication (void);
-
-/*
-   warning3 - write format arg1 arg2 to stderr.
-*/
-
-static void warning3 (const char *format_, unsigned int _format_high, void * arg1, void * arg2);
-
-/*
-   equal - return TRUE if C string cstr is equal to str.
-*/
-
-static unsigned int equal (void * cstr, const char *str_, unsigned int _str_high);
-
-/*
-   SetupDebugFlags - By default assigns ModuleTrace, DependencyTrace,
-                     DumpPostInit to FALSE.  It checks the environment
-                     GCC_M2LINK_RTFLAG which can contain
-                     "all,module,hex,pre,post,dep,force".  all turns them all on.
-                     The flag meanings are as follows and flags the are in
-                     execution order.
-
-                     module   generate trace info as the modules are registered.
-                     hex      dump the modules ctor functions address in hex.
-                     pre      generate a list of all modules seen prior to having
-                              their dependancies resolved.
-                     dep      display a trace as the modules are resolved.
-                     post     generate a list of all modules seen after having
-                              their dependancies resolved dynamically.
-                     force    generate a list of all modules seen after having
-                              their dependancies resolved and forced.
-*/
-
-static void SetupDebugFlags (void);
-
-/*
-   Init - initialize the debug flags and set all lists to NIL.
-*/
-
-static void Init (void);
-
-/*
-   CheckInitialized - checks to see if this module has been initialized
-                      and if it has not it calls Init.  We need this
-                      approach as this module is called by module ctors
-                      before we reach main.
-*/
-
-static void CheckInitialized (void);
-
-
-/*
-   CreateModule - creates a new module entry and returns the
-                  ModuleChain.
-*/
-
-static M2Dependent_ModuleChain CreateModule (void * name, void * libname, M2Dependent_ArgCVEnvP init, M2Dependent_ArgCVEnvP fini, PROC dependencies)
-{
-  M2Dependent_ModuleChain mptr;
-  void * p0;
-  void * p1;
-
-  Storage_ALLOCATE ((void **) &mptr, sizeof (M2Dependent__T2));
-  mptr->name = name;
-  mptr->libname = libname;
-  mptr->init = init;
-  mptr->fini = fini;
-  mptr->dependency.proc = dependencies;
-  mptr->dependency.state = M2Dependent_unregistered;
-  mptr->prev = NULL;
-  mptr->next = NULL;
-  if (HexTrace)
-    {
-      libc_printf ((const char *) "   (init: %p  fini: %p", 22, init, fini);
-      libc_printf ((const char *) "  dep: %p)", 10, dependencies);
-    }
-  return mptr;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   AppendModule - append chain to end of the list.
-*/
-
-static void AppendModule (M2Dependent_ModuleChain *head, M2Dependent_ModuleChain chain)
-{
-  if ((*head) == NULL)
-    {
-      (*head) = chain;
-      chain->prev = chain;
-      chain->next = chain;
-    }
-  else
-    {
-      chain->next = (*head);  /* Add Item to the end of list.  */
-      chain->prev = (*head)->prev;  /* Add Item to the end of list.  */
-      (*head)->prev->next = chain;
-      (*head)->prev = chain;
-    }
-}
-
-
-/*
-   RemoveModule - remove chain from double linked list head.
-*/
-
-static void RemoveModule (M2Dependent_ModuleChain *head, M2Dependent_ModuleChain chain)
-{
-  if ((chain->next == (*head)) && (chain == (*head)))
-    {
-      (*head) = NULL;
-    }
-  else
-    {
-      if ((*head) == chain)
-        {
-          (*head) = (*head)->next;
-        }
-      chain->prev->next = chain->next;
-      chain->next->prev = chain->prev;
-    }
-}
-
-
-/*
-   onChain - returns TRUE if mptr is on the Modules[state] list.
-*/
-
-static unsigned int onChain (M2Dependent_DependencyState state, M2Dependent_ModuleChain mptr)
-{
-  M2Dependent_ModuleChain ptr;
-
-  if (Modules.array[state-M2Dependent_unregistered] != NULL)
-    {
-      ptr = Modules.array[state-M2Dependent_unregistered];
-      do {
-        if (ptr == mptr)
-          {
-            return TRUE;
-          }
-        ptr = ptr->next;
-      } while (! (ptr == Modules.array[state-M2Dependent_unregistered]));
-    }
-  return FALSE;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   max -
-*/
-
-static unsigned int max (unsigned int a, unsigned int b)
-{
-  if (a > b)
-    {
-      return a;
-    }
-  else
-    {
-      return b;
-    }
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   min -
-*/
-
-static unsigned int min (unsigned int a, unsigned int b)
-{
-  if (a < b)
-    {
-      return a;
-    }
-  else
-    {
-      return b;
-    }
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   LookupModuleN - lookup module from the state list.
-                   The strings lengths are known.
-*/
-
-static M2Dependent_ModuleChain LookupModuleN (M2Dependent_DependencyState state, void * name, unsigned int namelen, void * libname, unsigned int libnamelen)
-{
-  M2Dependent_ModuleChain ptr;
-
-  if (Modules.array[state-M2Dependent_unregistered] != NULL)
-    {
-      ptr = Modules.array[state-M2Dependent_unregistered];
-      do {
-        if (((strncmp (reinterpret_cast<M2LINK_PtrToChar> (ptr->name), reinterpret_cast<M2LINK_PtrToChar> (name), max (namelen, static_cast<unsigned int> (strlen_ (reinterpret_cast<M2LINK_PtrToChar> (ptr->name)))))) == 0) && ((strncmp (reinterpret_cast<M2LINK_PtrToChar> (ptr->libname), reinterpret_cast<M2LINK_PtrToChar> (libname), max (libnamelen, static_cast<unsigned int> (strlen_ (reinterpret_cast<M2LINK_PtrToChar> (ptr->libname)))))) == 0))
-          {
-            return ptr;
-          }
-        ptr = ptr->next;
-      } while (! (ptr == Modules.array[state-M2Dependent_unregistered]));
-    }
-  return NULL;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   LookupModule - lookup and return the ModuleChain pointer containing
-                  module name from a particular list.
-*/
-
-static M2Dependent_ModuleChain LookupModule (M2Dependent_DependencyState state, void * name, void * libname)
-{
-  return LookupModuleN (state, name, static_cast<unsigned int> (strlen_ (reinterpret_cast<M2LINK_PtrToChar> (name))), libname, static_cast<unsigned int> (strlen_ (reinterpret_cast<M2LINK_PtrToChar> (libname))));
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   toCString - replace any character sequence 
- into a newline.
-*/
-
-static void toCString (char *str, unsigned int _str_high)
-{
-  unsigned int high;
-  unsigned int i;
-  unsigned int j;
-
-  i = 0;
-  high = _str_high;
-  while (i < high)
-    {
-      if ((i < high) && (str[i] == '\\'))
-        {
-          if (str[i+1] == 'n')
-            {
-              str[i] = ASCII_nl;
-              j = i+1;
-              while (j < high)
-                {
-                  str[j] = str[j+1];
-                  j += 1;
-                }
-            }
-        }
-      i += 1;
-    }
-}
-
-
-/*
-   strcmp - return 0 if both strings are equal.
-            We cannot use Builtins.def during bootstrap.
-*/
-
-static int strcmp (M2LINK_PtrToChar a, M2LINK_PtrToChar b)
-{
-  if ((a != NULL) && (b != NULL))
-    {
-      /* avoid gcc warning by using compound statement even if not strictly necessary.  */
-      if (a == b)
-        {
-          return 0;
-        }
-      else
-        {
-          while ((*a) == (*b))
-            {
-              if ((*a) == ASCII_nul)
-                {
-                  return 0;
-                }
-              a += 1;
-              b += 1;
-            }
-        }
-    }
-  return 1;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   strncmp - return 0 if both strings are equal.
-             We cannot use Builtins.def during bootstrap.
-*/
-
-static int strncmp (M2LINK_PtrToChar a, M2LINK_PtrToChar b, unsigned int n)
-{
-  if (n == 0)
-    {
-      return 0;
-    }
-  else if ((a != NULL) && (b != NULL))
-    {
-      /* avoid dangling else.  */
-      if (a == b)
-        {
-          return 0;
-        }
-      else
-        {
-          while (((*a) == (*b)) && (n > 0))
-            {
-              if (((*a) == ASCII_nul) || (n == 1))
-                {
-                  return 0;
-                }
-              a += 1;
-              b += 1;
-              n -= 1;
-            }
-        }
-    }
-  return 1;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   strlen - returns the length of string.
-*/
-
-static int strlen_ (M2LINK_PtrToChar string)
-{
-  int count;
-
-  if (string == NULL)
-    {
-      return 0;
-    }
-  else
-    {
-      count = 0;
-      while ((*string) != ASCII_nul)
-        {
-          string += 1;
-          count += 1;
-        }
-      return count;
-    }
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   traceprintf - wrap printf with a boolean flag.
-*/
-
-static void traceprintf (unsigned int flag, const char *str_, unsigned int _str_high)
-{
-  char str[_str_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (str, str_, _str_high+1);
-
-  if (flag)
-    {
-      toCString ((char *) str, _str_high);
-      libc_printf ((const char *) str, _str_high);
-    }
-}
-
-
-/*
-   traceprintf2 - wrap printf with a boolean flag.
-*/
-
-static void traceprintf2 (unsigned int flag, const char *str_, unsigned int _str_high, void * arg)
-{
-  char ch;
-  char str[_str_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (str, str_, _str_high+1);
-
-  if (flag)
-    {
-      toCString ((char *) str, _str_high);
-      if (arg == NULL)
-        {
-          ch = (char) 0;
-          arg = &ch;
-        }
-      libc_printf ((const char *) str, _str_high, arg);
-    }
-}
-
-
-/*
-   traceprintf3 - wrap printf with a boolean flag.
-*/
-
-static void traceprintf3 (unsigned int flag, const char *str_, unsigned int _str_high, void * arg1, void * arg2)
-{
-  char ch;
-  char str[_str_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (str, str_, _str_high+1);
-
-  if (flag)
-    {
-      toCString ((char *) str, _str_high);
-      if (arg1 == NULL)
-        {
-          ch = (char) 0;
-          arg1 = &ch;
-        }
-      if (arg2 == NULL)
-        {
-          ch = (char) 0;
-          arg2 = &ch;
-        }
-      libc_printf ((const char *) str, _str_high, arg1, arg2);
-    }
-}
-
-
-/*
-   moveTo - moves mptr to the new list determined by newstate.
-            It updates the mptr state appropriately.
-*/
-
-static void moveTo (M2Dependent_DependencyState newstate, M2Dependent_ModuleChain mptr)
-{
-  if (onChain (mptr->dependency.state, mptr))
-    {
-      RemoveModule (&Modules.array[mptr->dependency.state-M2Dependent_unregistered], mptr);
-    }
-  mptr->dependency.state = newstate;
-  AppendModule (&Modules.array[mptr->dependency.state-M2Dependent_unregistered], mptr);
-}
-
-
-/*
-   ResolveDependant -
-*/
-
-static void ResolveDependant (M2Dependent_ModuleChain mptr, void * currentmodule, void * libname)
-{
-  if (mptr == NULL)
-    {
-      traceprintf3 (DependencyTrace, (const char *) "   module %s [%s] has not been registered via a global constructor\\n", 68, currentmodule, libname);
-    }
-  else
-    {
-      if (onChain (M2Dependent_started, mptr))
-        {
-          traceprintf (DependencyTrace, (const char *) "   processing...\\n", 18);
-        }
-      else
-        {
-          moveTo (M2Dependent_started, mptr);
-          traceprintf3 (DependencyTrace, (const char *) "   starting: %s [%s]\\n", 22, currentmodule, libname);
-          (*mptr->dependency.proc.proc) ();  /* Invoke and process the dependency graph.  */
-          traceprintf3 (DependencyTrace, (const char *) "   finished: %s [%s]\\n", 22, currentmodule, libname);  /* Invoke and process the dependency graph.  */
-          moveTo (M2Dependent_ordered, mptr);
-        }
-    }
-}
-
-
-/*
-   PerformRequestDependant - the current modulename has a dependancy upon
-                             dependantmodule.  If dependantmodule is NIL then
-                             modulename has no further dependants and it can be
-                             resolved.
-*/
-
-static void PerformRequestDependant (void * modulename, void * libname, void * dependantmodule, void * dependantlibname)
-{
-  M2Dependent_ModuleChain mptr;
-
-  traceprintf3 (DependencyTrace, (const char *) "  module %s [%s]", 16, modulename, libname);
-  if (dependantmodule == NULL)
-    {
-      /* avoid dangling else.  */
-      traceprintf (DependencyTrace, (const char *) " has finished its import graph\\n", 32);
-      mptr = LookupModule (M2Dependent_unordered, modulename, libname);
-      if (mptr != NULL)
-        {
-          traceprintf3 (DependencyTrace, (const char *) "  module %s [%s] is now ordered\\n", 33, modulename, libname);
-          moveTo (M2Dependent_ordered, mptr);
-        }
-    }
-  else
-    {
-      traceprintf3 (DependencyTrace, (const char *) " imports from %s [%s]\\n", 23, dependantmodule, dependantlibname);
-      mptr = LookupModule (M2Dependent_ordered, dependantmodule, dependantlibname);
-      if (mptr == NULL)
-        {
-          traceprintf3 (DependencyTrace, (const char *) "  module %s [%s] is not ordered\\n", 33, dependantmodule, dependantlibname);
-          mptr = LookupModule (M2Dependent_unordered, dependantmodule, dependantlibname);
-          if (mptr == NULL)
-            {
-              traceprintf3 (DependencyTrace, (const char *) "  module %s [%s] is not unordered\\n", 35, dependantmodule, dependantlibname);
-              mptr = LookupModule (M2Dependent_started, dependantmodule, dependantlibname);
-              if (mptr == NULL)
-                {
-                  traceprintf3 (DependencyTrace, (const char *) "  module %s [%s] has not started\\n", 34, dependantmodule, dependantlibname);
-                  traceprintf3 (DependencyTrace, (const char *) "  module %s [%s] attempting to import from", 42, modulename, libname);
-                  traceprintf3 (DependencyTrace, (const char *) " %s [%s] which has not registered itself via a constructor\\n", 60, dependantmodule, dependantlibname);
-                }
-              else
-                {
-                  traceprintf3 (DependencyTrace, (const char *) "  module %s [%s] has registered itself and has started\\n", 56, dependantmodule, dependantlibname);
-                }
-            }
-          else
-            {
-              traceprintf3 (DependencyTrace, (const char *) "  module %s [%s] resolving\\n", 28, dependantmodule, dependantlibname);
-              ResolveDependant (mptr, dependantmodule, dependantlibname);
-            }
-        }
-      else
-        {
-          traceprintf3 (DependencyTrace, (const char *) "  module %s [%s]", 16, modulename, libname);
-          traceprintf3 (DependencyTrace, (const char *) " dependant %s [%s] is ordered\\n", 31, dependantmodule, dependantlibname);
-        }
-    }
-}
-
-
-/*
-   ResolveDependencies - resolve dependencies for currentmodule, libname.
-*/
-
-static void ResolveDependencies (void * currentmodule, void * libname)
-{
-  M2Dependent_ModuleChain mptr;
-
-  mptr = LookupModule (M2Dependent_unordered, currentmodule, libname);
-  while (mptr != NULL)
-    {
-      traceprintf3 (DependencyTrace, (const char *) "   attempting to resolve the dependants for %s [%s]\\n", 53, currentmodule, libname);
-      ResolveDependant (mptr, currentmodule, libname);
-      mptr = Modules.array[M2Dependent_unordered-M2Dependent_unregistered];
-    }
-}
-
-
-/*
-   DisplayModuleInfo - displays all module in the state.
-*/
-
-static void DisplayModuleInfo (M2Dependent_DependencyState state, const char *desc_, unsigned int _desc_high)
-{
-  M2Dependent_ModuleChain mptr;
-  unsigned int count;
-  char desc[_desc_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (desc, desc_, _desc_high+1);
-
-  if (Modules.array[state-M2Dependent_unregistered] != NULL)
-    {
-      libc_printf ((const char *) "%s modules\\n", 12, &desc);
-      mptr = Modules.array[state-M2Dependent_unregistered];
-      count = 0;
-      do {
-        if (mptr->name == NULL)
-          {
-            libc_printf ((const char *) "  %d  %s []", 11, count, mptr->name);
-          }
-        else
-          {
-            libc_printf ((const char *) "  %d  %s [%s]", 13, count, mptr->name, mptr->libname);
-          }
-        count += 1;
-        if (mptr->dependency.appl)
-          {
-            libc_printf ((const char *) " application", 12);
-          }
-        if (mptr->dependency.forc)
-          {
-            libc_printf ((const char *) " for C", 6);
-          }
-        if (mptr->dependency.forced)
-          {
-            libc_printf ((const char *) " forced ordering", 16);
-          }
-        libc_printf ((const char *) "\\n", 2);
-        mptr = mptr->next;
-      } while (! (mptr == Modules.array[state-M2Dependent_unregistered]));
-    }
-}
-
-
-/*
-   DumpModuleData -
-*/
-
-static void DumpModuleData (unsigned int flag)
-{
-  M2Dependent_ModuleChain mptr;
-
-  if (flag)
-    {
-      DisplayModuleInfo (M2Dependent_unregistered, (const char *) "unregistered", 12);
-      DisplayModuleInfo (M2Dependent_unordered, (const char *) "unordered", 9);
-      DisplayModuleInfo (M2Dependent_started, (const char *) "started", 7);
-      DisplayModuleInfo (M2Dependent_ordered, (const char *) "ordered", 7);
-    }
-}
-
-
-/*
-   combine - dest := src + dest.  Places src at the front of list dest.
-             Pre condition:  src, dest are lists.
-             Post condition : dest := src + dest
-                              src := NIL.
-*/
-
-static void combine (M2Dependent_DependencyState src, M2Dependent_DependencyState dest)
-{
-  M2Dependent_ModuleChain last;
-
-  while (Modules.array[src-M2Dependent_unregistered] != NULL)
-    {
-      last = Modules.array[src-M2Dependent_unregistered]->prev;
-      moveTo (M2Dependent_ordered, last);
-      Modules.array[dest-M2Dependent_unregistered] = last;  /* New item is at the head.  */
-    }
-}
-
-
-/*
-   tracemodule -
-*/
-
-static void tracemodule (unsigned int flag, void * modname, unsigned int modlen, void * libname, unsigned int liblen)
-{
-  typedef struct tracemodule__T4_a tracemodule__T4;
-
-  struct tracemodule__T4_a { char array[100+1]; };
-  tracemodule__T4 buffer;
-  unsigned int len;
-
-  if (flag)
-    {
-      len = min (modlen, sizeof (buffer)-1);
-      libc_strncpy (&buffer, modname, len);
-      buffer.array[len] = (char) 0;
-      libc_printf ((const char *) "%s ", 3, &buffer);
-      len = min (liblen, sizeof (buffer)-1);
-      libc_strncpy (&buffer, libname, len);
-      buffer.array[len] = (char) 0;
-      libc_printf ((const char *) " [%s]", 5, &buffer);
-    }
-}
-
-
-/*
-   ForceModule -
-*/
-
-static void ForceModule (void * modname, unsigned int modlen, void * libname, unsigned int liblen)
-{
-  M2Dependent_ModuleChain mptr;
-
-  traceprintf (ForceTrace, (const char *) "forcing module: ", 16);
-  tracemodule (ForceTrace, modname, modlen, libname, liblen);
-  traceprintf (ForceTrace, (const char *) "\\n", 2);
-  mptr = LookupModuleN (M2Dependent_ordered, modname, modlen, libname, liblen);
-  if (mptr != NULL)
-    {
-      mptr->dependency.forced = TRUE;
-      moveTo (M2Dependent_user, mptr);
-    }
-}
-
-
-/*
-   ForceDependencies - if the user has specified a forced order then we override
-                       the dynamic ordering with the preference.
-*/
-
-static void ForceDependencies (void)
-{
-  unsigned int len;
-  unsigned int modlen;
-  unsigned int liblen;
-  M2LINK_PtrToChar modname;
-  M2LINK_PtrToChar libname;
-  M2LINK_PtrToChar pc;
-  M2LINK_PtrToChar start;
-
-  if (M2LINK_ForcedModuleInitOrder != NULL)
-    {
-      traceprintf2 (ForceTrace, (const char *) "user forcing order: %s\\n", 24, reinterpret_cast<void *> (M2LINK_ForcedModuleInitOrder));
-      pc = M2LINK_ForcedModuleInitOrder;
-      start = pc;
-      len = 0;
-      modname = NULL;
-      modlen = 0;
-      libname = NULL;
-      liblen = 0;
-      while ((*pc) != ASCII_nul)
-        {
-          switch ((*pc))
-            {
-              case ':':
-                libname = start;
-                liblen = len;
-                len = 0;
-                pc += 1;
-                start = pc;
-                break;
-
-              case ',':
-                modname = start;
-                modlen = len;
-                ForceModule (reinterpret_cast<void *> (modname), modlen, reinterpret_cast<void *> (libname), liblen);
-                libname = NULL;
-                liblen = 0;
-                modlen = 0;
-                len = 0;
-                pc += 1;
-                start = pc;
-                break;
-
-
-              default:
-                pc += 1;
-                len += 1;
-                break;
-            }
-        }
-      if (start != pc)
-        {
-          ForceModule (reinterpret_cast<void *> (start), len, reinterpret_cast<void *> (libname), liblen);
-        }
-      combine (M2Dependent_user, M2Dependent_ordered);
-    }
-}
-
-
-/*
-   CheckApplication - check to see that the application is the last entry in the list.
-                      This might happen if the application only imports FOR C modules.
-*/
-
-static void CheckApplication (void)
-{
-  M2Dependent_ModuleChain mptr;
-  M2Dependent_ModuleChain appl;
-
-  mptr = Modules.array[M2Dependent_ordered-M2Dependent_unregistered];
-  if (mptr != NULL)
-    {
-      appl = NULL;
-      do {
-        if (mptr->dependency.appl)
-          {
-            appl = mptr;
-          }
-        else
-          {
-            mptr = mptr->next;
-          }
-      } while (! ((appl != NULL) || (mptr == Modules.array[M2Dependent_ordered-M2Dependent_unregistered])));
-      if (appl != NULL)
-        {
-          RemoveModule (&Modules.array[M2Dependent_ordered-M2Dependent_unregistered], appl);
-          AppendModule (&Modules.array[M2Dependent_ordered-M2Dependent_unregistered], appl);
-        }
-    }
-}
-
-
-/*
-   warning3 - write format arg1 arg2 to stderr.
-*/
-
-static void warning3 (const char *format_, unsigned int _format_high, void * arg1, void * arg2)
-{
-  typedef struct warning3__T5_a warning3__T5;
-
-  struct warning3__T5_a { char array[4096+1]; };
-  warning3__T5 buffer;
-  int len;
-  char format[_format_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (format, format_, _format_high+1);
-
-  if (WarningTrace)
-    {
-      len = libc_snprintf (&buffer, static_cast<size_t> (sizeof (buffer)), (const char *) "warning: ", 9);
-      libc_write (2, &buffer, static_cast<size_t> (len));
-      len = libc_snprintf (&buffer, static_cast<size_t> (sizeof (buffer)), (const char *) format, _format_high, arg1, arg2);
-      libc_write (2, &buffer, static_cast<size_t> (len));
-    }
-}
-
-
-/*
-   equal - return TRUE if C string cstr is equal to str.
-*/
-
-static unsigned int equal (void * cstr, const char *str_, unsigned int _str_high)
-{
-  char str[_str_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (str, str_, _str_high+1);
-
-  return (strncmp (reinterpret_cast<M2LINK_PtrToChar> (cstr), reinterpret_cast<M2LINK_PtrToChar> (&str), StrLib_StrLen ((const char *) str, _str_high))) == 0;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   SetupDebugFlags - By default assigns ModuleTrace, DependencyTrace,
-                     DumpPostInit to FALSE.  It checks the environment
-                     GCC_M2LINK_RTFLAG which can contain
-                     "all,module,hex,pre,post,dep,force".  all turns them all on.
-                     The flag meanings are as follows and flags the are in
-                     execution order.
-
-                     module   generate trace info as the modules are registered.
-                     hex      dump the modules ctor functions address in hex.
-                     pre      generate a list of all modules seen prior to having
-                              their dependancies resolved.
-                     dep      display a trace as the modules are resolved.
-                     post     generate a list of all modules seen after having
-                              their dependancies resolved dynamically.
-                     force    generate a list of all modules seen after having
-                              their dependancies resolved and forced.
-*/
-
-static void SetupDebugFlags (void)
-{
-  typedef char *SetupDebugFlags__T1;
-
-  SetupDebugFlags__T1 pc;
-
-  ModuleTrace = FALSE;
-  DependencyTrace = FALSE;
-  PostTrace = FALSE;
-  PreTrace = FALSE;
-  ForceTrace = FALSE;
-  HexTrace = FALSE;
-  WarningTrace = FALSE;
-  pc = static_cast<SetupDebugFlags__T1> (libc_getenv (const_cast<void*> (reinterpret_cast<const void*>("GCC_M2LINK_RTFLAG"))));
-  while ((pc != NULL) && ((*pc) != ASCII_nul))
-    {
-      if (equal (reinterpret_cast<void *> (pc), (const char *) "all", 3))
-        {
-          ModuleTrace = TRUE;
-          DependencyTrace = TRUE;
-          PreTrace = TRUE;
-          PostTrace = TRUE;
-          ForceTrace = TRUE;
-          HexTrace = TRUE;
-          WarningTrace = TRUE;
-          pc += 3;
-        }
-      else if (equal (reinterpret_cast<void *> (pc), (const char *) "module", 6))
-        {
-          /* avoid dangling else.  */
-          ModuleTrace = TRUE;
-          pc += 6;
-        }
-      else if (equal (reinterpret_cast<void *> (pc), (const char *) "warning", 7))
-        {
-          /* avoid dangling else.  */
-          WarningTrace = TRUE;
-          pc += 7;
-        }
-      else if (equal (reinterpret_cast<void *> (pc), (const char *) "hex", 3))
-        {
-          /* avoid dangling else.  */
-          HexTrace = TRUE;
-          pc += 3;
-        }
-      else if (equal (reinterpret_cast<void *> (pc), (const char *) "dep", 3))
-        {
-          /* avoid dangling else.  */
-          DependencyTrace = TRUE;
-          pc += 3;
-        }
-      else if (equal (reinterpret_cast<void *> (pc), (const char *) "pre", 3))
-        {
-          /* avoid dangling else.  */
-          PreTrace = TRUE;
-          pc += 3;
-        }
-      else if (equal (reinterpret_cast<void *> (pc), (const char *) "post", 4))
-        {
-          /* avoid dangling else.  */
-          PostTrace = TRUE;
-          pc += 4;
-        }
-      else if (equal (reinterpret_cast<void *> (pc), (const char *) "force", 5))
-        {
-          /* avoid dangling else.  */
-          ForceTrace = TRUE;
-          pc += 5;
-        }
-      else
-        {
-          /* avoid dangling else.  */
-          pc += 1;
-        }
-    }
-}
-
-
-/*
-   Init - initialize the debug flags and set all lists to NIL.
-*/
-
-static void Init (void)
-{
-  M2Dependent_DependencyState state;
-
-  SetupDebugFlags ();
-  for (state=M2Dependent_unregistered; state<=M2Dependent_user; state= static_cast<M2Dependent_DependencyState>(static_cast<int>(state+1)))
-    {
-      Modules.array[state-M2Dependent_unregistered] = NULL;
-    }
-}
-
-
-/*
-   CheckInitialized - checks to see if this module has been initialized
-                      and if it has not it calls Init.  We need this
-                      approach as this module is called by module ctors
-                      before we reach main.
-*/
-
-static void CheckInitialized (void)
-{
-  if (! Initialized)
-    {
-      Initialized = TRUE;
-      Init ();
-    }
-}
-
-
-/*
-   ConstructModules - resolve dependencies and then call each
-                      module constructor in turn.
-*/
-
-extern "C" void M2Dependent_ConstructModules (void * applicationmodule, void * libname, int argc, void * argv, void * envp)
-{
-  M2Dependent_ModuleChain mptr;
-  M2Dependent_ArgCVEnvP nulp;
-
-  CheckInitialized ();
-  traceprintf3 (ModuleTrace, (const char *) "application module: %s [%s]\\n", 29, applicationmodule, libname);
-  mptr = LookupModule (M2Dependent_unordered, applicationmodule, libname);
-  if (mptr != NULL)
-    {
-      mptr->dependency.appl = TRUE;
-    }
-  traceprintf (PreTrace, (const char *) "Pre resolving dependents\\n", 26);
-  DumpModuleData (PreTrace);
-  ResolveDependencies (applicationmodule, libname);
-  traceprintf (PreTrace, (const char *) "Post resolving dependents\\n", 27);
-  DumpModuleData (PostTrace);
-  ForceDependencies ();
-  traceprintf (ForceTrace, (const char *) "After user forcing ordering\\n", 29);
-  DumpModuleData (ForceTrace);
-  CheckApplication ();
-  traceprintf (ForceTrace, (const char *) "After runtime forces application to the end\\n", 45);
-  DumpModuleData (ForceTrace);
-  if (Modules.array[M2Dependent_ordered-M2Dependent_unregistered] == NULL)
-    {
-      traceprintf3 (ModuleTrace, (const char *) "  module: %s [%s] has not registered itself using a global constructor\\n", 72, applicationmodule, libname);
-      traceprintf2 (ModuleTrace, (const char *) "  hint try compile and linking using: gm2 %s.mod\\n", 50, applicationmodule);
-      traceprintf2 (ModuleTrace, (const char *) "  or try using: gm2 -fscaffold-static %s.mod\\n", 46, applicationmodule);
-    }
-  else
-    {
-      mptr = Modules.array[M2Dependent_ordered-M2Dependent_unregistered];
-      do {
-        if (mptr->dependency.forc)
-          {
-            traceprintf3 (ModuleTrace, (const char *) "initializing module: %s [%s] for C\\n", 36, mptr->name, mptr->libname);
-          }
-        else
-          {
-            traceprintf3 (ModuleTrace, (const char *) "initializing module: %s [%s]\\n", 30, mptr->name, mptr->libname);
-          }
-        if (mptr->dependency.appl)
-          {
-            traceprintf3 (ModuleTrace, (const char *) "application module: %s [%s]\\n", 29, mptr->name, mptr->libname);
-            traceprintf (ModuleTrace, (const char *) "  calling M2RTS_ExecuteInitialProcedures\\n", 42);
-            M2RTS_ExecuteInitialProcedures ();
-            traceprintf (ModuleTrace, (const char *) "  calling application module\\n", 30);
-          }
-        (*mptr->init.proc) (argc, argv, envp);
-        mptr = mptr->next;
-      } while (! (mptr == Modules.array[M2Dependent_ordered-M2Dependent_unregistered]));
-    }
-}
-
-
-/*
-   DeconstructModules - resolve dependencies and then call each
-                        module constructor in turn.
-*/
-
-extern "C" void M2Dependent_DeconstructModules (void * applicationmodule, void * libname, int argc, void * argv, void * envp)
-{
-  M2Dependent_ModuleChain mptr;
-
-  traceprintf3 (ModuleTrace, (const char *) "application module finishing: %s [%s]\\n", 39, applicationmodule, libname);
-  if (Modules.array[M2Dependent_ordered-M2Dependent_unregistered] == NULL)
-    {
-      traceprintf (ModuleTrace, (const char *) "  no ordered modules found during finishing\\n", 45);
-    }
-  else
-    {
-      traceprintf (ModuleTrace, (const char *) "ExecuteTerminationProcedures\\n", 30);
-      M2RTS_ExecuteTerminationProcedures ();
-      traceprintf (ModuleTrace, (const char *) "terminating modules in sequence\\n", 33);
-      mptr = Modules.array[M2Dependent_ordered-M2Dependent_unregistered]->prev;
-      do {
-        if (mptr->dependency.forc)
-          {
-            traceprintf3 (ModuleTrace, (const char *) "finalizing module: %s [%s] for C\\n", 34, mptr->name, mptr->libname);
-          }
-        else
-          {
-            traceprintf3 (ModuleTrace, (const char *) "finalizing module: %s [%s]\\n", 28, mptr->name, mptr->libname);
-          }
-        (*mptr->fini.proc) (argc, argv, envp);
-        mptr = mptr->prev;
-      } while (! (mptr == Modules.array[M2Dependent_ordered-M2Dependent_unregistered]->prev));
-    }
-}
-
-
-/*
-   RegisterModule - adds module name to the list of outstanding
-                    modules which need to have their dependencies
-                    explored to determine initialization order.
-*/
-
-extern "C" void M2Dependent_RegisterModule (void * modulename, void * libname, M2Dependent_ArgCVEnvP init, M2Dependent_ArgCVEnvP fini, PROC dependencies)
-{
-  M2Dependent_ModuleChain mptr;
-
-  CheckInitialized ();
-  if (! M2LINK_StaticInitialization)
-    {
-      mptr = LookupModule (M2Dependent_unordered, modulename, libname);
-      if (mptr == NULL)
-        {
-          traceprintf3 (ModuleTrace, (const char *) "module: %s [%s] registering", 27, modulename, libname);
-          moveTo (M2Dependent_unordered, CreateModule (modulename, libname, init, fini, dependencies));
-          traceprintf (ModuleTrace, (const char *) "\\n", 2);
-        }
-      else
-        {
-          warning3 ((const char *) "module: %s [%s] (ignoring duplicate registration)\\n", 51, modulename, libname);
-        }
-    }
-}
-
-
-/*
-   RequestDependant - used to specify that modulename is dependant upon
-                      module dependantmodule.  It only takes effect
-                      if we are not using StaticInitialization.
-*/
-
-extern "C" void M2Dependent_RequestDependant (void * modulename, void * libname, void * dependantmodule, void * dependantlibname)
-{
-  CheckInitialized ();
-  if (! M2LINK_StaticInitialization)
-    {
-      PerformRequestDependant (modulename, libname, dependantmodule, dependantlibname);
-    }
-}
-
-extern "C" void _M2_M2Dependent_init (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-  CheckInitialized ();
-}
-
-extern "C" void _M2_M2Dependent_fini (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-}
diff --git a/gcc/m2/mc-boot/GM2EXCEPTION.c b/gcc/m2/mc-boot/GM2EXCEPTION.c
deleted file mode 100644
index 387b0476462..00000000000
--- a/gcc/m2/mc-boot/GM2EXCEPTION.c
+++ /dev/null
@@ -1,89 +0,0 @@
-/* do not edit automatically generated by mc from M2EXCEPTION.  */
-/* M2EXCEPTION.mod implement M2Exception and IsM2Exception.
-
-Copyright (C) 2001-2023 Free Software Foundation, Inc.
-Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>.
-
-This file is part of GNU Modula-2.
-
-GNU Modula-2 is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
-
-GNU Modula-2 is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-General Public License for more details.
-
-Under Section 7 of GPL version 3, you are granted additional
-permissions described in the GCC Runtime Library Exception, version
-3.1, as published by the Free Software Foundation.
-
-You should have received a copy of the GNU General Public License and
-a copy of the GCC Runtime Library Exception along with this program;
-see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
-<http://www.gnu.org/licenses/>.  */
-
-#include "config.h"
-#include "system.h"
-#   if !defined (PROC_D)
-#      define PROC_D
-       typedef void (*PROC_t) (void);
-       typedef struct { PROC_t proc; } PROC;
-#   endif
-
-#   include "Gmcrts.h"
-#define _M2EXCEPTION_H
-#define _M2EXCEPTION_C
-
-#   include "GSYSTEM.h"
-#   include "GRTExceptions.h"
-
-typedef enum {M2EXCEPTION_indexException, M2EXCEPTION_rangeException, M2EXCEPTION_caseSelectException, M2EXCEPTION_invalidLocation, M2EXCEPTION_functionException, M2EXCEPTION_wholeValueException, M2EXCEPTION_wholeDivException, M2EXCEPTION_realValueException, M2EXCEPTION_realDivException, M2EXCEPTION_complexValueException, M2EXCEPTION_complexDivException, M2EXCEPTION_protException, M2EXCEPTION_sysException, M2EXCEPTION_coException, M2EXCEPTION_exException} M2EXCEPTION_M2Exceptions;
-
-extern "C" M2EXCEPTION_M2Exceptions M2EXCEPTION_M2Exception (void);
-extern "C" unsigned int M2EXCEPTION_IsM2Exception (void);
-
-extern "C" M2EXCEPTION_M2Exceptions M2EXCEPTION_M2Exception (void)
-{
-  RTExceptions_EHBlock e;
-  unsigned int n;
-
-  /* If the program or coroutine is in the exception state then return the enumeration
-   value representing the exception cause.  If it is not in the exception state then
-   raises and exception (exException).  */
-  e = RTExceptions_GetExceptionBlock ();
-  n = RTExceptions_GetNumber (e);
-  if (n == (UINT_MAX))
-    {
-      RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_exException)), const_cast<void*> (reinterpret_cast<const void*>("../../gcc-read-write/gcc/m2/gm2-libs/M2EXCEPTION.mod")), 47, 6, const_cast<void*> (reinterpret_cast<const void*>("M2Exception")), const_cast<void*> (reinterpret_cast<const void*>("current coroutine is not in the exceptional execution state")));
-    }
-  else
-    {
-      return (M2EXCEPTION_M2Exceptions) (n);
-    }
-  ReturnException ("../../gcc-read-write/gcc/m2/gm2-libs/M2EXCEPTION.def", 25, 1);
-  __builtin_unreachable ();
-}
-
-extern "C" unsigned int M2EXCEPTION_IsM2Exception (void)
-{
-  RTExceptions_EHBlock e;
-
-  /* Returns TRUE if the program or coroutine is in the exception state.
-   Returns FALSE if the program or coroutine is not in the exception state.  */
-  e = RTExceptions_GetExceptionBlock ();
-  return (RTExceptions_GetNumber (e)) != (UINT_MAX);
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-extern "C" void _M2_M2EXCEPTION_init (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-  RTExceptions_SetExceptionBlock (RTExceptions_InitExceptionBlock ());
-}
-
-extern "C" void _M2_M2EXCEPTION_fini (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-}
diff --git a/gcc/m2/mc-boot/GM2RTS.c b/gcc/m2/mc-boot/GM2RTS.c
deleted file mode 100644
index 2e8680ccb96..00000000000
--- a/gcc/m2/mc-boot/GM2RTS.c
+++ /dev/null
@@ -1,819 +0,0 @@
-/* do not edit automatically generated by mc from M2RTS.  */
-/* M2RTS.mod Implements the run time system facilities of Modula-2.
-
-Copyright (C) 2001-2023 Free Software Foundation, Inc.
-Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>.
-
-This file is part of GNU Modula-2.
-
-GNU Modula-2 is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
-
-GNU Modula-2 is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-General Public License for more details.
-
-Under Section 7 of GPL version 3, you are granted additional
-permissions described in the GCC Runtime Library Exception, version
-3.1, as published by the Free Software Foundation.
-
-You should have received a copy of the GNU General Public License and
-a copy of the GCC Runtime Library Exception along with this program;
-see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
-<http://www.gnu.org/licenses/>.  */
-
-#include "config.h"
-#include "system.h"
-#   if !defined (PROC_D)
-#      define PROC_D
-       typedef void (*PROC_t) (void);
-       typedef struct { PROC_t proc; } PROC;
-#   endif
-
-#   if !defined (TRUE)
-#      define TRUE (1==1)
-#   endif
-
-#   if !defined (FALSE)
-#      define FALSE (1==0)
-#   endif
-
-#   include "GStorage.h"
-#if defined(__cplusplus)
-#   undef NULL
-#   define NULL 0
-#endif
-#define _M2RTS_H
-#define _M2RTS_C
-
-#   include "Glibc.h"
-#   include "GNumberIO.h"
-#   include "GStrLib.h"
-#   include "GSYSTEM.h"
-#   include "GASCII.h"
-#   include "GStorage.h"
-#   include "GRTExceptions.h"
-#   include "GM2EXCEPTION.h"
-#   include "GM2Dependent.h"
-
-typedef struct M2RTS_ArgCVEnvP_p M2RTS_ArgCVEnvP;
-
-#   define stderrFd 2
-typedef struct M2RTS_ProcedureList_r M2RTS_ProcedureList;
-
-typedef char *M2RTS_PtrToChar;
-
-typedef struct M2RTS__T1_r M2RTS__T1;
-
-typedef M2RTS__T1 *M2RTS_ProcedureChain;
-
-typedef void (*M2RTS_ArgCVEnvP_t) (int, void *, void *);
-struct M2RTS_ArgCVEnvP_p { M2RTS_ArgCVEnvP_t proc; };
-
-struct M2RTS_ProcedureList_r {
-                               M2RTS_ProcedureChain head;
-                               M2RTS_ProcedureChain tail;
-                             };
-
-struct M2RTS__T1_r {
-                     PROC p;
-                     M2RTS_ProcedureChain prev;
-                     M2RTS_ProcedureChain next;
-                   };
-
-static M2RTS_ProcedureList InitialProc;
-static M2RTS_ProcedureList TerminateProc;
-static int ExitValue;
-static unsigned int isHalting;
-static unsigned int CallExit;
-static unsigned int Initialized;
-
-/*
-   ConstructModules - resolve dependencies and then call each
-                      module constructor in turn.
-*/
-
-extern "C" void M2RTS_ConstructModules (void * applicationmodule, void * libname, int argc, void * argv, void * envp);
-
-/*
-   DeconstructModules - resolve dependencies and then call each
-                        module constructor in turn.
-*/
-
-extern "C" void M2RTS_DeconstructModules (void * applicationmodule, void * libname, int argc, void * argv, void * envp);
-
-/*
-   RegisterModule - adds module name to the list of outstanding
-                    modules which need to have their dependencies
-                    explored to determine initialization order.
-*/
-
-extern "C" void M2RTS_RegisterModule (void * name, void * libname, M2RTS_ArgCVEnvP init, M2RTS_ArgCVEnvP fini, PROC dependencies);
-
-/*
-   RequestDependant - used to specify that modulename is dependant upon
-                      module dependantmodule.
-*/
-
-extern "C" void M2RTS_RequestDependant (void * modulename, void * libname, void * dependantmodule, void * dependantlibname);
-
-/*
-   InstallTerminationProcedure - installs a procedure, p, which will
-                                 be called when the procedure
-                                 ExecuteTerminationProcedures
-                                 is invoked.  It returns TRUE if the
-                                 procedure is installed.
-*/
-
-extern "C" unsigned int M2RTS_InstallTerminationProcedure (PROC p);
-
-/*
-   ExecuteInitialProcedures - executes the initial procedures installed by
-                              InstallInitialProcedure.
-*/
-
-extern "C" void M2RTS_ExecuteInitialProcedures (void);
-
-/*
-   InstallInitialProcedure - installs a procedure to be executed just
-                             before the BEGIN code section of the
-                             main program module.
-*/
-
-extern "C" unsigned int M2RTS_InstallInitialProcedure (PROC p);
-
-/*
-   ExecuteTerminationProcedures - calls each installed termination procedure
-                                  in reverse order.
-*/
-
-extern "C" void M2RTS_ExecuteTerminationProcedures (void);
-
-/*
-   Terminate - provides compatibility for pim.  It calls exit with
-               the exitcode provided in a prior call to ExitOnHalt
-               (or zero if ExitOnHalt was never called).  It does
-               not call ExecuteTerminationProcedures.
-*/
-
-extern "C" void M2RTS_Terminate (void) __attribute__ ((noreturn));
-
-/*
-   HALT - terminate the current program.  The procedure
-          ExecuteTerminationProcedures
-          is called before the program is stopped.  The parameter
-          exitcode is optional.  If the parameter is not supplied
-          HALT will call libc 'abort', otherwise it will exit with
-          the code supplied.  Supplying a parameter to HALT has the
-          same effect as calling ExitOnHalt with the same code and
-          then calling HALT with no parameter.
-*/
-
-extern "C" void M2RTS_HALT (int exitcode) __attribute__ ((noreturn));
-
-/*
-   Halt - provides a more user friendly version of HALT, which takes
-          four parameters to aid debugging.  It writes an error message
-          to stderr and calls exit (1).
-*/
-
-extern "C" void M2RTS_Halt (const char *filename_, unsigned int _filename_high, unsigned int line, const char *function_, unsigned int _function_high, const char *description_, unsigned int _description_high) __attribute__ ((noreturn));
-
-/*
-   HaltC - provides a more user friendly version of HALT, which takes
-           four parameters to aid debugging.  It writes an error message
-           to stderr and calls exit (1).
-*/
-
-extern "C" void M2RTS_HaltC (void * filename, unsigned int line, void * function, void * description) __attribute__ ((noreturn));
-
-/*
-   ExitOnHalt - if HALT is executed then call exit with the exit code, e.
-*/
-
-extern "C" void M2RTS_ExitOnHalt (int e);
-
-/*
-   ErrorMessage - emits an error message to stderr and then calls exit (1).
-*/
-
-extern "C" void M2RTS_ErrorMessage (const char *message_, unsigned int _message_high, const char *filename_, unsigned int _filename_high, unsigned int line, const char *function_, unsigned int _function_high) __attribute__ ((noreturn));
-
-/*
-   Length - returns the length of a string, a. This is called whenever
-            the user calls LENGTH and the parameter cannot be calculated
-            at compile time.
-*/
-
-extern "C" unsigned int M2RTS_Length (const char *a_, unsigned int _a_high);
-extern "C" void M2RTS_AssignmentException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn));
-extern "C" void M2RTS_ReturnException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn));
-extern "C" void M2RTS_IncException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn));
-extern "C" void M2RTS_DecException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn));
-extern "C" void M2RTS_InclException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn));
-extern "C" void M2RTS_ExclException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn));
-extern "C" void M2RTS_ShiftException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn));
-extern "C" void M2RTS_RotateException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn));
-extern "C" void M2RTS_StaticArraySubscriptException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn));
-extern "C" void M2RTS_DynamicArraySubscriptException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn));
-extern "C" void M2RTS_ForLoopBeginException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn));
-extern "C" void M2RTS_ForLoopToException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn));
-extern "C" void M2RTS_ForLoopEndException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn));
-extern "C" void M2RTS_PointerNilException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn));
-extern "C" void M2RTS_NoReturnException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn));
-extern "C" void M2RTS_CaseException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn));
-extern "C" void M2RTS_WholeNonPosDivException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn));
-extern "C" void M2RTS_WholeNonPosModException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn));
-extern "C" void M2RTS_WholeZeroDivException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn));
-extern "C" void M2RTS_WholeZeroRemException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn));
-extern "C" void M2RTS_WholeValueException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn));
-extern "C" void M2RTS_RealValueException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn));
-extern "C" void M2RTS_ParameterException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn));
-extern "C" void M2RTS_NoException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn));
-
-/*
-   ExecuteReverse - execute the procedure associated with procptr
-                    and then proceed to try and execute all previous
-                    procedures in the chain.
-*/
-
-static void ExecuteReverse (M2RTS_ProcedureChain procptr);
-
-/*
-   AppendProc - append proc to the end of the procedure list
-                defined by proclist.
-*/
-
-static unsigned int AppendProc (M2RTS_ProcedureList *proclist, PROC proc);
-
-/*
-   ErrorString - writes a string to stderr.
-*/
-
-static void ErrorString (const char *a_, unsigned int _a_high);
-
-/*
-   ErrorStringC - writes a string to stderr.
-*/
-
-static void ErrorStringC (void * str);
-
-/*
-   ErrorMessageC - emits an error message to stderr and then calls exit (1).
-*/
-
-static void ErrorMessageC (void * message, void * filename, unsigned int line, void * function) __attribute__ ((noreturn));
-
-/*
-   InitProcList - initialize the head and tail pointers to NIL.
-*/
-
-static void InitProcList (M2RTS_ProcedureList *p);
-
-/*
-   Init - initialize the initial, terminate procedure lists and booleans.
-*/
-
-static void Init (void);
-
-/*
-   CheckInitialized - checks to see if this module has been initialized
-                      and if it has not it calls Init.  We need this
-                      approach as this module is called by module ctors
-                      before we reach main.
-*/
-
-static void CheckInitialized (void);
-
-
-/*
-   ExecuteReverse - execute the procedure associated with procptr
-                    and then proceed to try and execute all previous
-                    procedures in the chain.
-*/
-
-static void ExecuteReverse (M2RTS_ProcedureChain procptr)
-{
-  while (procptr != NULL)
-    {
-      (*procptr->p.proc) ();  /* Invoke the procedure.  */
-      procptr = procptr->prev;  /* Invoke the procedure.  */
-    }
-}
-
-
-/*
-   AppendProc - append proc to the end of the procedure list
-                defined by proclist.
-*/
-
-static unsigned int AppendProc (M2RTS_ProcedureList *proclist, PROC proc)
-{
-  M2RTS_ProcedureChain pdes;
-
-  Storage_ALLOCATE ((void **) &pdes, sizeof (M2RTS__T1));
-  pdes->p = proc;
-  pdes->prev = (*proclist).tail;
-  pdes->next = NULL;
-  if ((*proclist).head == NULL)
-    {
-      (*proclist).head = pdes;
-    }
-  (*proclist).tail = pdes;
-  return TRUE;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   ErrorString - writes a string to stderr.
-*/
-
-static void ErrorString (const char *a_, unsigned int _a_high)
-{
-  int n;
-  char a[_a_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (a, a_, _a_high+1);
-
-  n = static_cast<int> (libc_write (stderrFd, &a, static_cast<size_t> (StrLib_StrLen ((const char *) a, _a_high))));
-}
-
-
-/*
-   ErrorStringC - writes a string to stderr.
-*/
-
-static void ErrorStringC (void * str)
-{
-  int len;
-
-  len = static_cast<int> (libc_write (stderrFd, str, libc_strlen (str)));
-}
-
-
-/*
-   ErrorMessageC - emits an error message to stderr and then calls exit (1).
-*/
-
-static void ErrorMessageC (void * message, void * filename, unsigned int line, void * function)
-{
-  typedef struct ErrorMessageC__T2_a ErrorMessageC__T2;
-
-  struct ErrorMessageC__T2_a { char array[10+1]; };
-  ErrorMessageC__T2 buffer;
-
-  ErrorStringC (filename);
-  ErrorString ((const char *) ":", 1);
-  NumberIO_CardToStr (line, 0, (char *) &buffer.array[0], 10);
-  ErrorString ((const char *) &buffer.array[0], 10);
-  ErrorString ((const char *) ":", 1);
-  if ((libc_strlen (function)) > 0)
-    {
-      ErrorString ((const char *) "in ", 3);
-      ErrorStringC (function);
-      ErrorString ((const char *) " has caused ", 12);
-    }
-  ErrorStringC (message);
-  buffer.array[0] = ASCII_nl;
-  buffer.array[1] = ASCII_nul;
-  ErrorString ((const char *) &buffer.array[0], 10);
-  libc_exit (1);
-}
-
-
-/*
-   InitProcList - initialize the head and tail pointers to NIL.
-*/
-
-static void InitProcList (M2RTS_ProcedureList *p)
-{
-  (*p).head = NULL;
-  (*p).tail = NULL;
-}
-
-
-/*
-   Init - initialize the initial, terminate procedure lists and booleans.
-*/
-
-static void Init (void)
-{
-  InitProcList (&InitialProc);
-  InitProcList (&TerminateProc);
-  ExitValue = 0;
-  isHalting = FALSE;
-  CallExit = FALSE;  /* default by calling abort  */
-}
-
-
-/*
-   CheckInitialized - checks to see if this module has been initialized
-                      and if it has not it calls Init.  We need this
-                      approach as this module is called by module ctors
-                      before we reach main.
-*/
-
-static void CheckInitialized (void)
-{
-  if (! Initialized)
-    {
-      Initialized = TRUE;
-      Init ();
-    }
-}
-
-
-/*
-   ConstructModules - resolve dependencies and then call each
-                      module constructor in turn.
-*/
-
-extern "C" void M2RTS_ConstructModules (void * applicationmodule, void * libname, int argc, void * argv, void * envp)
-{
-  M2Dependent_ConstructModules (applicationmodule, libname, argc, argv, envp);
-}
-
-
-/*
-   DeconstructModules - resolve dependencies and then call each
-                        module constructor in turn.
-*/
-
-extern "C" void M2RTS_DeconstructModules (void * applicationmodule, void * libname, int argc, void * argv, void * envp)
-{
-  M2Dependent_DeconstructModules (applicationmodule, libname, argc, argv, envp);
-}
-
-
-/*
-   RegisterModule - adds module name to the list of outstanding
-                    modules which need to have their dependencies
-                    explored to determine initialization order.
-*/
-
-extern "C" void M2RTS_RegisterModule (void * name, void * libname, M2RTS_ArgCVEnvP init, M2RTS_ArgCVEnvP fini, PROC dependencies)
-{
-  M2Dependent_RegisterModule (name, libname, (M2Dependent_ArgCVEnvP) {(M2Dependent_ArgCVEnvP_t) init.proc}, (M2Dependent_ArgCVEnvP) {(M2Dependent_ArgCVEnvP_t) fini.proc}, dependencies);
-}
-
-
-/*
-   RequestDependant - used to specify that modulename is dependant upon
-                      module dependantmodule.
-*/
-
-extern "C" void M2RTS_RequestDependant (void * modulename, void * libname, void * dependantmodule, void * dependantlibname)
-{
-  M2Dependent_RequestDependant (modulename, libname, dependantmodule, dependantlibname);
-}
-
-
-/*
-   InstallTerminationProcedure - installs a procedure, p, which will
-                                 be called when the procedure
-                                 ExecuteTerminationProcedures
-                                 is invoked.  It returns TRUE if the
-                                 procedure is installed.
-*/
-
-extern "C" unsigned int M2RTS_InstallTerminationProcedure (PROC p)
-{
-  return AppendProc (&TerminateProc, p);
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   ExecuteInitialProcedures - executes the initial procedures installed by
-                              InstallInitialProcedure.
-*/
-
-extern "C" void M2RTS_ExecuteInitialProcedures (void)
-{
-  ExecuteReverse (InitialProc.tail);
-}
-
-
-/*
-   InstallInitialProcedure - installs a procedure to be executed just
-                             before the BEGIN code section of the
-                             main program module.
-*/
-
-extern "C" unsigned int M2RTS_InstallInitialProcedure (PROC p)
-{
-  return AppendProc (&InitialProc, p);
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   ExecuteTerminationProcedures - calls each installed termination procedure
-                                  in reverse order.
-*/
-
-extern "C" void M2RTS_ExecuteTerminationProcedures (void)
-{
-  ExecuteReverse (TerminateProc.tail);
-}
-
-
-/*
-   Terminate - provides compatibility for pim.  It calls exit with
-               the exitcode provided in a prior call to ExitOnHalt
-               (or zero if ExitOnHalt was never called).  It does
-               not call ExecuteTerminationProcedures.
-*/
-
-extern "C" void M2RTS_Terminate (void)
-{
-  libc_exit (ExitValue);
-}
-
-
-/*
-   HALT - terminate the current program.  The procedure
-          ExecuteTerminationProcedures
-          is called before the program is stopped.  The parameter
-          exitcode is optional.  If the parameter is not supplied
-          HALT will call libc 'abort', otherwise it will exit with
-          the code supplied.  Supplying a parameter to HALT has the
-          same effect as calling ExitOnHalt with the same code and
-          then calling HALT with no parameter.
-*/
-
-extern "C" void M2RTS_HALT (int exitcode)
-{
-  if (exitcode != -1)
-    {
-      CallExit = TRUE;
-      ExitValue = exitcode;
-    }
-  if (isHalting)
-    {
-      /* double HALT found  */
-      libc_exit (-1);
-    }
-  else
-    {
-      isHalting = TRUE;
-      M2RTS_ExecuteTerminationProcedures ();
-    }
-  if (CallExit)
-    {
-      libc_exit (ExitValue);
-    }
-  else
-    {
-      libc_abort ();
-    }
-}
-
-
-/*
-   Halt - provides a more user friendly version of HALT, which takes
-          four parameters to aid debugging.  It writes an error message
-          to stderr and calls exit (1).
-*/
-
-extern "C" void M2RTS_Halt (const char *filename_, unsigned int _filename_high, unsigned int line, const char *function_, unsigned int _function_high, const char *description_, unsigned int _description_high)
-{
-  char filename[_filename_high+1];
-  char function[_function_high+1];
-  char description[_description_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (filename, filename_, _filename_high+1);
-  memcpy (function, function_, _function_high+1);
-  memcpy (description, description_, _description_high+1);
-
-  M2RTS_ErrorMessage ((const char *) description, _description_high, (const char *) filename, _filename_high, line, (const char *) function, _function_high);
-}
-
-
-/*
-   HaltC - provides a more user friendly version of HALT, which takes
-           four parameters to aid debugging.  It writes an error message
-           to stderr and calls exit (1).
-*/
-
-extern "C" void M2RTS_HaltC (void * filename, unsigned int line, void * function, void * description)
-{
-  ErrorMessageC (description, filename, line, function);
-}
-
-
-/*
-   ExitOnHalt - if HALT is executed then call exit with the exit code, e.
-*/
-
-extern "C" void M2RTS_ExitOnHalt (int e)
-{
-  ExitValue = e;
-  CallExit = TRUE;
-}
-
-
-/*
-   ErrorMessage - emits an error message to stderr and then calls exit (1).
-*/
-
-extern "C" void M2RTS_ErrorMessage (const char *message_, unsigned int _message_high, const char *filename_, unsigned int _filename_high, unsigned int line, const char *function_, unsigned int _function_high)
-{
-  typedef struct ErrorMessage__T3_a ErrorMessage__T3;
-
-  struct ErrorMessage__T3_a { char array[10+1]; };
-  ErrorMessage__T3 buffer;
-  char message[_message_high+1];
-  char filename[_filename_high+1];
-  char function[_function_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (message, message_, _message_high+1);
-  memcpy (filename, filename_, _filename_high+1);
-  memcpy (function, function_, _function_high+1);
-
-  ErrorString ((const char *) filename, _filename_high);
-  ErrorString ((const char *) ":", 1);
-  NumberIO_CardToStr (line, 0, (char *) &buffer.array[0], 10);
-  ErrorString ((const char *) &buffer.array[0], 10);
-  ErrorString ((const char *) ":", 1);
-  if (! (StrLib_StrEqual ((const char *) function, _function_high, (const char *) "", 0)))
-    {
-      ErrorString ((const char *) "in ", 3);
-      ErrorString ((const char *) function, _function_high);
-      ErrorString ((const char *) " has caused ", 12);
-    }
-  ErrorString ((const char *) message, _message_high);
-  buffer.array[0] = ASCII_nl;
-  buffer.array[1] = ASCII_nul;
-  ErrorString ((const char *) &buffer.array[0], 10);
-  libc_exit (1);
-}
-
-
-/*
-   Length - returns the length of a string, a. This is called whenever
-            the user calls LENGTH and the parameter cannot be calculated
-            at compile time.
-*/
-
-extern "C" unsigned int M2RTS_Length (const char *a_, unsigned int _a_high)
-{
-  unsigned int l;
-  unsigned int h;
-  char a[_a_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (a, a_, _a_high+1);
-
-  l = 0;
-  h = _a_high;
-  while ((l <= h) && (a[l] != ASCII_nul))
-    {
-      l += 1;
-    }
-  return l;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-extern "C" void M2RTS_AssignmentException (void * filename, unsigned int line, unsigned int column, void * scope, void * message)
-{
-  /* 
-   The following are the runtime exception handler routines.
-  */
-  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_rangeException)), filename, line, column, scope, message);
-}
-
-extern "C" void M2RTS_ReturnException (void * filename, unsigned int line, unsigned int column, void * scope, void * message)
-{
-  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_rangeException)), filename, line, column, scope, message);
-}
-
-extern "C" void M2RTS_IncException (void * filename, unsigned int line, unsigned int column, void * scope, void * message)
-{
-  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_rangeException)), filename, line, column, scope, message);
-}
-
-extern "C" void M2RTS_DecException (void * filename, unsigned int line, unsigned int column, void * scope, void * message)
-{
-  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_rangeException)), filename, line, column, scope, message);
-}
-
-extern "C" void M2RTS_InclException (void * filename, unsigned int line, unsigned int column, void * scope, void * message)
-{
-  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_rangeException)), filename, line, column, scope, message);
-}
-
-extern "C" void M2RTS_ExclException (void * filename, unsigned int line, unsigned int column, void * scope, void * message)
-{
-  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_rangeException)), filename, line, column, scope, message);
-}
-
-extern "C" void M2RTS_ShiftException (void * filename, unsigned int line, unsigned int column, void * scope, void * message)
-{
-  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_rangeException)), filename, line, column, scope, message);
-}
-
-extern "C" void M2RTS_RotateException (void * filename, unsigned int line, unsigned int column, void * scope, void * message)
-{
-  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_rangeException)), filename, line, column, scope, message);
-}
-
-extern "C" void M2RTS_StaticArraySubscriptException (void * filename, unsigned int line, unsigned int column, void * scope, void * message)
-{
-  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_indexException)), filename, line, column, scope, message);
-}
-
-extern "C" void M2RTS_DynamicArraySubscriptException (void * filename, unsigned int line, unsigned int column, void * scope, void * message)
-{
-  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_indexException)), filename, line, column, scope, message);
-}
-
-extern "C" void M2RTS_ForLoopBeginException (void * filename, unsigned int line, unsigned int column, void * scope, void * message)
-{
-  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_rangeException)), filename, line, column, scope, message);
-}
-
-extern "C" void M2RTS_ForLoopToException (void * filename, unsigned int line, unsigned int column, void * scope, void * message)
-{
-  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_rangeException)), filename, line, column, scope, message);
-}
-
-extern "C" void M2RTS_ForLoopEndException (void * filename, unsigned int line, unsigned int column, void * scope, void * message)
-{
-  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_rangeException)), filename, line, column, scope, message);
-}
-
-extern "C" void M2RTS_PointerNilException (void * filename, unsigned int line, unsigned int column, void * scope, void * message)
-{
-  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_invalidLocation)), filename, line, column, scope, message);
-}
-
-extern "C" void M2RTS_NoReturnException (void * filename, unsigned int line, unsigned int column, void * scope, void * message)
-{
-  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_functionException)), filename, line, column, scope, message);
-}
-
-extern "C" void M2RTS_CaseException (void * filename, unsigned int line, unsigned int column, void * scope, void * message)
-{
-  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_caseSelectException)), filename, line, column, scope, message);
-}
-
-extern "C" void M2RTS_WholeNonPosDivException (void * filename, unsigned int line, unsigned int column, void * scope, void * message)
-{
-  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_wholeDivException)), filename, line, column, scope, message);
-}
-
-extern "C" void M2RTS_WholeNonPosModException (void * filename, unsigned int line, unsigned int column, void * scope, void * message)
-{
-  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_wholeDivException)), filename, line, column, scope, message);
-}
-
-extern "C" void M2RTS_WholeZeroDivException (void * filename, unsigned int line, unsigned int column, void * scope, void * message)
-{
-  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_wholeDivException)), filename, line, column, scope, message);
-}
-
-extern "C" void M2RTS_WholeZeroRemException (void * filename, unsigned int line, unsigned int column, void * scope, void * message)
-{
-  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_wholeDivException)), filename, line, column, scope, message);
-}
-
-extern "C" void M2RTS_WholeValueException (void * filename, unsigned int line, unsigned int column, void * scope, void * message)
-{
-  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_wholeValueException)), filename, line, column, scope, message);
-}
-
-extern "C" void M2RTS_RealValueException (void * filename, unsigned int line, unsigned int column, void * scope, void * message)
-{
-  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_realValueException)), filename, line, column, scope, message);
-}
-
-extern "C" void M2RTS_ParameterException (void * filename, unsigned int line, unsigned int column, void * scope, void * message)
-{
-  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_rangeException)), filename, line, column, scope, message);
-}
-
-extern "C" void M2RTS_NoException (void * filename, unsigned int line, unsigned int column, void * scope, void * message)
-{
-  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_exException)), filename, line, column, scope, message);
-}
-
-extern "C" void _M2_M2RTS_init (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-  CheckInitialized ();
-}
-
-extern "C" void _M2_M2RTS_fini (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-}
diff --git a/gcc/m2/mc-boot/GMemUtils.c b/gcc/m2/mc-boot/GMemUtils.c
deleted file mode 100644
index a80e00ecec8..00000000000
--- a/gcc/m2/mc-boot/GMemUtils.c
+++ /dev/null
@@ -1,126 +0,0 @@
-/* do not edit automatically generated by mc from MemUtils.  */
-/* MemUtils.mod provides some basic memory utilities.
-
-Copyright (C) 2001-2023 Free Software Foundation, Inc.
-Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>.
-
-This file is part of GNU Modula-2.
-
-GNU Modula-2 is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
-
-GNU Modula-2 is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-General Public License for more details.
-
-Under Section 7 of GPL version 3, you are granted additional
-permissions described in the GCC Runtime Library Exception, version
-3.1, as published by the Free Software Foundation.
-
-You should have received a copy of the GNU General Public License and
-a copy of the GCC Runtime Library Exception along with this program;
-see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
-<http://www.gnu.org/licenses/>.  */
-
-#include "config.h"
-#include "system.h"
-#   if !defined (PROC_D)
-#      define PROC_D
-       typedef void (*PROC_t) (void);
-       typedef struct { PROC_t proc; } PROC;
-#   endif
-
-#define _MemUtils_H
-#define _MemUtils_C
-
-#   include "GSYSTEM.h"
-
-
-/*
-   MemCopy - copys a region of memory to the required destination.
-*/
-
-extern "C" void MemUtils_MemCopy (void * from, unsigned int length, void * to);
-
-/*
-   MemZero - sets a region of memory: a..a+length to zero.
-*/
-
-extern "C" void MemUtils_MemZero (void * a, unsigned int length);
-
-
-/*
-   MemCopy - copys a region of memory to the required destination.
-*/
-
-extern "C" void MemUtils_MemCopy (void * from, unsigned int length, void * to)
-{
-  typedef unsigned int *MemCopy__T1;
-
-  typedef unsigned char *MemCopy__T2;
-
-  MemCopy__T1 pwb;
-  MemCopy__T1 pwa;
-  MemCopy__T2 pbb;
-  MemCopy__T2 pba;
-
-  while (length >= sizeof (unsigned int ))
-    {
-      pwa = static_cast<MemCopy__T1> (from);
-      pwb = static_cast<MemCopy__T1> (to);
-      (*pwb) = (*pwa);
-      from = reinterpret_cast<void *> (reinterpret_cast<char *> (from)+sizeof (unsigned int ));
-      to = reinterpret_cast<void *> (reinterpret_cast<char *> (to)+sizeof (unsigned int ));
-      length -= sizeof (unsigned int );
-    }
-  while (length > 0)
-    {
-      pba = static_cast<MemCopy__T2> (from);
-      pbb = static_cast<MemCopy__T2> (to);
-      (*pbb) = (*pba);
-      from = reinterpret_cast<void *> (reinterpret_cast<char *> (from)+sizeof (unsigned char ));
-      to = reinterpret_cast<void *> (reinterpret_cast<char *> (to)+sizeof (unsigned char ));
-      length -= sizeof (unsigned char );
-    }
-}
-
-
-/*
-   MemZero - sets a region of memory: a..a+length to zero.
-*/
-
-extern "C" void MemUtils_MemZero (void * a, unsigned int length)
-{
-  typedef unsigned int *MemZero__T3;
-
-  typedef unsigned char *MemZero__T4;
-
-  MemZero__T3 pwa;
-  MemZero__T4 pba;
-
-  pwa = static_cast<MemZero__T3> (a);
-  while (length >= sizeof (unsigned int ))
-    {
-      (*pwa) = (unsigned int ) (0);
-      pwa += sizeof (unsigned int );
-      length -= sizeof (unsigned int );
-    }
-  pba = static_cast<MemZero__T4> ((void *) (pwa));
-  while (length >= sizeof (unsigned char ))
-    {
-      (*pba) = (unsigned char ) (0);
-      pba += sizeof (unsigned char );
-      length -= sizeof (unsigned char );
-    }
-}
-
-extern "C" void _M2_MemUtils_init (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-}
-
-extern "C" void _M2_MemUtils_fini (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-}
diff --git a/gcc/m2/mc-boot/GNumberIO.c b/gcc/m2/mc-boot/GNumberIO.c
deleted file mode 100644
index 53bac45552c..00000000000
--- a/gcc/m2/mc-boot/GNumberIO.c
+++ /dev/null
@@ -1,776 +0,0 @@
-/* do not edit automatically generated by mc from NumberIO.  */
-/* NumberIO.mod provides conversion of ordinal numbers.
-
-Copyright (C) 2001-2023 Free Software Foundation, Inc.
-Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>.
-
-This file is part of GNU Modula-2.
-
-GNU Modula-2 is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
-
-GNU Modula-2 is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-General Public License for more details.
-
-Under Section 7 of GPL version 3, you are granted additional
-permissions described in the GCC Runtime Library Exception, version
-3.1, as published by the Free Software Foundation.
-
-You should have received a copy of the GNU General Public License and
-a copy of the GCC Runtime Library Exception along with this program;
-see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
-<http://www.gnu.org/licenses/>.  */
-
-#include "config.h"
-#include "system.h"
-#   if !defined (PROC_D)
-#      define PROC_D
-       typedef void (*PROC_t) (void);
-       typedef struct { PROC_t proc; } PROC;
-#   endif
-
-#   if !defined (TRUE)
-#      define TRUE (1==1)
-#   endif
-
-#   if !defined (FALSE)
-#      define FALSE (1==0)
-#   endif
-
-#define _NumberIO_H
-#define _NumberIO_C
-
-#   include "GASCII.h"
-#   include "GStrIO.h"
-#   include "GStrLib.h"
-#   include "GM2RTS.h"
-
-#   define MaxLineLength 79
-#   define MaxDigits 20
-#   define MaxHexDigits 20
-#   define MaxOctDigits 40
-#   define MaxBits 64
-extern "C" void NumberIO_ReadCard (unsigned int *x);
-extern "C" void NumberIO_WriteCard (unsigned int x, unsigned int n);
-extern "C" void NumberIO_ReadHex (unsigned int *x);
-extern "C" void NumberIO_WriteHex (unsigned int x, unsigned int n);
-extern "C" void NumberIO_ReadInt (int *x);
-extern "C" void NumberIO_WriteInt (int x, unsigned int n);
-extern "C" void NumberIO_CardToStr (unsigned int x, unsigned int n, char *a, unsigned int _a_high);
-extern "C" void NumberIO_StrToCard (const char *a_, unsigned int _a_high, unsigned int *x);
-extern "C" void NumberIO_HexToStr (unsigned int x, unsigned int n, char *a, unsigned int _a_high);
-extern "C" void NumberIO_StrToHex (const char *a_, unsigned int _a_high, unsigned int *x);
-extern "C" void NumberIO_IntToStr (int x, unsigned int n, char *a, unsigned int _a_high);
-extern "C" void NumberIO_StrToInt (const char *a_, unsigned int _a_high, int *x);
-extern "C" void NumberIO_ReadOct (unsigned int *x);
-extern "C" void NumberIO_WriteOct (unsigned int x, unsigned int n);
-extern "C" void NumberIO_OctToStr (unsigned int x, unsigned int n, char *a, unsigned int _a_high);
-extern "C" void NumberIO_StrToOct (const char *a_, unsigned int _a_high, unsigned int *x);
-extern "C" void NumberIO_ReadBin (unsigned int *x);
-extern "C" void NumberIO_WriteBin (unsigned int x, unsigned int n);
-extern "C" void NumberIO_BinToStr (unsigned int x, unsigned int n, char *a, unsigned int _a_high);
-extern "C" void NumberIO_StrToBin (const char *a_, unsigned int _a_high, unsigned int *x);
-extern "C" void NumberIO_StrToBinInt (const char *a_, unsigned int _a_high, int *x);
-extern "C" void NumberIO_StrToHexInt (const char *a_, unsigned int _a_high, int *x);
-extern "C" void NumberIO_StrToOctInt (const char *a_, unsigned int _a_high, int *x);
-
-extern "C" void NumberIO_ReadCard (unsigned int *x)
-{
-  typedef struct ReadCard__T1_a ReadCard__T1;
-
-  struct ReadCard__T1_a { char array[MaxLineLength+1]; };
-  ReadCard__T1 a;
-
-  StrIO_ReadString ((char *) &a.array[0], MaxLineLength);
-  NumberIO_StrToCard ((const char *) &a.array[0], MaxLineLength, x);
-}
-
-extern "C" void NumberIO_WriteCard (unsigned int x, unsigned int n)
-{
-  typedef struct WriteCard__T2_a WriteCard__T2;
-
-  struct WriteCard__T2_a { char array[MaxLineLength+1]; };
-  WriteCard__T2 a;
-
-  NumberIO_CardToStr (x, n, (char *) &a.array[0], MaxLineLength);
-  StrIO_WriteString ((const char *) &a.array[0], MaxLineLength);
-}
-
-extern "C" void NumberIO_ReadHex (unsigned int *x)
-{
-  typedef struct ReadHex__T3_a ReadHex__T3;
-
-  struct ReadHex__T3_a { char array[MaxLineLength+1]; };
-  ReadHex__T3 a;
-
-  StrIO_ReadString ((char *) &a.array[0], MaxLineLength);
-  NumberIO_StrToHex ((const char *) &a.array[0], MaxLineLength, x);
-}
-
-extern "C" void NumberIO_WriteHex (unsigned int x, unsigned int n)
-{
-  typedef struct WriteHex__T4_a WriteHex__T4;
-
-  struct WriteHex__T4_a { char array[MaxLineLength+1]; };
-  WriteHex__T4 a;
-
-  NumberIO_HexToStr (x, n, (char *) &a.array[0], MaxLineLength);
-  StrIO_WriteString ((const char *) &a.array[0], MaxLineLength);
-}
-
-extern "C" void NumberIO_ReadInt (int *x)
-{
-  typedef struct ReadInt__T5_a ReadInt__T5;
-
-  struct ReadInt__T5_a { char array[MaxLineLength+1]; };
-  ReadInt__T5 a;
-
-  StrIO_ReadString ((char *) &a.array[0], MaxLineLength);
-  NumberIO_StrToInt ((const char *) &a.array[0], MaxLineLength, x);
-}
-
-extern "C" void NumberIO_WriteInt (int x, unsigned int n)
-{
-  typedef struct WriteInt__T6_a WriteInt__T6;
-
-  struct WriteInt__T6_a { char array[MaxLineLength+1]; };
-  WriteInt__T6 a;
-
-  NumberIO_IntToStr (x, n, (char *) &a.array[0], MaxLineLength);
-  StrIO_WriteString ((const char *) &a.array[0], MaxLineLength);
-}
-
-extern "C" void NumberIO_CardToStr (unsigned int x, unsigned int n, char *a, unsigned int _a_high)
-{
-  typedef struct CardToStr__T7_a CardToStr__T7;
-
-  struct CardToStr__T7_a { unsigned int array[MaxDigits-1+1]; };
-  unsigned int i;
-  unsigned int j;
-  unsigned int Higha;
-  CardToStr__T7 buf;
-
-  i = 0;
-  do {
-    i += 1;
-    if (i > MaxDigits)
-      {
-        StrIO_WriteString ((const char *) "NumberIO - increase MaxDigits", 29);
-        StrIO_WriteLn ();
-        M2RTS_HALT (-1);
-        __builtin_unreachable ();
-      }
-    buf.array[i-1] = x % 10;
-    x = x / 10;
-  } while (! (x == 0));
-  j = 0;
-  Higha = _a_high;
-  while ((n > i) && (j <= Higha))
-    {
-      a[j] = ' ';
-      j += 1;
-      n -= 1;
-    }
-  while ((i > 0) && (j <= Higha))
-    {
-      a[j] = ((char) (buf.array[i-1]+ ((unsigned int) ('0'))));
-      j += 1;
-      i -= 1;
-    }
-  if (j <= Higha)
-    {
-      a[j] = ASCII_nul;
-    }
-}
-
-extern "C" void NumberIO_StrToCard (const char *a_, unsigned int _a_high, unsigned int *x)
-{
-  unsigned int i;
-  unsigned int ok;
-  unsigned int higha;
-  char a[_a_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (a, a_, _a_high+1);
-
-  StrLib_StrRemoveWhitePrefix ((const char *) a, _a_high, (char *) a, _a_high);
-  higha = StrLib_StrLen ((const char *) a, _a_high);
-  i = 0;
-  ok = TRUE;
-  while (ok)
-    {
-      if (i < higha)
-        {
-          if ((a[i] < '0') || (a[i] > '9'))
-            {
-              i += 1;
-            }
-          else
-            {
-              ok = FALSE;
-            }
-        }
-      else
-        {
-          ok = FALSE;
-        }
-    }
-  (*x) = 0;
-  if (i < higha)
-    {
-      ok = TRUE;
-      do {
-        (*x) = (10*(*x))+( ((unsigned int) (a[i]))- ((unsigned int) ('0')));
-        if (i < higha)
-          {
-            /* avoid dangling else.  */
-            i += 1;
-            if ((a[i] < '0') || (a[i] > '9'))
-              {
-                ok = FALSE;
-              }
-          }
-        else
-          {
-            ok = FALSE;
-          }
-      } while (! (! ok));
-    }
-}
-
-extern "C" void NumberIO_HexToStr (unsigned int x, unsigned int n, char *a, unsigned int _a_high)
-{
-  typedef struct HexToStr__T8_a HexToStr__T8;
-
-  struct HexToStr__T8_a { unsigned int array[MaxHexDigits-1+1]; };
-  unsigned int i;
-  unsigned int j;
-  unsigned int Higha;
-  HexToStr__T8 buf;
-
-  i = 0;
-  do {
-    i += 1;
-    if (i > MaxHexDigits)
-      {
-        StrIO_WriteString ((const char *) "NumberIO - increase MaxDigits", 29);
-        StrIO_WriteLn ();
-        M2RTS_HALT (-1);
-        __builtin_unreachable ();
-      }
-    buf.array[i-1] = x % 0x010;
-    x = x / 0x010;
-  } while (! (x == 0));
-  j = 0;
-  Higha = _a_high;
-  while ((n > i) && (j <= Higha))
-    {
-      a[j] = '0';
-      j += 1;
-      n -= 1;
-    }
-  while ((i != 0) && (j <= Higha))
-    {
-      if (buf.array[i-1] < 10)
-        {
-          a[j] = ((char) (buf.array[i-1]+ ((unsigned int) ('0'))));
-        }
-      else
-        {
-          a[j] = ((char) ((buf.array[i-1]+ ((unsigned int) ('A')))-10));
-        }
-      j += 1;
-      i -= 1;
-    }
-  if (j <= Higha)
-    {
-      a[j] = ASCII_nul;
-    }
-}
-
-extern "C" void NumberIO_StrToHex (const char *a_, unsigned int _a_high, unsigned int *x)
-{
-  int i;
-  char a[_a_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (a, a_, _a_high+1);
-
-  NumberIO_StrToHexInt ((const char *) a, _a_high, &i);
-  (*x) = (unsigned int ) (i);
-}
-
-extern "C" void NumberIO_IntToStr (int x, unsigned int n, char *a, unsigned int _a_high)
-{
-  typedef struct IntToStr__T9_a IntToStr__T9;
-
-  struct IntToStr__T9_a { unsigned int array[MaxDigits-1+1]; };
-  unsigned int i;
-  unsigned int j;
-  unsigned int c;
-  unsigned int Higha;
-  IntToStr__T9 buf;
-  unsigned int Negative;
-
-  if (x < 0)
-    {
-      /* avoid dangling else.  */
-      Negative = TRUE;
-      c = ((unsigned int ) (abs (x+1)))+1;
-      if (n > 0)
-        {
-          n -= 1;
-        }
-    }
-  else
-    {
-      c = x;
-      Negative = FALSE;
-    }
-  i = 0;
-  do {
-    i += 1;
-    if (i > MaxDigits)
-      {
-        StrIO_WriteString ((const char *) "NumberIO - increase MaxDigits", 29);
-        StrIO_WriteLn ();
-        M2RTS_HALT (-1);
-        __builtin_unreachable ();
-      }
-    buf.array[i-1] = c % 10;
-    c = c / 10;
-  } while (! (c == 0));
-  j = 0;
-  Higha = _a_high;
-  while ((n > i) && (j <= Higha))
-    {
-      a[j] = ' ';
-      j += 1;
-      n -= 1;
-    }
-  if (Negative)
-    {
-      a[j] = '-';
-      j += 1;
-    }
-  while ((i != 0) && (j <= Higha))
-    {
-      a[j] = ((char) (buf.array[i-1]+ ((unsigned int) ('0'))));
-      j += 1;
-      i -= 1;
-    }
-  if (j <= Higha)
-    {
-      a[j] = ASCII_nul;
-    }
-}
-
-extern "C" void NumberIO_StrToInt (const char *a_, unsigned int _a_high, int *x)
-{
-  unsigned int i;
-  unsigned int ok;
-  unsigned int Negative;
-  unsigned int higha;
-  char a[_a_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (a, a_, _a_high+1);
-
-  StrLib_StrRemoveWhitePrefix ((const char *) a, _a_high, (char *) a, _a_high);
-  higha = StrLib_StrLen ((const char *) a, _a_high);
-  i = 0;
-  Negative = FALSE;
-  ok = TRUE;
-  while (ok)
-    {
-      if (i < higha)
-        {
-          if (a[i] == '-')
-            {
-              i += 1;
-              Negative = ! Negative;
-            }
-          else if ((a[i] < '0') || (a[i] > '9'))
-            {
-              /* avoid dangling else.  */
-              i += 1;
-            }
-          else
-            {
-              /* avoid dangling else.  */
-              ok = FALSE;
-            }
-        }
-      else
-        {
-          ok = FALSE;
-        }
-    }
-  (*x) = 0;
-  if (i < higha)
-    {
-      ok = TRUE;
-      do {
-        if (Negative)
-          {
-            (*x) = (10*(*x))-((int ) ( ((unsigned int) (a[i]))- ((unsigned int) ('0'))));
-          }
-        else
-          {
-            (*x) = (10*(*x))+((int ) ( ((unsigned int) (a[i]))- ((unsigned int) ('0'))));
-          }
-        if (i < higha)
-          {
-            /* avoid dangling else.  */
-            i += 1;
-            if ((a[i] < '0') || (a[i] > '9'))
-              {
-                ok = FALSE;
-              }
-          }
-        else
-          {
-            ok = FALSE;
-          }
-      } while (! (! ok));
-    }
-}
-
-extern "C" void NumberIO_ReadOct (unsigned int *x)
-{
-  typedef struct ReadOct__T10_a ReadOct__T10;
-
-  struct ReadOct__T10_a { char array[MaxLineLength+1]; };
-  ReadOct__T10 a;
-
-  StrIO_ReadString ((char *) &a.array[0], MaxLineLength);
-  NumberIO_StrToOct ((const char *) &a.array[0], MaxLineLength, x);
-}
-
-extern "C" void NumberIO_WriteOct (unsigned int x, unsigned int n)
-{
-  typedef struct WriteOct__T11_a WriteOct__T11;
-
-  struct WriteOct__T11_a { char array[MaxLineLength+1]; };
-  WriteOct__T11 a;
-
-  NumberIO_OctToStr (x, n, (char *) &a.array[0], MaxLineLength);
-  StrIO_WriteString ((const char *) &a.array[0], MaxLineLength);
-}
-
-extern "C" void NumberIO_OctToStr (unsigned int x, unsigned int n, char *a, unsigned int _a_high)
-{
-  typedef struct OctToStr__T12_a OctToStr__T12;
-
-  struct OctToStr__T12_a { unsigned int array[MaxOctDigits-1+1]; };
-  unsigned int i;
-  unsigned int j;
-  unsigned int Higha;
-  OctToStr__T12 buf;
-
-  i = 0;
-  do {
-    i += 1;
-    if (i > MaxOctDigits)
-      {
-        StrIO_WriteString ((const char *) "NumberIO - increase MaxDigits", 29);
-        StrIO_WriteLn ();
-        M2RTS_HALT (-1);
-        __builtin_unreachable ();
-      }
-    buf.array[i-1] = x % 8;
-    x = x / 8;
-  } while (! (x == 0));
-  j = 0;
-  Higha = _a_high;
-  while ((n > i) && (j <= Higha))
-    {
-      a[j] = ' ';
-      j += 1;
-      n -= 1;
-    }
-  while ((i > 0) && (j <= Higha))
-    {
-      a[j] = ((char) (buf.array[i-1]+ ((unsigned int) ('0'))));
-      j += 1;
-      i -= 1;
-    }
-  if (j <= Higha)
-    {
-      a[j] = ASCII_nul;
-    }
-}
-
-extern "C" void NumberIO_StrToOct (const char *a_, unsigned int _a_high, unsigned int *x)
-{
-  int i;
-  char a[_a_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (a, a_, _a_high+1);
-
-  NumberIO_StrToOctInt ((const char *) a, _a_high, &i);
-  (*x) = (unsigned int ) (i);
-}
-
-extern "C" void NumberIO_ReadBin (unsigned int *x)
-{
-  typedef struct ReadBin__T13_a ReadBin__T13;
-
-  struct ReadBin__T13_a { char array[MaxLineLength+1]; };
-  ReadBin__T13 a;
-
-  StrIO_ReadString ((char *) &a.array[0], MaxLineLength);
-  NumberIO_StrToBin ((const char *) &a.array[0], MaxLineLength, x);
-}
-
-extern "C" void NumberIO_WriteBin (unsigned int x, unsigned int n)
-{
-  typedef struct WriteBin__T14_a WriteBin__T14;
-
-  struct WriteBin__T14_a { char array[MaxLineLength+1]; };
-  WriteBin__T14 a;
-
-  NumberIO_BinToStr (x, n, (char *) &a.array[0], MaxLineLength);
-  StrIO_WriteString ((const char *) &a.array[0], MaxLineLength);
-}
-
-extern "C" void NumberIO_BinToStr (unsigned int x, unsigned int n, char *a, unsigned int _a_high)
-{
-  typedef struct BinToStr__T15_a BinToStr__T15;
-
-  struct BinToStr__T15_a { unsigned int array[MaxBits-1+1]; };
-  unsigned int i;
-  unsigned int j;
-  unsigned int Higha;
-  BinToStr__T15 buf;
-
-  i = 0;
-  do {
-    i += 1;
-    if (i > MaxBits)
-      {
-        StrIO_WriteString ((const char *) "NumberIO - increase MaxBits", 27);
-        StrIO_WriteLn ();
-        M2RTS_HALT (-1);
-        __builtin_unreachable ();
-      }
-    buf.array[i-1] = x % 2;
-    x = x / 2;
-  } while (! (x == 0));
-  j = 0;
-  Higha = _a_high;
-  while ((n > i) && (j <= Higha))
-    {
-      a[j] = ' ';
-      j += 1;
-      n -= 1;
-    }
-  while ((i > 0) && (j <= Higha))
-    {
-      a[j] = ((char) (buf.array[i-1]+ ((unsigned int) ('0'))));
-      j += 1;
-      i -= 1;
-    }
-  if (j <= Higha)
-    {
-      a[j] = ASCII_nul;
-    }
-}
-
-extern "C" void NumberIO_StrToBin (const char *a_, unsigned int _a_high, unsigned int *x)
-{
-  int i;
-  char a[_a_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (a, a_, _a_high+1);
-
-  NumberIO_StrToBinInt ((const char *) a, _a_high, &i);
-  (*x) = (unsigned int ) (i);
-}
-
-extern "C" void NumberIO_StrToBinInt (const char *a_, unsigned int _a_high, int *x)
-{
-  unsigned int i;
-  unsigned int ok;
-  unsigned int higha;
-  char a[_a_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (a, a_, _a_high+1);
-
-  StrLib_StrRemoveWhitePrefix ((const char *) a, _a_high, (char *) a, _a_high);
-  higha = StrLib_StrLen ((const char *) a, _a_high);
-  i = 0;
-  ok = TRUE;
-  while (ok)
-    {
-      if (i < higha)
-        {
-          if ((a[i] < '0') || (a[i] > '1'))
-            {
-              i += 1;
-            }
-          else
-            {
-              ok = FALSE;
-            }
-        }
-      else
-        {
-          ok = FALSE;
-        }
-    }
-  (*x) = 0;
-  if (i < higha)
-    {
-      ok = TRUE;
-      do {
-        (*x) = (2*(*x))+((int ) ( ((unsigned int) (a[i]))- ((unsigned int) ('0'))));
-        if (i < higha)
-          {
-            /* avoid dangling else.  */
-            i += 1;
-            if ((a[i] < '0') || (a[i] > '1'))
-              {
-                ok = FALSE;
-              }
-          }
-        else
-          {
-            ok = FALSE;
-          }
-      } while (! (! ok));
-    }
-}
-
-extern "C" void NumberIO_StrToHexInt (const char *a_, unsigned int _a_high, int *x)
-{
-  unsigned int i;
-  unsigned int ok;
-  unsigned int higha;
-  char a[_a_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (a, a_, _a_high+1);
-
-  StrLib_StrRemoveWhitePrefix ((const char *) a, _a_high, (char *) a, _a_high);
-  higha = StrLib_StrLen ((const char *) a, _a_high);
-  i = 0;
-  ok = TRUE;
-  while (ok)
-    {
-      if (i < higha)
-        {
-          if (((a[i] >= '0') && (a[i] <= '9')) || ((a[i] >= 'A') && (a[i] <= 'F')))
-            {
-              ok = FALSE;
-            }
-          else
-            {
-              i += 1;
-            }
-        }
-      else
-        {
-          ok = FALSE;
-        }
-    }
-  (*x) = 0;
-  if (i < higha)
-    {
-      ok = TRUE;
-      do {
-        if ((a[i] >= '0') && (a[i] <= '9'))
-          {
-            (*x) = (0x010*(*x))+((int ) ( ((unsigned int) (a[i]))- ((unsigned int) ('0'))));
-          }
-        else if ((a[i] >= 'A') && (a[i] <= 'F'))
-          {
-            /* avoid dangling else.  */
-            (*x) = (0x010*(*x))+((int ) (( ((unsigned int) (a[i]))- ((unsigned int) ('A')))+10));
-          }
-        if (i < higha)
-          {
-            /* avoid dangling else.  */
-            i += 1;
-            if (((a[i] < '0') || (a[i] > '9')) && ((a[i] < 'A') || (a[i] > 'F')))
-              {
-                ok = FALSE;
-              }
-          }
-        else
-          {
-            ok = FALSE;
-          }
-      } while (! (! ok));
-    }
-}
-
-extern "C" void NumberIO_StrToOctInt (const char *a_, unsigned int _a_high, int *x)
-{
-  unsigned int i;
-  unsigned int ok;
-  unsigned int higha;
-  char a[_a_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (a, a_, _a_high+1);
-
-  StrLib_StrRemoveWhitePrefix ((const char *) a, _a_high, (char *) a, _a_high);
-  higha = StrLib_StrLen ((const char *) a, _a_high);
-  i = 0;
-  ok = TRUE;
-  while (ok)
-    {
-      if (i < higha)
-        {
-          if ((a[i] < '0') || (a[i] > '7'))
-            {
-              i += 1;
-            }
-          else
-            {
-              ok = FALSE;
-            }
-        }
-      else
-        {
-          ok = FALSE;
-        }
-    }
-  (*x) = 0;
-  if (i < higha)
-    {
-      ok = TRUE;
-      do {
-        (*x) = (8*(*x))+((int ) ( ((unsigned int) (a[i]))- ((unsigned int) ('0'))));
-        if (i < higha)
-          {
-            /* avoid dangling else.  */
-            i += 1;
-            if ((a[i] < '0') || (a[i] > '7'))
-              {
-                ok = FALSE;
-              }
-          }
-        else
-          {
-            ok = FALSE;
-          }
-      } while (! (! ok));
-    }
-}
-
-extern "C" void _M2_NumberIO_init (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-}
-
-extern "C" void _M2_NumberIO_fini (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-}
diff --git a/gcc/m2/mc-boot/GPushBackInput.c b/gcc/m2/mc-boot/GPushBackInput.c
deleted file mode 100644
index e15b3eb9007..00000000000
--- a/gcc/m2/mc-boot/GPushBackInput.c
+++ /dev/null
@@ -1,488 +0,0 @@
-/* do not edit automatically generated by mc from PushBackInput.  */
-/* PushBackInput.mod provides a method for pushing back and consuming input.
-
-Copyright (C) 2001-2023 Free Software Foundation, Inc.
-Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>.
-
-This file is part of GNU Modula-2.
-
-GNU Modula-2 is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
-
-GNU Modula-2 is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-General Public License for more details.
-
-Under Section 7 of GPL version 3, you are granted additional
-permissions described in the GCC Runtime Library Exception, version
-3.1, as published by the Free Software Foundation.
-
-You should have received a copy of the GNU General Public License and
-a copy of the GCC Runtime Library Exception along with this program;
-see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
-<http://www.gnu.org/licenses/>.  */
-
-#include "config.h"
-#include "system.h"
-#   if !defined (PROC_D)
-#      define PROC_D
-       typedef void (*PROC_t) (void);
-       typedef struct { PROC_t proc; } PROC;
-#   endif
-
-#   if !defined (FALSE)
-#      define FALSE (1==0)
-#   endif
-
-#if defined(__cplusplus)
-#   undef NULL
-#   define NULL 0
-#endif
-#define _PushBackInput_H
-#define _PushBackInput_C
-
-#   include "GFIO.h"
-#   include "GDynamicStrings.h"
-#   include "GASCII.h"
-#   include "GDebug.h"
-#   include "GStrLib.h"
-#   include "GNumberIO.h"
-#   include "GStrIO.h"
-#   include "GStdIO.h"
-#   include "Glibc.h"
-
-#   define MaxPushBackStack 8192
-#   define MaxFileName 4096
-typedef struct PushBackInput__T2_a PushBackInput__T2;
-
-typedef struct PushBackInput__T3_a PushBackInput__T3;
-
-struct PushBackInput__T2_a { char array[MaxFileName+1]; };
-struct PushBackInput__T3_a { char array[MaxPushBackStack+1]; };
-static PushBackInput__T2 FileName;
-static PushBackInput__T3 CharStack;
-static unsigned int ExitStatus;
-static unsigned int Column;
-static unsigned int StackPtr;
-static unsigned int LineNo;
-static unsigned int Debugging;
-
-/*
-   Open - opens a file for reading.
-*/
-
-extern "C" FIO_File PushBackInput_Open (const char *a_, unsigned int _a_high);
-
-/*
-   GetCh - gets a character from either the push back stack or
-           from file, f.
-*/
-
-extern "C" char PushBackInput_GetCh (FIO_File f);
-
-/*
-   PutCh - pushes a character onto the push back stack, it also
-           returns the character which has been pushed.
-*/
-
-extern "C" char PushBackInput_PutCh (char ch);
-
-/*
-   PutString - pushes a string onto the push back stack.
-*/
-
-extern "C" void PushBackInput_PutString (const char *a_, unsigned int _a_high);
-
-/*
-   PutStr - pushes a dynamic string onto the push back stack.
-            The string, s, is not deallocated.
-*/
-
-extern "C" void PushBackInput_PutStr (DynamicStrings_String s);
-
-/*
-   Error - emits an error message with the appropriate file, line combination.
-*/
-
-extern "C" void PushBackInput_Error (const char *a_, unsigned int _a_high);
-
-/*
-   WarnError - emits an error message with the appropriate file, line combination.
-               It does not terminate but when the program finishes an exit status of
-               1 will be issued.
-*/
-
-extern "C" void PushBackInput_WarnError (const char *a_, unsigned int _a_high);
-
-/*
-   WarnString - emits an error message with the appropriate file, line combination.
-                It does not terminate but when the program finishes an exit status of
-                1 will be issued.
-*/
-
-extern "C" void PushBackInput_WarnString (DynamicStrings_String s);
-
-/*
-   Close - closes the opened file.
-*/
-
-extern "C" void PushBackInput_Close (FIO_File f);
-
-/*
-   GetExitStatus - returns the exit status which will be 1 if any warnings were issued.
-*/
-
-extern "C" unsigned int PushBackInput_GetExitStatus (void);
-
-/*
-   SetDebug - sets the debug flag on or off.
-*/
-
-extern "C" void PushBackInput_SetDebug (unsigned int d);
-
-/*
-   GetColumnPosition - returns the column position of the current character.
-*/
-
-extern "C" unsigned int PushBackInput_GetColumnPosition (void);
-
-/*
-   GetCurrentLine - returns the current line number.
-*/
-
-extern "C" unsigned int PushBackInput_GetCurrentLine (void);
-
-/*
-   ErrChar - writes a char, ch, to stderr.
-*/
-
-static void ErrChar (char ch);
-
-/*
-   Init - initialize global variables.
-*/
-
-static void Init (void);
-
-
-/*
-   ErrChar - writes a char, ch, to stderr.
-*/
-
-static void ErrChar (char ch)
-{
-  FIO_WriteChar (FIO_StdErr, ch);
-}
-
-
-/*
-   Init - initialize global variables.
-*/
-
-static void Init (void)
-{
-  ExitStatus = 0;
-  StackPtr = 0;
-  LineNo = 1;
-  Column = 0;
-}
-
-
-/*
-   Open - opens a file for reading.
-*/
-
-extern "C" FIO_File PushBackInput_Open (const char *a_, unsigned int _a_high)
-{
-  char a[_a_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (a, a_, _a_high+1);
-
-  Init ();
-  StrLib_StrCopy ((const char *) a, _a_high, (char *) &FileName.array[0], MaxFileName);
-  return FIO_OpenToRead ((const char *) a, _a_high);
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   GetCh - gets a character from either the push back stack or
-           from file, f.
-*/
-
-extern "C" char PushBackInput_GetCh (FIO_File f)
-{
-  char ch;
-
-  if (StackPtr > 0)
-    {
-      StackPtr -= 1;
-      if (Debugging)
-        {
-          StdIO_Write (CharStack.array[StackPtr]);
-        }
-      return CharStack.array[StackPtr];
-    }
-  else
-    {
-      if ((FIO_EOF (f)) || (! (FIO_IsNoError (f))))
-        {
-          ch = ASCII_nul;
-        }
-      else
-        {
-          do {
-            ch = FIO_ReadChar (f);
-          } while (! (((ch != ASCII_cr) || (FIO_EOF (f))) || (! (FIO_IsNoError (f)))));
-          if (ch == ASCII_lf)
-            {
-              Column = 0;
-              LineNo += 1;
-            }
-          else
-            {
-              Column += 1;
-            }
-        }
-      if (Debugging)
-        {
-          StdIO_Write (ch);
-        }
-      return ch;
-    }
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   PutCh - pushes a character onto the push back stack, it also
-           returns the character which has been pushed.
-*/
-
-extern "C" char PushBackInput_PutCh (char ch)
-{
-  if (StackPtr < MaxPushBackStack)
-    {
-      CharStack.array[StackPtr] = ch;
-      StackPtr += 1;
-    }
-  else
-    {
-      Debug_Halt ((const char *) "max push back stack exceeded, increase MaxPushBackStack", 55, 150, (const char *) "../../gcc-read-write/gcc/m2/gm2-libs/PushBackInput.mod", 54);
-    }
-  return ch;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   PutString - pushes a string onto the push back stack.
-*/
-
-extern "C" void PushBackInput_PutString (const char *a_, unsigned int _a_high)
-{
-  unsigned int l;
-  char a[_a_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (a, a_, _a_high+1);
-
-  l = StrLib_StrLen ((const char *) a, _a_high);
-  while (l > 0)
-    {
-      l -= 1;
-      if ((PushBackInput_PutCh (a[l])) != a[l])
-        {
-          Debug_Halt ((const char *) "assert failed", 13, 132, (const char *) "../../gcc-read-write/gcc/m2/gm2-libs/PushBackInput.mod", 54);
-        }
-    }
-}
-
-
-/*
-   PutStr - pushes a dynamic string onto the push back stack.
-            The string, s, is not deallocated.
-*/
-
-extern "C" void PushBackInput_PutStr (DynamicStrings_String s)
-{
-  unsigned int i;
-
-  i = DynamicStrings_Length (s);
-  while (i > 0)
-    {
-      i -= 1;
-      if ((PushBackInput_PutCh (DynamicStrings_char (s, static_cast<int> (i)))) != (DynamicStrings_char (s, static_cast<int> (i))))
-        {
-          Debug_Halt ((const char *) "assert failed", 13, 113, (const char *) "../../gcc-read-write/gcc/m2/gm2-libs/PushBackInput.mod", 54);
-        }
-    }
-}
-
-
-/*
-   Error - emits an error message with the appropriate file, line combination.
-*/
-
-extern "C" void PushBackInput_Error (const char *a_, unsigned int _a_high)
-{
-  char a[_a_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (a, a_, _a_high+1);
-
-  StdIO_PushOutput ((StdIO_ProcWrite) {(StdIO_ProcWrite_t) ErrChar});
-  StrIO_WriteString ((const char *) &FileName.array[0], MaxFileName);
-  StdIO_Write (':');
-  NumberIO_WriteCard (LineNo, 0);
-  StdIO_Write (':');
-  StrIO_WriteString ((const char *) a, _a_high);
-  StrIO_WriteLn ();
-  StdIO_PopOutput ();
-  FIO_Close (FIO_StdErr);
-  libc_exit (1);
-}
-
-
-/*
-   WarnError - emits an error message with the appropriate file, line combination.
-               It does not terminate but when the program finishes an exit status of
-               1 will be issued.
-*/
-
-extern "C" void PushBackInput_WarnError (const char *a_, unsigned int _a_high)
-{
-  char a[_a_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (a, a_, _a_high+1);
-
-  StdIO_PushOutput ((StdIO_ProcWrite) {(StdIO_ProcWrite_t) ErrChar});
-  StrIO_WriteString ((const char *) &FileName.array[0], MaxFileName);
-  StdIO_Write (':');
-  NumberIO_WriteCard (LineNo, 0);
-  StdIO_Write (':');
-  StrIO_WriteString ((const char *) a, _a_high);
-  StrIO_WriteLn ();
-  StdIO_PopOutput ();
-  ExitStatus = 1;
-}
-
-
-/*
-   WarnString - emits an error message with the appropriate file, line combination.
-                It does not terminate but when the program finishes an exit status of
-                1 will be issued.
-*/
-
-extern "C" void PushBackInput_WarnString (DynamicStrings_String s)
-{
-  typedef char *WarnString__T1;
-
-  WarnString__T1 p;
-
-  p = static_cast<WarnString__T1> (DynamicStrings_string (s));
-  StrIO_WriteString ((const char *) &FileName.array[0], MaxFileName);
-  StdIO_Write (':');
-  NumberIO_WriteCard (LineNo, 0);
-  StdIO_Write (':');
-  do {
-    if (p != NULL)
-      {
-        if ((*p) == ASCII_lf)
-          {
-            StrIO_WriteLn ();
-            StrIO_WriteString ((const char *) &FileName.array[0], MaxFileName);
-            StdIO_Write (':');
-            NumberIO_WriteCard (LineNo, 0);
-            StdIO_Write (':');
-          }
-        else
-          {
-            StdIO_Write ((*p));
-          }
-        p += 1;
-      }
-  } while (! ((p == NULL) || ((*p) == ASCII_nul)));
-  ExitStatus = 1;
-}
-
-
-/*
-   Close - closes the opened file.
-*/
-
-extern "C" void PushBackInput_Close (FIO_File f)
-{
-  FIO_Close (f);
-}
-
-
-/*
-   GetExitStatus - returns the exit status which will be 1 if any warnings were issued.
-*/
-
-extern "C" unsigned int PushBackInput_GetExitStatus (void)
-{
-  return ExitStatus;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   SetDebug - sets the debug flag on or off.
-*/
-
-extern "C" void PushBackInput_SetDebug (unsigned int d)
-{
-  Debugging = d;
-}
-
-
-/*
-   GetColumnPosition - returns the column position of the current character.
-*/
-
-extern "C" unsigned int PushBackInput_GetColumnPosition (void)
-{
-  if (StackPtr > Column)
-    {
-      return 0;
-    }
-  else
-    {
-      return Column-StackPtr;
-    }
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   GetCurrentLine - returns the current line number.
-*/
-
-extern "C" unsigned int PushBackInput_GetCurrentLine (void)
-{
-  return LineNo;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-extern "C" void _M2_PushBackInput_init (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-  PushBackInput_SetDebug (FALSE);
-  Init ();
-}
-
-extern "C" void _M2_PushBackInput_fini (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-}
diff --git a/gcc/m2/mc-boot/GRTExceptions.c b/gcc/m2/mc-boot/GRTExceptions.c
deleted file mode 100644
index 23f8fede117..00000000000
--- a/gcc/m2/mc-boot/GRTExceptions.c
+++ /dev/null
@@ -1,1223 +0,0 @@
-/* do not edit automatically generated by mc from RTExceptions.  */
-/* RTExceptions.mod runtime exception handler routines.
-
-Copyright (C) 2008-2023 Free Software Foundation, Inc.
-Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>.
-
-This file is part of GNU Modula-2.
-
-GNU Modula-2 is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
-
-GNU Modula-2 is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-General Public License for more details.
-
-Under Section 7 of GPL version 3, you are granted additional
-permissions described in the GCC Runtime Library Exception, version
-3.1, as published by the Free Software Foundation.
-
-You should have received a copy of the GNU General Public License and
-a copy of the GCC Runtime Library Exception along with this program;
-see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
-<http://www.gnu.org/licenses/>.  */
-
-#include "config.h"
-#include "system.h"
-#   if !defined (PROC_D)
-#      define PROC_D
-       typedef void (*PROC_t) (void);
-       typedef struct { PROC_t proc; } PROC;
-#   endif
-
-#   if !defined (FALSE)
-#      define FALSE (1==0)
-#   endif
-
-#   include "GStorage.h"
-#   include "Gmcrts.h"
-#ifndef __cplusplus
-extern void throw (unsigned int);
-#endif
-#if defined(__cplusplus)
-#   undef NULL
-#   define NULL 0
-#endif
-#define _RTExceptions_H
-#define _RTExceptions_C
-
-#   include "GASCII.h"
-#   include "GStrLib.h"
-#   include "GStorage.h"
-#   include "GSYSTEM.h"
-#   include "Glibc.h"
-#   include "GM2RTS.h"
-#   include "GSysExceptions.h"
-#   include "GM2EXCEPTION.h"
-
-typedef struct RTExceptions_ProcedureHandler_p RTExceptions_ProcedureHandler;
-
-#   define MaxBuffer 4096
-typedef struct RTExceptions__T1_r RTExceptions__T1;
-
-typedef char *RTExceptions_PtrToChar;
-
-typedef struct RTExceptions__T2_a RTExceptions__T2;
-
-typedef struct RTExceptions__T3_r RTExceptions__T3;
-
-typedef RTExceptions__T3 *RTExceptions_Handler;
-
-typedef RTExceptions__T1 *RTExceptions_EHBlock;
-
-typedef void (*RTExceptions_ProcedureHandler_t) (void);
-struct RTExceptions_ProcedureHandler_p { RTExceptions_ProcedureHandler_t proc; };
-
-struct RTExceptions__T2_a { char array[MaxBuffer+1]; };
-struct RTExceptions__T1_r {
-                            RTExceptions__T2 buffer;
-                            unsigned int number;
-                            RTExceptions_Handler handlers;
-                            RTExceptions_EHBlock right;
-                          };
-
-struct RTExceptions__T3_r {
-                            RTExceptions_ProcedureHandler p;
-                            unsigned int n;
-                            RTExceptions_Handler right;
-                            RTExceptions_Handler left;
-                            RTExceptions_Handler stack;
-                          };
-
-static unsigned int inException;
-static RTExceptions_Handler freeHandler;
-static RTExceptions_EHBlock freeEHB;
-static RTExceptions_EHBlock currentEHB;
-static void * currentSource;
-
-/*
-   Raise - invoke the exception handler associated with, number,
-           in the active EHBlock.  It keeps a record of the number
-           and message in the EHBlock for later use.
-*/
-
-extern "C" void RTExceptions_Raise (unsigned int number, void * file, unsigned int line, unsigned int column, void * function, void * message) __attribute__ ((noreturn));
-
-/*
-   SetExceptionBlock - sets, source, as the active EHB.
-*/
-
-extern "C" void RTExceptions_SetExceptionBlock (RTExceptions_EHBlock source);
-
-/*
-   GetExceptionBlock - returns the active EHB.
-*/
-
-extern "C" RTExceptions_EHBlock RTExceptions_GetExceptionBlock (void);
-
-/*
-   GetTextBuffer - returns the address of the EHB buffer.
-*/
-
-extern "C" void * RTExceptions_GetTextBuffer (RTExceptions_EHBlock e);
-
-/*
-   GetTextBufferSize - return the size of the EHB text buffer.
-*/
-
-extern "C" unsigned int RTExceptions_GetTextBufferSize (RTExceptions_EHBlock e);
-
-/*
-   GetNumber - return the exception number associated with,
-               source.
-*/
-
-extern "C" unsigned int RTExceptions_GetNumber (RTExceptions_EHBlock source);
-
-/*
-   InitExceptionBlock - creates and returns a new exception block.
-*/
-
-extern "C" RTExceptions_EHBlock RTExceptions_InitExceptionBlock (void);
-
-/*
-   KillExceptionBlock - destroys the EHB, e, and all its handlers.
-*/
-
-extern "C" RTExceptions_EHBlock RTExceptions_KillExceptionBlock (RTExceptions_EHBlock e);
-
-/*
-   PushHandler - install a handler in EHB, e.
-*/
-
-extern "C" void RTExceptions_PushHandler (RTExceptions_EHBlock e, unsigned int number, RTExceptions_ProcedureHandler p);
-
-/*
-   PopHandler - removes the handler associated with, number, from
-                EHB, e.
-*/
-
-extern "C" void RTExceptions_PopHandler (RTExceptions_EHBlock e, unsigned int number);
-
-/*
-   DefaultErrorCatch - displays the current error message in
-                       the current exception block and then
-                       calls HALT.
-*/
-
-extern "C" void RTExceptions_DefaultErrorCatch (void);
-
-/*
-   BaseExceptionsThrow - configures the Modula-2 exceptions to call
-                         THROW which in turn can be caught by an
-                         exception block.  If this is not called then
-                         a Modula-2 exception will simply call an
-                         error message routine and then HALT.
-*/
-
-extern "C" void RTExceptions_BaseExceptionsThrow (void);
-
-/*
-   IsInExceptionState - returns TRUE if the program is currently
-                        in the exception state.
-*/
-
-extern "C" unsigned int RTExceptions_IsInExceptionState (void);
-
-/*
-   SetExceptionState - returns the current exception state and
-                       then sets the current exception state to,
-                       to.
-*/
-
-extern "C" unsigned int RTExceptions_SetExceptionState (unsigned int to);
-
-/*
-   SwitchExceptionState - assigns, from, with the current exception
-                          state and then assigns the current exception
-                          to, to.
-*/
-
-extern "C" void RTExceptions_SwitchExceptionState (unsigned int *from, unsigned int to);
-
-/*
-   GetBaseExceptionBlock - returns the initial language exception block
-                           created.
-*/
-
-extern "C" RTExceptions_EHBlock RTExceptions_GetBaseExceptionBlock (void);
-
-/*
-   SetExceptionSource - sets the current exception source to, source.
-*/
-
-extern "C" void RTExceptions_SetExceptionSource (void * source);
-
-/*
-   GetExceptionSource - returns the current exception source.
-*/
-
-extern "C" void * RTExceptions_GetExceptionSource (void);
-
-/*
-   ErrorString - writes a string to stderr.
-*/
-
-static void ErrorString (const char *a_, unsigned int _a_high);
-
-/*
-   findHandler -
-*/
-
-static RTExceptions_Handler findHandler (RTExceptions_EHBlock e, unsigned int number);
-
-/*
-   InvokeHandler - invokes the associated handler for the current
-                   exception in the active EHB.
-*/
-
-static void InvokeHandler (void) __attribute__ ((noreturn));
-
-/*
-   DoThrow - throw the exception number in the exception block.
-*/
-
-static void DoThrow (void);
-
-/*
-   addChar - adds, ch, to the current exception handler text buffer
-             at index, i.  The index in then incremented.
-*/
-
-static void addChar (char ch, unsigned int *i);
-
-/*
-   stripPath - returns the filename from the path.
-*/
-
-static void * stripPath (void * s);
-
-/*
-   addFile - adds the filename determined by, s, however it strips
-             any preceeding path.
-*/
-
-static void addFile (void * s, unsigned int *i);
-
-/*
-   addStr - adds a C string from address, s, into the current
-            handler text buffer.
-*/
-
-static void addStr (void * s, unsigned int *i);
-
-/*
-   addNum - adds a number, n, to the current handler
-            text buffer.
-*/
-
-static void addNum (unsigned int n, unsigned int *i);
-
-/*
-   New - returns a new EHBlock.
-*/
-
-static RTExceptions_EHBlock New (void);
-
-/*
-   NewHandler - returns a new handler.
-*/
-
-static RTExceptions_Handler NewHandler (void);
-
-/*
-   KillHandler - returns, NIL, and places, h, onto the free list.
-*/
-
-static RTExceptions_Handler KillHandler (RTExceptions_Handler h);
-
-/*
-   KillHandlers - kills all handlers in the list.
-*/
-
-static RTExceptions_Handler KillHandlers (RTExceptions_Handler h);
-
-/*
-   InitHandler -
-*/
-
-static RTExceptions_Handler InitHandler (RTExceptions_Handler h, RTExceptions_Handler l, RTExceptions_Handler r, RTExceptions_Handler s, unsigned int number, RTExceptions_ProcedureHandler proc);
-
-/*
-   SubHandler -
-*/
-
-static void SubHandler (RTExceptions_Handler h);
-
-/*
-   AddHandler - add, e, to the end of the list of handlers.
-*/
-
-static void AddHandler (RTExceptions_EHBlock e, RTExceptions_Handler h);
-
-/*
-   indexf - raise an index out of bounds exception.
-*/
-
-static void indexf (void * a);
-
-/*
-   range - raise an assignment out of range exception.
-*/
-
-static void range (void * a);
-
-/*
-   casef - raise a case selector out of range exception.
-*/
-
-static void casef (void * a);
-
-/*
-   invalidloc - raise an invalid location exception.
-*/
-
-static void invalidloc (void * a);
-
-/*
-   function - raise a ... function ... exception.  --fixme-- what does this exception catch?
-*/
-
-static void function (void * a);
-
-/*
-   wholevalue - raise an illegal whole value exception.
-*/
-
-static void wholevalue (void * a);
-
-/*
-   wholediv - raise a division by zero exception.
-*/
-
-static void wholediv (void * a);
-
-/*
-   realvalue - raise an illegal real value exception.
-*/
-
-static void realvalue (void * a);
-
-/*
-   realdiv - raise a division by zero in a real number exception.
-*/
-
-static void realdiv (void * a);
-
-/*
-   complexvalue - raise an illegal complex value exception.
-*/
-
-static void complexvalue (void * a);
-
-/*
-   complexdiv - raise a division by zero in a complex number exception.
-*/
-
-static void complexdiv (void * a);
-
-/*
-   protection - raise a protection exception.
-*/
-
-static void protection (void * a);
-
-/*
-   systemf - raise a system exception.
-*/
-
-static void systemf (void * a);
-
-/*
-   coroutine - raise a coroutine exception.
-*/
-
-static void coroutine (void * a);
-
-/*
-   exception - raise a exception exception.
-*/
-
-static void exception (void * a);
-
-/*
-   Init - initialises this module.
-*/
-
-static void Init (void);
-
-/*
-   TidyUp - deallocate memory used by this module.
-*/
-
-static void TidyUp (void);
-
-
-/*
-   ErrorString - writes a string to stderr.
-*/
-
-static void ErrorString (const char *a_, unsigned int _a_high)
-{
-  int n;
-  char a[_a_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (a, a_, _a_high+1);
-
-  n = static_cast<int> (libc_write (2, &a, static_cast<size_t> (StrLib_StrLen ((const char *) a, _a_high))));
-}
-
-
-/*
-   findHandler -
-*/
-
-static RTExceptions_Handler findHandler (RTExceptions_EHBlock e, unsigned int number)
-{
-  RTExceptions_Handler h;
-
-  h = e->handlers->right;
-  while ((h != e->handlers) && (number != h->n))
-    {
-      h = h->right;
-    }
-  if (h == e->handlers)
-    {
-      return NULL;
-    }
-  else
-    {
-      return h;
-    }
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   InvokeHandler - invokes the associated handler for the current
-                   exception in the active EHB.
-*/
-
-static void InvokeHandler (void)
-{
-  RTExceptions_Handler h;
-
-  h = findHandler (currentEHB, currentEHB->number);
-  if (h == NULL)
-    {
-      throw (RTExceptions_GetNumber (RTExceptions_GetExceptionBlock ()));
-    }
-  else
-    {
-      (*h->p.proc) ();
-      M2RTS_HALT (-1);
-      __builtin_unreachable ();
-    }
-}
-
-
-/*
-   DoThrow - throw the exception number in the exception block.
-*/
-
-static void DoThrow (void)
-{
-  throw (RTExceptions_GetNumber (RTExceptions_GetExceptionBlock ()));
-}
-
-
-/*
-   addChar - adds, ch, to the current exception handler text buffer
-             at index, i.  The index in then incremented.
-*/
-
-static void addChar (char ch, unsigned int *i)
-{
-  if (((*i) <= MaxBuffer) && (currentEHB != NULL))
-    {
-      currentEHB->buffer.array[(*i)] = ch;
-      (*i) += 1;
-    }
-}
-
-
-/*
-   stripPath - returns the filename from the path.
-*/
-
-static void * stripPath (void * s)
-{
-  RTExceptions_PtrToChar f;
-  RTExceptions_PtrToChar p;
-
-  p = static_cast<RTExceptions_PtrToChar> (s);
-  f = static_cast<RTExceptions_PtrToChar> (s);
-  while ((*p) != ASCII_nul)
-    {
-      if ((*p) == '/')
-        {
-          p += 1;
-          f = p;
-        }
-      else
-        {
-          p += 1;
-        }
-    }
-  return reinterpret_cast<void *> (f);
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   addFile - adds the filename determined by, s, however it strips
-             any preceeding path.
-*/
-
-static void addFile (void * s, unsigned int *i)
-{
-  RTExceptions_PtrToChar p;
-
-  p = static_cast<RTExceptions_PtrToChar> (stripPath (s));
-  while ((p != NULL) && ((*p) != ASCII_nul))
-    {
-      addChar ((*p), i);
-      p += 1;
-    }
-}
-
-
-/*
-   addStr - adds a C string from address, s, into the current
-            handler text buffer.
-*/
-
-static void addStr (void * s, unsigned int *i)
-{
-  RTExceptions_PtrToChar p;
-
-  p = static_cast<RTExceptions_PtrToChar> (s);
-  while ((p != NULL) && ((*p) != ASCII_nul))
-    {
-      addChar ((*p), i);
-      p += 1;
-    }
-}
-
-
-/*
-   addNum - adds a number, n, to the current handler
-            text buffer.
-*/
-
-static void addNum (unsigned int n, unsigned int *i)
-{
-  if (n < 10)
-    {
-      addChar ( ((char) ((n % 10)+ ((unsigned int) ('0')))), i);
-    }
-  else
-    {
-      addNum (n / 10, i);
-      addNum (n % 10, i);
-    }
-}
-
-
-/*
-   New - returns a new EHBlock.
-*/
-
-static RTExceptions_EHBlock New (void)
-{
-  RTExceptions_EHBlock e;
-
-  if (freeEHB == NULL)
-    {
-      Storage_ALLOCATE ((void **) &e, sizeof (RTExceptions__T1));
-    }
-  else
-    {
-      e = freeEHB;
-      freeEHB = freeEHB->right;
-    }
-  return e;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   NewHandler - returns a new handler.
-*/
-
-static RTExceptions_Handler NewHandler (void)
-{
-  RTExceptions_Handler h;
-
-  if (freeHandler == NULL)
-    {
-      Storage_ALLOCATE ((void **) &h, sizeof (RTExceptions__T3));
-    }
-  else
-    {
-      h = freeHandler;
-      freeHandler = freeHandler->right;
-    }
-  return h;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   KillHandler - returns, NIL, and places, h, onto the free list.
-*/
-
-static RTExceptions_Handler KillHandler (RTExceptions_Handler h)
-{
-  h->right = freeHandler;
-  freeHandler = h;
-  return NULL;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   KillHandlers - kills all handlers in the list.
-*/
-
-static RTExceptions_Handler KillHandlers (RTExceptions_Handler h)
-{
-  h->left->right = freeHandler;
-  freeHandler = h;
-  return NULL;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   InitHandler -
-*/
-
-static RTExceptions_Handler InitHandler (RTExceptions_Handler h, RTExceptions_Handler l, RTExceptions_Handler r, RTExceptions_Handler s, unsigned int number, RTExceptions_ProcedureHandler proc)
-{
-  h->p = proc;
-  h->n = number;
-  h->right = r;
-  h->left = l;
-  h->stack = s;
-  return h;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   SubHandler -
-*/
-
-static void SubHandler (RTExceptions_Handler h)
-{
-  h->right->left = h->left;
-  h->left->right = h->right;
-}
-
-
-/*
-   AddHandler - add, e, to the end of the list of handlers.
-*/
-
-static void AddHandler (RTExceptions_EHBlock e, RTExceptions_Handler h)
-{
-  h->right = e->handlers;
-  h->left = e->handlers->left;
-  e->handlers->left->right = h;
-  e->handlers->left = h;
-}
-
-
-/*
-   indexf - raise an index out of bounds exception.
-*/
-
-static void indexf (void * a)
-{
-  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_indexException)), const_cast<void*> (reinterpret_cast<const void*>("../../gcc-read-write/gcc/m2/gm2-libs/RTExceptions.mod")), 613, 9, const_cast<void*> (reinterpret_cast<const void*>("indexf")), const_cast<void*> (reinterpret_cast<const void*>("array index out of bounds")));
-}
-
-
-/*
-   range - raise an assignment out of range exception.
-*/
-
-static void range (void * a)
-{
-  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_rangeException)), const_cast<void*> (reinterpret_cast<const void*>("../../gcc-read-write/gcc/m2/gm2-libs/RTExceptions.mod")), 625, 9, const_cast<void*> (reinterpret_cast<const void*>("range")), const_cast<void*> (reinterpret_cast<const void*>("assignment out of range")));
-}
-
-
-/*
-   casef - raise a case selector out of range exception.
-*/
-
-static void casef (void * a)
-{
-  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_caseSelectException)), const_cast<void*> (reinterpret_cast<const void*>("../../gcc-read-write/gcc/m2/gm2-libs/RTExceptions.mod")), 637, 9, const_cast<void*> (reinterpret_cast<const void*>("casef")), const_cast<void*> (reinterpret_cast<const void*>("case selector out of range")));
-}
-
-
-/*
-   invalidloc - raise an invalid location exception.
-*/
-
-static void invalidloc (void * a)
-{
-  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_invalidLocation)), const_cast<void*> (reinterpret_cast<const void*>("../../gcc-read-write/gcc/m2/gm2-libs/RTExceptions.mod")), 649, 9, const_cast<void*> (reinterpret_cast<const void*>("invalidloc")), const_cast<void*> (reinterpret_cast<const void*>("invalid address referenced")));
-}
-
-
-/*
-   function - raise a ... function ... exception.  --fixme-- what does this exception catch?
-*/
-
-static void function (void * a)
-{
-  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_functionException)), const_cast<void*> (reinterpret_cast<const void*>("../../gcc-read-write/gcc/m2/gm2-libs/RTExceptions.mod")), 661, 9, const_cast<void*> (reinterpret_cast<const void*>("function")), const_cast<void*> (reinterpret_cast<const void*>("... function ... ")));  /* --fixme-- what has happened ?  */
-}
-
-
-/*
-   wholevalue - raise an illegal whole value exception.
-*/
-
-static void wholevalue (void * a)
-{
-  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_wholeValueException)), const_cast<void*> (reinterpret_cast<const void*>("../../gcc-read-write/gcc/m2/gm2-libs/RTExceptions.mod")), 673, 9, const_cast<void*> (reinterpret_cast<const void*>("wholevalue")), const_cast<void*> (reinterpret_cast<const void*>("illegal whole value exception")));
-}
-
-
-/*
-   wholediv - raise a division by zero exception.
-*/
-
-static void wholediv (void * a)
-{
-  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_wholeDivException)), const_cast<void*> (reinterpret_cast<const void*>("../../gcc-read-write/gcc/m2/gm2-libs/RTExceptions.mod")), 685, 9, const_cast<void*> (reinterpret_cast<const void*>("wholediv")), const_cast<void*> (reinterpret_cast<const void*>("illegal whole value exception")));
-}
-
-
-/*
-   realvalue - raise an illegal real value exception.
-*/
-
-static void realvalue (void * a)
-{
-  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_realValueException)), const_cast<void*> (reinterpret_cast<const void*>("../../gcc-read-write/gcc/m2/gm2-libs/RTExceptions.mod")), 697, 9, const_cast<void*> (reinterpret_cast<const void*>("realvalue")), const_cast<void*> (reinterpret_cast<const void*>("illegal real value exception")));
-}
-
-
-/*
-   realdiv - raise a division by zero in a real number exception.
-*/
-
-static void realdiv (void * a)
-{
-  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_realDivException)), const_cast<void*> (reinterpret_cast<const void*>("../../gcc-read-write/gcc/m2/gm2-libs/RTExceptions.mod")), 709, 9, const_cast<void*> (reinterpret_cast<const void*>("realdiv")), const_cast<void*> (reinterpret_cast<const void*>("real number division by zero exception")));
-}
-
-
-/*
-   complexvalue - raise an illegal complex value exception.
-*/
-
-static void complexvalue (void * a)
-{
-  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_complexValueException)), const_cast<void*> (reinterpret_cast<const void*>("../../gcc-read-write/gcc/m2/gm2-libs/RTExceptions.mod")), 721, 9, const_cast<void*> (reinterpret_cast<const void*>("complexvalue")), const_cast<void*> (reinterpret_cast<const void*>("illegal complex value exception")));
-}
-
-
-/*
-   complexdiv - raise a division by zero in a complex number exception.
-*/
-
-static void complexdiv (void * a)
-{
-  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_complexDivException)), const_cast<void*> (reinterpret_cast<const void*>("../../gcc-read-write/gcc/m2/gm2-libs/RTExceptions.mod")), 733, 9, const_cast<void*> (reinterpret_cast<const void*>("complexdiv")), const_cast<void*> (reinterpret_cast<const void*>("complex number division by zero exception")));
-}
-
-
-/*
-   protection - raise a protection exception.
-*/
-
-static void protection (void * a)
-{
-  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_protException)), const_cast<void*> (reinterpret_cast<const void*>("../../gcc-read-write/gcc/m2/gm2-libs/RTExceptions.mod")), 745, 9, const_cast<void*> (reinterpret_cast<const void*>("protection")), const_cast<void*> (reinterpret_cast<const void*>("protection exception")));
-}
-
-
-/*
-   systemf - raise a system exception.
-*/
-
-static void systemf (void * a)
-{
-  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_sysException)), const_cast<void*> (reinterpret_cast<const void*>("../../gcc-read-write/gcc/m2/gm2-libs/RTExceptions.mod")), 757, 9, const_cast<void*> (reinterpret_cast<const void*>("systemf")), const_cast<void*> (reinterpret_cast<const void*>("system exception")));
-}
-
-
-/*
-   coroutine - raise a coroutine exception.
-*/
-
-static void coroutine (void * a)
-{
-  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_coException)), const_cast<void*> (reinterpret_cast<const void*>("../../gcc-read-write/gcc/m2/gm2-libs/RTExceptions.mod")), 769, 9, const_cast<void*> (reinterpret_cast<const void*>("coroutine")), const_cast<void*> (reinterpret_cast<const void*>("coroutine exception")));
-}
-
-
-/*
-   exception - raise a exception exception.
-*/
-
-static void exception (void * a)
-{
-  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_exException)), const_cast<void*> (reinterpret_cast<const void*>("../../gcc-read-write/gcc/m2/gm2-libs/RTExceptions.mod")), 781, 9, const_cast<void*> (reinterpret_cast<const void*>("exception")), const_cast<void*> (reinterpret_cast<const void*>("exception exception")));
-}
-
-
-/*
-   Init - initialises this module.
-*/
-
-static void Init (void)
-{
-  inException = FALSE;
-  freeHandler = NULL;
-  freeEHB = NULL;
-  currentEHB = RTExceptions_InitExceptionBlock ();
-  currentSource = NULL;
-  RTExceptions_BaseExceptionsThrow ();
-  SysExceptions_InitExceptionHandlers ((SysExceptions_PROCEXCEPTION) {(SysExceptions_PROCEXCEPTION_t) indexf}, (SysExceptions_PROCEXCEPTION) {(SysExceptions_PROCEXCEPTION_t) range}, (SysExceptions_PROCEXCEPTION) {(SysExceptions_PROCEXCEPTION_t) casef}, (SysExceptions_PROCEXCEPTION) {(SysExceptions_PROCEXCEPTION_t) invalidloc}, (SysExceptions_PROCEXCEPTION) {(SysExceptions_PROCEXCEPTION_t) function}, (SysExceptions_PROCEXCEPTION) {(SysExceptions_PROCEXCEPTION_t) wholevalue}, (SysExceptions_PROCEXCEPTION) {(SysExceptions_PROCEXCEPTION_t) wholediv}, (SysExceptions_PROCEXCEPTION) {(SysExceptions_PROCEXCEPTION_t) realvalue}, (SysExceptions_PROCEXCEPTION) {(SysExceptions_PROCEXCEPTION_t) realdiv}, (SysExceptions_PROCEXCEPTION) {(SysExceptions_PROCEXCEPTION_t) complexvalue}, (SysExceptions_PROCEXCEPTION) {(SysExceptions_PROCEXCEPTION_t) complexdiv}, (SysExceptions_PROCEXCEPTION) {(SysExceptions_PROCEXCEPTION_t) protection}, (SysExceptions_PROCEXCEPTION) {(SysExceptions_PROCEXCEPTION_t) systemf}, (SysExceptions_PROCEXCEPTION) {(SysExceptions_PROCEXCEPTION_t) coroutine}, (SysExceptions_PROCEXCEPTION) {(SysExceptions_PROCEXCEPTION_t) exception});
-}
-
-
-/*
-   TidyUp - deallocate memory used by this module.
-*/
-
-static void TidyUp (void)
-{
-  RTExceptions_Handler f;
-  RTExceptions_EHBlock e;
-
-  if (currentEHB != NULL)
-    {
-      currentEHB = RTExceptions_KillExceptionBlock (currentEHB);
-    }
-  while (freeHandler != NULL)
-    {
-      f = freeHandler;
-      freeHandler = freeHandler->right;
-      Storage_DEALLOCATE ((void **) &f, sizeof (RTExceptions__T3));
-    }
-  while (freeEHB != NULL)
-    {
-      e = freeEHB;
-      freeEHB = freeEHB->right;
-      Storage_DEALLOCATE ((void **) &e, sizeof (RTExceptions__T1));
-    }
-}
-
-
-/*
-   Raise - invoke the exception handler associated with, number,
-           in the active EHBlock.  It keeps a record of the number
-           and message in the EHBlock for later use.
-*/
-
-extern "C" void RTExceptions_Raise (unsigned int number, void * file, unsigned int line, unsigned int column, void * function, void * message)
-{
-  unsigned int i;
-
-  currentEHB->number = number;
-  i = 0;
-  addFile (file, &i);
-  addChar (':', &i);
-  addNum (line, &i);
-  addChar (':', &i);
-  addNum (column, &i);
-  addChar (':', &i);
-  addChar (' ', &i);
-  addChar ('I', &i);
-  addChar ('n', &i);
-  addChar (' ', &i);
-  addStr (function, &i);
-  addChar (ASCII_nl, &i);
-  addFile (file, &i);
-  addChar (':', &i);
-  addNum (line, &i);
-  addChar (':', &i);
-  addNum (column, &i);
-  addChar (':', &i);
-  addStr (message, &i);
-  addChar (ASCII_nl, &i);
-  addChar (ASCII_nul, &i);
-  InvokeHandler ();
-}
-
-
-/*
-   SetExceptionBlock - sets, source, as the active EHB.
-*/
-
-extern "C" void RTExceptions_SetExceptionBlock (RTExceptions_EHBlock source)
-{
-  currentEHB = source;
-}
-
-
-/*
-   GetExceptionBlock - returns the active EHB.
-*/
-
-extern "C" RTExceptions_EHBlock RTExceptions_GetExceptionBlock (void)
-{
-  return currentEHB;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   GetTextBuffer - returns the address of the EHB buffer.
-*/
-
-extern "C" void * RTExceptions_GetTextBuffer (RTExceptions_EHBlock e)
-{
-  return &e->buffer;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   GetTextBufferSize - return the size of the EHB text buffer.
-*/
-
-extern "C" unsigned int RTExceptions_GetTextBufferSize (RTExceptions_EHBlock e)
-{
-  return sizeof (e->buffer);
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   GetNumber - return the exception number associated with,
-               source.
-*/
-
-extern "C" unsigned int RTExceptions_GetNumber (RTExceptions_EHBlock source)
-{
-  return source->number;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   InitExceptionBlock - creates and returns a new exception block.
-*/
-
-extern "C" RTExceptions_EHBlock RTExceptions_InitExceptionBlock (void)
-{
-  RTExceptions_EHBlock e;
-
-  e = New ();
-  e->number = UINT_MAX;
-  e->handlers = NewHandler ();  /* add the dummy onto the head  */
-  e->handlers->right = e->handlers;  /* add the dummy onto the head  */
-  e->handlers->left = e->handlers;
-  e->right = e;
-  return e;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   KillExceptionBlock - destroys the EHB, e, and all its handlers.
-*/
-
-extern "C" RTExceptions_EHBlock RTExceptions_KillExceptionBlock (RTExceptions_EHBlock e)
-{
-  e->handlers = KillHandlers (e->handlers);
-  e->right = freeEHB;
-  freeEHB = e;
-  return NULL;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   PushHandler - install a handler in EHB, e.
-*/
-
-extern "C" void RTExceptions_PushHandler (RTExceptions_EHBlock e, unsigned int number, RTExceptions_ProcedureHandler p)
-{
-  RTExceptions_Handler h;
-  RTExceptions_Handler i;
-
-  h = findHandler (e, number);
-  if (h == NULL)
-    {
-      i = InitHandler (NewHandler (), NULL, NULL, NULL, number, p);
-    }
-  else
-    {
-      /* remove, h,  */
-      SubHandler (h);
-      /* stack it onto a new handler  */
-      i = InitHandler (NewHandler (), NULL, NULL, h, number, p);
-    }
-  /* add new handler  */
-  AddHandler (e, i);
-}
-
-
-/*
-   PopHandler - removes the handler associated with, number, from
-                EHB, e.
-*/
-
-extern "C" void RTExceptions_PopHandler (RTExceptions_EHBlock e, unsigned int number)
-{
-  RTExceptions_Handler h;
-  RTExceptions_Handler i;
-
-  h = findHandler (e, number);
-  if (h != NULL)
-    {
-      /* remove, h,  */
-      SubHandler (h);
-      if (h->stack != NULL)
-        {
-          AddHandler (e, h->stack);
-        }
-      h = KillHandler (h);
-    }
-}
-
-
-/*
-   DefaultErrorCatch - displays the current error message in
-                       the current exception block and then
-                       calls HALT.
-*/
-
-extern "C" void RTExceptions_DefaultErrorCatch (void)
-{
-  RTExceptions_EHBlock e;
-  int n;
-
-  e = RTExceptions_GetExceptionBlock ();
-  n = static_cast<int> (libc_write (2, RTExceptions_GetTextBuffer (e), libc_strlen (RTExceptions_GetTextBuffer (e))));
-  M2RTS_HALT (-1);
-  __builtin_unreachable ();
-}
-
-
-/*
-   BaseExceptionsThrow - configures the Modula-2 exceptions to call
-                         THROW which in turn can be caught by an
-                         exception block.  If this is not called then
-                         a Modula-2 exception will simply call an
-                         error message routine and then HALT.
-*/
-
-extern "C" void RTExceptions_BaseExceptionsThrow (void)
-{
-  M2EXCEPTION_M2Exceptions i;
-
-  for (i=M2EXCEPTION_indexException; i<=M2EXCEPTION_exException; i= static_cast<M2EXCEPTION_M2Exceptions>(static_cast<int>(i+1)))
-    {
-      RTExceptions_PushHandler (RTExceptions_GetExceptionBlock (), (unsigned int ) (i), (RTExceptions_ProcedureHandler) {(RTExceptions_ProcedureHandler_t) DoThrow});
-    }
-}
-
-
-/*
-   IsInExceptionState - returns TRUE if the program is currently
-                        in the exception state.
-*/
-
-extern "C" unsigned int RTExceptions_IsInExceptionState (void)
-{
-  return inException;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   SetExceptionState - returns the current exception state and
-                       then sets the current exception state to,
-                       to.
-*/
-
-extern "C" unsigned int RTExceptions_SetExceptionState (unsigned int to)
-{
-  unsigned int old;
-
-  old = inException;
-  inException = to;
-  return old;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   SwitchExceptionState - assigns, from, with the current exception
-                          state and then assigns the current exception
-                          to, to.
-*/
-
-extern "C" void RTExceptions_SwitchExceptionState (unsigned int *from, unsigned int to)
-{
-  (*from) = inException;
-  inException = to;
-}
-
-
-/*
-   GetBaseExceptionBlock - returns the initial language exception block
-                           created.
-*/
-
-extern "C" RTExceptions_EHBlock RTExceptions_GetBaseExceptionBlock (void)
-{
-  if (currentEHB == NULL)
-    {
-      M2RTS_Halt ((const char *) "../../gcc-read-write/gcc/m2/gm2-libs/RTExceptions.mod", 53, 599, (const char *) "GetBaseExceptionBlock", 21, (const char *) "currentEHB has not been initialized yet", 39);
-    }
-  else
-    {
-      return currentEHB;
-    }
-  ReturnException ("../../gcc-read-write/gcc/m2/gm2-libs/RTExceptions.def", 25, 1);
-  __builtin_unreachable ();
-}
-
-
-/*
-   SetExceptionSource - sets the current exception source to, source.
-*/
-
-extern "C" void RTExceptions_SetExceptionSource (void * source)
-{
-  currentSource = source;
-}
-
-
-/*
-   GetExceptionSource - returns the current exception source.
-*/
-
-extern "C" void * RTExceptions_GetExceptionSource (void)
-{
-  return currentSource;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-extern "C" void _M2_RTExceptions_init (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-  Init ();
-}
-
-extern "C" void _M2_RTExceptions_fini (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-  TidyUp ();
-}
diff --git a/gcc/m2/mc-boot/GRTint.c b/gcc/m2/mc-boot/GRTint.c
deleted file mode 100644
index a3030f2d9a1..00000000000
--- a/gcc/m2/mc-boot/GRTint.c
+++ /dev/null
@@ -1,1106 +0,0 @@
-/* do not edit automatically generated by mc from RTint.  */
-/* RTint.mod provides users of the COROUTINES library with the.
-
-Copyright (C) 2009-2023 Free Software Foundation, Inc.
-Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>.
-
-This file is part of GNU Modula-2.
-
-GNU Modula-2 is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
-
-GNU Modula-2 is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-General Public License for more details.
-
-Under Section 7 of GPL version 3, you are granted additional
-permissions described in the GCC Runtime Library Exception, version
-3.1, as published by the Free Software Foundation.
-
-You should have received a copy of the GNU General Public License and
-a copy of the GCC Runtime Library Exception along with this program;
-see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
-<http://www.gnu.org/licenses/>.  */
-
-#include "config.h"
-#include "system.h"
-#   if !defined (PROC_D)
-#      define PROC_D
-       typedef void (*PROC_t) (void);
-       typedef struct { PROC_t proc; } PROC;
-#   endif
-
-#   if !defined (TRUE)
-#      define TRUE (1==1)
-#   endif
-
-#   if !defined (FALSE)
-#      define FALSE (1==0)
-#   endif
-
-#   include "GStorage.h"
-#   include "Gmcrts.h"
-#if defined(__cplusplus)
-#   undef NULL
-#   define NULL 0
-#endif
-#define _RTint_H
-#define _RTint_C
-
-#   include "GM2RTS.h"
-#   include "GStorage.h"
-#   include "GRTco.h"
-#   include "GCOROUTINES.h"
-#   include "Glibc.h"
-#   include "GAssertion.h"
-#   include "GSelective.h"
-
-typedef struct RTint_DispatchVector_p RTint_DispatchVector;
-
-#   define Microseconds 1000000
-#   define DebugTime 0
-#   define Debugging FALSE
-typedef struct RTint__T1_r RTint__T1;
-
-typedef RTint__T1 *RTint_Vector;
-
-typedef struct RTint__T2_a RTint__T2;
-
-typedef enum {RTint_input, RTint_output, RTint_time} RTint_VectorType;
-
-typedef void (*RTint_DispatchVector_t) (unsigned int, unsigned int, void *);
-struct RTint_DispatchVector_p { RTint_DispatchVector_t proc; };
-
-struct RTint__T1_r {
-                     RTint_VectorType type;
-                     unsigned int priority;
-                     void *arg;
-                     RTint_Vector pending;
-                     RTint_Vector exists;
-                     unsigned int no;
-                     int File;
-                     Selective_Timeval rel;
-                     Selective_Timeval abs_;
-                     unsigned int queued;
-                   };
-
-struct RTint__T2_a { RTint_Vector array[(7)-(COROUTINES_UnassignedPriority)+1]; };
-static unsigned int VecNo;
-static RTint_Vector Exists;
-static RTint__T2 Pending;
-static int lock;
-static unsigned int initialized;
-
-/*
-   InitInputVector - returns an interrupt vector which is associated
-                     with the file descriptor, fd.
-*/
-
-extern "C" unsigned int RTint_InitInputVector (int fd, unsigned int pri);
-
-/*
-   InitOutputVector - returns an interrupt vector which is associated
-                      with the file descriptor, fd.
-*/
-
-extern "C" unsigned int RTint_InitOutputVector (int fd, unsigned int pri);
-
-/*
-   InitTimeVector - returns an interrupt vector associated with
-                    the relative time.
-*/
-
-extern "C" unsigned int RTint_InitTimeVector (unsigned int micro, unsigned int secs, unsigned int pri);
-
-/*
-   ReArmTimeVector - reprimes the vector, vec, to deliver an interrupt
-                     at the new relative time.
-*/
-
-extern "C" void RTint_ReArmTimeVector (unsigned int vec, unsigned int micro, unsigned int secs);
-
-/*
-   GetTimeVector - assigns, micro, and, secs, with the remaining
-                   time before this interrupt will expire.
-                   This value is only updated when a Listen
-                   occurs.
-*/
-
-extern "C" void RTint_GetTimeVector (unsigned int vec, unsigned int *micro, unsigned int *secs);
-
-/*
-   AttachVector - adds the pointer ptr to be associated with the interrupt
-                  vector. It returns the previous value attached to this
-                  vector.
-*/
-
-extern "C" void * RTint_AttachVector (unsigned int vec, void * ptr);
-
-/*
-   IncludeVector - includes, vec, into the dispatcher list of
-                   possible interrupt causes.
-*/
-
-extern "C" void RTint_IncludeVector (unsigned int vec);
-
-/*
-   ExcludeVector - excludes, vec, from the dispatcher list of
-                   possible interrupt causes.
-*/
-
-extern "C" void RTint_ExcludeVector (unsigned int vec);
-
-/*
-   Listen - will either block indefinitely (until an interrupt)
-            or alteratively will test to see whether any interrupts
-            are pending.
-            If a pending interrupt was found then, call, is called
-            and then this procedure returns.
-            It only listens for interrupts > pri.
-*/
-
-extern "C" void RTint_Listen (unsigned int untilInterrupt, RTint_DispatchVector call, unsigned int pri);
-
-/*
-   Init -
-*/
-
-extern "C" void RTint_Init (void);
-
-/*
-   Max - returns the maximum: i or j.
-*/
-
-static int Max (int i, int j);
-static int Min (int i, int j);
-
-/*
-   FindVector - searches the exists list for a vector of type
-                which is associated with file descriptor, fd.
-*/
-
-static RTint_Vector FindVector (int fd, RTint_VectorType type);
-
-/*
-   FindVectorNo - searches the Exists list for vector vec.
-*/
-
-static RTint_Vector FindVectorNo (unsigned int vec);
-
-/*
-   FindPendingVector - searches the pending list for vector, vec.
-*/
-
-static RTint_Vector FindPendingVector (unsigned int vec);
-
-/*
-   AddFd - adds the file descriptor fd to set updating max.
-*/
-
-static void AddFd (Selective_SetOfFd *set, int *max, int fd);
-
-/*
-   DumpPendingQueue - displays the pending queue.
-*/
-
-static void DumpPendingQueue (void);
-
-/*
-   AddTime - t1 := t1 + t2
-*/
-
-static void AddTime (Selective_Timeval t1, Selective_Timeval t2);
-
-/*
-   IsGreaterEqual - returns TRUE if, a>=b
-*/
-
-static unsigned int IsGreaterEqual (Selective_Timeval a, Selective_Timeval b);
-
-/*
-   SubTime - assigns, s and m, to a - b.
-*/
-
-static void SubTime (unsigned int *s, unsigned int *m, Selective_Timeval a, Selective_Timeval b);
-
-/*
-   activatePending - activates the first interrupt pending and clears it.
-*/
-
-static unsigned int activatePending (unsigned int untilInterrupt, RTint_DispatchVector call, unsigned int pri, int maxFd, Selective_SetOfFd *inSet, Selective_SetOfFd *outSet, Selective_Timeval *timeval, Selective_Timeval b4, Selective_Timeval after);
-
-/*
-   init -
-*/
-
-static void init (void);
-
-
-/*
-   Max - returns the maximum: i or j.
-*/
-
-static int Max (int i, int j)
-{
-  if (i > j)
-    {
-      return i;
-    }
-  else
-    {
-      return j;
-    }
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-static int Min (int i, int j)
-{
-  /* 
-   Max - returns the minimum: i or j.
-  */
-  if (i < j)
-    {
-      return i;
-    }
-  else
-    {
-      return j;
-    }
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   FindVector - searches the exists list for a vector of type
-                which is associated with file descriptor, fd.
-*/
-
-static RTint_Vector FindVector (int fd, RTint_VectorType type)
-{
-  RTint_Vector vec;
-
-  vec = Exists;
-  while (vec != NULL)
-    {
-      if ((vec->type == type) && (vec->File == fd))
-        {
-          return vec;
-        }
-      vec = vec->exists;
-    }
-  return NULL;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   FindVectorNo - searches the Exists list for vector vec.
-*/
-
-static RTint_Vector FindVectorNo (unsigned int vec)
-{
-  RTint_Vector vptr;
-
-  vptr = Exists;
-  while ((vptr != NULL) && (vptr->no != vec))
-    {
-      vptr = vptr->exists;
-    }
-  return vptr;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   FindPendingVector - searches the pending list for vector, vec.
-*/
-
-static RTint_Vector FindPendingVector (unsigned int vec)
-{
-  unsigned int pri;
-  RTint_Vector vptr;
-
-  for (pri=COROUTINES_UnassignedPriority; pri<=7; pri++)
-    {
-      vptr = Pending.array[pri-(COROUTINES_UnassignedPriority)];
-      while ((vptr != NULL) && (vptr->no != vec))
-        {
-          vptr = vptr->pending;
-        }
-      if ((vptr != NULL) && (vptr->no == vec))
-        {
-          return vptr;
-        }
-    }
-  return NULL;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   AddFd - adds the file descriptor fd to set updating max.
-*/
-
-static void AddFd (Selective_SetOfFd *set, int *max, int fd)
-{
-  (*max) = Max (fd, (*max));
-  if ((*set) == NULL)
-    {
-      (*set) = Selective_InitSet ();
-      Selective_FdZero ((*set));
-    }
-  /* printf('%d, ', fd)  */
-  Selective_FdSet (fd, (*set));
-}
-
-
-/*
-   DumpPendingQueue - displays the pending queue.
-*/
-
-static void DumpPendingQueue (void)
-{
-  COROUTINES_PROTECTION pri;
-  RTint_Vector vptr;
-  unsigned int sec;
-  unsigned int micro;
-
-  libc_printf ((const char *) "Pending queue\\n", 15);
-  for (pri=COROUTINES_UnassignedPriority; pri<=7; pri++)
-    {
-      libc_printf ((const char *) "[%d]  ", 6, pri);
-      vptr = Pending.array[pri-(COROUTINES_UnassignedPriority)];
-      while (vptr != NULL)
-        {
-          if ((vptr->type == RTint_input) || (vptr->type == RTint_output))
-            {
-              libc_printf ((const char *) "(fd=%d) (vec=%d)", 16, vptr->File, vptr->no);
-            }
-          else if (vptr->type == RTint_time)
-            {
-              /* avoid dangling else.  */
-              Selective_GetTime (vptr->rel, &sec, &micro);
-              Assertion_Assert (micro < Microseconds);
-              libc_printf ((const char *) "time (%u.%06u secs) (arg = %p)\\n", 32, sec, micro, vptr->arg);
-            }
-          vptr = vptr->pending;
-        }
-      libc_printf ((const char *) " \\n", 3);
-    }
-}
-
-
-/*
-   AddTime - t1 := t1 + t2
-*/
-
-static void AddTime (Selective_Timeval t1, Selective_Timeval t2)
-{
-  unsigned int a;
-  unsigned int b;
-  unsigned int s;
-  unsigned int m;
-
-  Selective_GetTime (t1, &s, &m);
-  Assertion_Assert (m < Microseconds);
-  Selective_GetTime (t2, &a, &b);
-  Assertion_Assert (b < Microseconds);
-  a += s;
-  b += m;
-  if (b >= Microseconds)
-    {
-      b -= Microseconds;
-      a += 1;
-    }
-  Selective_SetTime (t1, a, b);
-}
-
-
-/*
-   IsGreaterEqual - returns TRUE if, a>=b
-*/
-
-static unsigned int IsGreaterEqual (Selective_Timeval a, Selective_Timeval b)
-{
-  unsigned int as;
-  unsigned int am;
-  unsigned int bs;
-  unsigned int bm;
-
-  Selective_GetTime (a, &as, &am);
-  Assertion_Assert (am < Microseconds);
-  Selective_GetTime (b, &bs, &bm);
-  Assertion_Assert (bm < Microseconds);
-  return (as > bs) || ((as == bs) && (am >= bm));
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   SubTime - assigns, s and m, to a - b.
-*/
-
-static void SubTime (unsigned int *s, unsigned int *m, Selective_Timeval a, Selective_Timeval b)
-{
-  unsigned int as;
-  unsigned int am;
-  unsigned int bs;
-  unsigned int bm;
-
-  Selective_GetTime (a, &as, &am);
-  Assertion_Assert (am < Microseconds);
-  Selective_GetTime (b, &bs, &bm);
-  Assertion_Assert (bm < Microseconds);
-  if (IsGreaterEqual (a, b))
-    {
-      (*s) = as-bs;
-      if (am >= bm)
-        {
-          (*m) = am-bm;
-          Assertion_Assert ((*m) < Microseconds);
-        }
-      else
-        {
-          Assertion_Assert ((*s) > 0);
-          (*s) -= 1;
-          (*m) = (Microseconds+am)-bm;
-          Assertion_Assert ((*m) < Microseconds);
-        }
-    }
-  else
-    {
-      (*s) = 0;
-      (*m) = 0;
-    }
-}
-
-
-/*
-   activatePending - activates the first interrupt pending and clears it.
-*/
-
-static unsigned int activatePending (unsigned int untilInterrupt, RTint_DispatchVector call, unsigned int pri, int maxFd, Selective_SetOfFd *inSet, Selective_SetOfFd *outSet, Selective_Timeval *timeval, Selective_Timeval b4, Selective_Timeval after)
-{
-  int result;
-  unsigned int p;
-  RTint_Vector vec;
-  unsigned int b4s;
-  unsigned int b4m;
-  unsigned int afs;
-  unsigned int afm;
-  unsigned int sec;
-  unsigned int micro;
-
-  RTco_wait (lock);
-  p = static_cast<unsigned int> (7);
-  while (p > pri)
-    {
-      vec = Pending.array[p-(COROUTINES_UnassignedPriority)];
-      while (vec != NULL)
-        {
-          switch (vec->type)
-            {
-              case RTint_input:
-                if (((vec->File < maxFd) && ((*inSet) != NULL)) && (Selective_FdIsSet (vec->File, (*inSet))))
-                  {
-                    if (Debugging)
-                      {
-                        libc_printf ((const char *) "read (fd=%d) is ready (vec=%d)\\n", 32, vec->File, vec->no);
-                        DumpPendingQueue ();
-                      }
-                    Selective_FdClr (vec->File, (*inSet));  /* so we dont activate this again from our select.  */
-                    RTco_signal (lock);  /* so we dont activate this again from our select.  */
-                    (*call.proc) (vec->no, vec->priority, vec->arg);
-                    return TRUE;
-                  }
-                break;
-
-              case RTint_output:
-                if (((vec->File < maxFd) && ((*outSet) != NULL)) && (Selective_FdIsSet (vec->File, (*outSet))))
-                  {
-                    if (Debugging)
-                      {
-                        libc_printf ((const char *) "write (fd=%d) is ready (vec=%d)\\n", 33, vec->File, vec->no);
-                        DumpPendingQueue ();
-                      }
-                    Selective_FdClr (vec->File, (*outSet));  /* so we dont activate this again from our select.  */
-                    RTco_signal (lock);  /* so we dont activate this again from our select.  */
-                    (*call.proc) (vec->no, vec->priority, vec->arg);
-                    return TRUE;
-                  }
-                break;
-
-              case RTint_time:
-                if (untilInterrupt && ((*timeval) != NULL))
-                  {
-                    result = Selective_GetTimeOfDay (after);
-                    Assertion_Assert (result == 0);
-                    if (Debugging)
-                      {
-                        Selective_GetTime ((*timeval), &sec, &micro);
-                        Assertion_Assert (micro < Microseconds);
-                        Selective_GetTime (after, &afs, &afm);
-                        Assertion_Assert (afm < Microseconds);
-                        Selective_GetTime (b4, &b4s, &b4m);
-                        Assertion_Assert (b4m < Microseconds);
-                        libc_printf ((const char *) "waited %u.%06u + %u.%06u now is %u.%06u\\n", 41, sec, micro, b4s, b4m, afs, afm);
-                      }
-                    if (IsGreaterEqual (after, vec->abs_))
-                      {
-                        if (Debugging)
-                          {
-                            DumpPendingQueue ();
-                            libc_printf ((const char *) "time has expired calling dispatcher\\n", 37);
-                          }
-                        (*timeval) = Selective_KillTime ((*timeval));  /* so we dont activate this again from our select.  */
-                        RTco_signal (lock);  /* so we dont activate this again from our select.  */
-                        if (Debugging)
-                          {
-                            libc_printf ((const char *) "call (%d, %d, 0x%x)\\n", 21, vec->no, vec->priority, vec->arg);
-                          }
-                        (*call.proc) (vec->no, vec->priority, vec->arg);
-                        return TRUE;
-                      }
-                    else if (Debugging)
-                      {
-                        /* avoid dangling else.  */
-                        libc_printf ((const char *) "must wait longer as time has not expired\\n", 42);
-                      }
-                  }
-                break;
-
-
-              default:
-                CaseException ("../../gcc-read-write/gcc/m2/gm2-libs/RTint.def", 25, 1);
-                __builtin_unreachable ();
-            }
-          vec = vec->pending;
-        }
-      p -= 1;
-    }
-  RTco_signal (lock);
-  return FALSE;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   init -
-*/
-
-static void init (void)
-{
-  COROUTINES_PROTECTION p;
-
-  lock = RTco_initSemaphore (1);
-  RTco_wait (lock);
-  Exists = NULL;
-  for (p=COROUTINES_UnassignedPriority; p<=7; p++)
-    {
-      Pending.array[p-(COROUTINES_UnassignedPriority)] = NULL;
-    }
-  initialized = TRUE;
-  RTco_signal (lock);
-}
-
-
-/*
-   InitInputVector - returns an interrupt vector which is associated
-                     with the file descriptor, fd.
-*/
-
-extern "C" unsigned int RTint_InitInputVector (int fd, unsigned int pri)
-{
-  RTint_Vector vptr;
-
-  if (Debugging)
-    {
-      libc_printf ((const char *) "InitInputVector fd = %d priority = %d\\n", 39, fd, pri);
-    }
-  RTco_wait (lock);
-  vptr = FindVector (fd, RTint_input);
-  if (vptr == NULL)
-    {
-      Storage_ALLOCATE ((void **) &vptr, sizeof (RTint__T1));
-      VecNo += 1;
-      vptr->type = RTint_input;
-      vptr->priority = pri;
-      vptr->arg = NULL;
-      vptr->pending = NULL;
-      vptr->exists = Exists;
-      vptr->no = VecNo;
-      vptr->File = fd;
-      Exists = vptr;
-      RTco_signal (lock);
-      return VecNo;
-    }
-  else
-    {
-      RTco_signal (lock);
-      return vptr->no;
-    }
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   InitOutputVector - returns an interrupt vector which is associated
-                      with the file descriptor, fd.
-*/
-
-extern "C" unsigned int RTint_InitOutputVector (int fd, unsigned int pri)
-{
-  RTint_Vector vptr;
-
-  RTco_wait (lock);
-  vptr = FindVector (fd, RTint_output);
-  if (vptr == NULL)
-    {
-      Storage_ALLOCATE ((void **) &vptr, sizeof (RTint__T1));
-      if (vptr == NULL)
-        {
-          M2RTS_HALT (-1);
-          __builtin_unreachable ();
-        }
-      else
-        {
-          VecNo += 1;
-          vptr->type = RTint_output;
-          vptr->priority = pri;
-          vptr->arg = NULL;
-          vptr->pending = NULL;
-          vptr->exists = Exists;
-          vptr->no = VecNo;
-          vptr->File = fd;
-          Exists = vptr;
-          RTco_signal (lock);
-          return VecNo;
-        }
-    }
-  else
-    {
-      RTco_signal (lock);
-      return vptr->no;
-    }
-  ReturnException ("../../gcc-read-write/gcc/m2/gm2-libs/RTint.def", 25, 1);
-  __builtin_unreachable ();
-}
-
-
-/*
-   InitTimeVector - returns an interrupt vector associated with
-                    the relative time.
-*/
-
-extern "C" unsigned int RTint_InitTimeVector (unsigned int micro, unsigned int secs, unsigned int pri)
-{
-  RTint_Vector vptr;
-
-  RTco_wait (lock);
-  Storage_ALLOCATE ((void **) &vptr, sizeof (RTint__T1));
-  if (vptr == NULL)
-    {
-      M2RTS_HALT (-1);
-      __builtin_unreachable ();
-    }
-  else
-    {
-      VecNo += 1;
-      Assertion_Assert (micro < Microseconds);
-      vptr->type = RTint_time;
-      vptr->priority = pri;
-      vptr->arg = NULL;
-      vptr->pending = NULL;
-      vptr->exists = Exists;
-      vptr->no = VecNo;
-      vptr->rel = Selective_InitTime (secs+DebugTime, micro);
-      vptr->abs_ = Selective_InitTime (0, 0);
-      vptr->queued = FALSE;
-      Exists = vptr;
-    }
-  RTco_signal (lock);
-  return VecNo;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   ReArmTimeVector - reprimes the vector, vec, to deliver an interrupt
-                     at the new relative time.
-*/
-
-extern "C" void RTint_ReArmTimeVector (unsigned int vec, unsigned int micro, unsigned int secs)
-{
-  RTint_Vector vptr;
-
-  Assertion_Assert (micro < Microseconds);
-  RTco_wait (lock);
-  vptr = FindVectorNo (vec);
-  if (vptr == NULL)
-    {
-      M2RTS_Halt ((const char *) "../../gcc-read-write/gcc/m2/gm2-libs/RTint.mod", 46, 286, (const char *) "ReArmTimeVector", 15, (const char *) "cannot find vector supplied", 27);
-    }
-  else
-    {
-      Selective_SetTime (vptr->rel, secs+DebugTime, micro);
-    }
-  RTco_signal (lock);
-}
-
-
-/*
-   GetTimeVector - assigns, micro, and, secs, with the remaining
-                   time before this interrupt will expire.
-                   This value is only updated when a Listen
-                   occurs.
-*/
-
-extern "C" void RTint_GetTimeVector (unsigned int vec, unsigned int *micro, unsigned int *secs)
-{
-  RTint_Vector vptr;
-
-  RTco_wait (lock);
-  vptr = FindVectorNo (vec);
-  if (vptr == NULL)
-    {
-      M2RTS_Halt ((const char *) "../../gcc-read-write/gcc/m2/gm2-libs/RTint.mod", 46, 312, (const char *) "GetTimeVector", 13, (const char *) "cannot find vector supplied", 27);
-    }
-  else
-    {
-      Selective_GetTime (vptr->rel, secs, micro);
-      Assertion_Assert ((*micro) < Microseconds);
-    }
-  RTco_signal (lock);
-}
-
-
-/*
-   AttachVector - adds the pointer ptr to be associated with the interrupt
-                  vector. It returns the previous value attached to this
-                  vector.
-*/
-
-extern "C" void * RTint_AttachVector (unsigned int vec, void * ptr)
-{
-  RTint_Vector vptr;
-  void * prevArg;
-
-  RTco_wait (lock);
-  vptr = FindVectorNo (vec);
-  if (vptr == NULL)
-    {
-      M2RTS_Halt ((const char *) "../../gcc-read-write/gcc/m2/gm2-libs/RTint.mod", 46, 339, (const char *) "AttachVector", 12, (const char *) "cannot find vector supplied", 27);
-    }
-  else
-    {
-      prevArg = vptr->arg;
-      vptr->arg = ptr;
-      if (Debugging)
-        {
-          libc_printf ((const char *) "AttachVector %d with %p\\n", 25, vec, ptr);
-          DumpPendingQueue ();
-        }
-      RTco_signal (lock);
-      return prevArg;
-    }
-  ReturnException ("../../gcc-read-write/gcc/m2/gm2-libs/RTint.def", 25, 1);
-  __builtin_unreachable ();
-}
-
-
-/*
-   IncludeVector - includes, vec, into the dispatcher list of
-                   possible interrupt causes.
-*/
-
-extern "C" void RTint_IncludeVector (unsigned int vec)
-{
-  RTint_Vector vptr;
-  unsigned int micro;
-  unsigned int sec;
-  int result;
-
-  RTco_wait (lock);
-  vptr = FindPendingVector (vec);
-  if (vptr == NULL)
-    {
-      /* avoid dangling else.  */
-      vptr = FindVectorNo (vec);
-      if (vptr == NULL)
-        {
-          M2RTS_Halt ((const char *) "../../gcc-read-write/gcc/m2/gm2-libs/RTint.mod", 46, 372, (const char *) "IncludeVector", 13, (const char *) "cannot find vector supplied", 27);
-        }
-      else
-        {
-          /* printf('including vector %d  (fd = %d)
-          ', vec, v^.File) ;  */
-          vptr->pending = Pending.array[vptr->priority-(COROUTINES_UnassignedPriority)];
-          Pending.array[vptr->priority-(COROUTINES_UnassignedPriority)] = vptr;
-          if ((vptr->type == RTint_time) && ! vptr->queued)
-            {
-              vptr->queued = TRUE;
-              result = Selective_GetTimeOfDay (vptr->abs_);
-              Assertion_Assert (result == 0);
-              Selective_GetTime (vptr->abs_, &sec, &micro);
-              Assertion_Assert (micro < Microseconds);
-              AddTime (vptr->abs_, vptr->rel);
-              Selective_GetTime (vptr->abs_, &sec, &micro);
-              Assertion_Assert (micro < Microseconds);
-            }
-        }
-    }
-  else
-    {
-      if (Debugging)
-        {
-          libc_printf ((const char *) "odd vector (%d) type (%d) arg (%p) is already attached to the pending queue\\n", 77, vec, vptr->type, vptr->arg);
-        }
-    }
-  RTco_signal (lock);
-}
-
-
-/*
-   ExcludeVector - excludes, vec, from the dispatcher list of
-                   possible interrupt causes.
-*/
-
-extern "C" void RTint_ExcludeVector (unsigned int vec)
-{
-  RTint_Vector vptr;
-  RTint_Vector uptr;
-
-  RTco_wait (lock);
-  vptr = FindPendingVector (vec);
-  if (vptr == NULL)
-    {
-      M2RTS_Halt ((const char *) "../../gcc-read-write/gcc/m2/gm2-libs/RTint.mod", 46, 414, (const char *) "ExcludeVector", 13, (const char *) "cannot find pending vector supplied", 35);
-    }
-  else
-    {
-      /* printf('excluding vector %d
-      ', vec) ;  */
-      if (Pending.array[vptr->priority-(COROUTINES_UnassignedPriority)] == vptr)
-        {
-          Pending.array[vptr->priority-(COROUTINES_UnassignedPriority)] = Pending.array[vptr->priority-(COROUTINES_UnassignedPriority)]->pending;
-        }
-      else
-        {
-          uptr = Pending.array[vptr->priority-(COROUTINES_UnassignedPriority)];
-          while (uptr->pending != vptr)
-            {
-              uptr = uptr->pending;
-            }
-          uptr->pending = vptr->pending;
-        }
-      if (vptr->type == RTint_time)
-        {
-          vptr->queued = FALSE;
-        }
-    }
-  RTco_signal (lock);
-}
-
-
-/*
-   Listen - will either block indefinitely (until an interrupt)
-            or alteratively will test to see whether any interrupts
-            are pending.
-            If a pending interrupt was found then, call, is called
-            and then this procedure returns.
-            It only listens for interrupts > pri.
-*/
-
-extern "C" void RTint_Listen (unsigned int untilInterrupt, RTint_DispatchVector call, unsigned int pri)
-{
-  unsigned int found;
-  int result;
-  Selective_Timeval after;
-  Selective_Timeval b4;
-  Selective_Timeval timeval;
-  RTint_Vector vec;
-  Selective_SetOfFd inSet;
-  Selective_SetOfFd outSet;
-  unsigned int b4s;
-  unsigned int b4m;
-  unsigned int afs;
-  unsigned int afm;
-  unsigned int sec;
-  unsigned int micro;
-  int maxFd;
-  unsigned int p;
-
-  RTco_wait (lock);
-  if (pri < (7))
-    {
-      if (Debugging)
-        {
-          DumpPendingQueue ();
-        }
-      maxFd = -1;
-      timeval = NULL;
-      inSet = NULL;
-      outSet = NULL;
-      timeval = Selective_InitTime (static_cast<unsigned int> (INT_MAX), 0);
-      p = static_cast<unsigned int> (7);
-      found = FALSE;
-      while (p > pri)
-        {
-          vec = Pending.array[p-(COROUTINES_UnassignedPriority)];
-          while (vec != NULL)
-            {
-              switch (vec->type)
-                {
-                  case RTint_input:
-                    AddFd (&inSet, &maxFd, vec->File);
-                    break;
-
-                  case RTint_output:
-                    AddFd (&outSet, &maxFd, vec->File);
-                    break;
-
-                  case RTint_time:
-                    if (IsGreaterEqual (timeval, vec->abs_))
-                      {
-                        Selective_GetTime (vec->abs_, &sec, &micro);
-                        Assertion_Assert (micro < Microseconds);
-                        if (Debugging)
-                          {
-                            libc_printf ((const char *) "shortest delay is %u.%06u\\n", 27, sec, micro);
-                          }
-                        Selective_SetTime (timeval, sec, micro);
-                        found = TRUE;
-                      }
-                    break;
-
-
-                  default:
-                    CaseException ("../../gcc-read-write/gcc/m2/gm2-libs/RTint.def", 25, 1);
-                    __builtin_unreachable ();
-                }
-              vec = vec->pending;
-            }
-          p -= 1;
-        }
-      if (! untilInterrupt)
-        {
-          Selective_SetTime (timeval, 0, 0);
-        }
-      if (((untilInterrupt && (inSet == NULL)) && (outSet == NULL)) && ! found)
-        {
-          M2RTS_Halt ((const char *) "../../gcc-read-write/gcc/m2/gm2-libs/RTint.mod", 46, 730, (const char *) "Listen", 6, (const char *) "deadlock found, no more processes to run and no interrupts active", 65);
-        }
-      /* printf('}
-      ') ;  */
-      if (((! found && (maxFd == -1)) && (inSet == NULL)) && (outSet == NULL))
-        {
-          /* no file descriptors to be selected upon.  */
-          timeval = Selective_KillTime (timeval);
-          RTco_signal (lock);
-          return ;
-        }
-      else
-        {
-          Selective_GetTime (timeval, &sec, &micro);
-          Assertion_Assert (micro < Microseconds);
-          b4 = Selective_InitTime (0, 0);
-          after = Selective_InitTime (0, 0);
-          result = Selective_GetTimeOfDay (b4);
-          Assertion_Assert (result == 0);
-          SubTime (&sec, &micro, timeval, b4);
-          Selective_SetTime (timeval, sec, micro);
-          if (Debugging)
-            {
-              libc_printf ((const char *) "select waiting for %u.%06u seconds\\n", 36, sec, micro);
-            }
-          RTco_signal (lock);
-          do {
-            if (Debugging)
-              {
-                libc_printf ((const char *) "select (.., .., .., %u.%06u)\\n", 30, sec, micro);
-              }
-            result = RTco_select (maxFd+1, inSet, outSet, NULL, timeval);
-            if (result == -1)
-              {
-                libc_perror ((const char *) "select", 6);
-                result = RTco_select (maxFd+1, inSet, outSet, NULL, NULL);
-                if (result == -1)
-                  {
-                    libc_perror ((const char *) "select timeout argument is faulty", 33);
-                  }
-                result = RTco_select (maxFd+1, inSet, NULL, NULL, timeval);
-                if (result == -1)
-                  {
-                    libc_perror ((const char *) "select output fd argument is faulty", 35);
-                  }
-                result = RTco_select (maxFd+1, NULL, outSet, NULL, timeval);
-                if (result == -1)
-                  {
-                    libc_perror ((const char *) "select input fd argument is faulty", 34);
-                  }
-                else
-                  {
-                    libc_perror ((const char *) "select maxFD+1 argument is faulty", 33);
-                  }
-              }
-          } while (! (result != -1));
-        }
-      while (activatePending (untilInterrupt, call, pri, maxFd+1, &inSet, &outSet, &timeval, b4, after))
-        {}  /* empty.  */
-      if (timeval != NULL)
-        {
-          timeval = Selective_KillTime (timeval);
-        }
-      if (after != NULL)
-        {
-          after = Selective_KillTime (after);
-        }
-      if (b4 != NULL)
-        {
-          b4 = Selective_KillTime (b4);
-        }
-      if (inSet != NULL)
-        {
-          inSet = Selective_KillSet (inSet);
-        }
-      if (outSet != NULL)
-        {
-          outSet = Selective_KillSet (outSet);
-        }
-    }
-  RTco_signal (lock);
-}
-
-
-/*
-   Init -
-*/
-
-extern "C" void RTint_Init (void)
-{
-  if (! initialized)
-    {
-      init ();
-    }
-}
-
-extern "C" void _M2_RTint_init (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-  RTint_Init ();
-}
-
-extern "C" void _M2_RTint_fini (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-}
diff --git a/gcc/m2/mc-boot/GSArgs.c b/gcc/m2/mc-boot/GSArgs.c
deleted file mode 100644
index 143d2783c16..00000000000
--- a/gcc/m2/mc-boot/GSArgs.c
+++ /dev/null
@@ -1,125 +0,0 @@
-/* do not edit automatically generated by mc from SArgs.  */
-/* SArgs.mod provides a String interface to the command line arguments.
-
-Copyright (C) 2001-2023 Free Software Foundation, Inc.
-Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>.
-
-This file is part of GNU Modula-2.
-
-GNU Modula-2 is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
-
-GNU Modula-2 is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-General Public License for more details.
-
-Under Section 7 of GPL version 3, you are granted additional
-permissions described in the GCC Runtime Library Exception, version
-3.1, as published by the Free Software Foundation.
-
-You should have received a copy of the GNU General Public License and
-a copy of the GCC Runtime Library Exception along with this program;
-see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
-<http://www.gnu.org/licenses/>.  */
-
-#include "config.h"
-#include "system.h"
-#   if !defined (PROC_D)
-#      define PROC_D
-       typedef void (*PROC_t) (void);
-       typedef struct { PROC_t proc; } PROC;
-#   endif
-
-#   if !defined (TRUE)
-#      define TRUE (1==1)
-#   endif
-
-#   if !defined (FALSE)
-#      define FALSE (1==0)
-#   endif
-
-#if defined(__cplusplus)
-#   undef NULL
-#   define NULL 0
-#endif
-#define _SArgs_H
-#define _SArgs_C
-
-#   include "GSYSTEM.h"
-#   include "GUnixArgs.h"
-#   include "GDynamicStrings.h"
-
-typedef char *SArgs_PtrToChar;
-
-typedef SArgs_PtrToChar *SArgs_PtrToPtrToChar;
-
-
-/*
-   GetArg - returns the nth argument from the command line.
-            The success of the operation is returned.
-            If TRUE is returned then the string, s, contains a
-            new string, otherwise s is set to NIL.
-*/
-
-extern "C" unsigned int SArgs_GetArg (DynamicStrings_String *s, unsigned int n);
-
-/*
-   Narg - returns the number of arguments available from
-          command line.
-*/
-
-extern "C" unsigned int SArgs_Narg (void);
-
-
-/*
-   GetArg - returns the nth argument from the command line.
-            The success of the operation is returned.
-            If TRUE is returned then the string, s, contains a
-            new string, otherwise s is set to NIL.
-*/
-
-extern "C" unsigned int SArgs_GetArg (DynamicStrings_String *s, unsigned int n)
-{
-  int i;
-  SArgs_PtrToPtrToChar ppc;
-
-  i = (int ) (n);
-  if (i < (UnixArgs_GetArgC ()))
-    {
-      /* ppc := ADDRESS (VAL (PtrToPtrToChar, ArgV) + (i * CARDINAL (TSIZE(PtrToChar)))) ;  */
-      ppc = static_cast<SArgs_PtrToPtrToChar> ((void *) (((SArgs_PtrToChar) (UnixArgs_GetArgV ()))+(n*sizeof (SArgs_PtrToChar))));
-      (*s) = DynamicStrings_InitStringCharStar (reinterpret_cast<void *> ((*ppc)));
-      return TRUE;
-    }
-  else
-    {
-      (*s) = static_cast<DynamicStrings_String> (NULL);
-      return FALSE;
-    }
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   Narg - returns the number of arguments available from
-          command line.
-*/
-
-extern "C" unsigned int SArgs_Narg (void)
-{
-  return UnixArgs_GetArgC ();
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-extern "C" void _M2_SArgs_init (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-}
-
-extern "C" void _M2_SArgs_fini (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-}
diff --git a/gcc/m2/mc-boot/GSFIO.c b/gcc/m2/mc-boot/GSFIO.c
deleted file mode 100644
index 1a800138812..00000000000
--- a/gcc/m2/mc-boot/GSFIO.c
+++ /dev/null
@@ -1,216 +0,0 @@
-/* do not edit automatically generated by mc from SFIO.  */
-/* SFIO.mod provides a String interface to the opening routines of FIO.
-
-Copyright (C) 2001-2023 Free Software Foundation, Inc.
-Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>.
-
-This file is part of GNU Modula-2.
-
-GNU Modula-2 is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
-
-GNU Modula-2 is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-General Public License for more details.
-
-Under Section 7 of GPL version 3, you are granted additional
-permissions described in the GCC Runtime Library Exception, version
-3.1, as published by the Free Software Foundation.
-
-You should have received a copy of the GNU General Public License and
-a copy of the GCC Runtime Library Exception along with this program;
-see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
-<http://www.gnu.org/licenses/>.  */
-
-#include "config.h"
-#include "system.h"
-#   if !defined (PROC_D)
-#      define PROC_D
-       typedef void (*PROC_t) (void);
-       typedef struct { PROC_t proc; } PROC;
-#   endif
-
-#if defined(__cplusplus)
-#   undef NULL
-#   define NULL 0
-#endif
-#define _SFIO_H
-#define _SFIO_C
-
-#   include "GASCII.h"
-#   include "GDynamicStrings.h"
-#   include "GFIO.h"
-
-
-/*
-   Exists - returns TRUE if a file named, fname exists for reading.
-*/
-
-extern "C" unsigned int SFIO_Exists (DynamicStrings_String fname);
-
-/*
-   OpenToRead - attempts to open a file, fname, for reading and
-                it returns this file.
-                The success of this operation can be checked by
-                calling IsNoError.
-*/
-
-extern "C" FIO_File SFIO_OpenToRead (DynamicStrings_String fname);
-
-/*
-   OpenToWrite - attempts to open a file, fname, for write and
-                 it returns this file.
-                 The success of this operation can be checked by
-                 calling IsNoError.
-*/
-
-extern "C" FIO_File SFIO_OpenToWrite (DynamicStrings_String fname);
-
-/*
-   OpenForRandom - attempts to open a file, fname, for random access
-                   read or write and it returns this file.
-                   The success of this operation can be checked by
-                   calling IsNoError.
-                   towrite, determines whether the file should be
-                   opened for writing or reading.
-                   if towrite is TRUE or whether the previous file should
-                   be left alone, allowing this descriptor to seek
-                   and modify an existing file.
-*/
-
-extern "C" FIO_File SFIO_OpenForRandom (DynamicStrings_String fname, unsigned int towrite, unsigned int newfile);
-
-/*
-   WriteS - writes a string, s, to, file. It returns the String, s.
-*/
-
-extern "C" DynamicStrings_String SFIO_WriteS (FIO_File file, DynamicStrings_String s);
-
-/*
-   ReadS - reads and returns a string from, file.
-           It stops reading the string at the end of line or end of file.
-           It consumes the newline at the end of line but does not place
-           this into the returned string.
-*/
-
-extern "C" DynamicStrings_String SFIO_ReadS (FIO_File file);
-
-
-/*
-   Exists - returns TRUE if a file named, fname exists for reading.
-*/
-
-extern "C" unsigned int SFIO_Exists (DynamicStrings_String fname)
-{
-  return FIO_exists (DynamicStrings_string (fname), DynamicStrings_Length (fname));
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   OpenToRead - attempts to open a file, fname, for reading and
-                it returns this file.
-                The success of this operation can be checked by
-                calling IsNoError.
-*/
-
-extern "C" FIO_File SFIO_OpenToRead (DynamicStrings_String fname)
-{
-  return FIO_openToRead (DynamicStrings_string (fname), DynamicStrings_Length (fname));
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   OpenToWrite - attempts to open a file, fname, for write and
-                 it returns this file.
-                 The success of this operation can be checked by
-                 calling IsNoError.
-*/
-
-extern "C" FIO_File SFIO_OpenToWrite (DynamicStrings_String fname)
-{
-  return FIO_openToWrite (DynamicStrings_string (fname), DynamicStrings_Length (fname));
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   OpenForRandom - attempts to open a file, fname, for random access
-                   read or write and it returns this file.
-                   The success of this operation can be checked by
-                   calling IsNoError.
-                   towrite, determines whether the file should be
-                   opened for writing or reading.
-                   if towrite is TRUE or whether the previous file should
-                   be left alone, allowing this descriptor to seek
-                   and modify an existing file.
-*/
-
-extern "C" FIO_File SFIO_OpenForRandom (DynamicStrings_String fname, unsigned int towrite, unsigned int newfile)
-{
-  return FIO_openForRandom (DynamicStrings_string (fname), DynamicStrings_Length (fname), towrite, newfile);
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   WriteS - writes a string, s, to, file. It returns the String, s.
-*/
-
-extern "C" DynamicStrings_String SFIO_WriteS (FIO_File file, DynamicStrings_String s)
-{
-  unsigned int nBytes;
-
-  if (s != NULL)
-    {
-      nBytes = FIO_WriteNBytes (file, DynamicStrings_Length (s), DynamicStrings_string (s));
-    }
-  return s;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   ReadS - reads and returns a string from, file.
-           It stops reading the string at the end of line or end of file.
-           It consumes the newline at the end of line but does not place
-           this into the returned string.
-*/
-
-extern "C" DynamicStrings_String SFIO_ReadS (FIO_File file)
-{
-  DynamicStrings_String s;
-  unsigned int c;
-
-  s = DynamicStrings_InitString ((const char *) "", 0);
-  while (((! (FIO_EOLN (file))) && (! (FIO_EOF (file)))) && (FIO_IsNoError (file)))
-    {
-      s = DynamicStrings_ConCatChar (s, FIO_ReadChar (file));
-    }
-  if (FIO_EOLN (file))
-    {
-      /* consume nl  */
-      if ((FIO_ReadChar (file)) == ASCII_nul)
-        {}  /* empty.  */
-    }
-  return s;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-extern "C" void _M2_SFIO_init (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-}
-
-extern "C" void _M2_SFIO_fini (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-}
diff --git a/gcc/m2/mc-boot/GStdIO.c b/gcc/m2/mc-boot/GStdIO.c
deleted file mode 100644
index 41affe2a054..00000000000
--- a/gcc/m2/mc-boot/GStdIO.c
+++ /dev/null
@@ -1,269 +0,0 @@
-/* do not edit automatically generated by mc from StdIO.  */
-/* StdIO.mod provides general Read and Write procedures.
-
-Copyright (C) 2001-2023 Free Software Foundation, Inc.
-Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>.
-
-This file is part of GNU Modula-2.
-
-GNU Modula-2 is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
-
-GNU Modula-2 is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-General Public License for more details.
-
-Under Section 7 of GPL version 3, you are granted additional
-permissions described in the GCC Runtime Library Exception, version
-3.1, as published by the Free Software Foundation.
-
-You should have received a copy of the GNU General Public License and
-a copy of the GCC Runtime Library Exception along with this program;
-see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
-<http://www.gnu.org/licenses/>.  */
-
-#include "config.h"
-#include "system.h"
-#   if !defined (PROC_D)
-#      define PROC_D
-       typedef void (*PROC_t) (void);
-       typedef struct { PROC_t proc; } PROC;
-#   endif
-
-#   include "Gmcrts.h"
-#define _StdIO_H
-#define _StdIO_C
-
-#   include "GIO.h"
-#   include "GM2RTS.h"
-
-typedef struct StdIO_ProcWrite_p StdIO_ProcWrite;
-
-typedef struct StdIO_ProcRead_p StdIO_ProcRead;
-
-#   define MaxStack 40
-typedef struct StdIO__T1_a StdIO__T1;
-
-typedef struct StdIO__T2_a StdIO__T2;
-
-typedef void (*StdIO_ProcWrite_t) (char);
-struct StdIO_ProcWrite_p { StdIO_ProcWrite_t proc; };
-
-typedef void (*StdIO_ProcRead_t) (char *);
-struct StdIO_ProcRead_p { StdIO_ProcRead_t proc; };
-
-struct StdIO__T1_a { StdIO_ProcWrite array[MaxStack+1]; };
-struct StdIO__T2_a { StdIO_ProcRead array[MaxStack+1]; };
-static StdIO__T1 StackW;
-static unsigned int StackWPtr;
-static StdIO__T2 StackR;
-static unsigned int StackRPtr;
-
-/*
-   Read - is the generic procedure that all higher application layers
-          should use to receive a character.
-*/
-
-extern "C" void StdIO_Read (char *ch);
-
-/*
-   Write - is the generic procedure that all higher application layers
-           should use to emit a character.
-*/
-
-extern "C" void StdIO_Write (char ch);
-
-/*
-   PushOutput - pushes the current Write procedure onto a stack,
-                any future references to Write will actually invoke
-                procedure, p.
-*/
-
-extern "C" void StdIO_PushOutput (StdIO_ProcWrite p);
-
-/*
-   PopOutput - restores Write to use the previous output procedure.
-*/
-
-extern "C" void StdIO_PopOutput (void);
-
-/*
-   GetCurrentOutput - returns the current output procedure.
-*/
-
-extern "C" StdIO_ProcWrite StdIO_GetCurrentOutput (void);
-
-/*
-   PushInput - pushes the current Read procedure onto a stack,
-               any future references to Read will actually invoke
-               procedure, p.
-*/
-
-extern "C" void StdIO_PushInput (StdIO_ProcRead p);
-
-/*
-   PopInput - restores Write to use the previous output procedure.
-*/
-
-extern "C" void StdIO_PopInput (void);
-
-/*
-   GetCurrentInput - returns the current input procedure.
-*/
-
-extern "C" StdIO_ProcRead StdIO_GetCurrentInput (void);
-
-
-/*
-   Read - is the generic procedure that all higher application layers
-          should use to receive a character.
-*/
-
-extern "C" void StdIO_Read (char *ch)
-{
-  (*StackR.array[StackRPtr].proc) (ch);
-}
-
-
-/*
-   Write - is the generic procedure that all higher application layers
-           should use to emit a character.
-*/
-
-extern "C" void StdIO_Write (char ch)
-{
-  (*StackW.array[StackWPtr].proc) (ch);
-}
-
-
-/*
-   PushOutput - pushes the current Write procedure onto a stack,
-                any future references to Write will actually invoke
-                procedure, p.
-*/
-
-extern "C" void StdIO_PushOutput (StdIO_ProcWrite p)
-{
-  if (StackWPtr == MaxStack)
-    {
-      M2RTS_HALT (-1);
-      __builtin_unreachable ();
-    }
-  else
-    {
-      StackWPtr += 1;
-      StackW.array[StackWPtr] = p;
-    }
-}
-
-
-/*
-   PopOutput - restores Write to use the previous output procedure.
-*/
-
-extern "C" void StdIO_PopOutput (void)
-{
-  if (StackWPtr == 1)
-    {
-      M2RTS_HALT (-1);
-      __builtin_unreachable ();
-    }
-  else
-    {
-      StackWPtr -= 1;
-    }
-}
-
-
-/*
-   GetCurrentOutput - returns the current output procedure.
-*/
-
-extern "C" StdIO_ProcWrite StdIO_GetCurrentOutput (void)
-{
-  if (StackWPtr > 0)
-    {
-      return StackW.array[StackWPtr];
-    }
-  else
-    {
-      M2RTS_HALT (-1);
-      __builtin_unreachable ();
-    }
-  ReturnException ("../../gcc-read-write/gcc/m2/gm2-libs/StdIO.def", 25, 1);
-  __builtin_unreachable ();
-}
-
-
-/*
-   PushInput - pushes the current Read procedure onto a stack,
-               any future references to Read will actually invoke
-               procedure, p.
-*/
-
-extern "C" void StdIO_PushInput (StdIO_ProcRead p)
-{
-  if (StackRPtr == MaxStack)
-    {
-      M2RTS_HALT (-1);
-      __builtin_unreachable ();
-    }
-  else
-    {
-      StackRPtr += 1;
-      StackR.array[StackRPtr] = p;
-    }
-}
-
-
-/*
-   PopInput - restores Write to use the previous output procedure.
-*/
-
-extern "C" void StdIO_PopInput (void)
-{
-  if (StackRPtr == 1)
-    {
-      M2RTS_HALT (-1);
-      __builtin_unreachable ();
-    }
-  else
-    {
-      StackRPtr -= 1;
-    }
-}
-
-
-/*
-   GetCurrentInput - returns the current input procedure.
-*/
-
-extern "C" StdIO_ProcRead StdIO_GetCurrentInput (void)
-{
-  if (StackRPtr > 0)
-    {
-      return StackR.array[StackRPtr];
-    }
-  else
-    {
-      M2RTS_HALT (-1);
-      __builtin_unreachable ();
-    }
-  ReturnException ("../../gcc-read-write/gcc/m2/gm2-libs/StdIO.def", 25, 1);
-  __builtin_unreachable ();
-}
-
-extern "C" void _M2_StdIO_init (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-  StackWPtr = 0;
-  StackRPtr = 0;
-  StdIO_PushOutput ((StdIO_ProcWrite) {(StdIO_ProcWrite_t) IO_Write});
-  StdIO_PushInput ((StdIO_ProcRead) {(StdIO_ProcRead_t) IO_Read});
-}
-
-extern "C" void _M2_StdIO_fini (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-}
diff --git a/gcc/m2/mc-boot/GStorage.c b/gcc/m2/mc-boot/GStorage.c
deleted file mode 100644
index 5dac021d866..00000000000
--- a/gcc/m2/mc-boot/GStorage.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/* do not edit automatically generated by mc from Storage.  */
-/* Storage.mod provides access to the dynamic Storage handler.
-
-Copyright (C) 2001-2023 Free Software Foundation, Inc.
-Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>.
-
-This file is part of GNU Modula-2.
-
-GNU Modula-2 is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
-
-GNU Modula-2 is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-General Public License for more details.
-
-Under Section 7 of GPL version 3, you are granted additional
-permissions described in the GCC Runtime Library Exception, version
-3.1, as published by the Free Software Foundation.
-
-You should have received a copy of the GNU General Public License and
-a copy of the GCC Runtime Library Exception along with this program;
-see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
-<http://www.gnu.org/licenses/>.  */
-
-#include "config.h"
-#include "system.h"
-#   if !defined (PROC_D)
-#      define PROC_D
-       typedef void (*PROC_t) (void);
-       typedef struct { PROC_t proc; } PROC;
-#   endif
-
-#define _Storage_H
-#define _Storage_C
-
-#   include "GSysStorage.h"
-
-extern "C" void Storage_ALLOCATE (void * *a, unsigned int Size);
-extern "C" void Storage_DEALLOCATE (void * *a, unsigned int Size);
-extern "C" void Storage_REALLOCATE (void * *a, unsigned int Size);
-extern "C" unsigned int Storage_Available (unsigned int Size);
-
-extern "C" void Storage_ALLOCATE (void * *a, unsigned int Size)
-{
-  SysStorage_ALLOCATE (a, Size);
-}
-
-extern "C" void Storage_DEALLOCATE (void * *a, unsigned int Size)
-{
-  SysStorage_DEALLOCATE (a, Size);
-}
-
-extern "C" void Storage_REALLOCATE (void * *a, unsigned int Size)
-{
-  SysStorage_REALLOCATE (a, Size);
-}
-
-extern "C" unsigned int Storage_Available (unsigned int Size)
-{
-  return SysStorage_Available (Size);
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-extern "C" void _M2_Storage_init (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-}
-
-extern "C" void _M2_Storage_fini (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-}
diff --git a/gcc/m2/mc-boot/GStrCase.c b/gcc/m2/mc-boot/GStrCase.c
deleted file mode 100644
index e3491b6d75b..00000000000
--- a/gcc/m2/mc-boot/GStrCase.c
+++ /dev/null
@@ -1,175 +0,0 @@
-/* do not edit automatically generated by mc from StrCase.  */
-/* StrCase.mod provides procedure to convert between text case.
-
-Copyright (C) 2001-2023 Free Software Foundation, Inc.
-Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>.
-
-This file is part of GNU Modula-2.
-
-GNU Modula-2 is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
-
-GNU Modula-2 is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-General Public License for more details.
-
-Under Section 7 of GPL version 3, you are granted additional
-permissions described in the GCC Runtime Library Exception, version
-3.1, as published by the Free Software Foundation.
-
-You should have received a copy of the GNU General Public License and
-a copy of the GCC Runtime Library Exception along with this program;
-see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
-<http://www.gnu.org/licenses/>.  */
-
-#include "config.h"
-#include "system.h"
-#   if !defined (PROC_D)
-#      define PROC_D
-       typedef void (*PROC_t) (void);
-       typedef struct { PROC_t proc; } PROC;
-#   endif
-
-#define _StrCase_H
-#define _StrCase_C
-
-#   include "GASCII.h"
-#   include "GStrLib.h"
-
-
-/*
-   StrToUpperCase - converts string, a, to uppercase returning the
-                    result in, b.
-*/
-
-extern "C" void StrCase_StrToUpperCase (const char *a_, unsigned int _a_high, char *b, unsigned int _b_high);
-
-/*
-   StrToLowerCase - converts string, a, to lowercase returning the
-                    result in, b.
-*/
-
-extern "C" void StrCase_StrToLowerCase (const char *a_, unsigned int _a_high, char *b, unsigned int _b_high);
-
-/*
-   Cap - converts a lower case character into a capital character.
-         If the character is not a lower case character 'a'..'z'
-         then the character is simply returned unaltered.
-*/
-
-extern "C" char StrCase_Cap (char ch);
-
-/*
-   Lower - converts an upper case character into a lower case character.
-           If the character is not an upper case character 'A'..'Z'
-           then the character is simply returned unaltered.
-*/
-
-extern "C" char StrCase_Lower (char ch);
-
-
-/*
-   StrToUpperCase - converts string, a, to uppercase returning the
-                    result in, b.
-*/
-
-extern "C" void StrCase_StrToUpperCase (const char *a_, unsigned int _a_high, char *b, unsigned int _b_high)
-{
-  unsigned int higha;
-  unsigned int highb;
-  unsigned int i;
-  char a[_a_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (a, a_, _a_high+1);
-
-  higha = StrLib_StrLen ((const char *) a, _a_high);
-  highb = _b_high;
-  i = 0;
-  while (((i < higha) && (a[i] != ASCII_nul)) && (i < highb))
-    {
-      b[i] = StrCase_Cap (a[i]);
-      i += 1;
-    }
-  if (i < highb)
-    {
-      b[i] = ASCII_nul;
-    }
-}
-
-
-/*
-   StrToLowerCase - converts string, a, to lowercase returning the
-                    result in, b.
-*/
-
-extern "C" void StrCase_StrToLowerCase (const char *a_, unsigned int _a_high, char *b, unsigned int _b_high)
-{
-  unsigned int higha;
-  unsigned int highb;
-  unsigned int i;
-  char a[_a_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (a, a_, _a_high+1);
-
-  higha = StrLib_StrLen ((const char *) a, _a_high);
-  highb = _b_high;
-  i = 0;
-  while (((i < higha) && (a[i] != ASCII_nul)) && (i < highb))
-    {
-      b[i] = StrCase_Lower (a[i]);
-      i += 1;
-    }
-  if (i < highb)
-    {
-      b[i] = ASCII_nul;
-    }
-}
-
-
-/*
-   Cap - converts a lower case character into a capital character.
-         If the character is not a lower case character 'a'..'z'
-         then the character is simply returned unaltered.
-*/
-
-extern "C" char StrCase_Cap (char ch)
-{
-  if ((ch >= 'a') && (ch <= 'z'))
-    {
-      ch = ((char) (( ((unsigned int) (ch))- ((unsigned int) ('a')))+ ((unsigned int) ('A'))));
-    }
-  return ch;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   Lower - converts an upper case character into a lower case character.
-           If the character is not an upper case character 'A'..'Z'
-           then the character is simply returned unaltered.
-*/
-
-extern "C" char StrCase_Lower (char ch)
-{
-  if ((ch >= 'A') && (ch <= 'Z'))
-    {
-      ch = ((char) (( ((unsigned int) (ch))- ((unsigned int) ('A')))+ ((unsigned int) ('a'))));
-    }
-  return ch;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-extern "C" void _M2_StrCase_init (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-}
-
-extern "C" void _M2_StrCase_fini (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-}
diff --git a/gcc/m2/mc-boot/GStrIO.c b/gcc/m2/mc-boot/GStrIO.c
deleted file mode 100644
index 1e091bce545..00000000000
--- a/gcc/m2/mc-boot/GStrIO.c
+++ /dev/null
@@ -1,277 +0,0 @@
-/* do not edit automatically generated by mc from StrIO.  */
-/* StrIO.mod provides simple string input output routines.
-
-Copyright (C) 2001-2023 Free Software Foundation, Inc.
-Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>.
-
-This file is part of GNU Modula-2.
-
-GNU Modula-2 is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
-
-GNU Modula-2 is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-General Public License for more details.
-
-Under Section 7 of GPL version 3, you are granted additional
-permissions described in the GCC Runtime Library Exception, version
-3.1, as published by the Free Software Foundation.
-
-You should have received a copy of the GNU General Public License and
-a copy of the GCC Runtime Library Exception along with this program;
-see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
-<http://www.gnu.org/licenses/>.  */
-
-#include "config.h"
-#include "system.h"
-#   if !defined (PROC_D)
-#      define PROC_D
-       typedef void (*PROC_t) (void);
-       typedef struct { PROC_t proc; } PROC;
-#   endif
-
-#   if !defined (FALSE)
-#      define FALSE (1==0)
-#   endif
-
-#define _StrIO_H
-#define _StrIO_C
-
-#   include "GASCII.h"
-#   include "GStdIO.h"
-#   include "Glibc.h"
-
-static unsigned int IsATTY;
-
-/*
-   WriteLn - writes a carriage return and a newline
-             character.
-*/
-
-extern "C" void StrIO_WriteLn (void);
-
-/*
-   ReadString - reads a sequence of characters into a string.
-                Line editing accepts Del, Ctrl H, Ctrl W and
-                Ctrl U.
-*/
-
-extern "C" void StrIO_ReadString (char *a, unsigned int _a_high);
-
-/*
-   WriteString - writes a string to the default output.
-*/
-
-extern "C" void StrIO_WriteString (const char *a_, unsigned int _a_high);
-
-/*
-   Erase - writes a backspace, space and backspace to remove the
-           last character displayed.
-*/
-
-static void Erase (void);
-
-/*
-   Echo - echos the character, ch, onto the output channel if IsATTY
-          is true.
-*/
-
-static void Echo (char ch);
-
-/*
-   AlphaNum- returns true if character, ch, is an alphanumeric character.
-*/
-
-static unsigned int AlphaNum (char ch);
-
-
-/*
-   Erase - writes a backspace, space and backspace to remove the
-           last character displayed.
-*/
-
-static void Erase (void)
-{
-  Echo (ASCII_bs);
-  Echo (' ');
-  Echo (ASCII_bs);
-}
-
-
-/*
-   Echo - echos the character, ch, onto the output channel if IsATTY
-          is true.
-*/
-
-static void Echo (char ch)
-{
-  if (IsATTY)
-    {
-      StdIO_Write (ch);
-    }
-}
-
-
-/*
-   AlphaNum- returns true if character, ch, is an alphanumeric character.
-*/
-
-static unsigned int AlphaNum (char ch)
-{
-  return (((ch >= 'a') && (ch <= 'z')) || ((ch >= 'A') && (ch <= 'Z'))) || ((ch >= '0') && (ch <= '9'));
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   WriteLn - writes a carriage return and a newline
-             character.
-*/
-
-extern "C" void StrIO_WriteLn (void)
-{
-  Echo (ASCII_cr);
-  StdIO_Write (ASCII_lf);
-}
-
-
-/*
-   ReadString - reads a sequence of characters into a string.
-                Line editing accepts Del, Ctrl H, Ctrl W and
-                Ctrl U.
-*/
-
-extern "C" void StrIO_ReadString (char *a, unsigned int _a_high)
-{
-  unsigned int n;
-  unsigned int high;
-  char ch;
-
-  high = _a_high;
-  n = 0;
-  do {
-    StdIO_Read (&ch);
-    if ((ch == ASCII_del) || (ch == ASCII_bs))
-      {
-        if (n == 0)
-          {
-            StdIO_Write (ASCII_bel);
-          }
-        else
-          {
-            Erase ();
-            n -= 1;
-          }
-      }
-    else if (ch == ASCII_nak)
-      {
-        /* avoid dangling else.  */
-        while (n > 0)
-          {
-            Erase ();
-            n -= 1;
-          }
-      }
-    else if (ch == ASCII_etb)
-      {
-        /* avoid dangling else.  */
-        if (n == 0)
-          {
-            Echo (ASCII_bel);
-          }
-        else if (AlphaNum (a[n-1]))
-          {
-            /* avoid dangling else.  */
-            do {
-              Erase ();
-              n -= 1;
-            } while (! ((n == 0) || (! (AlphaNum (a[n-1])))));
-          }
-        else
-          {
-            /* avoid dangling else.  */
-            Erase ();
-            n -= 1;
-          }
-      }
-    else if (n <= high)
-      {
-        /* avoid dangling else.  */
-        if ((ch == ASCII_cr) || (ch == ASCII_lf))
-          {
-            a[n] = ASCII_nul;
-            n += 1;
-          }
-        else if (ch == ASCII_ff)
-          {
-            /* avoid dangling else.  */
-            a[0] = ch;
-            if (high > 0)
-              {
-                a[1] = ASCII_nul;
-              }
-            ch = ASCII_cr;
-          }
-        else if (ch >= ' ')
-          {
-            /* avoid dangling else.  */
-            Echo (ch);
-            a[n] = ch;
-            n += 1;
-          }
-        else if (ch == ASCII_eof)
-          {
-            /* avoid dangling else.  */
-            a[n] = ch;
-            n += 1;
-            ch = ASCII_cr;
-            if (n <= high)
-              {
-                a[n] = ASCII_nul;
-              }
-          }
-      }
-    else if (ch != ASCII_cr)
-      {
-        /* avoid dangling else.  */
-        Echo (ASCII_bel);
-      }
-  } while (! ((ch == ASCII_cr) || (ch == ASCII_lf)));
-}
-
-
-/*
-   WriteString - writes a string to the default output.
-*/
-
-extern "C" void StrIO_WriteString (const char *a_, unsigned int _a_high)
-{
-  unsigned int n;
-  unsigned int high;
-  char a[_a_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (a, a_, _a_high+1);
-
-  high = _a_high;
-  n = 0;
-  while ((n <= high) && (a[n] != ASCII_nul))
-    {
-      StdIO_Write (a[n]);
-      n += 1;
-    }
-}
-
-extern "C" void _M2_StrIO_init (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-  /* IsATTY := isatty()  */
-  IsATTY = FALSE;
-}
-
-extern "C" void _M2_StrIO_fini (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-}
diff --git a/gcc/m2/mc-boot/GStrLib.c b/gcc/m2/mc-boot/GStrLib.c
deleted file mode 100644
index 537eeb96356..00000000000
--- a/gcc/m2/mc-boot/GStrLib.c
+++ /dev/null
@@ -1,346 +0,0 @@
-/* do not edit automatically generated by mc from StrLib.  */
-/* StrLib.mod provides string manipulation procedures.
-
-Copyright (C) 2001-2023 Free Software Foundation, Inc.
-Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>.
-
-This file is part of GNU Modula-2.
-
-GNU Modula-2 is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
-
-GNU Modula-2 is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-General Public License for more details.
-
-Under Section 7 of GPL version 3, you are granted additional
-permissions described in the GCC Runtime Library Exception, version
-3.1, as published by the Free Software Foundation.
-
-You should have received a copy of the GNU General Public License and
-a copy of the GCC Runtime Library Exception along with this program;
-see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
-<http://www.gnu.org/licenses/>.  */
-
-#include "config.h"
-#include "system.h"
-#   if !defined (PROC_D)
-#      define PROC_D
-       typedef void (*PROC_t) (void);
-       typedef struct { PROC_t proc; } PROC;
-#   endif
-
-#   if !defined (TRUE)
-#      define TRUE (1==1)
-#   endif
-
-#   if !defined (FALSE)
-#      define FALSE (1==0)
-#   endif
-
-#define _StrLib_H
-#define _StrLib_C
-
-#   include "GASCII.h"
-
-
-/*
-   StrConCat - combines a and b into c.
-*/
-
-extern "C" void StrLib_StrConCat (const char *a_, unsigned int _a_high, const char *b_, unsigned int _b_high, char *c, unsigned int _c_high);
-
-/*
-   StrLess - returns TRUE if string, a, alphabetically occurs before
-             string, b.
-*/
-
-extern "C" unsigned int StrLib_StrLess (const char *a_, unsigned int _a_high, const char *b_, unsigned int _b_high);
-extern "C" unsigned int StrLib_StrEqual (const char *a_, unsigned int _a_high, const char *b_, unsigned int _b_high);
-extern "C" unsigned int StrLib_StrLen (const char *a_, unsigned int _a_high);
-
-/*
-   StrCopy - copy string src into string dest providing dest is large enough.
-             If dest is smaller than a then src then the string is truncated when
-             dest is full.  Add a nul character if there is room in dest.
-*/
-
-extern "C" void StrLib_StrCopy (const char *src_, unsigned int _src_high, char *dest, unsigned int _dest_high);
-
-/*
-   IsSubString - returns true if b is a subcomponent of a.
-*/
-
-extern "C" unsigned int StrLib_IsSubString (const char *a_, unsigned int _a_high, const char *b_, unsigned int _b_high);
-
-/*
-   StrRemoveWhitePrefix - copies string, into string, b, excluding any white
-                          space infront of a.
-*/
-
-extern "C" void StrLib_StrRemoveWhitePrefix (const char *a_, unsigned int _a_high, char *b, unsigned int _b_high);
-
-/*
-   IsWhite - returns TRUE if, ch, is a space or a tab.
-*/
-
-static unsigned int IsWhite (char ch);
-
-
-/*
-   IsWhite - returns TRUE if, ch, is a space or a tab.
-*/
-
-static unsigned int IsWhite (char ch)
-{
-  return (ch == ' ') || (ch == ASCII_tab);
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   StrConCat - combines a and b into c.
-*/
-
-extern "C" void StrLib_StrConCat (const char *a_, unsigned int _a_high, const char *b_, unsigned int _b_high, char *c, unsigned int _c_high)
-{
-  unsigned int Highb;
-  unsigned int Highc;
-  unsigned int i;
-  unsigned int j;
-  char a[_a_high+1];
-  char b[_b_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (a, a_, _a_high+1);
-  memcpy (b, b_, _b_high+1);
-
-  Highb = StrLib_StrLen ((const char *) b, _b_high);
-  Highc = _c_high;
-  StrLib_StrCopy ((const char *) a, _a_high, (char *) c, _c_high);
-  i = StrLib_StrLen ((const char *) c, _c_high);
-  j = 0;
-  while ((j < Highb) && (i <= Highc))
-    {
-      c[i] = b[j];
-      i += 1;
-      j += 1;
-    }
-  if (i <= Highc)
-    {
-      c[i] = ASCII_nul;
-    }
-}
-
-
-/*
-   StrLess - returns TRUE if string, a, alphabetically occurs before
-             string, b.
-*/
-
-extern "C" unsigned int StrLib_StrLess (const char *a_, unsigned int _a_high, const char *b_, unsigned int _b_high)
-{
-  unsigned int Higha;
-  unsigned int Highb;
-  unsigned int i;
-  char a[_a_high+1];
-  char b[_b_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (a, a_, _a_high+1);
-  memcpy (b, b_, _b_high+1);
-
-  Higha = StrLib_StrLen ((const char *) a, _a_high);
-  Highb = StrLib_StrLen ((const char *) b, _b_high);
-  i = 0;
-  while ((i < Higha) && (i < Highb))
-    {
-      if (a[i] < b[i])
-        {
-          return TRUE;
-        }
-      else if (a[i] > b[i])
-        {
-          /* avoid dangling else.  */
-          return FALSE;
-        }
-      /* must be equal, move on to next character  */
-      i += 1;
-    }
-  return Higha < Highb;  /* substrings are equal so we go on length  */
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-extern "C" unsigned int StrLib_StrEqual (const char *a_, unsigned int _a_high, const char *b_, unsigned int _b_high)
-{
-  unsigned int i;
-  unsigned int higha;
-  unsigned int highb;
-  char a[_a_high+1];
-  char b[_b_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (a, a_, _a_high+1);
-  memcpy (b, b_, _b_high+1);
-
-  higha = _a_high;
-  highb = _b_high;
-  i = 0;
-  while ((((i <= higha) && (i <= highb)) && (a[i] != ASCII_nul)) && (b[i] != ASCII_nul))
-    {
-      if (a[i] != b[i])
-        {
-          return FALSE;
-        }
-      i += 1;
-    }
-  return ! (((i <= higha) && (a[i] != ASCII_nul)) || ((i <= highb) && (b[i] != ASCII_nul)));
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-extern "C" unsigned int StrLib_StrLen (const char *a_, unsigned int _a_high)
-{
-  unsigned int High;
-  unsigned int Len;
-  char a[_a_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (a, a_, _a_high+1);
-
-  Len = 0;
-  High = _a_high;
-  while ((Len <= High) && (a[Len] != ASCII_nul))
-    {
-      Len += 1;
-    }
-  return Len;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   StrCopy - copy string src into string dest providing dest is large enough.
-             If dest is smaller than a then src then the string is truncated when
-             dest is full.  Add a nul character if there is room in dest.
-*/
-
-extern "C" void StrLib_StrCopy (const char *src_, unsigned int _src_high, char *dest, unsigned int _dest_high)
-{
-  unsigned int HighSrc;
-  unsigned int HighDest;
-  unsigned int n;
-  char src[_src_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (src, src_, _src_high+1);
-
-  n = 0;
-  HighSrc = StrLib_StrLen ((const char *) src, _src_high);
-  HighDest = _dest_high;
-  while ((n < HighSrc) && (n <= HighDest))
-    {
-      dest[n] = src[n];
-      n += 1;
-    }
-  if (n <= HighDest)
-    {
-      dest[n] = ASCII_nul;
-    }
-}
-
-
-/*
-   IsSubString - returns true if b is a subcomponent of a.
-*/
-
-extern "C" unsigned int StrLib_IsSubString (const char *a_, unsigned int _a_high, const char *b_, unsigned int _b_high)
-{
-  unsigned int i;
-  unsigned int j;
-  unsigned int LengthA;
-  unsigned int LengthB;
-  char a[_a_high+1];
-  char b[_b_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (a, a_, _a_high+1);
-  memcpy (b, b_, _b_high+1);
-
-  LengthA = StrLib_StrLen ((const char *) a, _a_high);
-  LengthB = StrLib_StrLen ((const char *) b, _b_high);
-  i = 0;
-  if (LengthA > LengthB)
-    {
-      while (i <= (LengthA-LengthB))
-        {
-          j = 0;
-          while ((j < LengthB) && (a[i+j] == b[j]))
-            {
-              j += 1;
-            }
-          if (j == LengthB)
-            {
-              return TRUE;
-            }
-          else
-            {
-              i += 1;
-            }
-        }
-    }
-  return FALSE;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   StrRemoveWhitePrefix - copies string, into string, b, excluding any white
-                          space infront of a.
-*/
-
-extern "C" void StrLib_StrRemoveWhitePrefix (const char *a_, unsigned int _a_high, char *b, unsigned int _b_high)
-{
-  unsigned int i;
-  unsigned int j;
-  unsigned int higha;
-  unsigned int highb;
-  char a[_a_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (a, a_, _a_high+1);
-
-  i = 0;
-  j = 0;
-  higha = StrLib_StrLen ((const char *) a, _a_high);
-  highb = _b_high;
-  while ((i < higha) && (IsWhite (a[i])))
-    {
-      i += 1;
-    }
-  while ((i < higha) && (j <= highb))
-    {
-      b[j] = a[i];
-      i += 1;
-      j += 1;
-    }
-  if (j <= highb)
-    {
-      b[j] = ASCII_nul;
-    }
-}
-
-extern "C" void _M2_StrLib_init (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-}
-
-extern "C" void _M2_StrLib_fini (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
-{
-}
diff --git a/gcc/m2/mc-boot/GStringConvert.c b/gcc/m2/mc-boot/GStringConvert.c
deleted file mode 100644
index faa5e34459e..00000000000
--- a/gcc/m2/mc-boot/GStringConvert.c
+++ /dev/null
@@ -1,2005 +0,0 @@
-/* do not edit automatically generated by mc from StringConvert.  */
-/* StringConvert.mod provides functions to convert numbers to and from strings.
-
-Copyright (C) 2001-2023 Free Software Foundation, Inc.
-Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>.
-
-This file is part of GNU Modula-2.
-
-GNU Modula-2 is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
-
-GNU Modula-2 is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-General Public License for more details.
-
-Under Section 7 of GPL version 3, you are granted additional
-permissions described in the GCC Runtime Library Exception, version
-3.1, as published by the Free Software Foundation.
-
-You should have received a copy of the GNU General Public License and
-a copy of the GCC Runtime Library Exception along with this program;
-see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
-<http://www.gnu.org/licenses/>.  */
-
-#include "config.h"
-#include "system.h"
-#   if !defined (PROC_D)
-#      define PROC_D
-       typedef void (*PROC_t) (void);
-       typedef struct { PROC_t proc; } PROC;
-#   endif
-
-#   if !defined (TRUE)
-#      define TRUE (1==1)
-#   endif
-
-#   if !defined (FALSE)
-#      define FALSE (1==0)
-#   endif
-
-#if defined(__cplusplus)
-#   undef NULL
-#   define NULL 0
-#endif
-#define _StringConvert_H
-#define _StringConvert_C
-
-#   include "GSYSTEM.h"
-#   include "Glibc.h"
-#   include "Glibm.h"
-#   include "GM2RTS.h"
-#   include "GDynamicStrings.h"
-#   include "Gldtoa.h"
-#   include "Gdtoa.h"
-
-
-/*
-   IntegerToString - converts INTEGER, i, into a String. The field with can be specified
-                     if non zero. Leading characters are defined by padding and this
-                     function will prepend a + if sign is set to TRUE.
-                     The base allows the caller to generate binary, octal, decimal, hexidecimal
-                     numbers. The value of lower is only used when hexidecimal numbers are
-                     generated and if TRUE then digits abcdef are used, and if FALSE then ABCDEF
-                     are used.
-*/
-
-extern "C" DynamicStrings_String StringConvert_IntegerToString (int i, unsigned int width, char padding, unsigned int sign, unsigned int base, unsigned int lower);
-
-/*
-   CardinalToString - converts CARDINAL, c, into a String. The field with can be specified
-                      if non zero. Leading characters are defined by padding.
-                      The base allows the caller to generate binary, octal, decimal, hexidecimal
-                      numbers. The value of lower is only used when hexidecimal numbers are
-                      generated and if TRUE then digits abcdef are used, and if FALSE then ABCDEF
-                      are used.
-*/
-
-extern "C" DynamicStrings_String StringConvert_CardinalToString (unsigned int c, unsigned int width, char padding, unsigned int base, unsigned int lower);
-
-/*
-   StringToInteger - converts a string, s, of, base, into an INTEGER.
-                     Leading white space is ignored. It stops converting
-                     when either the string is exhausted or if an illegal
-                     numeral is found.
-                     The parameter found is set TRUE if a number was found.
-*/
-
-extern "C" int StringConvert_StringToInteger (DynamicStrings_String s, unsigned int base, unsigned int *found);
-
-/*
-   StringToCardinal - converts a string, s, of, base, into a CARDINAL.
-                      Leading white space is ignored. It stops converting
-                      when either the string is exhausted or if an illegal
-                      numeral is found.
-                      The parameter found is set TRUE if a number was found.
-*/
-
-extern "C" unsigned int StringConvert_StringToCardinal (DynamicStrings_String s, unsigned int base, unsigned int *found);
-
-/*
-   LongIntegerToString - converts LONGINT, i, into a String. The field with
-                         can be specified if non zero. Leading characters
-                         are defined by padding and this function will
-                         prepend a + if sign is set to TRUE.
-                         The base allows the caller to generate binary,
-                         octal, decimal, hexidecimal numbers.
-                         The value of lower is only used when hexidecimal
-                         numbers are generated and if TRUE then digits
-                         abcdef are used, and if FALSE then ABCDEF are used.
-*/
-
-extern "C" DynamicStrings_String StringConvert_LongIntegerToString (long int i, unsigned int width, char padding, unsigned int sign, unsigned int base, unsigned int lower);
-
-/*
-   StringToLongInteger - converts a string, s, of, base, into an LONGINT.
-                         Leading white space is ignored. It stops converting
-                         when either the string is exhausted or if an illegal
-                         numeral is found.
-                         The parameter found is set TRUE if a number was found.
-*/
-
-extern "C" long int StringConvert_StringToLongInteger (DynamicStrings_String s, unsigned int base, unsigned int *found);
-
-/*
-   LongCardinalToString - converts LONGCARD, c, into a String. The field
-                          width can be specified if non zero. Leading
-                          characters are defined by padding.
-                          The base allows the caller to generate binary,
-                          octal, decimal, hexidecimal numbers.
-                          The value of lower is only used when hexidecimal
-                          numbers are generated and if TRUE then digits
-                          abcdef are used, and if FALSE then ABCDEF are used.
-*/
-
-extern "C" DynamicStrings_String StringConvert_LongCardinalToString (long unsigned int c, unsigned int width, char padding, unsigned int base, unsigned int lower);
-
-/*
-   StringToLongCardinal - converts a string, s, of, base, into a LONGCARD.
-                          Leading white space is ignored. It stops converting
-                          when either the string is exhausted or if an illegal
-                          numeral is found.
-                          The parameter found is set TRUE if a number was found.
-*/
-
-extern "C" long unsigned int StringConvert_StringToLongCardinal (DynamicStrings_String s, unsigned int base, unsigned int *found);
-
-/*
-   ShortCardinalToString - converts SHORTCARD, c, into a String. The field
-                          width can be specified if non zero. Leading
-                          characters are defined by padding.
-                          The base allows the caller to generate binary,
-                          octal, decimal, hexidecimal numbers.
-                          The value of lower is only used when hexidecimal
-                          numbers are generated and if TRUE then digits
-                          abcdef are used, and if FALSE then ABCDEF are used.
-*/
-
-extern "C" DynamicStrings_String StringConvert_ShortCardinalToString (short unsigned int c, unsigned int width, char padding, unsigned int base, unsigned int lower);
-
-/*
-   StringToShortCardinal - converts a string, s, of, base, into a SHORTCARD.
-                           Leading white space is ignored. It stops converting
-                           when either the string is exhausted or if an illegal
-                           numeral is found.
-                           The parameter found is set TRUE if a number was found.
-*/
-
-extern "C" short unsigned int StringConvert_StringToShortCardinal (DynamicStrings_String s, unsigned int base, unsigned int *found);
-
-/*
-   stoi - decimal string to INTEGER
-*/
-
-extern "C" int StringConvert_stoi (DynamicStrings_String s);
-
-/*
-   itos - integer to decimal string.
-*/
-
-extern "C" DynamicStrings_String StringConvert_itos (int i, unsigned int width, char padding, unsigned int sign);
-
-/*
-   ctos - cardinal to decimal string.
-*/
-
-extern "C" DynamicStrings_String StringConvert_ctos (unsigned int c, unsigned int width, char padding);
-
-/*
-   stoc - decimal string to CARDINAL
-*/
-
-extern "C" unsigned int StringConvert_stoc (DynamicStrings_String s);
-
-/*
-   hstoi - hexidecimal string to INTEGER
-*/
-
-extern "C" int StringConvert_hstoi (DynamicStrings_String s);
-
-/*
-   ostoi - octal string to INTEGER
-*/
-
-extern "C" int StringConvert_ostoi (DynamicStrings_String s);
-
-/*
-   bstoi - binary string to INTEGER
-*/
-
-extern "C" int StringConvert_bstoi (DynamicStrings_String s);
-
-/*
-   hstoc - hexidecimal string to CARDINAL
-*/
-
-extern "C" unsigned int StringConvert_hstoc (DynamicStrings_String s);
-
-/*
-   ostoc - octal string to CARDINAL
-*/
-
-extern "C" unsigned int StringConvert_ostoc (DynamicStrings_String s);
-
-/*
-   bstoc - binary string to CARDINAL
-*/
-
-extern "C" unsigned int StringConvert_bstoc (DynamicStrings_String s);
-
-/*
-   StringToLongreal - returns a LONGREAL and sets found to TRUE if a legal number is seen.
-*/
-
-extern "C" long double StringConvert_StringToLongreal (DynamicStrings_String s, unsigned int *found);
-
-/*
-   LongrealToString - converts a LONGREAL number, Real, which has,
-                      TotalWidth, and FractionWidth into a string.
-                      It uses decimal notation.
-
-                      So for example:
-
-                      LongrealToString(1.0, 4, 2)  -> '1.00'
-                      LongrealToString(12.3, 5, 2) -> '12.30'
-                      LongrealToString(12.3, 6, 2) -> ' 12.30'
-                      LongrealToString(12.3, 6, 3) -> '12.300'
-
-                      if total width is too small then the fraction
-                      becomes truncated.
-
-                      LongrealToString(12.3, 5, 3) -> '12.30'
-
-                      Positive numbers do not have a '+' prepended.
-                      Negative numbers will have a '-' prepended and
-                      the TotalWidth will need to be large enough
-                      to contain the sign, whole number, '.' and
-                      fractional components.
-*/
-
-extern "C" DynamicStrings_String StringConvert_LongrealToString (long double x, unsigned int TotalWidth, unsigned int FractionWidth);
-
-/*
-   stor - returns a REAL given a string.
-*/
-
-extern "C" double StringConvert_stor (DynamicStrings_String s);
-
-/*
-   stolr - returns a LONGREAL given a string.
-*/
-
-extern "C" long double StringConvert_stolr (DynamicStrings_String s);
-
-/*
-   ToSigFig - returns a floating point or base 10 integer
-              string which is accurate to, n, significant
-              figures.  It will return a new String
-              and, s, will be destroyed.
-
-
-              So:  12.345
-
-              rounded to the following significant figures yields
-
-              5      12.345
-              4      12.34
-              3      12.3
-              2      12
-              1      10
-*/
-
-extern "C" DynamicStrings_String StringConvert_ToSigFig (DynamicStrings_String s, unsigned int n);
-
-/*
-   ToDecimalPlaces - returns a floating point or base 10 integer
-                     string which is accurate to, n, decimal
-                     places.  It will return a new String
-                     and, s, will be destroyed.
-                     Decimal places yields, n, digits after
-                     the .
-
-                     So:  12.345
-
-                     rounded to the following decimal places yields
-
-                     5      12.34500
-                     4      12.3450
-                     3      12.345
-                     2      12.34
-                     1      12.3
-*/
-
-extern "C" DynamicStrings_String StringConvert_ToDecimalPlaces (DynamicStrings_String s, unsigned int n);
-
-/*
-   Assert - implement a simple assert.
-*/
-
-static void Assert (unsigned int b, const char *file_, unsigned int _file_high, unsigned int line, const char *func_, unsigned int _func_high);
-
-/*
-   Max -
-*/
-
-static unsigned int Max (unsigned int a, unsigned int b);
-
-/*
-   Min -
-*/
-
-static unsigned int Min (unsigned int a, unsigned int b);
-
-/*
-   LongMin - returns the smallest LONGCARD
-*/
-
-static long unsigned int LongMin (long unsigned int a, long unsigned int b);
-
-/*
-   IsDigit - returns TRUE if, ch, lies between '0'..'9'.
-*/
-
-static unsigned int IsDigit (char ch);
-
-/*
-   IsDecimalDigitValid - returns the TRUE if, ch, is a base legal decimal digit.
-                         If legal then the value is appended numerically onto, c.
-*/
-
-static unsigned int IsDecimalDigitValid (char ch, unsigned int base, unsigned int *c);
-
-/*
-   IsHexidecimalDigitValid - returns the TRUE if, ch, is a base legal hexidecimal digit.
-                             If legal then the value is appended numerically onto, c.
-*/
-
-static unsigned int IsHexidecimalDigitValid (char ch, unsigned int base, unsigned int *c);
-
-/*
-   IsDecimalDigitValidLong - returns the TRUE if, ch, is a base legal decimal digit.
-                             If legal then the value is appended numerically onto, c.
-*/
-
-static unsigned int IsDecimalDigitValidLong (char ch, unsigned int base, long unsigned int *c);
-
-/*
-   IsHexidecimalDigitValidLong - returns the TRUE if, ch, is a base legal hexidecimal digit.
-                                 If legal then the value is appended numerically onto, c.
-*/
-
-static unsigned int IsHexidecimalDigitValidLong (char ch, unsigned int base, long unsigned int *c);
-
-/*
-   IsDecimalDigitValidShort - returns the TRUE if, ch, is a base legal decimal digit.
-                              If legal then the value is appended numerically onto, c.
-*/
-
-static unsigned int IsDecimalDigitValidShort (char ch, unsigned int base, short unsigned int *c);
-
-/*
-   IsHexidecimalDigitValidShort - returns the TRUE if, ch, is a base legal hexidecimal digit.
-                                  If legal then the value is appended numerically onto, c.
-*/
-
-static unsigned int IsHexidecimalDigitValidShort (char ch, unsigned int base, short unsigned int *c);
-
-/*
-   ToThePower10 - returns a LONGREAL containing the value of v * 10^power.
-*/
-
-static long double ToThePower10 (long double v, int power);
-
-/*
-   DetermineSafeTruncation - we wish to use TRUNC when converting REAL/LONGREAL
-                             into a string for the non fractional component.
-                             However we need a simple method to
-                             determine the maximum safe truncation value.
-*/
-
-static unsigned int DetermineSafeTruncation (void);
-
-/*
-   rtos -
-*/
-
-static DynamicStrings_String rtos (double r, unsigned int TotalWidth, unsigned int FractionWidth);
-
-/*
-   lrtos -
-*/
-
-static DynamicStrings_String lrtos (long double r, unsigned int TotalWidth, unsigned int FractionWidth);
-
-/*
-   doDecimalPlaces - returns a string which is accurate to
-                     n decimal places.  It returns a new String
-                     and, s, will be destroyed.
-*/
-
-static DynamicStrings_String doDecimalPlaces (DynamicStrings_String s, unsigned int n);
-
-/*
-   doSigFig - returns a string which is accurate to
-              n decimal places.  It returns a new String
-              and, s, will be destroyed.
-*/
-
-static DynamicStrings_String doSigFig (DynamicStrings_String s, unsigned int n);
-
-/*
-   carryOne - add a carry at position, i.
-*/
-
-static DynamicStrings_String carryOne (DynamicStrings_String s, unsigned int i);
-
-
-/*
-   Assert - implement a simple assert.
-*/
-
-static void Assert (unsigned int b, const char *file_, unsigned int _file_high, unsigned int line, const char *func_, unsigned int _func_high)
-{
-  char file[_file_high+1];
-  char func[_func_high+1];
-
-  /* make a local copy of each unbounded array.  */
-  memcpy (file, file_, _file_high+1);
-  memcpy (func, func_, _func_high+1);
-
-  if (! b)
-    {
-      M2RTS_ErrorMessage ((const char *) "assert failed", 13, (const char *) file, _file_high, line, (const char *) func, _func_high);
-    }
-}
-
-
-/*
-   Max -
-*/
-
-static unsigned int Max (unsigned int a, unsigned int b)
-{
-  if (a > b)
-    {
-      return a;
-    }
-  else
-    {
-      return b;
-    }
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   Min -
-*/
-
-static unsigned int Min (unsigned int a, unsigned int b)
-{
-  if (a < b)
-    {
-      return a;
-    }
-  else
-    {
-      return b;
-    }
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   LongMin - returns the smallest LONGCARD
-*/
-
-static long unsigned int LongMin (long unsigned int a, long unsigned int b)
-{
-  if (a < b)
-    {
-      return a;
-    }
-  else
-    {
-      return b;
-    }
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   IsDigit - returns TRUE if, ch, lies between '0'..'9'.
-*/
-
-static unsigned int IsDigit (char ch)
-{
-  return (ch >= '0') && (ch <= '9');
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   IsDecimalDigitValid - returns the TRUE if, ch, is a base legal decimal digit.
-                         If legal then the value is appended numerically onto, c.
-*/
-
-static unsigned int IsDecimalDigitValid (char ch, unsigned int base, unsigned int *c)
-{
-  if ((IsDigit (ch)) && (( ((unsigned int) (ch))- ((unsigned int) ('0'))) < base))
-    {
-      (*c) = ((*c)*base)+( ((unsigned int) (ch))- ((unsigned int) ('0')));
-      return TRUE;
-    }
-  else
-    {
-      return FALSE;
-    }
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   IsHexidecimalDigitValid - returns the TRUE if, ch, is a base legal hexidecimal digit.
-                             If legal then the value is appended numerically onto, c.
-*/
-
-static unsigned int IsHexidecimalDigitValid (char ch, unsigned int base, unsigned int *c)
-{
-  if (((ch >= 'a') && (ch <= 'f')) && ((( ((unsigned int) (ch))- ((unsigned int) ('a')))+10) < base))
-    {
-      (*c) = ((*c)*base)+(( ((unsigned int) (ch))- ((unsigned int) ('a')))+10);
-      return TRUE;
-    }
-  else if (((ch >= 'A') && (ch <= 'F')) && ((( ((unsigned int) (ch))- ((unsigned int) ('F')))+10) < base))
-    {
-      /* avoid dangling else.  */
-      (*c) = ((*c)*base)+(( ((unsigned int) (ch))- ((unsigned int) ('A')))+10);
-      return TRUE;
-    }
-  else
-    {
-      /* avoid dangling else.  */
-      return FALSE;
-    }
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   IsDecimalDigitValidLong - returns the TRUE if, ch, is a base legal decimal digit.
-                             If legal then the value is appended numerically onto, c.
-*/
-
-static unsigned int IsDecimalDigitValidLong (char ch, unsigned int base, long unsigned int *c)
-{
-  if ((IsDigit (ch)) && (( ((unsigned int) (ch))- ((unsigned int) ('0'))) < base))
-    {
-      (*c) = (*c)*((long unsigned int ) (base+( ((unsigned int) (ch))- ((unsigned int) ('0')))));
-      return TRUE;
-    }
-  else
-    {
-      return FALSE;
-    }
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   IsHexidecimalDigitValidLong - returns the TRUE if, ch, is a base legal hexidecimal digit.
-                                 If legal then the value is appended numerically onto, c.
-*/
-
-static unsigned int IsHexidecimalDigitValidLong (char ch, unsigned int base, long unsigned int *c)
-{
-  if (((ch >= 'a') && (ch <= 'f')) && ((( ((unsigned int) (ch))- ((unsigned int) ('a')))+10) < base))
-    {
-      (*c) = (*c)*((long unsigned int ) (base+(( ((unsigned int) (ch))- ((unsigned int) ('a')))+10)));
-      return TRUE;
-    }
-  else if (((ch >= 'A') && (ch <= 'F')) && ((( ((unsigned int) (ch))- ((unsigned int) ('F')))+10) < base))
-    {
-      /* avoid dangling else.  */
-      (*c) = (*c)*((long unsigned int ) (base+(( ((unsigned int) (ch))- ((unsigned int) ('A')))+10)));
-      return TRUE;
-    }
-  else
-    {
-      /* avoid dangling else.  */
-      return FALSE;
-    }
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   IsDecimalDigitValidShort - returns the TRUE if, ch, is a base legal decimal digit.
-                              If legal then the value is appended numerically onto, c.
-*/
-
-static unsigned int IsDecimalDigitValidShort (char ch, unsigned int base, short unsigned int *c)
-{
-  if ((IsDigit (ch)) && (( ((unsigned int) (ch))- ((unsigned int) ('0'))) < base))
-    {
-      (*c) = (*c)*((short unsigned int ) (base+( ((unsigned int) (ch))- ((unsigned int) ('0')))));
-      return TRUE;
-    }
-  else
-    {
-      return FALSE;
-    }
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   IsHexidecimalDigitValidShort - returns the TRUE if, ch, is a base legal hexidecimal digit.
-                                  If legal then the value is appended numerically onto, c.
-*/
-
-static unsigned int IsHexidecimalDigitValidShort (char ch, unsigned int base, short unsigned int *c)
-{
-  if (((ch >= 'a') && (ch <= 'f')) && ((( ((unsigned int) (ch))- ((unsigned int) ('a')))+10) < base))
-    {
-      (*c) = (*c)*((short unsigned int ) (base+(( ((unsigned int) (ch))- ((unsigned int) ('a')))+10)));
-      return TRUE;
-    }
-  else if (((ch >= 'A') && (ch <= 'F')) && ((( ((unsigned int) (ch))- ((unsigned int) ('F')))+10) < base))
-    {
-      /* avoid dangling else.  */
-      (*c) = (*c)*((short unsigned int ) (base+(( ((unsigned int) (ch))- ((unsigned int) ('A')))+10)));
-      return TRUE;
-    }
-  else
-    {
-      /* avoid dangling else.  */
-      return FALSE;
-    }
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   ToThePower10 - returns a LONGREAL containing the value of v * 10^power.
-*/
-
-static long double ToThePower10 (long double v, int power)
-{
-  int i;
-
-  i = 0;
-  if (power > 0)
-    {
-      while (i < power)
-        {
-          v = v*10.0;
-          i += 1;
-        }
-    }
-  else
-    {
-      while (i > power)
-        {
-          v = v/10.0;
-          i -= 1;
-        }
-    }
-  return v;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   DetermineSafeTruncation - we wish to use TRUNC when converting REAL/LONGREAL
-                             into a string for the non fractional component.
-                             However we need a simple method to
-                             determine the maximum safe truncation value.
-*/
-
-static unsigned int DetermineSafeTruncation (void)
-{
-  double MaxPowerOfTen;
-  unsigned int LogPower;
-
-  MaxPowerOfTen = static_cast<double> (1.0);
-  LogPower = 0;
-  while ((MaxPowerOfTen*10.0) < ((double) ((INT_MAX) / 10)))
-    {
-      MaxPowerOfTen = MaxPowerOfTen*10.0;
-      LogPower += 1;
-    }
-  return LogPower;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   rtos -
-*/
-
-static DynamicStrings_String rtos (double r, unsigned int TotalWidth, unsigned int FractionWidth)
-{
-  M2RTS_HALT (-1);
-  __builtin_unreachable ();
-  return static_cast<DynamicStrings_String> (NULL);
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   lrtos -
-*/
-
-static DynamicStrings_String lrtos (long double r, unsigned int TotalWidth, unsigned int FractionWidth)
-{
-  M2RTS_HALT (-1);
-  __builtin_unreachable ();
-  return static_cast<DynamicStrings_String> (NULL);
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   doDecimalPlaces - returns a string which is accurate to
-                     n decimal places.  It returns a new String
-                     and, s, will be destroyed.
-*/
-
-static DynamicStrings_String doDecimalPlaces (DynamicStrings_String s, unsigned int n)
-{
-  int i;
-  int l;
-  int point;
-  DynamicStrings_String t;
-  DynamicStrings_String whole;
-  DynamicStrings_String fraction;
-  DynamicStrings_String tenths;
-  DynamicStrings_String hundreths;
-
-  l = DynamicStrings_Length (s);
-  i = 0;
-  /* remove '.'  */
-  point = DynamicStrings_Index (s, '.', 0);
-  if (point == 0)
-    {
-      s = DynamicStrings_Slice (DynamicStrings_Mark (s), 1, 0);
-    }
-  else if (point < l)
-    {
-      /* avoid dangling else.  */
-      s = DynamicStrings_ConCat (DynamicStrings_Slice (DynamicStrings_Mark (s), 0, point), DynamicStrings_Mark (DynamicStrings_Slice (DynamicStrings_Mark (s), point+1, 0)));
-    }
-  else
-    {
-      /* avoid dangling else.  */
-      s = DynamicStrings_Slice (DynamicStrings_Mark (s), 0, point);
-    }
-  l = DynamicStrings_Length (s);
-  i = 0;
-  if (l > 0)
-    {
-      /* skip over leading zeros  */
-      while ((i < l) && ((DynamicStrings_char (s, i)) == '0'))
-        {
-          i += 1;
-        }
-      /* was the string full of zeros?  */
-      if ((i == l) && ((DynamicStrings_char (s, i-1)) == '0'))
-        {
-          s = DynamicStrings_KillString (s);
-          s = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "0.", 2), DynamicStrings_Mark (DynamicStrings_Mult (DynamicStrings_Mark (DynamicStrings_InitStringChar ('0')), n)));
-          return s;
-        }
-    }
-  /* insert leading zero  */
-  s = DynamicStrings_ConCat (DynamicStrings_InitStringChar ('0'), DynamicStrings_Mark (s));
-  point += 1;  /* and move point position to correct place  */
-  l = DynamicStrings_Length (s);  /* update new length  */
-  i = point;  /* update new length  */
-  while ((n > 1) && (i < l))
-    {
-      n -= 1;
-      i += 1;
-    }
-  if ((i+3) <= l)
-    {
-      t = DynamicStrings_Dup (s);
-      hundreths = DynamicStrings_Slice (DynamicStrings_Mark (s), i+1, i+3);
-      s = t;
-      if ((StringConvert_stoc (hundreths)) >= 50)
-        {
-          s = carryOne (DynamicStrings_Mark (s), static_cast<unsigned int> (i));
-        }
-      hundreths = DynamicStrings_KillString (hundreths);
-    }
-  else if ((i+2) <= l)
-    {
-      /* avoid dangling else.  */
-      t = DynamicStrings_Dup (s);
-      tenths = DynamicStrings_Slice (DynamicStrings_Mark (s), i+1, i+2);
-      s = t;
-      if ((StringConvert_stoc (tenths)) >= 5)
-        {
-          s = carryOne (DynamicStrings_Mark (s), static_cast<unsigned int> (i));
-        }
-      tenths = DynamicStrings_KillString (tenths);
-    }
-  /* check whether we need to remove the leading zero  */
-  if ((DynamicStrings_char (s, 0)) == '0')
-    {
-      s = DynamicStrings_Slice (DynamicStrings_Mark (s), 1, 0);
-      l -= 1;
-      point -= 1;
-    }
-  if (i < l)
-    {
-      s = DynamicStrings_Slice (DynamicStrings_Mark (s), 0, i);
-      l = DynamicStrings_Length (s);
-      if (l < point)
-        {
-          s = DynamicStrings_ConCat (s, DynamicStrings_Mult (DynamicStrings_Mark (DynamicStrings_InitStringChar ('0')), static_cast<unsigned int> (point-l)));
-        }
-    }
-  /* re-insert the point  */
-  if (point >= 0)
-    {
-      /* avoid gcc warning by using compound statement even if not strictly necessary.  */
-      if (point == 0)
-        {
-          s = DynamicStrings_ConCat (DynamicStrings_InitStringChar ('.'), DynamicStrings_Mark (s));
-        }
-      else
-        {
-          s = DynamicStrings_ConCat (DynamicStrings_ConCatChar (DynamicStrings_Slice (DynamicStrings_Mark (s), 0, point), '.'), DynamicStrings_Mark (DynamicStrings_Slice (DynamicStrings_Mark (s), point, 0)));
-        }
-    }
-  return s;
-  /* static analysis guarentees a RETURN statement will be used before here.  */
-  __builtin_unreachable ();
-}
-
-
-/*
-   doSigFig - returns a string which is accurate to
-              n decimal places.  It returns a new String
-              and, s, will be destroyed.
-*/
-
-static DynamicStrings_String doSigFig (DynamicStrings_String s, unsigned int n)
-{
-  int i;
-  int l;
-  int z;
-  int point;
-  DynamicStrings_String t;
-  DynamicStrings_String tenths;
-  DynamicStrings_String hundreths;
-
-  l = DynamicStrings_Length (s);
-  i = 0;
-  /* remove '.'  */
-  point = DynamicStrings_Index (s, '.', 0);
-  if (point >= 0)
-    {
-      if (point == 0)
-        {
-          s = DynamicStrings_Slice (DynamicStrings_Mark (s), 1, 0);
-        }
-      else if (point < l)
-        {
-          /* avoid dangling else.  */
-          s = DynamicStrings_ConCat (DynamicStrings_Slice (DynamicStrings_Mark (s), 0, point), DynamicStrings_Mark (DynamicStrings_Slice (DynamicStrings_Mark (s), point+1, 0)[...]

[diff truncated at 524288 bytes]

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2023-03-04 12:45 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-03-04 12:45 [gcc r13-6479] Modula-2 rename autogenerated .c files to .cc Gaius Mulley

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).