(original) (raw)
On Mon, Jun 8, 2009 at 07:08, Michael McMahon <Michael.McMahon@sun.com> wrote:
You're right.� I removed #include of syscall.h.
I think I picked it up from some man page somewhere.
�
Good question.� The man page is silent on the matter.
I ensure that the stack pointer is as aligned as the return from malloc(),
which is supposed to be suitable for any C object.� I suspect that if there are
more stringent requirements, then the kernel itself will adjust the alignment.
Let's keep the current code unless we know of a reason not to.
�
I think my comment for that function explains it fairly well.
/\*\*
�\* Exec FILE as a traditional Bourne shell script (i.e. one without #!).
�\* If we could do it over again, we would probably not support such an ancient
�\* misfeature, but compatibility wins over sanity.� The original support for
�\* this was imported accidentally from execvp().
�\*/
The tests I added also pass on the older implementation,
so execve\_as\_traditional\_shell\_script() prevents a regression.
We always supported "traditional shell scripts" - we just didn't know it.
---
I updated the public version of the patch at:
http://cr.openjdk.java.net/\~martin/clone-exec
Martin
�
That's fine Martin. We can do it that way.
Do you really need to #include <sys/syscall.h>?
As far as I can see clone() only requires <sched.h>
You're right.� I removed #include of syscall.h.
I think I picked it up from some man page somewhere.
�
When you allocate the clone stack for the child
the memory is byte aligned. Is this ok for Linux or should stacks
be aligned on larger boundaries?
Good question.� The man page is silent on the matter.
I ensure that the stack pointer is as aligned as the return from malloc(),
which is supposed to be suitable for any C object.� I suspect that if there are
more stringent requirements, then the kernel itself will adjust the alignment.
Let's keep the current code unless we know of a reason not to.
�
Also, I don't follow why we need the �execve\_as\_traditional\_shell\_script()
function. Can you explain the reason for that?
I think my comment for that function explains it fairly well.
/\*\*
�\* Exec FILE as a traditional Bourne shell script (i.e. one without #!).
�\* If we could do it over again, we would probably not support such an ancient
�\* misfeature, but compatibility wins over sanity.� The original support for
�\* this was imported accidentally from execvp().
�\*/
The tests I added also pass on the older implementation,
so execve\_as\_traditional\_shell\_script() prevents a regression.
We always supported "traditional shell scripts" - we just didn't know it.
---
I updated the public version of the patch at:
http://cr.openjdk.java.net/\~martin/clone-exec
Martin
�
Thanks,
Michael.
Martin Buchholz wrote:
Michael,
I think the best way to handle the coordination is in two steps.
I'd like to get my Linux-clone changes in first (you should review,
I will commit)
and then we switch hats and I will review your Solaris changes.
It seems best to do this in two steps: to better place blame when
it breaks (this is very tricky stuff to get right).
If you agree, please review my posted changes.
Aside: Instead of griping about the missing execvpe,
I filed a bug against glibc, and was surprised to find
that Ulrich Drepper had implemented it a couple of days later.
It will probably be in glibc-2.11\. �Perhaps in 5 years we can
use it ourselves...). �Thanks, Uli!
Martin
On Tue, Jun 2, 2009 at 07:29, Michael McMahon <Michael.McMahon@sun.com Michael.McMahon@sun.com>> wrote:
� �Martin,
� �I had done something similar with clone & exec for Linux, but
� �hadn't got round to testing it.
� �So, it seems reasonable to take yours. Do you want to send me your
� �updated versions of
� �process\_md.c and the test? I can take care of the merge with the
� �Solaris code.