From c2cd8246cb2df77cfc11a7c5a58411120a803e6c Mon Sep 17 00:00:00 2001 From: pierre Date: Thu, 5 Jul 2012 21:07:46 +0000 Subject: [PATCH] Override tloadnode.pass_1 to for use of got for shared library variables and genrate_picvaraccess git-svn-id: trunk@21792 - --- .gitattributes | 1 + compiler/mips/ncpuld.pas | 72 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+) create mode 100644 compiler/mips/ncpuld.pas diff --git a/.gitattributes b/.gitattributes index 8e572c4daa..e2778b1a21 100644 --- a/.gitattributes +++ b/.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 diff --git a/compiler/mips/ncpuld.pas b/compiler/mips/ncpuld.pas new file mode 100644 index 0000000000..75c103da28 --- /dev/null +++ b/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. +