[Top][All Lists]

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

Re: [avr-gcc-list] strange c++ obiect initialization problems (full code

From: Marcin S
Subject: Re: [avr-gcc-list] strange c++ obiect initialization problems (full code included)
Date: Sun, 12 Jun 2011 11:33:24 +0200

2011/6/11 Georg-Johann Lay <address@hidden>:
> Marcin S schrieb:
>> 2011/6/9 Georg-Johann Lay <address@hidden>:
>>> Marcin S schrieb:
>>>> Hello there,
>>>> from time to time i have a strange problems when initializing
>>>> class objects in file range by their respective constructors, i
>>>> noted that problem occurs only when that constructors takes
>>>> pointers to other global objects, tables or something else.
>>>> Whats the problem? in best scenario object pointer are wrongly
>>>> set and pointing to some random locations, at worst my program
>>>> does not start at all (event with my main() func empty) it just
>>>> hangs
>>>> here is link to my code http://dl.dropbox.com/u/6883398/Lays.tar.bz2 its
>>>> and eclipse
>>>> project, simple "make" in project directory should work too. Note
>>>> that archive contains already compiled program in "Release"
>>>> directory, this compilation does not work at all! (worst case
>>>> scenario described above).
>>>> As I wrote this program incrementaly it stopped working after i
>>>> added 2 objects inits in layouts.cpp
>>>> CLayPGMString
>>>> minTag(minTagData,strMin,true,CLayPGMString::XSMALL); CLayPGMString
>>>> maxTag(maxTagData,strMax,true,CLayPGMString::XSMALL);
>>>> strMin and strMax params are pointers to strings in PROGMEM, if i
>>>>  replace it with zeros like
>>>> CLayPGMString minTag(minTagData,0,true,CLayPGMString::XSMALL);
>>>> CLayPGMString maxTag(maxTagData,0,true,CLayPGMString::XSMALL);
>>>> program starts again.
>>>> Other important thing noted is, when I initialise those objects
>>>> in file range with their default, empty constructors and then set
>>>> needed pointers at run time (for example right after main()
>>>> function) everything works too. I ran out of ideas what could be
>>>> wrong, maybe wrong code, I'm open to any suggestions.
>>>> I'm using avr-gcc-4.5.2 on gentoo linux, also checked on stable
>>>> 4.4 and it behaves exactly the same way.
>>>> Marcin
>>> Do you see r20 used in one of the functions? Reminds me of
>>> http://gcc.gnu.org/PR45263 which is not yet backported to avr-gcc <
>>> 4.6
>>> Johann
>> Hej Johann,
>> I'm not sure if i checked it correctly, I've opened .lss file
>> corresponding to my program and yes, there are some r20 operations in
>>  this function.
>> Excuse me my lack of knowledge of low lvl stuff, but You think this might
>> cause the problem?
> That depends on the hardware you use. The problem will not occur on devices
> <= 64 kib flash. Look at the code again. In the startup code that runs
> before main you might see use of r20 around calls to you function. Note that
> these calls will be indirect, so searching for symbol will not help. Using
> r20 that way in startup can cause problems because is is callee-used
> register and the callee can clobber it, leaving its content in a mess in
> startup code.
>> Marcin
> Johann

It's atmega128, so r20 still is a main suspect.

>Note that these calls will be indirect, so searching for symbol will not help.

Umm, then I'm afraid I dont know how to check it.

Btw. I tried to confirm this thinking by building 4.6.1 avr-gcc but i
think its buggy atm (dwarf2 bug) and i am unable to build any project
with it.
I'll wait till it will be usable and let You know.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]