2011/6/11 Georg-Johann Lay <a...@gjlay.de>: > Marcin S schrieb: >> >> 2011/6/9 Georg-Johann Lay <a...@gjlay.de>: >> >>> 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 > >
Hi, 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. Marcin. _______________________________________________ AVR-GCC-list mailing list AVR-GCC-list@nongnu.org https://lists.nongnu.org/mailman/listinfo/avr-gcc-list