From: Blaisorblade <bla...@ya...> - 2006-01-19 00:04:31
|
On Thursday 19 January 2006 01:08, Jeff Dike wrote: > On Wed, Jan 18, 2006 at 05:42:56PM +0100, Blaisorblade wrote: > > What about this? Inserting an asm volatile clobbering all unsaved > > registers (what I thought for long time)? > The gcc doc is somewhat confusing. I read your description as saying > that locals may be totally smashed to random numbers (and the first > sentence in the gcc description implies that as well). I agree with that. > However, the > example they give is a pathological case where a local may have one of > two (well-defined) values, and it's not defined which of those two > well-defined values it will end up with. It's confusing. Standard conformance page says that: * On some rare x86 targets, `setjmp' doesn't save the registers in all circumstances. In those cases, GCC doesn't allocate any variables in registers unless they are marked `register'. But we know it's totally wrong. The example under "Incompatibilities of GCC" is what you say. However, it's just because it's a little example. If the var is placed in a register, and after a lot you longjmp there, that register is totally smashed. > > Or taking the libc implementation and suiting > > it for our use, solving the above problem? > Yuck. But how big is it? Don't know... I suggested this mainly for the volatile vars problem, more than for the "access stack" problem. > Another possibility is to do the magic wakeup thing we do with > mconsole stack, and have it tell us what it registers are. Not sure > if that's any better. You mean mconsole_kern.c:do_stack()? Hmm, ugly too, but more reliable, and not relying on glibc at least. -- Inform me of my mistakes, so I can keep imitating Homer Simpson's "Doh!". Paolo Giarrusso, aka Blaisorblade (Skype ID "PaoloGiarrusso", ICQ 215621894) http://www.user-mode-linux.org/~blaisorblade ___________________________________ Yahoo! Mail: gratis 1GB per i messaggi e allegati da 10MB http://mail.yahoo.it |