[fpc-pascal]GO32V2 EXE architecture...

Marco van de Voort marcov at stack.nl
Tue Jul 17 13:14:26 CEST 2001


> Oh, that's not what I mean exactly...
> 
> That DXEGEN cannot convert .o file to .dxe because it doesn't understands
> these symbols, I want to find way how to remove them (or do anything else)
> so DXEGEN can successfully convert .o file...

I mean do a

as bla.s -o bla.o

or so

And then add bla.o to the DXEGEN commandline. The symbols are added but
empty/directly return.

Their functionality is reasonably unneeded, at least for this initial
testing. (deal with unit initialisation)

Also note that you might get into problems with namemangling. 

Define the entry procedure with

function add(a,b:longint):longint; external '_add'

and then use _add for "symbol" on the dxegen line below.

So something like

DXEGEN add.dxe _add add.o bla.o


(
DXE allows you to dynamically load code and data from a file and execute it.
Limitations:  you cannot do I/O (and some other functions) directly from a
DXE loaded image.  There is a single entry point (subroutine or data block
returned).

There are two parts to DXE - the generator and the loader.  

The DXE generator is a program with the usage:

  C:\> dxegen output.dxe symbol input.o [input2.o ... -lgcc -lc]
 
output.dxe is the name you want to contain your dynamic load code.
symbol is the procedure name (or data structure) you want a pointer to,
remember to add the initial underscore for most symbols.
The input.o is created with GCC from your source.  Additional arguments
on the command line (.o and .a files; or other ld options) are passed to
ld to resolve references to build your code.

The loader only adds around 300 bytes to your image, and the prototype 
is found in <sys/dxe.h>:

  void *_dxe_load(char *filename);

It takes a single argument which is the file on disk containing the dynamic
execution code.  It returns a pointer to the symbol you specified at DXE
generation time.  See the documentation of dxe_load' in the library
docs, for more details ("info libc alpha _dxe_load" from the DOS prompt).
)




More information about the fpc-pascal mailing list