[fpc-devel] elf load order

Sven Barth pascaldragon at googlemail.com
Fri Mar 16 22:48:42 CET 2012

On 16.03.2012 21:37, Andrew Haines wrote:
> On 03/16/12 15:27, Sven Barth wrote:
>> On 16.03.2012 19:16, Andrew Haines wrote:
>>> Hi,
>>> I'm trying to figure out the order of events when an elf file is
>>> executed.
>>> I think that the _start symbol just points to the start of the .text
>>> section and crt1 is first followed by crti followed by crtbegin. After
>>> that I'm not sure.
>> Take a look at e.g. $fpcdir/rtl/linux/i386/prt0.as. This contains the
>> startup (and shutdown) code for Free Pascal executables on linux-i386
>> that don't use libc. You'll see the call to PASCALMAIN there as well as
>> the halt code after it (which is executed once PASCALMAIN returns).
> Thanks that is helpful. PASCALMAIN is the begin end block at the end of
> the system unit? Or is it the begin end block in the program.pas file?

Yes, PASCALMAIN is the "begin ... end" of the program file (or the 
library file). It's first call before any of your code is run is to 
initialize all other units (calling the initialization sections of all 
other units with the system one being the first).

> libxenon, which I am linking to, uses newlib.

You can also take a look at cprt0.as which is the same for applications 
using the C-library. I don't know though where the startup files are 
located on a Xenon system, because then you could check how a C 
application is started and adjust that for FPC.


More information about the fpc-devel mailing list