On 23 November 2012 18:00, Max Leske <[email protected]> wrote:
> Ok, thanks Igor.
>
> So it seems the only remaining option (apart from providing a C library) it 
> to use Assembly. Assembly is not my territory at all but here's how I think 
> it could work:
>
>         …
>         emitCall:  [:gen | | fork dup2 execv |
>                 fork := NativeBoost forCurrentPlatform 
> getGlobalSymbolPointer: 'fork'.
>                 dup2 := NativeBoost forCurrentPlatform 
> getGlobalSymbolPointer: 'dup2'.
>                 execv := NativeBoost forCurrentPlatform getGlobalSymbolPointer
>                 gen asm mov: fork asUImm32 to: gen asm EAX.
>                 gen asm call: gen asm EAX.
>                 "somehow get the fork return value and test for 0.
>                 only execute the following lines if pid = 0"
>                 gen asm mov: dup2 asUImm32 to: gen asm EAX.
>                 gen asm call: gen asm EAX.
>                 gen asm mov: execv asUImm32 to: gen asm EAX.
>                 gen call: gen asm EAX.
>                 ]
>
> As you can see, I have absolutely no clue what I'm doing :) (just a good 
> copycat). I figure that everything from fork() to exec() needs to be in the 
> same Assembly sequence to ensure that the child process doesn't try to 
> execute VM code (multiple #emitCall:'s probably wouldn't work).
>
> I think that if you could help me fill in the code for where I simply used a 
> comment, I could come up with the rest (writing function specs etc.). I'l try 
> at least.
>

yes i can help. where i can get the code?
btw, your code is actually very close to how it should be done.

> Cheers,
> Max
>



-- 
Best regards,
Igor Stasenko.

Reply via email to