Source-Changes-D archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: CVS commit: src/sys/arch/i386/i386



On Tue, May 05, 2009 at 11:44:43PM +0200, Manuel Bouyer wrote:

> On Tue, May 05, 2009 at 09:20:02PM +0000, Andrew Doran wrote:
> > > but the test binary from the PR segfaults:
> > > truc# kdump |less                                                         
> > >      
> > > 34      0 ktrace   EMUL  "netbsd"
> > > 34      0 ktrace   RET   ktrace 0
> > > 34      0 ktrace   CALL  execve(0xbf7ffc02,0xbf7feb3c,0xbf7feb44)
> > > 34      0 ktrace   NAMI  "./architextIndex"
> > > 34      0 architextIndex EMUL  "netbsd"
> > > 34      0 architextIndex RET   syscall JUSTRETURN
> > > 34      0 architextIndex PSIG  SIGSEGV SIG_DFL: code=SEGV_ACCERR, 
> > > addr=0xacb 94, trap=4)
> > > 34      0 architextIndex NAMI  "architextIndex.core"
> > > 
> > > On Xen CLI(%eax) expands to:
> > >    movl    CPUVAR(VCPU),%eax ;
> > >    movb $1,EVTCHN_UPCALL_MASK(%eax)
> > 
> > At this point the segment registers won't be set up. And %eax contains the
> > syscall number.
> >  
> > > I guess this is a problem. Is there a way to account for this somewhere ?
> > 
> > It is difficult to avoid the LDT/segreg problems without having interrupts
> > disabled instantly on entry.
> > 
> > Maybe we could add really ugly logic to compensate for it in trap() since
> > oosyscall is the only place where we enter with interupts on (I don't know
> > how interrupts/traps are set up on xen currently).
> > 
> > xen isn't as vulnerable to the LDT/segreg problem as native x86 because
> > it's not MP and doesn't do kernel preemption. For the time being I guess
> > it would suffice to #ifdef the 'cli'.
> 
> That's not enough to make the binary run: even with the cli commented
> out the test binary segfaults.
> There may be something else wrong, I'll try to look further.
> 
> Any way to use gdb to see what it's doing ? The NetBSD/i386 doesn't want
> to load this executable ...

Can you ktrace it? At least we then can see if it's hitting the syscall
path.


Home | Main Index | Thread Index | Old Index