<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii">
<META NAME="Generator" CONTENT="MS Exchange Server version 5.5.2653.12">
<TITLE>RE: [fpc-pascal]GO32V2 EXE architecture...</TITLE>
</HEAD>
<BODY>

<P><FONT SIZE=2>Ah okies! Going to give it a try, I will inform you :)</FONT>
</P>

<P><FONT SIZE=2>-----Original Message-----</FONT>
<BR><FONT SIZE=2>From: marcov@stack.nl [<A HREF="mailto:marcov@stack.nl">mailto:marcov@stack.nl</A>] </FONT>
<BR><FONT SIZE=2>Sent: Tuesday, July 17, 2001 1:14 PM</FONT>
<BR><FONT SIZE=2>To: fpc-pascal@deadlock.et.tudelft.nl</FONT>
<BR><FONT SIZE=2>Subject: Re: [fpc-pascal]GO32V2 EXE architecture...</FONT>
</P>
<BR>

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

<P><FONT SIZE=2>I mean do a</FONT>
</P>

<P><FONT SIZE=2>as bla.s -o bla.o</FONT>
</P>

<P><FONT SIZE=2>or so</FONT>
</P>

<P><FONT SIZE=2>And then add bla.o to the DXEGEN commandline. The symbols are added but empty/directly return.</FONT>
</P>

<P><FONT SIZE=2>Their functionality is reasonably unneeded, at least for this initial testing. (deal with unit initialisation)</FONT>
</P>

<P><FONT SIZE=2>Also note that you might get into problems with namemangling. </FONT>
</P>

<P><FONT SIZE=2>Define the entry procedure with</FONT>
</P>

<P><FONT SIZE=2>function add(a,b:longint):longint; external '_add'</FONT>
</P>

<P><FONT SIZE=2>and then use _add for "symbol" on the dxegen line below.</FONT>
</P>

<P><FONT SIZE=2>So something like</FONT>
</P>

<P><FONT SIZE=2>DXEGEN add.dxe _add add.o bla.o</FONT>
</P>
<BR>

<P><FONT SIZE=2>(</FONT>
<BR><FONT SIZE=2>DXE allows you to dynamically load code and data from a file and execute it.</FONT>
<BR><FONT SIZE=2>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).</FONT></P>

<P><FONT SIZE=2>There are two parts to DXE - the generator and the loader.  </FONT>
</P>

<P><FONT SIZE=2>The DXE generator is a program with the usage:</FONT>
</P>

<P><FONT SIZE=2>  C:\> dxegen output.dxe symbol input.o [input2.o ... -lgcc -lc]</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>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.</FONT></P>

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

<P><FONT SIZE=2>  void *_dxe_load(char *filename);</FONT>
</P>

<P><FONT SIZE=2>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).</FONT></P>

<P><FONT SIZE=2>)</FONT>
</P>

<P><FONT SIZE=2>_______________________________________________</FONT>
<BR><FONT SIZE=2>fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org <A HREF="http://lists.freepascal.org/mailman/listinfo/fpc-pascal" TARGET="_blank">http://lists.freepascal.org/mailman/listinfo/fpc-pascal</A></FONT>
</P>

</BODY>
</HTML>