summaryrefslogtreecommitdiff
path: root/compiler/link.pas
diff options
context:
space:
mode:
authorjonas <jonas@3ad0048d-3df7-0310-abae-a5850022a9f2>2013-09-06 10:09:26 +0000
committerjonas <jonas@3ad0048d-3df7-0310-abae-a5850022a9f2>2013-09-06 10:09:26 +0000
commitb379f2cb9ef71d09216f34380bf3a4dba6777782 (patch)
tree16d28b20151c20bd514b097c7c0016adaff2bfda /compiler/link.pas
parent71c0dea92bdcc6a331d86adc4107d6f9bbd92c02 (diff)
parente259a09cecfcf724f8e49010f0db5dadb8a3e2c3 (diff)
downloadfpc-cpstrrtl.tar.gz
* synchronized with trunk up to and including r25430cpstrrtl
git-svn-id: http://svn.freepascal.org/svn/fpc/branches/cpstrrtl@25431 3ad0048d-3df7-0310-abae-a5850022a9f2
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;