浏览代码

Less and more precise error messages from the linker / loader

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@7266 8c9fc860-2736-0410-a75d-ab315db34111
felixf 8 年之前
父节点
当前提交
f993c00bbe
共有 2 个文件被更改,包括 9 次插入7 次删除
  1. 1 1
      source/GenericLinker.Mod
  2. 8 6
      source/GenericLoader.Mod

+ 1 - 1
source/GenericLinker.Mod

@@ -309,7 +309,7 @@ VAR
 				ObjectFile.SegmentedNameToString(block.identifier.name,name);
 				ObjectFile.SegmentedNameToString(block.identifier.name,name);
 				Strings.Append(str,  name);
 				Strings.Append(str,  name);
 				Error(str, "unresolved");
 				Error(str, "unresolved");
-			ELSIF (reference.identifier.fingerprint # 0) & (block.fixup[i].identifier.fingerprint # 0) & (reference.identifier.fingerprint # block.fixup[i].identifier.fingerprint) THEN
+			ELSIF (reference.identifier.fingerprint # 0) & (fixup.identifier.fingerprint # 0) & (reference.identifier.fingerprint # fixup.identifier.fingerprint) THEN
 				ObjectFile.SegmentedNameToString(fixup.identifier.name,str); Strings.Append(str," in " );
 				ObjectFile.SegmentedNameToString(fixup.identifier.name,str); Strings.Append(str," in " );
 				ObjectFile.SegmentedNameToString(block.identifier.name,name);
 				ObjectFile.SegmentedNameToString(block.identifier.name,name);
 				Strings.Append(str,  name);
 				Strings.Append(str,  name);

+ 8 - 6
source/GenericLoader.Mod

@@ -356,8 +356,9 @@ TYPE
 
 
 		PROCEDURE ImportBlock(CONST fixup: ObjectFile.Fixup): GenericLinker.Block;
 		PROCEDURE ImportBlock(CONST fixup: ObjectFile.Fixup): GenericLinker.Block;
 		VAR name: Modules.Name; res: LONGINT;
 		VAR name: Modules.Name; res: LONGINT;
-		msg: ARRAY 128 OF CHAR; module: Modules.Module; adr: LONGINT; m: HashTableInt;
-		s: ObjectFile.SectionName; isModule: BOOLEAN; identifier: ObjectFile.Identifier;
+			msg: ARRAY 128 OF CHAR; module: Modules.Module; adr: LONGINT; m: HashTableInt;
+			s: ObjectFile.SectionName; isModule: BOOLEAN; identifier: ObjectFile.Identifier;
+			fp: LONGINT;
 
 
 			PROCEDURE CheckName(n: StringPool.Index;  name {UNTRACED}: Modules.DynamicName): LONGINT;
 			PROCEDURE CheckName(n: StringPool.Index;  name {UNTRACED}: Modules.DynamicName): LONGINT;
 			VAR s: ObjectFile.SectionName; i: LONGINT;
 			VAR s: ObjectFile.SectionName; i: LONGINT;
@@ -391,10 +392,11 @@ TYPE
 					res := CheckName(identifier.name[level], scope.dsc[m].name);
 					res := CheckName(identifier.name[level], scope.dsc[m].name);
 					IF res = 0 THEN 
 					IF res = 0 THEN 
 						IF (level = LEN(identifier.name)-1) OR (identifier.name[level+1] <= 0) THEN
 						IF (level = LEN(identifier.name)-1) OR (identifier.name[level+1] <= 0) THEN
-							IF (scope.dsc[m].fp # identifier.fingerprint) & (scope.dsc[m].fp # 0) & (identifier.fingerprint # 0) THEN
+							(*IF (scope.dsc[m].fp # identifier.fingerprint) & (scope.dsc[m].fp # 0) & (identifier.fingerprint # 0) THEN
 								Error(identifier.name[level]);
 								Error(identifier.name[level]);
-								RETURN 0;
 							END;
 							END;
+							*)
+							fp := scope.dsc[m].fp;
 							RETURN scope.dsc[m].adr
 							RETURN scope.dsc[m].adr
 						ELSE
 						ELSE
 							RETURN CheckScope(scope.dsc[m], level+1);
 							RETURN CheckScope(scope.dsc[m], level+1);
@@ -458,10 +460,10 @@ TYPE
 			END;
 			END;
 
 
 			IF adr = 0 THEN
 			IF adr = 0 THEN
-				D.String("GenericLoader Fatal error: did not find block "); s := identifier.name; D.String(s); D.Ln;
+				(*D.String("GenericLoader Fatal error: did not find block "); s := identifier.name; D.String(s); D.Ln;*)
 				RETURN NIL;
 				RETURN NIL;
 			ELSE (* found *)
 			ELSE (* found *)
-				importBlock.identifier.fingerprint := identifier.fingerprint; importBlock.address := adr
+				importBlock.identifier.fingerprint := fp; importBlock.address := adr
 			END;
 			END;
 			RETURN importBlock
 			RETURN importBlock
 		END ImportBlock;
 		END ImportBlock;