Re: [PATCH] BUG preserve registers

From: Linus Torvalds (torvalds@transmeta.com)
Date: Sat Feb 09 2002 - 14:30:27 EST


On Sat, 9 Feb 2002, Hugh Dickins wrote:
>
> It's frustrating that when Verbose BUG() reporting is configured,
> info gets lost: fix for i386 below. This is your area, Andrew:
> please confirm to Marcelo if you'd like him to apply this.
>
> Example: in hpa's recent prune_dcache crash, %eax showed the length of
> the kernel BUG printk, when we'd have liked to see the invalid d_count:
> off-by-one or obviously corrupted?

Don't do it this way.

Instead, put the string printout in the _trap_ handler, and make the
format of BUG() be something like this:

        #ifdef CONFIG_DEBUG_BUGVERBOSE
        #define BUGSTR "\"" __FILE__ "\""
        #else
        #define BUGSTR ""
        #endif

        #define BUG() \
                asm("ud2\n\t.word __LINE__\n\t.asciiz " BUGSTR)

and then have the trap handler print out the pretty-printed version.

The advantage of this is:
 - much smaller footprint even when messages are enabled.
 - no register corruption
 - easily extendible (ie we can put a "bug code" etc, and have the trap
   handler do different things depending on the code)

Ok?

                Linus

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Fri Feb 15 2002 - 21:00:27 EST