Linuxulator: Unbreak Mozilla, Firefox and RealPlayer
John Baldwin
jhb at freebsd.org
Fri Aug 25 14:48:33 UTC 2006
On Friday 25 August 2006 04:47, Divacky Roman wrote:
> On Fri, Aug 25, 2006 at 11:12:10AM +0800, Intron is my alias on the Internet wrote:
> > Debugging is somewhat MUCH MORE DIFFICULT than rewriting.
> >
> > Here is the minimum patch that can only unbreak Mozilla 1.7.12 (GTK 1),
> > Firefox 1.0.7 and RealPlayer 10.0.7.785 (playing video)
> > (sysctl compat.linux.osrelease=2.6.16).
> >
> > It doesn't mean problems of clone(2) have been fixed. Actually, clone(2),
> > set_thread_area(2) and get_thread_area(2) are mis-interpreted.
> >
> > Adobe Reader 7.0.8 hasn't been completely unbroken yet. Problems around
> > it seem to be more complicated.
> >
> > My patch (against /sys/i386/linux/linux_machdep.c of CVS revision 1.53):
> >
> > http://ftp.intron.ac/tmp/linux_machdep.c.1.53.diff
>
> + p2->p_pptr = td->td_proc->p_pptr;
>
> I already did this but differently:
>
> if (args->flags & (CLONE_PARENT|CLONE_THREAD)) {
> struct linux_getppid_args gpa;
> struct proc *pp;
>
> (void) linux_getppid(td, &gpa);
> pp = pfind(td->td_retval[0]);
> if (pp == NULL) {
> printf("shit\n");
> return 0;
> }
> PROC_LOCK(p2);
> p2->p_pptr = pp;
> PROC_UNLOCK(p2);
> PROC_UNLOCK(pp);
> }
>
> also, linux also sets pgrp with CLONE_THREAD.
Umm, if you want to reparent a proc you should use the proc_reparent()
function instead of just hacking on p_pptr. You also need to hold
the proctree_lock when modifying p_pptr anyway.
--
John Baldwin
More information about the freebsd-emulation
mailing list