Linux Audio

Check our new training course

Loading...
v3.5.6
  1#ifndef __ASM_SH_BUG_H
  2#define __ASM_SH_BUG_H
  3
  4#include <linux/linkage.h>
  5
  6#define TRAPA_BUG_OPCODE	0xc33e	/* trapa #0x3e */
  7#define BUGFLAG_UNWINDER	(1 << 1)
  8
  9#ifdef CONFIG_GENERIC_BUG
 10#define HAVE_ARCH_BUG
 11#define HAVE_ARCH_WARN_ON
 12
 13/**
 14 * _EMIT_BUG_ENTRY
 15 * %1 - __FILE__
 16 * %2 - __LINE__
 17 * %3 - trap type
 18 * %4 - sizeof(struct bug_entry)
 19 *
 20 * The trapa opcode itself sits in %0.
 21 * The %O notation is used to avoid # generation.
 22 *
 23 * The offending file and line are encoded in the __bug_table section.
 24 */
 25#ifdef CONFIG_DEBUG_BUGVERBOSE
 26#define _EMIT_BUG_ENTRY				\
 27	"\t.pushsection __bug_table,\"a\"\n"	\
 28	"2:\t.long 1b, %O1\n"			\
 29	"\t.short %O2, %O3\n"			\
 30	"\t.org 2b+%O4\n"			\
 31	"\t.popsection\n"
 32#else
 33#define _EMIT_BUG_ENTRY				\
 34	"\t.pushsection __bug_table,\"a\"\n"	\
 35	"2:\t.long 1b\n"			\
 36	"\t.short %O3\n"			\
 37	"\t.org 2b+%O4\n"			\
 38	"\t.popsection\n"
 39#endif
 40
 41#define BUG()						\
 42do {							\
 43	__asm__ __volatile__ (				\
 44		"1:\t.short %O0\n"			\
 45		_EMIT_BUG_ENTRY				\
 46		 :					\
 47		 : "n" (TRAPA_BUG_OPCODE),		\
 48		   "i" (__FILE__),			\
 49		   "i" (__LINE__), "i" (0),		\
 50		   "i" (sizeof(struct bug_entry)));	\
 51} while (0)
 52
 53#define __WARN_TAINT(taint)				\
 54do {							\
 55	__asm__ __volatile__ (				\
 56		"1:\t.short %O0\n"			\
 57		 _EMIT_BUG_ENTRY			\
 58		 :					\
 59		 : "n" (TRAPA_BUG_OPCODE),		\
 60		   "i" (__FILE__),			\
 61		   "i" (__LINE__),			\
 62		   "i" (BUGFLAG_TAINT(taint)),		\
 63		   "i" (sizeof(struct bug_entry)));	\
 64} while (0)
 65
 66#define WARN_ON(x) ({						\
 67	int __ret_warn_on = !!(x);				\
 68	if (__builtin_constant_p(__ret_warn_on)) {		\
 69		if (__ret_warn_on)				\
 70			__WARN();				\
 71	} else {						\
 72		if (unlikely(__ret_warn_on))			\
 73			__WARN();				\
 74	}							\
 75	unlikely(__ret_warn_on);				\
 76})
 77
 78#define UNWINDER_BUG()					\
 79do {							\
 80	__asm__ __volatile__ (				\
 81		"1:\t.short %O0\n"			\
 82		_EMIT_BUG_ENTRY				\
 83		 :					\
 84		 : "n" (TRAPA_BUG_OPCODE),		\
 85		   "i" (__FILE__),			\
 86		   "i" (__LINE__),			\
 87		   "i" (BUGFLAG_UNWINDER),		\
 88		   "i" (sizeof(struct bug_entry)));	\
 89} while (0)
 90
 91#define UNWINDER_BUG_ON(x) ({					\
 92	int __ret_unwinder_on = !!(x);				\
 93	if (__builtin_constant_p(__ret_unwinder_on)) {		\
 94		if (__ret_unwinder_on)				\
 95			UNWINDER_BUG();				\
 96	} else {						\
 97		if (unlikely(__ret_unwinder_on))		\
 98			UNWINDER_BUG();				\
 99	}							\
100	unlikely(__ret_unwinder_on);				\
101})
102
103#else
104
105#define UNWINDER_BUG	BUG
106#define UNWINDER_BUG_ON	BUG_ON
107
108#endif /* CONFIG_GENERIC_BUG */
109
110#include <asm-generic/bug.h>
111
112struct pt_regs;
 
 
113extern void die(const char *str, struct pt_regs *regs, long err) __attribute__ ((noreturn));
 
 
114
115#endif /* __ASM_SH_BUG_H */
v4.6
  1#ifndef __ASM_SH_BUG_H
  2#define __ASM_SH_BUG_H
  3
  4#include <linux/linkage.h>
  5
  6#define TRAPA_BUG_OPCODE	0xc33e	/* trapa #0x3e */
  7#define BUGFLAG_UNWINDER	(1 << 1)
  8
  9#ifdef CONFIG_GENERIC_BUG
 10#define HAVE_ARCH_BUG
 11#define HAVE_ARCH_WARN_ON
 12
 13/**
 14 * _EMIT_BUG_ENTRY
 15 * %1 - __FILE__
 16 * %2 - __LINE__
 17 * %3 - trap type
 18 * %4 - sizeof(struct bug_entry)
 19 *
 20 * The trapa opcode itself sits in %0.
 21 * The %O notation is used to avoid # generation.
 22 *
 23 * The offending file and line are encoded in the __bug_table section.
 24 */
 25#ifdef CONFIG_DEBUG_BUGVERBOSE
 26#define _EMIT_BUG_ENTRY				\
 27	"\t.pushsection __bug_table,\"a\"\n"	\
 28	"2:\t.long 1b, %O1\n"			\
 29	"\t.short %O2, %O3\n"			\
 30	"\t.org 2b+%O4\n"			\
 31	"\t.popsection\n"
 32#else
 33#define _EMIT_BUG_ENTRY				\
 34	"\t.pushsection __bug_table,\"a\"\n"	\
 35	"2:\t.long 1b\n"			\
 36	"\t.short %O3\n"			\
 37	"\t.org 2b+%O4\n"			\
 38	"\t.popsection\n"
 39#endif
 40
 41#define BUG()						\
 42do {							\
 43	__asm__ __volatile__ (				\
 44		"1:\t.short %O0\n"			\
 45		_EMIT_BUG_ENTRY				\
 46		 :					\
 47		 : "n" (TRAPA_BUG_OPCODE),		\
 48		   "i" (__FILE__),			\
 49		   "i" (__LINE__), "i" (0),		\
 50		   "i" (sizeof(struct bug_entry)));	\
 51} while (0)
 52
 53#define __WARN_TAINT(taint)				\
 54do {							\
 55	__asm__ __volatile__ (				\
 56		"1:\t.short %O0\n"			\
 57		 _EMIT_BUG_ENTRY			\
 58		 :					\
 59		 : "n" (TRAPA_BUG_OPCODE),		\
 60		   "i" (__FILE__),			\
 61		   "i" (__LINE__),			\
 62		   "i" (BUGFLAG_TAINT(taint)),		\
 63		   "i" (sizeof(struct bug_entry)));	\
 64} while (0)
 65
 66#define WARN_ON(x) ({						\
 67	int __ret_warn_on = !!(x);				\
 68	if (__builtin_constant_p(__ret_warn_on)) {		\
 69		if (__ret_warn_on)				\
 70			__WARN();				\
 71	} else {						\
 72		if (unlikely(__ret_warn_on))			\
 73			__WARN();				\
 74	}							\
 75	unlikely(__ret_warn_on);				\
 76})
 77
 78#define UNWINDER_BUG()					\
 79do {							\
 80	__asm__ __volatile__ (				\
 81		"1:\t.short %O0\n"			\
 82		_EMIT_BUG_ENTRY				\
 83		 :					\
 84		 : "n" (TRAPA_BUG_OPCODE),		\
 85		   "i" (__FILE__),			\
 86		   "i" (__LINE__),			\
 87		   "i" (BUGFLAG_UNWINDER),		\
 88		   "i" (sizeof(struct bug_entry)));	\
 89} while (0)
 90
 91#define UNWINDER_BUG_ON(x) ({					\
 92	int __ret_unwinder_on = !!(x);				\
 93	if (__builtin_constant_p(__ret_unwinder_on)) {		\
 94		if (__ret_unwinder_on)				\
 95			UNWINDER_BUG();				\
 96	} else {						\
 97		if (unlikely(__ret_unwinder_on))		\
 98			UNWINDER_BUG();				\
 99	}							\
100	unlikely(__ret_unwinder_on);				\
101})
102
103#else
104
105#define UNWINDER_BUG	BUG
106#define UNWINDER_BUG_ON	BUG_ON
107
108#endif /* CONFIG_GENERIC_BUG */
109
110#include <asm-generic/bug.h>
111
112struct pt_regs;
113
114/* arch/sh/kernel/traps.c */
115extern void die(const char *str, struct pt_regs *regs, long err) __attribute__ ((noreturn));
116extern void die_if_kernel(const char *str, struct pt_regs *regs, long err);
117extern void die_if_no_fixup(const char *str, struct pt_regs *regs, long err);
118
119#endif /* __ASM_SH_BUG_H */