[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