On Sat, 25 Nov 2000, Peter Maydell wrote: > OK, I'm looking into the regxpcom segfault. What seems to be happening > is that: > * program runs to completion > * xpcom library _fini routine is called > * this calls a couple of routines in gcc/config/alpha/crtbegin.asm: > __do_global_dtors_aux > __do_frame_takedown > * the _fini code expects the gp register to be preserved across > the __do_global_dtors_aux call, but it isn't > * therefore the call to __do_frame_takedown actually jumps to > address 0, causing a segfault > > Further singlestepping indicates that gp is not trashed by > the first destructor called by __do_global_dtors_aux, only > by the second (global destructors keyed to xptiZipLoader::gCache ()).
Ah, ok...this sounds like a job for Superman....argh...wrong movie :-P Seriously, this sounds like what's going on with Qt and seems to only occur with multiple-inheritence code. I'll check my assembly references and see what I can find out (it's been a few months since I had to seriously read through Alpha asm). It sounds like something's not doing the right thing here...most likely gcc... > Any ideas? (My alpha assembly is virtually nonexistent, and I > certainly have no idea what the calling convention says about > who should be preserving gp here...) I intend to find out :-) C

