summaryrefslogtreecommitdiff
path: root/compiler/link.pas
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/link.pas')
-rw-r--r--compiler/link.pas30
1 files changed, 19 insertions, 11 deletions
diff --git a/compiler/link.pas b/compiler/link.pas
index 2972a2dcd9..6c8d47a424 100644
--- a/compiler/link.pas
+++ b/compiler/link.pas
@@ -46,7 +46,7 @@ interface
DynamicLinker : string[100];
end;
- TLinker = class(TAbstractLinker)
+ TLinker = class(TObject)
public
HasResources,
HasExports : boolean;
@@ -132,6 +132,8 @@ interface
procedure AddImportSymbol(const libname,symname,symmangledname:TCmdStr;OrdNr: longint;isvar:boolean);override;
end;
+ TLinkerClass = class of Tlinker;
+
var
Linker : TLinker;
@@ -139,6 +141,8 @@ interface
function FindLibraryFile(s:TCmdStr;const prefix,ext:TCmdStr;var foundfile : TCmdStr) : boolean;
function FindDLL(const s:TCmdStr;var founddll:TCmdStr):boolean;
+ procedure RegisterLinker(id:tlink;c:TLinkerClass);
+
procedure InitLinker;
procedure DoneLinker;
@@ -154,8 +158,8 @@ Implementation
aasmbase,aasmtai,aasmdata,aasmcpu,
owbase,owar,ogmap;
- type
- TLinkerClass = class of Tlinker;
+ var
+ CLinker : array[tlink] of TLinkerClass;
{*****************************************************************************
Helpers
@@ -1033,6 +1037,8 @@ Implementation
exit;
Comment(V_Tried,'Opening library '+para);
objreader:=TArObjectreader.create(para,true);
+ if ErrorCount>0 then
+ exit;
if objreader.isarchive then
TFPObjectList(FGroupStack.Last).Add(TStaticLibrary.Create(para,objreader,CObjInput))
else
@@ -1518,21 +1524,23 @@ Implementation
Init/Done
*****************************************************************************}
+ procedure RegisterLinker(id:tlink;c:TLinkerClass);
+ begin
+ CLinker[id]:=c;
+ end;
+
+
procedure InitLinker;
- var
- lk : TlinkerClass;
begin
if (cs_link_extern in current_settings.globalswitches) and
- assigned(target_info.linkextern) then
+ assigned(CLinker[target_info.linkextern]) then
begin
- lk:=TlinkerClass(target_info.linkextern);
- linker:=lk.Create;
+ linker:=CLinker[target_info.linkextern].Create;
end
else
- if assigned(target_info.link) then
+ if assigned(CLinker[target_info.link]) then
begin
- lk:=TLinkerClass(target_info.link);
- linker:=lk.Create;
+ linker:=CLinker[target_info.link].Create;
end
else
linker:=Tlinker.Create;