Browse Source

Now fetches argc, argv, env correctly from the host OS.

dtrg 17 years ago
parent
commit
9731e1e349
1 changed files with 26 additions and 1 deletions
  1. 26 1
      plat/linux386/boot.s

+ 26 - 1
plat/linux386/boot.s

@@ -15,7 +15,32 @@
 begtext:
 	! This code is placed at the beginning of the ELF 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.