From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1499) id 0ECD1385828D; Tue, 15 Nov 2022 14:11:51 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 0ECD1385828D DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1668521511; bh=ikwFgaFAi4m7Ow5MYsJjADBYt3qqh/KhNO4zd3nfftg=; h=From:To:Subject:Date:From; b=Mol8n6n/iVr6jdeGpqtw3gTsbFlOwIHOGHq81PxjcCSXzriuRcRBqIbEc/Z21JyJZ PVRSWKatQ/8RZfeilpMwFH2BNdzvwcsvIrnnwi2W8H4Hrdn9HdcEomIgU45VnmMAi8 vWXZzRujskgPYiFTdmBucI5efaB9cp4AhaL8PhOU= Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Gaius Mulley To: gcc-cvs@gcc.gnu.org Subject: [gcc/devel/modula-2] Bugfix for tiny modules importing from definition for "C". X-Act-Checkin: gcc X-Git-Author: Gaius Mulley X-Git-Refname: refs/heads/devel/modula-2 X-Git-Oldrev: d1eed6043121a0f546b60b89b8d508c3f1adb0ac X-Git-Newrev: 0c1fe5e2aad3fedcd7b7543b51361fa1c85cd050 Message-Id: <20221115141151.0ECD1385828D@sourceware.org> Date: Tue, 15 Nov 2022 14:11:51 +0000 (GMT) List-Id: https://gcc.gnu.org/g:0c1fe5e2aad3fedcd7b7543b51361fa1c85cd050 commit 0c1fe5e2aad3fedcd7b7543b51361fa1c85cd050 Author: Gaius Mulley Date: Tue Nov 15 14:11:04 2022 +0000 Bugfix for tiny modules importing from definition for "C". If a tiny application module imports only from a definition for "C" the import graph will not join with the core modula-2 libraries. Thus if a range exception were to occur in the application the libraries might be uninitialized. This patch forces the application module to be initialized last. gcc/m2/ChangeLog: * gm2-libs/M2Dependent.mod (DisplayModuleInfo): Use variable count to display entry number. (CheckApplication) Check that the application is the last entry in the list and move the list head if appropriate. Signed-off-by: Gaius Mulley Diff: --- gcc/m2/gm2-libs/M2Dependent.mod | 40 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/gcc/m2/gm2-libs/M2Dependent.mod b/gcc/m2/gm2-libs/M2Dependent.mod index a37d6892406..bdfebcf51ef 100644 --- a/gcc/m2/gm2-libs/M2Dependent.mod +++ b/gcc/m2/gm2-libs/M2Dependent.mod @@ -461,14 +461,17 @@ END ResolveDependencies ; PROCEDURE DisplayModuleInfo (state: DependencyState; name: ARRAY OF CHAR) ; VAR - mptr: ModuleChain ; + mptr : ModuleChain ; + count: CARDINAL ; BEGIN IF Modules[state] # NIL THEN printf ("%s modules\n", ADR (name)) ; mptr := Modules[state] ; + count := 0 ; REPEAT - printf (" %s", mptr^.name) ; + printf (" %d %s", count, mptr^.name) ; + INC (count) ; IF mptr^.dependency.appl THEN printf (" application") @@ -574,6 +577,36 @@ BEGIN END ForceDependencies ; +(* + 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. +*) + +PROCEDURE CheckApplication ; +VAR + mptr, + appl: ModuleChain ; +BEGIN + mptr := Modules[ordered] ; + IF mptr # NIL + THEN + appl := NIL ; + REPEAT + IF mptr^.dependency.appl + THEN + appl := mptr + ELSE + mptr := mptr^.next + END + UNTIL (appl # NIL) OR (mptr=Modules[ordered]) ; + IF appl # NIL + THEN + Modules[ordered] := appl^.next + END + END +END CheckApplication ; + + (* ConstructModules - resolve dependencies and then call each module constructor in turn. @@ -600,6 +633,9 @@ BEGIN ForceDependencies ; traceprintf (ForceTrace, "After user forcing ordering\n"); DumpModuleData (ForceTrace) ; + CheckApplication ; + traceprintf (ForceTrace, "After runtime forces application to the end\n"); + DumpModuleData (ForceTrace) ; IF Modules[ordered] = NIL THEN traceprintf2 (ModuleTrace, " module: %s has not registered itself using a global constructor\n", applicationmodule);