[fpc-pascal] Has anyone ported fpc-pascal to Solaris ?

Jonas Maebe jonas.maebe at elis.ugent.be
Fri Oct 5 10:46:19 CEST 2007


On 05 Oct 2007, at 05:20, Dennis Clarke wrote:

> I wanted to create a package for Solaris users and wondered if  
> anyone had
> made the attempt.

Yes, see the mail below (that person's email address started bouncing  
recently and he was automatically unsubscribed from the list because  
of that though). Also, everything is compiled and tested every night  
on sparc/solaris. It has nevertheless quite a bit of failures  
compared to most other platforms since no one is actively developing  
on/for it. See
http://www.freepascal.org/cgi-bin/testsuite.cgi

It's probably best if you start by cross compiling using a recent  
version on a different platform, rather than from a previous sparc/ 
solaris release.


Jonas


	From: 	  markMLl.fpc-devel at telemetry.co.uk
	Subject: 	[fpc-devel] FPC on SPARC using both Linux and Solaris
	Date: 	Thu 23 Aug 2007 16:05:25 GMT+02:00
	To: 	  fpc-devel at lists.freepascal.org
	Reply-To: 	  fpc-devel at lists.freepascal.org

This time of year tends to be fairly quiet for us, and I've been  
using some of the slack to continue tinkering with FPC on SPARC-  
with, I must say, mixed success. Because I know that Jonas tests it  
on Solaris I've fired up an extra machine here, but at present I  
don't really have enough hardware to do v10 justice- I'm hoping to be  
able to change that, but I need to be able to demonstrate some  
progress here first.

Apologies for a fairly long posting and if some of it is a bit  
disjointed, but it's cut-and-pasted from my noted of the last few  
weeks. To get the ball rolling here's an executive summary:

* 2.0.0 appears OK on sparc-linux.

* 2.0.2 is broken in some way on sparc-linux: won't compile.

* 2.0.4 fails tmt1 on sparc-linux, something wrong in pthreads.

* 2.1.4 has known code-generation problems and fails tmt1 on sparc- 
linux.

* Lazarus appears to compile using 2.1.4 on sparc-linux but doesn't  
run reliably.

* 2.1.1 appears OK on sparc-solaris.

* 2.1.1 on sparc-solaris has problems building 2.0.4 and 2.1.4.

* 2.1.1 on sparc-solaris will not compile Lazarus.

* 2.1.1 on sparc-solaris compiles a working tmt1.

My tentative conclusion is that on sparc-solaris the problems are  
almost certainly that I've not worked out how to do things, but on  
sparc-linux some sort of code-generation problem has crept in  
possibly as early as 2.0.2.

We really do want to get FPC working with SPARC here, and I'm very  
much open to suggestions as to how to progress things. My own feeling  
is that a useful way to move forward would be to find what I'm doing  
wrong with the Solaris compilation, possibly get Lazarus working with  
it, and then to revert to Linux.

If anybody's still reading, detail follows.
-------------------------------------------

Linux
-----

Starting off with the binary of FPC 2.0.0 available for Linux/SPARC  
which installs and runs without problem.

The 2.0.0 compiler builds the 2.0.0 sources and completes the self- 
tests. I'm
not saying that everything runs 100% successfully- it would need  
somebody more
familiar with the system to judge that- but it doesn't crash or lock  
up. I do
note some interaction with the current session's date/time which  
sometimes
screws the desktop or X server- I presume this is a side-effect of  
one of the tests.

The 2.0.0 compiler as distributed fails to build the 2.0.2 sources.  
The first
time ppc2 is run in anger it results in:

-----8<-----
make[7]: Entering directory `/usr/local/src/fpc/fpc/rtl/linux'
as -o /usr/local/src/fpc/fpc/rtl/units/sparc-linux/prt0.o sparc/prt0.as
as -o /usr/local/src/fpc/fpc/rtl/units/sparc-linux/dllprt0.o sparc/ 
dllprt0.as
as -o /usr/local/src/fpc/fpc/rtl/units/sparc-linux/cprt0.o sparc/ 
cprt0.as
as -o /usr/local/src/fpc/fpc/rtl/units/sparc-linux/gprt0.o sparc/ 
gprt0.as
/usr/local/src/fpc/fpc/compiler/ppc2 -Ur -Ur -Xs  -n -Fi../inc -Fi../ 
sparc
-Fi../unix -Fisparc -FE. -FU/usr/local/src
/fpc/fpc/rtl/units/sparc-linux -dsparc -dRELEASE -Us -Sg system.pp
sparc.inc(60,3)  msg nr 1018
An unhandled exception occurred at $0002C84C :
EInvalidPointer : Invalid pointer operation
   $0002C84C
   $0007217C
   $0004A4C0
   $000407DC
   $000103B0
An unhandled exception occurred at $00000030 :
An unhandled exception occurred at $000FF00B :
An unhandled exception occurred at $000FF003 :
An unhandled exception occurred at $000FF003 :
..
----->8-----

with the final message repeating until the session is killed. This is
approximately reproducible if executed by hand, there is no obvious  
error in
the indicated source.

The 2.0.0 compiler as distributed compiles 2.0.4. 2.0.4 tests DO NOT  
run to
completion, the failing test is tmt1 which locks up:

-----8<-----
utils/dotest -c/usr/local/src/fpc/fpcbuild_2.0.4_exp/fpcsrc/tests/../ 
compiler/ppcsparc -e test/tmmx1.pp
Abort: Compiler cpu "sparc" is not in list "i386"
utils/dotest -c/usr/local/src/fpc/fpcbuild_2.0.4_exp/fpcsrc/tests/../ 
compiler/ppcsparc -e test/tmove.pp
utils/dotest -c/usr/local/src/fpc/fpcbuild_2.0.4_exp/fpcsrc/tests/../ 
compiler/ppcsparc -e test/tmt1.pp
----->8-----

Running manually:

-----8<-----
root at pye-dev-01:/usr/local/src/fpc/fpcbuild_2.0.4_exp/fpcsrc/tests/ 
output/sparc-linux/test# ./tmt1
An unhandled exception occurred at $00004267 :
EAccessViolation : Access violation
   $00004267
----->8-----

Return code is 217.

2.0.4 sometimes fails to compile 2.1.4, the problem (according to  
Jonas) apparently being inconsistently-initialised register  
allocation (or similar) in the 2.1.4 compiler. If the build completes  
the self-test again locks up on
tmt1.

I've spent a lot of time trying to hack my way through tmt1 with gdb,  
things are going wrong somewhere in pthread_create() but beyond that  
I get bogged down.

After somebody on a private conferencing system I use (CIX) had a  
similar problem with pthreads I switched from Debian "Etch" to  
"Lenny" which uses NPTL rather than linuxthreads (i.e. handles  
threads in the kernel rather than in the libraries). There was no  
apparent change to the 2.0.4 or 2.1.4 problems. I've not yet had an  
opportunity to try a different Linux distribution (e.g. Splack).

Solaris
-------

Starting off with the binary of 2.1.1 available for Solaris-10/SPARC  
which
installs but needs the addition of GNU as (assembler) and make, and  
symlinks
gas -> as and gld -> ld before it will compile a Hello, World! test  
program. I've also installed GNU tar in case any problems are caused  
by bad de-archiving (doesn't appear to change anything).

I've had minimal success with Solaris-8 or with Linux 2.2 running on a
SPARCserver. If the compiler worked with either of these it would be an
interesting curiosity but as OSes go they're too old to test things  
on credibly.

Solaris-8: after installation of as etc. fpcmkcfg fails to run due to  
missing
libm.so.2. I'm assuming that's fatal and unfixable.

Linux 2.2 (Debian "Woody"): 2.0.0 installs, compiles "Hello, World!" to
apparently good code. fp doesn't run, 'GLIBC_2.3 not found'. I  
believe it
compiles 2.0.0 and runs tests to completion but I'm not treating this  
system
as particularly credible: the FPC compiler doesn't make efficient use  
of the
multiple processors making the system too slow, noisy and hot to be  
worth while.

I've got a system which just about runs Solaris-10, but it's marginal  
and development is painful.

Attempting to build 2.1.4 on Solaris using the distributed 2.1.1  
binary results in an error:

-----8<-----
make[6]: Entering directory `/usr/local/src/fpc/fpcbuild-2.1.4/fpcsrc/ 
rtl'
make -C solaris all
make[7]: Entering directory `/usr/local/src/fpc/fpcbuild-2.1.4/fpcsrc/ 
rtl/solaris'
/usr/local/bin/ppcsparc -Ur -dFPC_USE_LIBC -dNOMOUSE -Ur -Xs -O2 -n - 
Fi../inc -Fi../sparc -Fi../unix -Fi../solaris/sparc -FE. -FU/usr/ 
local/src/fpc/fpcbuild-2.1.4/fpcsrc/rtl/units/sparc-solaris -dsparc - 
dRELEASE -Us -Sg system.pp
systemh.inc(94,15) Error: Duplicate identifier "Real"
varianth.inc(253,12) Error: Function is already declared Public/ 
Forward "operator :=(const Double):Variant"
----->8-----

Trying to compile Lazarus 0.9.22 with 2.1.1 results in

-----8<-----
Compiling lazconfigstorage.pas
Assembling lazconfigstorage
lresources.pp(97,15) Error: There is no method in an ancestor class  
to be overridden: "TLRSObjectReader.Read(var <Formal type>, LongInt)"
lresources.pp(142,15) Error: There is no method in an ancestor class  
to be overridden: "TLRSObjectWriter.Write(const <Formal type>, LongInt)"
lresources.pp(385,1) Fatal: There were 2 errors compiling module,  
stopping
Fatal: Compilation aborted
make[1]: *** [alllclunits.ppu] Error 1
make[1]: Leaving directory `/usr/local/share/lazarus/lcl'
make: *** [lcl] Error 2
----->8-----

However on other platforms 2.1.4 has been running for some time and I  
suspect that Lazarus has gained something the slightly older compiler  
doesn't like.

Lazarus is documented as requiring 2.0.2 minimum. I know that I can't  
build 2.0.2 on Linux i.e. the latest solid version is 2.0.0. What I  
haven't tried yet is reverting to a slightly older version e.g. 2.0.4  
under Solaris using the 2.1.1 binary:

-----8<-----
make ./msg2inc
make[7]: Entering directory `/usr/local/src/fpc/fpcbuild_2.0.4_exp/ 
fpcsrc/compiler'
/usr/local/bin/ppcsparc -Ur -Xs  -n -Fusparc -Fusystems -Fu/usr/local/ 
src/fpc/fpcbuild_2.0.4_exp/fpcsrc/rtl -Fisparc -FE. -FUsparc/units/ 
sparc-solaris -dRELEASE  -dsparc -dGDB -dBROWSERLOG  -FE. utils/ 
msg2inc.pp
Fatal: Can't find unit System
Fatal: Compilation aborted
make[7]: *** [msg2inc] Error 1
----->8-----

Using -vt the problem appears to be that "make all" is trying to use  
system.ppu and/or system.o from the 2.0.4 build directory structure  
rather than the ones that match the 2.1.1 compiler.

I've only had partial success trying to work around this.


However, the really good news is that 2.1.1 on Solaris compiles and  
runs tmt1.pp.


Which takes me back to my original conclusions:

* 2.0.0 appears OK on sparc-linux.

* 2.0.2 is broken in some way on sparc-linux.

* 2.0.4 fails tmt1 on sparc-linux.

* 2.1.4 has known code-generation problems and fails tmt1 on sparc- 
linux.

* Lazarus appears to compile using 2.1.4 on sparc-linux but doesn't  
run reliably.

* 2.1.1 appears OK on sparc-solaris.

* 2.1.1 on sparc-solaris has problems building 2.0.4 and 2.1.4.

* 2.1.1 on sparc-solaris will not compile Lazarus.

* 2.1.1 on sparc-solaris compiles a working tmt1.

My tentative conclusion is that on sparc-solaris the problems are  
almost certainly that I've not worked out how to do things, but on  
sparc-linux some sort of code-generation problem has crept in  
possibly as early as 2.0.2.

Any light that can be thrown on any of this would be very much  
appreciated.

-- 
Mark Morgan Lloyd
markMLl .AT. telemetry.co .DOT. uk

[Opinions above are the author's, not those of his employers or  
colleagues]
_______________________________________________
fpc-devel maillist  -  fpc-devel at lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel



More information about the fpc-pascal mailing list