Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
70f12567
K
Kernel
项目概览
openeuler
/
Kernel
1 年多 前同步成功
通知
8
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
70f12567
编写于
6月 07, 2009
作者:
M
Mike Frysinger
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Blackfin: add support for GENERIC_BUG
Signed-off-by:
N
Mike Frysinger
<
vapier@gentoo.org
>
上级
67834fa9
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
99 addition
and
8 deletion
+99
-8
arch/blackfin/Kconfig
arch/blackfin/Kconfig
+4
-0
arch/blackfin/include/asm/bug.h
arch/blackfin/include/asm/bug.h
+51
-6
arch/blackfin/kernel/traps.c
arch/blackfin/kernel/traps.c
+30
-0
arch/blackfin/kernel/vmlinux.lds.S
arch/blackfin/kernel/vmlinux.lds.S
+14
-2
未找到文件。
arch/blackfin/Kconfig
浏览文件 @
70f12567
...
...
@@ -28,6 +28,10 @@ config BLACKFIN
select HAVE_OPROFILE
select ARCH_WANT_OPTIONAL_GPIOLIB
config GENERIC_BUG
def_bool y
depends on BUG
config ZONE_DMA
bool
default y
...
...
arch/blackfin/include/asm/bug.h
浏览文件 @
70f12567
...
...
@@ -2,13 +2,58 @@
#define _BLACKFIN_BUG_H
#ifdef CONFIG_BUG
#define HAVE_ARCH_BUG
#define BUG() do { \
dump_bfin_trace_buffer(); \
printk(KERN_EMERG "BUG: failure at %s:%d/%s()!\n", __FILE__, __LINE__, __func__); \
panic("BUG!"); \
} while (0)
#define BFIN_BUG_OPCODE 0xefcd
#ifdef CONFIG_DEBUG_BUGVERBOSE
#define _BUG_OR_WARN(flags) \
asm volatile( \
"1: .hword %0\n" \
" .section __bug_table,\"a\",@progbits\n" \
"2: .long 1b\n" \
" .long %1\n" \
" .short %2\n" \
" .short %3\n" \
" .org 2b + %4\n" \
" .previous" \
: \
: "i"(BFIN_BUG_OPCODE), "i"(__FILE__), \
"i"(__LINE__), "i"(flags), \
"i"(sizeof(struct bug_entry)))
#else
#define _BUG_OR_WARN(flags) \
asm volatile( \
"1: .hword %0\n" \
" .section __bug_table,\"a\",@progbits\n" \
"2: .long 1b\n" \
" .short %1\n" \
" .org 2b + %2\n" \
" .previous" \
: \
: "i"(BFIN_BUG_OPCODE), "i"(flags), \
"i"(sizeof(struct bug_entry)))
#endif
/* CONFIG_DEBUG_BUGVERBOSE */
#define BUG() \
do { \
_BUG_OR_WARN(0); \
for (;;); \
} while (0)
#define WARN_ON(condition) \
({ \
int __ret_warn_on = !!(condition); \
if (unlikely(__ret_warn_on)) \
_BUG_OR_WARN(BUGFLAG_WARNING); \
unlikely(__ret_warn_on); \
})
#define HAVE_ARCH_BUG
#define HAVE_ARCH_WARN_ON
#endif
...
...
arch/blackfin/kernel/traps.c
浏览文件 @
70f12567
...
...
@@ -27,6 +27,7 @@
* 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include <linux/bug.h>
#include <linux/uaccess.h>
#include <linux/interrupt.h>
#include <linux/module.h>
...
...
@@ -381,6 +382,23 @@ asmlinkage void trap_c(struct pt_regs *fp)
/* 0x20 - Reserved, Caught by default */
/* 0x21 - Undefined Instruction, handled here */
case
VEC_UNDEF_I
:
#ifdef CONFIG_BUG
if
(
kernel_mode_regs
(
fp
))
{
switch
(
report_bug
(
fp
->
pc
,
fp
))
{
case
BUG_TRAP_TYPE_NONE
:
break
;
case
BUG_TRAP_TYPE_WARN
:
dump_bfin_trace_buffer
();
fp
->
pc
+=
2
;
goto
traps_done
;
case
BUG_TRAP_TYPE_BUG
:
/* call to panic() will dump trace, and it is
* off at this point, so it won't be clobbered
*/
panic
(
"BUG()"
);
}
}
#endif
info
.
si_code
=
ILL_ILLOPC
;
sig
=
SIGILL
;
verbose_printk
(
KERN_NOTICE
EXC_0x21
(
KERN_NOTICE
));
...
...
@@ -792,6 +810,18 @@ void dump_bfin_trace_buffer(void)
}
EXPORT_SYMBOL
(
dump_bfin_trace_buffer
);
#ifdef CONFIG_BUG
int
is_valid_bugaddr
(
unsigned
long
addr
)
{
unsigned
short
opcode
;
if
(
!
get_instruction
(
&
opcode
,
(
unsigned
short
*
)
addr
))
return
0
;
return
opcode
==
BFIN_BUG_OPCODE
;
}
#endif
/*
* Checks to see if the address pointed to is either a
* 16-bit CALL instruction, or a 32-bit CALL instruction
...
...
arch/blackfin/kernel/vmlinux.lds.S
浏览文件 @
70f12567
...
...
@@ -166,6 +166,20 @@ SECTIONS
}
PERCPU
(4)
SECURITY_INIT
/
*
we
have
to
discard
exit
text
and
such
at
runtime
,
not
link
time
,
to
*
handle
embedded
cross
-
section
references
(
alt
instructions
,
bug
*
table
,
eh_frame
,
etc
...
)
*/
.
exit.text
:
{
EXIT_TEXT
}
.
exit.data
:
{
EXIT_DATA
}
.
init.ramfs
:
{
.
=
ALIGN
(
4
)
;
...
...
@@ -264,8 +278,6 @@ SECTIONS
/
DISCARD
/
:
{
EXIT_TEXT
EXIT_DATA
*(.
exitcall.exit
)
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录