[fpc-pascal] using a unit from an old version of fpc
Tomas Hajny
XHajT03 at hajny.biz
Sun Oct 30 23:11:31 CET 2011
On 30 Oct 11, at 22:12, John Lee wrote:
> What is best way to do this - I have a unit from fpc 2.2 that I don't have
> the source for, that I want to use with code from a later version eg 2.4,
> 2.5.1 or 2.6. Can I access it via the use? Or just link to it?
Directly including it in the uses clause is not possible. Linking it
might be possible with certain limitations, but it is fairly
difficult and implies some amount of reverse engineering. There are
several issues and gotchas:
1) I assume that you refer to a unit written in procedural language,
not classes (plain linking would not be enough for the latter).
2) If you don't have even the interface part, you may try reproducing
it using objdump and/or ppudump (you need to use ppudump from the FPC
version used for compiling the .ppu file), but the type information
may be difficult to retrieve if your unit was not compiled with debug
information.
3) The real problem stems from the fact that your compiled unit used
the RTL from the respective FPC version and the current version
exports mostly the same symbols but with sometimes slightly different
behaviour. It might work if there were no important differences in
the RTL parts used by that unit, but that is far from being
guaranteed. If that does not work, it may be still feasible to
disassemble the compiled unit and either modify it directly in
assembly for proper working with the current RTL or including (some
parts of) the RTL twice (once using the object files from the
original FPC version and once for the current version) but all of
that is rather difficult and implies very good understanding of low-
level stuff (like what can be combined and what not).
Tomas
More information about the fpc-pascal
mailing list