e06b1fa05e
This manual is in the new mdoc(7) format. All existing ack manuals use the old man(7) format. This might be a problem if someone can't display mdoc(7) files. The build system doesn't install the cvmach(6) manual; that might happen later. The current build system installs manuals in two different places, and doesn't install some manuals, so I don't know what to do.
97 lines
2.6 KiB
Groff
97 lines
2.6 KiB
Groff
.Dd December 2, 2016
|
|
.Dt CVMACH 6
|
|
.Os
|
|
.Sh NAME
|
|
.Nm cvmach
|
|
.Nd convert an executable file from ack.out to Mach-o
|
|
.Sh SYNOPSIS
|
|
.Cm ~em/lib/ack/cvmach
|
|
.Fl m Ns Ar number
|
|
.Oo
|
|
.Ar infile
|
|
.Op Ar outfile
|
|
.Oc
|
|
.Sh DESCRIPTION
|
|
The
|
|
.Nm
|
|
utility converts an executable file from
|
|
.Xr ack.out 5
|
|
format to Mach-object format.
|
|
It can produce Mach-o executables for Mac OS X.
|
|
If the
|
|
.Ar infile
|
|
or
|
|
.Ar outfile
|
|
are not given, then
|
|
.Nm
|
|
reads from standard input or writes to standard output.
|
|
.Pp
|
|
The option is required:
|
|
.Bl -tag -width Ds
|
|
.It Fl m Ns Ar number
|
|
Sets the CPU type in the Mach header.
|
|
This must be
|
|
.Fl m Ns Cm 7
|
|
for Intel i386 or
|
|
.Fl m Ns Cm 18
|
|
for PowerPC.
|
|
.Nm
|
|
doesn't know how to make Mach-o files for other CPU types.
|
|
.El
|
|
.Pp
|
|
The input file must have four segments:
|
|
TEXT, ROM, DATA and BSS, in that order.
|
|
.Nm
|
|
converts them into four Mach sections in two Mach segments.
|
|
TEXT and ROM go in the RX segment (Read and eXecute).
|
|
DATA and BSS go in the RW segment (Read and Write).
|
|
.Nm
|
|
sets the page protection so programs can't write the RX segment,
|
|
and can't execute the RW segment.
|
|
The program will begin execution at the beginning of TEXT.
|
|
.Pp
|
|
.Nm
|
|
also converts the symbol table.
|
|
.Sh DIAGNOSTICS
|
|
.Bl -diag
|
|
.It text segment must have base 0x%lx, not 0x%lx
|
|
TEXT must begin immediately after the Mach header and load commands.
|
|
The message gives the correct
|
|
.Ar base .
|
|
Relinking the program with
|
|
.Cm em_led Fl b Ns 0: Ns Ar base
|
|
would fix it.
|
|
.It the %s segment must follow the %s segment.
|
|
TEXT and ROM must be continuous in memory, because
|
|
.Nm
|
|
maps them in the same Mach segment.
|
|
Likewise, DATA and BSS must be contiguous.
|
|
There may be a small gap between TEXT and ROM, or between DATA and
|
|
BSS, only if the gap is necessary to align ROM or BSS.
|
|
.It the data and rom segments are too close.
|
|
DATA and ROM must not share a page in memory, because
|
|
.Nm
|
|
maps them in different Mach segments, with different page protections.
|
|
The page size for i386 and PowerPC is 4096 or 0x1000 bytes.
|
|
For example, if ROM ends at address 0x2bed,
|
|
then DATA may not begin at 0x2bf0, because
|
|
.Nm
|
|
can't put the page from 0x2000 to 0x2fff in both Mach segments.
|
|
Relinking the program with
|
|
.Cm em_led Fl a Ns 2:4096
|
|
would fix it.
|
|
.It the bss space contains initialized data.
|
|
BSS must not contain initialized data, because
|
|
.Nm
|
|
converts it to a zero-fill section.
|
|
.El
|
|
.Sh CAVEATS
|
|
Mac OS X 10.4 for PowerPC does not protect pages against execution.
|
|
All mapped pages are executable, whether or not the execute bit is set
|
|
in the page protection.
|
|
.Nm
|
|
can't prevent the execution of the RW segment.
|
|
.Sh BUGS
|
|
The symbol conversion preserves the name and value of each symbol, but
|
|
may lose other information, such as the symbol type.
|