Now fetches argc, argv, env correctly from the host OS.
authordtrg <none@none>
Mon, 23 Apr 2007 23:24:03 +0000 (23:24 +0000)
committerdtrg <none@none>
Mon, 23 Apr 2007 23:24:03 +0000 (23:24 +0000)
plat/linux386/boot.s

index 86ce05b..1fb7cc5 100644 (file)
 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.