|
Message
From: "Robert Cragie" <rcc@j...>
Date: Thu, 11 Sep 2003 15:05:09 +0100
Subject: RE: [openrisc] SIGBUS when using eCos diag_printf
That was the first thing I tried. I have seen problems in the past with
optimisations turned on but normally only in debugging, with single-stepping
getting confused.
I would guess that there may be some issue with the or32 port to GCC 3.2.3
which needs to be resolved.
Robert Cragie, Design Engineer
_______________________________________________________________
Jennic Ltd, Furnival Street, Sheffield, S1 4QT, UK
http://www.jennic.com Tel: +44 (0) 114 281 2655
_______________________________________________________________
> -----Original Message-----
> From: owner-openrisc@o...
> [mailto:owner-openrisc@o...]On Behalf Of Damjan Lampret
> Sent: 11 September 2003 14:19
> To: openrisc@o...
> Subject: Re: [openrisc] SIGBUS when using eCos diag_printf
>
>
> In another project there was also a strange thing going on and it
> turned out
> to be the stack overrun. Setting the stack to be bigger immediately solved
> the problem. I don't know if this is the same in your case.
>
> regards,
> Damjan
>
> ----- Original Message -----
> From: <rcc@j...>
> To: <openrisc@o...>
> Sent: Thursday, September 11, 2003 9:50 AM
> Subject: Re: [openrisc] SIGBUS when using eCos diag_printf
>
>
> > Hi Marko,
> >
> > This occurs when using -O2 optimisation flag, but doesn't occur if I
> > don't specify optimisation (i.e. no -O flag at all), so I have
> solved the
> > immediate problem but it does make the code considerably larger :-(
> >
> > Initial inspection seems to suggest that either the stack is getting
> > corrupted or register misuse is occurring in the optimised code, as the
> > exception occurs shortly after returning from the modulo call and
> > appears to be due to dereferencing a bad address in a register:
> >
> > 820c: 04 00 0a 16 l.jal aa64 <___umoddi3>
> > 8210: d7 e2 97 a4 l.sw 0xffffffa4(r2),r18
> > 8214: 84 d2 00 04 l.lwz r6,0x4(r18)
> >
> > In the above, r18 has a bad address in. The unoptimised version looks
> > like this, i.e. no instruction in the delay slot.
> >
> > 1410: 04 00 25 95 l.jal aa64 <___umoddi3>
> > 1414: 15 00 00 00 l.nop 0x0
> > 1418: 84 ab 00 00 l.lwz r5,0x0(r11)
> >
> > It would be nice to get to the bottom of why this occurs; if I have some
> > spare time (I wish) I will try to unravel it a bit more.
> >
> > Robert
> >
> > ----- Original Message -----
> > From: Marko Mlinar <markom@o... >
> > To: openrisc@o...
> > Date: Thu, 11 Sep 2003 08:09:19 +0200
> > Subject: Re: [openrisc] SIGBUS when using eCos diag_printf
> >
> > >
> > >
> > > Robert,
> > >
> > > my guess would be that pointers for string decoding in libc are not
> > > set-up
> > > correctly or get messed-up. Usually libc libraries detect whether
> > > your string
> > > has something to replace e.g. % characters, also usually it has
> > > some last
> > > used combination cached. If there is something to replace it
> > > allocates new
> > > string or uses some static (more often) space, where it works. I am
> > > not
> > > familiar with library you are using, so I unfortunately cannot be
> > > more
> > > specific.
> > >
> > > hope it helps anyway,
> > >
> > > Marko
> > >
> > > On Wednesday 10 September 2003 19:19, Robert Cragie wrote:
> > > > This is a bit of a long shot posting here, but I was wondering
> > > if anyone
> > > > else has experienced this problem. I am getting a SIGBUS (bus
> > > error)
> > > > exception when trying to call the printf supplied with eCos.
> > > This is
> > > > generic code and works fine on all other eCos platforms, so
> > > the problem
> > > > must be something to do with the OpenRISC environment.
> > > >
> > > > If I do:
> > > >
> > > > diag_printf("Just a string\n");
> > > >
> > > > it seems to work OK.
> > > >
> > > > However, if I do:
> > > >
> > > > diag_printf("Print an integer %d\n", integer);
> > > >
> > > > it bombs out of GDB with something like this:
> > > >
> > > > Program received signal SIGBUS, Bus error.
> > > > 0x00007f9c in _cvt(unsigned long long, char*, long, char*)
> > > (val=1987,
> > > > buf=0xcc0c "", radix=10, digits=0x1116c "0123456789")
> > > > at
> > > /home/rcc/ecos-sr/ecos/packages/infra/current/src/diag.cxx:273
> > > > 273 *cp++ = digits[val % radix];
> > > > Current language: auto; currently c++
> > > >
> > > > I am using GDB 5.3 and GCC 3.2.3 from the OpenCores CVS
> > > server.
> > > >
> > > > Anyone seen this, or any ideas what might be going on? My
> > > feeling is it's
> > > > something to do with the 'val % radix' expression - 'val'
> > > being unsigned
> > > > long long etc and the associated math library. I will continue
> > > to
> > > > investigate further and see if I can spot anything odd.
> > > >
> > > > Robert Cragie, Design Engineer
> > > >
> > >
> > _____________________________________________________________
> > __
> > > > Jennic Ltd, Furnival Street, Sheffield, S1 4QT, UK
> > > > http://www.jennic.com Tel: +44 (0) 114 281 2655
> > > >
> > >
> > _____________________________________________________________
> > __
> > >
> >
> >
>
>
>
|
 |