Write a manual page for cvmach(6).
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.
This commit is contained in:
		
							parent
							
								
									8ef7c31089
								
							
						
					
					
						commit
						e06b1fa05e
					
				
					 1 changed files with 96 additions and 0 deletions
				
			
		
							
								
								
									
										96
									
								
								plat/osx/cvmach/cvmach.6
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										96
									
								
								plat/osx/cvmach/cvmach.6
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,96 @@ | ||||||
|  | .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. | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue