android_kernel_xiaomi_sm8350/arch/frv/include/asm/bug.h
David Howells 9a523d427d FRV: Stop gcc from generating uninitialised variable warnings after BUG()
Stop gcc from generating uninitialised variable warnings after BUG().
The problem is that FRV's call into its gdbstub appears to return (if
the function is marked noreturn, then the compiler is under no
obligation to pass it a return address, and so GDB won't know where the
bug happened).

To get around this, we make the do...while wrapper in _debug_bug_trap()
an endless loop from which there's no escape.

Signed-off-by: David Howells <dhowells@redhat.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2009-04-27 08:04:49 -07:00

55 lines
1.3 KiB
C

/* bug.h: FRV bug trapping
*
* Copyright (C) 2004 Red Hat, Inc. All Rights Reserved.
* Written by David Howells (dhowells@redhat.com)
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version
* 2 of the License, or (at your option) any later version.
*/
#ifndef _ASM_BUG_H
#define _ASM_BUG_H
#include <linux/linkage.h>
#ifdef CONFIG_BUG
/*
* Tell the user there is some problem.
*/
extern asmlinkage void __debug_bug_trap(int signr);
#ifdef CONFIG_NO_KERNEL_MSG
#define _debug_bug_printk()
#else
extern void __debug_bug_printk(const char *file, unsigned line);
#define _debug_bug_printk() __debug_bug_printk(__FILE__, __LINE__)
#endif
#define _debug_bug_trap(signr) \
do { \
__debug_bug_trap(signr); \
asm volatile("nop"); \
} while(1)
#define HAVE_ARCH_BUG
#define BUG() \
do { \
_debug_bug_printk(); \
_debug_bug_trap(6 /*SIGABRT*/); \
} while (0)
#ifdef CONFIG_GDBSTUB
#define HAVE_ARCH_KGDB_RAISE
#define kgdb_raise(signr) do { _debug_bug_trap(signr); } while(0)
#define HAVE_ARCH_KGDB_BAD_PAGE
#define kgdb_bad_page(page) do { kgdb_raise(SIGABRT); } while(0)
#endif
#endif /* CONFIG_BUG */
#include <asm-generic/bug.h>
#endif