linux/arch/arm/include/asm
Simon Glass 87e040b645 ARM: 7017/1: Use generic BUG() handler
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: Simon Glass <sjg@chromium.org>
Reviewed-by: Stephen Boyd <sboyd@codeaurora.org>
Tested-by: Stephen Boyd <sboyd@codeaurora.org>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2011-10-17 09:13:41 +01:00
..
hardware ARM: 7080/1: l2x0: make sure I&D are not locked down on init 2011-09-07 00:48:03 +01:00
mach Merge branch 'linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci-2.6 2011-07-29 23:35:05 -07:00
a.out-core.h ARM: 6798/1: aout-core: zero thread debug registers in a.out core dump 2011-03-10 15:16:29 +00:00
a.out.h
asm-offsets.h kbuild: move asm-offsets.h to include/generated 2009-12-12 13:08:14 +01:00
assembler.h ARM: assembler.h: Add string declaration macro 2011-07-07 15:31:05 +01:00
atomic.h atomic: cleanup asm-generic atomic*.h inclusion 2011-07-26 16:49:47 -07:00
bitops.h asm-generic: add another generic ext2 atomic bitops 2011-07-26 16:49:46 -07:00
bug.h ARM: 7017/1: Use generic BUG() handler 2011-10-17 09:13:41 +01:00
bugs.h
byteorder.h
cache.h ARM: implement support for read-mostly sections 2010-12-05 08:39:36 +00:00
cacheflush.h Merge branch 'v6v7' into devel 2011-03-16 23:35:26 +00:00
cachetype.h ARM: 6385/1: setup: detect aliasing I-cache when D-cache is non-aliasing 2010-10-04 20:57:09 +01:00
checksum.h
clkdev.h ARM: Consolidate the clkdev header files 2011-07-19 18:09:45 +02:00
cpu.h ARM: 5872/1: ARM: include needed linux/cpu.h in asm/cpu.h 2010-01-10 13:03:52 +00:00
cputype.h ARM: 6881/1: cputype.h uses __attribute_const__ which requires including kernel.h 2011-04-16 21:42:59 +01:00
current.h
delay.h
device.h Driver Core: Add platform device arch data V3 2009-07-22 00:28:38 +02:00
div64.h
dma-mapping.h ARM: dma: replace ISA_DMA_THRESHOLD with a variable 2011-07-12 11:08:12 +01:00
dma.h ARM: ARM_DMA_ZONE_SIZE is no more 2011-07-18 15:30:57 -04:00
domain.h ARM: 6384/1: Remove the domain switching on ARMv6k/v7 CPUs 2010-11-04 15:44:31 +00:00
ecard.h
elf.h ARM: 6883/1: ptrace: Migrate to regsets framework 2011-05-14 21:36:55 +01:00
entry-macro-multi.S ARM: entry: re-allocate registers in irq entry assembly macros 2011-07-02 10:56:10 +01:00
entry-macro-vic2.S ARM: Add common entry code for system with two VICs 2010-01-15 17:10:14 +09:00
fb.h
fcntl.h
fiq.h ARM: 6940/1: fiq: Briefly document driver responsibilities for suspend/resume 2011-05-26 10:31:06 +01:00
fixmap.h
flat.h
floppy.h
fncpy.h ARM: 6640/1: Thumb-2: Symbol manipulation macros for function body copying 2011-01-27 11:48:58 +00:00
fpstate.h Fix common misspellings 2011-03-31 11:26:23 -03:00
ftrace.h ARM: 6319/1: ftrace: add Thumb-2 support to dynamic ftrace 2010-09-02 15:28:43 +01:00
futex.h ARM: 6889/1: futex: add SMP futex support when !CPU_USE_DOMAINS 2011-05-12 10:11:44 +01:00
glue-cache.h Fix common misspellings 2011-03-31 11:26:23 -03:00
glue-df.h ARM: move cache/processor/fault glue to separate include files 2011-02-12 11:52:21 +00:00
glue-pf.h ARM: move cache/processor/fault glue to separate include files 2011-02-12 11:52:21 +00:00
glue-proc.h Merge branch 'v6v7' into devel 2011-03-16 23:35:26 +00:00
glue.h Fix common misspellings 2011-03-31 11:26:23 -03:00
gpio.h
hardirq.h ARM: SMP: collect IPI and local timer IRQs for /proc/stat 2010-12-20 15:08:01 +00:00
highmem.h ARM: 6639/1: allow highmem on SMP platforms without h/w TLB ops broadcast 2011-02-23 17:24:17 +00:00
hw_breakpoint.h ARM: hw_breakpoint: unify single-stepping code for watchpoints and breakpoints 2010-12-06 11:55:57 +00:00
hw_irq.h arm: dove: Use proper irq accessor functions 2011-03-29 14:47:57 +02:00
hwcap.h ARM: hwcaps: add new HWCAP defines for ARMv7-A 2011-07-07 19:20:51 +01:00
ide.h
io.h ARM: io: ensure inb/outb() et.al. are properly ordered on ARMv6+ 2011-01-31 10:53:42 +00:00
ioctls.h ioctl: Use asm-generic/ioctls.h on arm (enables termiox) 2010-10-22 10:19:59 -07:00
ipcbuf.h
irq.h ARM: introduce handle_IRQ() not to dump exception stack 2011-07-12 19:42:40 +08:00
irqflags.h Fix IRQ flag handling naming 2010-10-07 14:08:55 +01:00
Kbuild ARM: 7006/1: Migrate to asm-generic wrapper support 2011-10-17 09:12:40 +01:00
kexec.h [ARM] add machine-specific hook to machine_kexec 2011-03-03 16:26:55 -05:00
kgdb.h kgdb,arm: fix register dump 2010-10-29 13:14:40 -05:00
kmap_types.h kdb: core for kgdb back end (2 of 2) 2010-05-20 21:04:21 -05:00
kprobes.h ARM: kprobes: Extend arch_specific_insn to add pointer to emulated instruction 2011-07-13 17:32:42 +00:00
leds.h
limits.h
linkage.h
localtimer.h ARM: 6759/1: smp: Select local timers vs broadcast timer support runtime 2011-02-23 17:54:27 +00:00
locks.h
mach-types.h arm: move mach-types to include/generated 2009-12-12 13:08:14 +01:00
mc146818rtc.h
memblock.h ARM: fix memblock breakage 2010-10-27 21:41:39 +01:00
memory.h ARM: dma: replace ISA_DMA_THRESHOLD with a variable 2011-07-12 11:08:12 +01:00
mman.h arm: add arch_mmap_check(), get rid of sys_arm_mremap() 2009-12-11 06:34:09 -05:00
mmu_context.h ARM: add a vma entry for the user accessible vector page 2010-10-01 22:35:19 -04:00
mmu.h ARM: 6490/1: MM: bugfix: initialize spinlock for init_mm.context 2010-11-23 22:46:12 +00:00
module.h ARM: 6766/1: Thumb-2: Reflect ARM/Thumb-2 configuration in module vermagic 2011-02-26 13:36:06 +00:00
msgbuf.h
mtd-xip.h
mutex.h
nwflash.h
outercache.h Merge branches 'fixes', 'pgt-next' and 'versatile' into devel 2011-03-20 09:32:12 +00:00
page-nommu.h nommu: Remove the memory_start/end variables from ARM page-nommu.h 2009-07-24 12:35:01 +01:00
page.h ARM: 6913/1: sparsemem: allow pfn_valid to be overridden when using SPARSEMEM 2011-05-26 10:23:24 +01:00
param.h
parport.h
pci.h ARM: convert PCI defines to variables 2011-07-12 11:19:29 -05:00
perf_event.h ARM: perf: add support for the Cortex-A15 PMU 2011-07-07 19:20:53 +01:00
pgalloc.h ARM: 6757/1: fix tlb.h induced linux/swap.h build failure 2011-02-23 16:19:21 +00:00
pgtable-hwdef.h
pgtable-nommu.h ARM: 5988/1: pgprot_dmacoherent() for non-mmu builds 2010-03-13 10:48:22 +00:00
pgtable.h ARM: pgtable: add pud-level code 2011-02-21 19:24:14 +00:00
pmu.h ARM: perf: make name of arm_pmu_type consistent 2011-08-12 15:40:21 +01:00
posix_types.h
proc-fns.h ARM: 6988/1: multi-cpu: remove arguments from CPU proc macros 2011-07-06 20:49:45 +01:00
processor.h Merge branch 'misc' into devel 2011-03-16 23:35:25 +00:00
procinfo.h
prom.h irq: add irq_domain translation infrastructure 2011-07-28 01:32:04 -06:00
ptrace.h ARM: ptrace: Add APSR_MASK definition to ptrace.h 2011-07-13 17:32:43 +00:00
scatterlist.h ARM: Allow SoCs to enable scatterlist chaining 2011-06-02 11:16:22 +01:00
sched_clock.h ARM: sched_clock: allow init_sched_clock() to be called early 2011-01-11 16:23:04 +00:00
seccomp.h ARM: SECCOMP support 2010-10-01 22:32:18 -04:00
segment.h
sembuf.h
serial.h
setup.h Merge branches 'btc', 'dma', 'entry', 'fixes', 'linker-layout', 'misc', 'mmci', 'suspend' and 'vfp' into for-next 2011-07-22 23:08:48 +01:00
shmbuf.h
shmparam.h
sigcontext.h
signal.h
smp_plat.h Merge branches 'at91', 'dcache', 'ftrace', 'hwbpt', 'misc', 'mmci', 's3c', 'st-ux' and 'unwind' into devel 2010-10-18 22:34:25 +01:00
smp_scu.h ARM: pm: add function to set WFI low-power mode for SMP CPUs 2011-02-11 12:29:18 +00:00
smp_twd.h ARM: localtimer: clean up local timer on hot unplug 2010-12-20 15:09:16 +00:00
smp.h ARM: 6942/1: mm: make TTBR1 always point to swapper_pg_dir on ARMv6/7 2011-05-26 12:14:32 +01:00
socket.h net: Generalize socket rx gap / receive queue overflow cmsg 2009-10-12 13:26:31 -07:00
sockios.h
sparsemem.h
spinlock_types.h locking: Convert raw_rwlock to arch_rwlock 2009-12-14 23:55:32 +01:00
spinlock.h ARM: 6939/1: fix missing 'cpu_relax()' declaration 2011-05-23 17:19:26 +01:00
stackprotector.h ARM: initial stack protector (-fstack-protector) support 2010-06-14 21:31:00 -04:00
stacktrace.h
stat.h
statfs.h
string.h
suspend.h ARM: pm: allow suspend finisher to return error codes 2011-07-02 09:54:01 +01:00
swab.h ARM: 5772/1: Use REV and REV16 for byte swapping on ARMv6+ 2009-10-25 15:59:53 +00:00
system.h ARM: 7068/1: process: change from __backtrace to dump_stack in show_regs 2011-10-17 09:12:41 +01:00
tcm.h ARM: 6985/1: export functions to determine the presence of I/DTCM 2011-07-06 20:49:45 +01:00
termbits.h tty: Add EXTPROC support for LINEMODE 2010-08-10 13:47:39 -07:00
termios.h
therm.h
thread_info.h ARM: SECCOMP support 2010-10-01 22:32:18 -04:00
thread_notify.h ARM: 6867/1: Introduce THREAD_NOTIFY_COPY for copy_thread() hooks 2011-04-10 21:13:36 +01:00
timex.h
tlb.h arm: mmu_gather rework 2011-05-25 08:39:14 -07:00
tlbflush.h ARM: btc: avoid invalidating the branch target cache on kernel TLB maintanence 2011-07-19 11:44:06 +01:00
tls.h ARM: v6k: select TLS register code according to V6 variants 2011-02-02 21:23:29 +00:00
topology.h
traps.h ARM: 7004/1: fix traps.h compile warnings 2011-07-22 17:19:02 +01:00
types.h remove dma64_addr_t 2011-03-23 19:47:18 -07:00
uaccess.h ARM: 6384/1: Remove the domain switching on ARMv6k/v7 CPUs 2010-11-04 15:44:31 +00:00
ucontext.h Fix common misspellings 2011-03-31 11:26:23 -03:00
unaligned.h
unified.h Fix "W" macro in arch/arm/include/asm/unified.h 2009-09-18 23:30:11 +01:00
unistd.h Merge branch 'setns' 2011-05-28 10:51:01 -07:00
unwind.h
user.h ARM: 6798/1: aout-core: zero thread debug registers in a.out core dump 2011-03-10 15:16:29 +00:00
vfp.h
vfpmacros.h ARM: 6203/1: Make VFPv3 usable on ARMv6 2010-07-09 14:41:34 +01:00
vga.h ARM: set vga memory base at run-time 2011-07-12 11:19:29 -05:00
xor.h