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