Questions about this patch: [PATCH] ARM: Use generic BUG() handler

anish kumar anish198519851985 at gmail.com
Thu Mar 17 10:57:24 EDT 2011


https://lkml.org/lkml/2011/2/28/565

I have tested this patch on my system(linux 2.6.35-android) and it is 
working
perfectly fine so wanted to understand this patch.Will this patch be 
included in
mainline?

I have few question from this thread.As my understanding of assembly is
bit limited I would appreciate if someone can just say yes/no and probably 
add
bit of words.

> This implementation uses an undefined instruction to implement BUG, and 
> sets up
> a bug table containing the relevant information. Many version of gcc do 
> not
> support %c properly for ARM (inserting a # when they shouldn't) so we work
> around this using distasteful macro magic.

This undefined instruction should cause data abort ?


> +#define BUG() _BUG(__FILE__, __LINE__, BUG_INSTR_VALUE)
> +#define _BUG(file, line, value) __BUG(file, line, value)
> +#define __BUG(__file, __line, __value) \
> +do { \
> + BUILD_BUG_ON(sizeof(struct bug_entry) != 12); \
> + asm volatile("1:\t" BUG_INSTR_TYPE #__value "\n" \
> + ".pushsection .rodata.str, \"aMS\", 1\n" \
> + "2:\t.asciz " #__file "\n" \
> + ".popsection\n" \
> + ".pushsection __bug_table,\"a\"\n" \
> + "3:\t.word 1b, 2b\n" \
> + "\t.hword " #__line ", 0\n" \
> + ".popsection"); \
> + unreachable(); \
> +} while (0)

Above piece of code i couldn't understand.As i understand this should do 
same as
original BUG() definition plus it should print the function where BUG() had 
originally
happened instead of "PC at _bug".I think in this code some 
data(guess:function name
,line no) is pushed on the stack and then popped but how this data is 
printed on console?

So kindly enlighten me on this piece of code or some pointers.Is there any 
thread which
explains about kernel fault process? 




More information about the linux-arm-kernel mailing list