Procházet zdrojové kódy

Override tloadnode.pass_1 to for use of got for shared library variables and genrate_picvaraccess

git-svn-id: trunk@21792 -
pierre před 13 roky
rodič
revize
c2cd8246cb
2 změnil soubory, kde provedl 73 přidání a 0 odebrání
  1. 1 0
      .gitattributes
  2. 72 0
      compiler/mips/ncpuld.pas

+ 1 - 0
.gitattributes

@@ -303,6 +303,7 @@ compiler/mips/ncpuadd.pas svneol=native#text/plain
 compiler/mips/ncpucall.pas svneol=native#text/pascal
 compiler/mips/ncpucnv.pas svneol=native#text/pascal
 compiler/mips/ncpuinln.pas svneol=native#text/pascal
+compiler/mips/ncpuld.pas svneol=native#text/plain
 compiler/mips/ncpumat.pas svneol=native#text/pascal
 compiler/mips/ncpuset.pas svneol=native#text/pascal
 compiler/mips/opcode.inc svneol=native#text/plain

+ 72 - 0
compiler/mips/ncpuld.pas

@@ -0,0 +1,72 @@
+{
+    Copyright (c) 1998-2002 by Florian Klaempfl
+
+    Generate MIPS assembler for nodes that handle loads and assignments
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+ ****************************************************************************
+}
+unit ncpuld;
+
+{$I fpcdefs.inc}
+
+interface
+
+uses
+  node, ncgld;
+
+type
+  tmipsloadnode = class(tcgloadnode)
+    function pass_1 : tnode; override;
+    procedure generate_picvaraccess; override;
+  end;
+
+implementation
+
+uses
+  verbose,
+  globtype,
+  systems,
+  cpubase,
+  cgbase, cgutils, cgobj,
+  aasmbase, aasmtai,aasmdata,
+  symconst, symsym,
+  procinfo,
+  nld;
+
+function tmipsloadnode.pass_1 : tnode;
+begin
+  pass_1 := inherited pass_1;
+  case symtableentry.typ of
+    staticvarsym,
+    localvarsym,
+    paravarsym :
+      if([vo_is_dll_var,vo_is_external] * tabstractvarsym(symtableentry).varoptions <> []) then
+        include(current_procinfo.flags,pi_needs_got);
+  end;
+end;
+
+procedure tmipsloadnode.generate_picvaraccess;
+begin
+  location.reference.base:=current_procinfo.got;
+  location.reference.refaddr:=addr_pic;
+  location.reference.symbol:=current_asmdata.RefAsmSymbol(tstaticvarsym(symtableentry).mangledname);
+end;
+
+begin
+  cloadnode := tmipsloadnode;
+end.
+