Re: gcc optimization return value handling

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

 



Originally I had:

if( menu_descend() )
or 
if( menu_descend() != 0 )

I added ret as I found that the problem lies here.
Or, that is what I think. Maybe the is some other error around.
The stack seems to be ok btw.
The problem is not the wrong interpretation of the return value
but there gets something corrupted when not using volatile.
Don't understand the setjmp thing, but also don't see this in the assembler.
I'll try to change the optimisation from 2 to s.
The program should fit in FLASH and I may get more hints.

 
> >       ret = menu_descend(); 
> >       if( ret != 0 ) 
> >       { . . . . . 
> > .
   
> My guess is that you have an uninitialized variable somewhere [else], 
> and by making ret
> a volatile, you just happen to see the desired results.
> 
> With what you've shown, r3 is now going to be 0 after your call, so is 
> the word at sp+84.
> And perhaps, you'll see a different amount of stack space allocated in 
> this function -
> all have the possibility of changing the "undefined" value of an 
> uninitialized variable.
> 
> 
> 


____________________________________________________________________
Psssst! Schon vom neuen WEB.DE MultiMessenger gehört? 
Der kann`s mit allen: http://www.produkte.web.de/messenger/?did=3123



[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux