• Simon Glass's avatar
    ARM: 7017/1: Use generic BUG() handler · 87e040b6
    Simon Glass authored
    ARM uses its own BUG() handler which makes its output slightly different
    from other archtectures.
    
    One of the problems is that the ARM implementation doesn't report the function
    with the BUG() in it, but always reports the PC being in __bug(). The generic
    implementation doesn't have this problem.
    
    Currently we get something like:
    
    kernel BUG at fs/proc/breakme.c:35!
    Unable to handle kernel NULL pointer dereference at virtual address 00000000
    ...
    PC is at __bug+0x20/0x2c
    
    With this patch it displays:
    
    kernel BUG at fs/proc/breakme.c:35!
    Internal error: Oops - undefined instruction: 0 [#1] PREEMPT SMP
    ...
    PC is at write_breakme+0xd0/0x1b4
    
    This implementation uses an undefined instruction to implement BUG, and sets up
    a bug table containing the relevant information. Many versions of gcc do not
    support %c properly for ARM (inserting a # when they shouldn't) so we work
    around this using distasteful macro magic.
    
    v1: Initial version to replace existing ARM BUG() implementation with something
    more similar to other architectures.
    
    v2: Add Thumb support, remove backtrace whitespace output changes. Change to
    use macros instead of requiring the asm %d flag to work (thanks to
    Dave Martin <dave.martin@linaro.org>)
    
    v3: Remove old BUG() implementation in favor of this one.
    Remove the Backtrace: message (will submit this separately).
    Use ARM_EXIT_KEEP() so that some architectures can dump exit text at link time
    thanks to Stephen Boyd <sboyd@codeaurora.org> (although since we always
    define GENERIC_BUG this might be academic.)
    Rebase to linux-2.6.git master.
    
    v4: Allow BUGS in modules (these were not reported correctly in v3)
    (thanks to Stephen Boyd <sboyd@codeaurora.org> for suggesting that.)
    Remove __bug() as this is no longer needed.
    
    v5: Add %progbits as the section flags.
    Signed-off-by: default avatarSimon Glass <sjg@chromium.org>
    Reviewed-by: default avatarStephen Boyd <sboyd@codeaurora.org>
    Tested-by: default avatarStephen Boyd <sboyd@codeaurora.org>
    Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
    87e040b6
bug.h 1.59 KB