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.
		
			
				
	
	
		
			96 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			96 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.
 |