Browse Source

Copy TExternChain type and AddSymbol procedure to unit aasmcpu from agx86nsm unit

git-svn-id: trunk@34079 -
pierre 9 years ago
parent
commit
38f751573a
1 changed files with 58 additions and 0 deletions
  1. 58 0
      compiler/x86/aasmcpu.pas

+ 58 - 0
compiler/x86/aasmcpu.pas

@@ -381,6 +381,26 @@ interface
     procedure DoneAsm;
     procedure DoneAsm;
 
 
 
 
+{*****************************************************************************
+                              External Symbol Chain
+                              used for agx86nsm and agx86int
+*****************************************************************************}
+
+    type
+      PExternChain = ^TExternChain;
+
+      TExternChain = Record
+        psym : pshortstring;
+        is_defined : boolean;
+        next : PExternChain;
+      end;
+
+    const
+      FEC : PExternChain = nil;
+
+    procedure AddSymbol(symname : string; defined : boolean);
+    procedure FreeExternChainList;
+
 implementation
 implementation
 
 
      uses
      uses
@@ -392,6 +412,44 @@ implementation
        symsym,
        symsym,
        cpuinfo;
        cpuinfo;
 
 
+
+
+    procedure AddSymbol(symname : string; defined : boolean);
+    var
+       EC : PExternChain;
+    begin
+      EC:=FEC;
+      while assigned(EC) do
+        begin
+          if EC^.psym^=symname then
+            begin
+              if defined then
+                EC^.is_defined:=true;
+              exit;
+            end;
+          EC:=EC^.next;
+        end;
+      New(EC);
+      EC^.next:=FEC;
+      FEC:=EC;
+      FEC^.psym:=stringdup(symname);
+      FEC^.is_defined := defined;
+    end;
+
+    procedure FreeExternChainList;
+    var
+       EC : PExternChain;
+    begin
+      EC:=FEC;
+      while assigned(EC) do
+        begin
+          FEC:=EC^.next;
+          stringdispose(EC^.psym);
+          Dispose(EC);
+          EC:=FEC;
+        end;
+    end;
+
 {*****************************************************************************
 {*****************************************************************************
                               Instruction table
                               Instruction table
 *****************************************************************************}
 *****************************************************************************}