Am Samstag, 28. Oktober 2006 14:54 schrieb Niklaus Giger:
> Am Freitag, 27. Oktober 2006 18:38 schrieb Philippe Gerum:
> > On Wed, 2006-10-25 at 23:46 +0200, Niklaus Giger wrote:
> > > Hi
> > >
> > > While trying to make a small demo app for Xenomai's registry I stumbled
> > > about the following bug of the vxWorks skin.
> > >
> > > taskSuspend provokes (sometimes) a switch to the secondary mode, e.g.
> > > the
> > >
> > > output of the attached demo gives:
> > > >  reg_demo &
> > > > ~ $ Xenomai: Switching ConsumerTask to secondary mode after exception
> > > > #1025
> >
> > This is the same issue that you raised back then, and that we did not
> > fix yet:
> > https://mail.gna.org/public/xenomai-core/2006-09/msg00177.html
> >
> > #1025 looks like being an ISI exception due to some unmapped memory
> > being referred to. You mentioned CONFIG_XENO_OPT_DEBUG as possibly being
> > part of the problem/solution; could you check whether this error still
> > occurs when this option is disabled in the nucleus?
>
> I recompiled the kernel with CONFIG_XENO_OPT_DEBUG disabled and the error
> went away.
Actually I think the problem did not go away, as I did see that 
in /proc/xenomai/faults the following error is incremented when I call the 
attache simple program.
TRAP         CPU0
  0:            5    (Data or instruction access)
(Btw which exception is it attached on a PPC405 system?)

Here is the stack trace of the simplified example attached as seen by the BDI 
with a hardware breakpoint at 0x300
#0  0x00000300 in ?? ()
No symbol table info available.
#1  0x100b8c48 in ?? ()
No symbol table info available.
#2  0x100b8c48 in ?? ()
No symbol table info available.
Previous frame inner to this frame (corrupt stack?)
(gdb)                                     

Setting a breakpoint at xnpod_fault_handler and a full backtrace gives me 
(gdb) bt full
#0  xnpod_fault_handler (fltinfo=0xc1839e18) 
at 
/mnt/data.ng/hcu/kernel/ppc/linux-2.6.14/include/asm-generic/xenomai/system.h:200
        thread = (xnthread_t *) 0xc0214f40
#1  0xc0048e90 in xnpod_trap_fault (fltinfo=0xc1839e18) 
at /mnt/data.ng/hcu/kernel/ppc/linux-2.6.14/kernel/xenomai/nucleus/pod.c:2907
No locals.
#2  0xc00438f4 in xnarch_trap_fault (event=3246628376, domid=1480937039, 
data=0xc1839f50) at include2/asm/xenomai/bits/init.h:46
        fltinfo = {exception = 0, regs = 0xc1839f50}
#3  0xc011ffb8 in exception_event (event=3221520296, ipd=0x58454e4f, 
data=0xc1839f50)
    at /mnt/data.ng/hcu/kernel/ppc/linux-2.6.14/arch/ppc/xenomai/hal.c:385
No locals.
#4  0xc003fecc in __ipipe_dispatch_event (event=0, data=0xc1839f50) 
at /mnt/data.ng/hcu/kernel/ppc/linux-2.6.14/kernel/ipipe/core.c:668
        start_domain = (struct ipipe_domain *) 0xc0214f40
        this_domain = (struct ipipe_domain *) 0xc0214f40
        evhand = (ipipe_event_handler_t) 0xc0048e90 <xnpod_trap_fault+100>
        pos = (struct list_head *) 0xc0214f40
        npos = (struct list_head *) 0xc01c6540
        flags = 167984
        propagate = 1
#5  0xc000b02c in do_page_fault (regs=0xc1839f50, address=266719224, 
error_code=0)
    at /mnt/data.ng/hcu/kernel/ppc/linux-2.6.14/arch/ppc/mm/fault.c:119
        vma = (struct vm_area_struct *) 0xff86120
        mm = (struct mm_struct *) 0xc0200260
        info = {si_signo = 1, si_errno = -1071644672, si_code = -1071579136, 
_sifields = {_pad = {0, -1048338784, -1048338608,
      -1071554848, -1070595192, -1048338768, -1073423884, -1048338608, 
-1070595192, -1048338752, -1073422700, 
0, 1, -1048338704,
      -1073418440, -1071710208, 14, 1, -1071733764, -1071710208, -1071880896, 
167984, 0, 16384, -1071880896, -1048338640, -1073479988,
      0, 0}, _kill = {_pid = 0, _uid = 3246628512}, _timer = {_tid = 0, 
_overrun = -1048338784,
      _pad = 
0xc1839e94 
"Á\203\237PÀ!^àÀ0\003\210Á\203\236°À\004ÙôÁ\203\237PÀ0\003\210Á\203\236ÀÀ\004Þ\224",
 
_sigval = {
        sival_int = -1048338608, sival_ptr = 0xc1839f50}, _sys_private 
= -1071554848}, _rt = {_pid = 0, _uid = 3246628512, _sigval = {
        sival_int = -1048338608, sival_ptr = 0xc1839f50}}, _sigchld = {_pid = 
0, _uid = 3246628512, _status = -1048338608,
      _utime = -1071554848, _stime = -1070595192}, _sigfault = {_addr = 0x0}, 
_sigpoll = {_band = 0, _fd = -1048338784}}}
        code = 196609
        is_write = 0
        __func__ = "do_page_fault"
#6  0xc0003258 in handle_page_fault ()
No locals.
(gdb)   

But I think it has something to do with my toolchain/compiler or my root file 
system setup. I just found out, that compiling it with the same gcc 3.4 
compiler for my PowerBook and linking it statically the error got away.

I think I really have to reactivate my old Walnut board to have common 
platform to test with Wolfgang Grandegger.
             
Best regards
           
-- 
Niklaus Giger
/*
 * Copyright (C) 2006 Niklaus Giger <[EMAIL PROTECTED]>.
 *
 * VxWorks is a registered trademark of Wind River Systems, Inc.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 2 of the
 * License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 */

#include <vxworks/vxworks.h>

#define ROOT_TASK_PRI        100
#define ROOT_STACK_SIZE      32*1024

int root_thread_init(void);
void root_thread_exit(void);

#if !defined(__KERNEL__) && !defined(__XENO_SIM__)

#include <sys/mman.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>

#define MODULE_LICENSE(x)

#define xnprintf printf

int main (int argc, char *argv[])
{
    int tid;
    mlockall(MCL_CURRENT|MCL_FUTURE);

    tid = taskSpawn("RootTask",
		    ROOT_TASK_PRI,
		    0,
		    ROOT_STACK_SIZE,
		    (FUNCPTR)&root_thread_init,
		    0,0,0,0,0,0,0,0,0,0);
    if (tid)
	pause();

    return 0;
}

#endif /* Native, user-space execution */

MODULE_LICENSE("GPL");

int root_thread_init (void)
{
    printf("\nroot_thread_init 3\n");
    exit(0);
    return 0;
}
_______________________________________________
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core

Reply via email to