diff --git a/compiler/aggas.pas b/compiler/aggas.pas index b08242b90a..99234577d5 100644 --- a/compiler/aggas.pas +++ b/compiler/aggas.pas @@ -1958,6 +1958,9 @@ implementation name has to be translated as well } if dir=asd_cpu then writer.AsmWrite(asminfo^.comment+' CPU ') + { indent for easier reading } + else if dir in [asd_option] then + writer.AsmWrite(#9'.'+directivestr[dir]+' ') else writer.AsmWrite('.'+directivestr[dir]+' '); end; diff --git a/compiler/riscv/nrvutil.pas b/compiler/riscv/nrvutil.pas new file mode 100644 index 0000000000..d0c5f6951f --- /dev/null +++ b/compiler/riscv/nrvutil.pas @@ -0,0 +1,55 @@ +{ + Copyright (c) 2024 + + RISCV version of some node tree helper routines + + 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 nrvutil; + +{$i fpcdefs.inc} + +interface + + uses + ngenutil; + + + type + trvnodeutils = class(tnodeutils) + class procedure InsertObjectInfo; override; + end; + +implementation + + uses + globtype,globals, + systems, + aasmdata,aasmtai; + + class procedure trvnodeutils.InsertObjectInfo; + begin + inherited InsertObjectInfo; + if (target_info.system in systems_linux) and (cs_create_pic in current_settings.moduleswitches) then + current_asmdata.asmlists[al_start].Concat(tai_directive.create(asd_option,'pic')); + end; + + +begin + cnodeutils:=trvnodeutils; +end. + diff --git a/compiler/riscv32/nrv32util.pas b/compiler/riscv32/nrv32util.pas index 0adeece48a..207240a71a 100644 --- a/compiler/riscv32/nrv32util.pas +++ b/compiler/riscv32/nrv32util.pas @@ -29,12 +29,12 @@ interface cclasses, fmodule, node,nbas, - ngenutil, + nrvutil, symtype,symconst,symsym,symdef; type - trv32nodeutils = class(tnodeutils) + trv32nodeutils = class(trvnodeutils) protected class procedure insert_init_final_table(main: tmodule; entries:tfplist); override; end; diff --git a/compiler/riscv64/cpunode.pas b/compiler/riscv64/cpunode.pas index e619c41a42..69a0b43047 100644 --- a/compiler/riscv64/cpunode.pas +++ b/compiler/riscv64/cpunode.pas @@ -45,7 +45,8 @@ uses nrvinl, nrv64mat, nrv64cnv, - nrv64ld + nrv64ld, + nrvutil {$else not llvm} llvmnode {$endif not llvm}