Because I'm lazy, I didn't make another copy of _hol0.s; I am building plat/linux/libsys/_hol0.s for OS X.
		
			
				
	
	
		
			67 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
! plat/osx386/boot.s
 | 
						|
 | 
						|
! Declare segments (the order is important).
 | 
						|
 | 
						|
.sect .text
 | 
						|
.sect .rom
 | 
						|
.sect .data
 | 
						|
.sect .bss
 | 
						|
 | 
						|
.sect .text
 | 
						|
 | 
						|
begtext:
 | 
						|
	! This code is placed at the entry point of the Mach-o
 | 
						|
	! executable and is the first thing that runs.
 | 
						|
	!
 | 
						|
	! On entry, the stack looks like this:
 | 
						|
	!
 | 
						|
	! sp+..            NULL
 | 
						|
	! sp+8+(4*argc)   env (X quads)
 | 
						|
	! sp+4+(4*argc)   NULL
 | 
						|
	! sp+4            argv (argc quads)
 | 
						|
	! sp              argc
 | 
						|
	!
 | 
						|
	! The ACK actually expects:
 | 
						|
	!
 | 
						|
	! sp+8            argc
 | 
						|
	! sp+4            argv
 | 
						|
	! sp              env
 | 
						|
 | 
						|
	mov eax, (esp)    ! eax = argc
 | 
						|
	lea ebx, 4(esp)   ! ebx = argv
 | 
						|
	lea ecx, (esp)(eax*4)
 | 
						|
	add ecx, 12       ! environ
 | 
						|
 | 
						|
	push ecx         ! environ
 | 
						|
	push ebx         ! argc
 | 
						|
	push eax         ! argv
 | 
						|
	push eax         ! dummy, representing the return argument
 | 
						|
	xor ebp, ebp
 | 
						|
 | 
						|
	jmp __m_a_i_n
 | 
						|
 | 
						|
	! This provides an emergency exit routine used by EM.
 | 
						|
 | 
						|
.define EXIT
 | 
						|
.extern EXIT
 | 
						|
EXIT:
 | 
						|
	push 1
 | 
						|
	jmp __exit
 | 
						|
 | 
						|
.sect .rom
 | 
						|
begrom:
 | 
						|
 | 
						|
.sect .data
 | 
						|
begdata:
 | 
						|
 | 
						|
! Some magic data. All EM systems need these.
 | 
						|
 | 
						|
.sect .bss
 | 
						|
begbss:
 | 
						|
 | 
						|
.define _errno
 | 
						|
.comm _errno, 4              ! Posix errno storage
 | 
						|
 | 
						|
.define .trppc, .ignmask
 | 
						|
.comm .trppc, 4              ! ptr to user trap handler
 | 
						|
.comm .ignmask, 4            ! user trap ignore mask
 |