You will usually use `gforth-makeimage'. If you want to create an
image file that contains everything you would load by invoking
Gforth with gforth options
, you simply say
gforth-makeimage file options
E.g., if you want to create an image `asm.fi' that has the file `asm.fs' loaded in addition to the usual stuff, you could do it like this:
gforth-makeimage asm.fi asm.fs
`gforth-makeimage' works like this: It produces two non-relocatable images for different addresses and then compares them. Its output reflects this: first you see the output (if any) of the two Gforth invocations that produce the nonrelocatable image files, then you see the output of the comparing program: It displays the offset used for data addresses and the offset used for code addresses; moreover, for each cell that cannot be represented correctly in the image files, it displays a line like the following one:
78DC BFFFFA50 BFFFFA40
This means that at offset $78dc from forthstart
, one input image
contains $bffffa50, and the other contains $bffffa40. Since these cells
cannot be represented correctly in the output image, you should examine
these places in the dictionary and verify that these cells are dead
(i.e., not read before they are written).
\cindex savesystem
during `gforth-makeimage'
\cindex bye
during `gforth-makeimage'
\cindex doubly indirect threaded code
\cindex environment variable GFORTHD
\cindex GFORTHD
environment variable
\cindex gforth-ditc
There are a few wrinkles: After processing the passed options, the
words savesystem
and bye
must be visible. A special doubly
indirect threaded version of the `gforth' executable is used for
creating the nonrelocatable images; you can pass the exact filename of
this executable through the environment variable GFORTHD
(default: `gforth-ditc'); if you pass a version that is not doubly
indirect threaded, you will not get a fully relocatable image, but a
data-relocatable image (because there is no code address offset).