This is the mail archive of the ecos-devel@sourceware.org mailing list for the eCos project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

RE: RedBoot built with gcc 3.4.4


I'd be interested in the answer to this question also - although our
situation is different:
- We have seen the same crash you observed.
However
- It happens *very* rarely.
  Over a period of 12 months I've seen it 3 times.
  Thus in >99.9(9)% of bootups it works fine.
  However - once it gets into this state - chances are it can be
repro'd.
- We have no idea how to reproduce the problem.
- We use a pretty old version of ecos (1.3 based).
- We use gcc 2.95.3
- Our CPU is Xscale

Looking at the differences (eg. reproducibility) I think that the root
cause of our problems is likely to be different.  Nevertheless I'd be
interested in the solution to your problem.  Maybe it applies to us
also.
Just looking at our symptoms I'd think there's some uninitialized
variable somewhere in early ecos startup.  And most of the times it
contains a value not causing trouble.  Only occasionally ... .


Regards,
  Kurt Siedenburg


-----Original Message-----
From: ecos-devel-owner@ecos.sourceware.org
[mailto:ecos-devel-owner@ecos.sourceware.org] On Behalf Of Guennadi
Liakhovetski
Sent: Friday, February 09, 2007 1:53 AM
To: Gary Thomas
Cc: ecos-devel@ecos.sourceware.org
Subject: Re: RedBoot built with gcc 3.4.4

On Fri, 9 Feb 2007, Guennadi Liakhovetski wrote:

> Looking further

Auch... I came as far as to the loop

/*----------------------------------------------------------------------
--*/
/* C++ support - run initial constructors
*/

#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG
cyg_bool cyg_hal_stop_constructors;
#endif

typedef void (*pfunc) (void);
extern pfunc __CTOR_LIST__[];
extern pfunc __CTOR_END__[];

void
cyg_hal_invoke_constructors (void)
{
#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG
     static pfunc *p = &__CTOR_END__[-1];

     cyg_hal_stop_constructors = 0;
     for (; p >= __CTOR_LIST__; p--) {
 	    diag_printf("Invoking constructor @ 0x%08x\n", *p);
         (*p) ();
         if (cyg_hal_stop_constructors) {
             p--;
             break;
         }
     }
#else
     pfunc *p;

     for (p = &__CTOR_END__[-1]; p >= __CTOR_LIST__; p--) {
 	    diag_printf("Invoking constructor @ 0x%08x\n", *p);
         (*p) ();
     }
#endif

And put the diag_printf() there... And it prints 1 address and that's
it... So, do I understand it right that here it is supposed to call C++
constructors?... Oh, no... and already in the first one it crashes...
So, some C++ internal calling conventions have changed. I am pretty
helpless in what concerns C++ ABI... Anyone?

Thanks
Guennadi
---------------------------------
Guennadi Liakhovetski, Ph.D.
DSA Daten- und Systemtechnik GmbH
Pascalstr. 28
D-52076 Aachen
Germany


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]