[fpc-devel] How hard is it to port FPC to AIX
Peter Popov
ppopov at tamu.edu
Sun Sep 14 19:09:29 CEST 2008
Thanks for the detailed answer. I think the picture now is clear enough to
start working
Peter
On Sat, 13 Sep 2008 17:41:39 -0500, Jonas Maebe
<jonas.maebe at elis.ugent.be> wrote:
> On 13 Sep 2008, at 21:49, Peter Popov wrote:
>
>> I read Felipe's wiki thouroughly and i think I can manage that part. I
>> also see I have to use the Darwin (powerpc) rtl, not the linux
>> (powerpc) rtl. I will start experimenting with it on monday.
>
> You can choose either the Darwin or the Solaris rtl, both are libc-
> based. However, the Solaris one is probably closer since Darwin is based
> on BSD while Solaris on sysv. AIX is also based on sysv (in spite of the
> fact that it uses a different ABI).
>
>> I have one question though, which is not clear to me, as I am not a
>> low-level system guy:
>> To get the whole thing started I have two options:
>> 1. Generate cross-compiler capable of producing AIX compatible binaries
>> and start working on the rtl.
>> 2. Generate a compiler for AIX and and start working on the rtl.
>>
>> Option 1 seems the easier.
>
> I don't understand what you mean by option 2. You always have to start
> with a cross compiler, since before you can have a native compiler you
> need a port of the rtl.
>
>> I don't have mac powerpc machine, so I have to work from linux.
>
> That doesn't really matter.
>
>> Your suggestion is to start with the darwin compiler, right?
>
> The compiler is mostly OS-agnostic. When cross-compiling, you can use
> pretty much anything as a host platform. See Marco's buildfaq for some
> more information about building the compiler and cross-compiling in
> general: http://www.stack.nl/~marcov/buildfaq.pdf
>
>> As far as I looked, AIX uses XCOFF binaries. Can the mac powerpc
>> compiler generate compatible binaries?
>
> The compiler generates assembler code. This assembler code has to be
> passed, in your case, to a cross-assembler which generates AIX XCOFF
> object files, and subsequently to a cross-linker to generate an XCOFF
> binary. The compiler couldn't care less what the object format is, it
> just generates assembler (except if you use an internal object writer,
> but that is optional and not required).
>
> Usually, assemblers for new targets do some small things slightly
> different, and you'll probably have to compensate for that in your
> assembler writer. Most of it can probably be shared with the existing
> assembler writers though (compiler/aggas.pas, compiler/ppcgen/
> agppcgas.pas).
>
>> Is the FPC_DARWIN_JMP_MAIN suggestion solution to this problem?
>
> When the operating systems starts a program, there is usually some setup
> that needs to be done: running init routines, store the pointers to the
> parameters and environment variables in global variables, etc. This code
> usually resides in a file called crt1.o or similar and is distributed
> either with the OS or with the (C) compilers.
>
> You can either create a patched Pascal (or assembler) version of such a
> file (as has been done for Solaris and Linux), or you can use the system
> version of this file and simply take over when it calls 'main' (normally
> to start the 'main' function of a C program). The latter is what is done
> if you use the FPC_DARWIN_JMP_MAIN functionality.
>
>> Option 2 seems complicated: I will have to first generate the compiler
>> and rtl object files for AIX. Next, link the compiler on AIX using
>> AIX's linker. Afterwards, work can begin on the rtl, which seems more
>> complex?
>
> You cannot generate a compiler and rtl object files for AIX before you
> have ported the rtl and the compiler to AIX.
>
>> Either way, I will have to first be able to generate aix compatible
>> object files before starting the actual compiler branch. Unless you
>> advise otherwise I will generate a linux-darwin cross and start
>> experimenting with option 1.
>
> A compiler is always built for a particular target architecture, and
> then it always supports generating code for all OSes on that
> architecture. So if you have an i386 machine, you have to build an
> i386->powerpc (or i386->powerpc64) cross compiler. This compiler will
> (if you don't change anything) support generating assembler code for all
> ppc(64) targets, including linux and darwin(regardless of whether it's
> built on Windows, on Linux or on anything else). When you add support
> for AIX to the compiler sources, it will also support generating
> assembler code for AIX/ppc(64).
>
> See the buildfaq for more details.
>
> ppc and ppc64 are two different targets (so a single compiler cannot
> generate both ppc and ppc64 code at this time), but they share a lot of
> code. You're free to choose which one you want to port (first), as I
> guess that AIX likes most ppc OSes seamlessly supports both 32 and 64
> bit binaries.
>
>
> Jonas
>
> PS: while porting the compiler, you may want to grep the compiler
> sources for systems_darwin and system_powerpc64_darwin, to see whether
> the special cases for those targets also apply to AIX. Also note that
> the Darwin ABI slightly deviates from the standard AIX ABI regarding
> some alignments,
>
> _______________________________________________
> fpc-devel maillist - fpc-devel at lists.freepascal.org
> http://lists.freepascal.org/mailman/listinfo/fpc-devel
--
|***********************************************|
| |
| Peter Popov, |
| |
| 608L Blocker Bldg. |
| Institute for Scientific Computation, |
| Texas A&M University |
| College Station, Texas 77843-3404 |
|-----------------------------------------------|
| Phone: +1 (979) 458-4644, |
| Fax: +1 (979) 845-5827 |
| |
|***********************************************|
More information about the fpc-devel
mailing list