Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenXiangShan
NEMU
提交
11429b35
N
NEMU
项目概览
OpenXiangShan
/
NEMU
11 个月 前同步成功
通知
7
Star
171
Fork
67
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
N
NEMU
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
11429b35
编写于
2月 01, 2019
作者:
Z
Zihao Yu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
cpu,exec,special: refactor invalid opcode messages
上级
6f291525
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
22 addition
and
32 deletion
+22
-32
include/cpu/exec.h
include/cpu/exec.h
+2
-0
src/cpu/inv.c
src/cpu/inv.c
+12
-0
src/isa/mips32/exec/special.c
src/isa/mips32/exec/special.c
+2
-10
src/isa/riscv32/exec/special.c
src/isa/riscv32/exec/special.c
+2
-10
src/isa/x86/exec/special.c
src/isa/x86/exec/special.c
+4
-12
未找到文件。
include/cpu/exec.h
浏览文件 @
11429b35
...
...
@@ -47,6 +47,8 @@ static inline void update_pc(void) {
else
{
cpu
.
pc
=
decinfo
.
seq_pc
;
}
}
void
display_inv_msg
(
vaddr_t
pc
);
#ifdef DEBUG
#define print_asm(...) Assert(snprintf(decinfo.assembly, 80, __VA_ARGS__) < 80, "buffer overflow!")
#else
...
...
src/cpu/inv.c
0 → 100644
浏览文件 @
11429b35
#include "common.h"
void
display_inv_msg
(
vaddr_t
pc
)
{
extern
char
logo
[];
printf
(
"There are two cases which will trigger this unexpected exception:
\n
"
"1. The instruction at PC = 0x%08x is not implemented.
\n
"
"2. Something is implemented incorrectly.
\n
"
,
pc
);
printf
(
"Find this PC(0x%08x) in the disassembling result to distinguish which case it is.
\n\n
"
,
pc
);
printf
(
"
\33
[1;31mIf it is the first case, see
\n
%s
\n
for more details.
\n\n
If it is the second case, remember:
\n
"
"* The machine is always right!
\n
"
"* Every line of untested code is always wrong!
\33
[0m
\n\n
"
,
logo
);
}
src/isa/mips32/exec/special.c
浏览文件 @
11429b35
...
...
@@ -5,22 +5,14 @@ make_EHelper(inv) {
/* invalid opcode */
uint32_t
instr
[
2
];
vaddr_t
ori_pc
=
cpu
.
pc
;
*
pc
=
ori_pc
;
*
pc
=
cpu
.
pc
;
instr
[
0
]
=
instr_fetch
(
pc
,
4
);
instr
[
1
]
=
instr_fetch
(
pc
,
4
);
printf
(
"invalid opcode(PC = 0x%08x): %08x %08x ...
\n\n
"
,
cpu
.
pc
,
instr
[
0
],
instr
[
1
]);
extern
char
logo
[];
printf
(
"There are two cases which will trigger this unexpected exception:
\n
"
"1. The instruction at PC = 0x%08x is not implemented.
\n
"
"2. Something is implemented incorrectly.
\n
"
,
ori_pc
);
printf
(
"Find this PC(0x%08x) in the disassembling result to distinguish which case it is.
\n\n
"
,
ori_pc
);
printf
(
"
\33
[1;31mIf it is the first case, see
\n
%s
\n
for more details.
\n\n
If it is the second case, remember:
\n
"
"* The machine is always right!
\n
"
"* Every line of untested code is always wrong!
\33
[0m
\n\n
"
,
logo
);
display_inv_msg
(
cpu
.
pc
);
rtl_exit
(
NEMU_ABORT
,
cpu
.
pc
,
-
1
);
...
...
src/isa/riscv32/exec/special.c
浏览文件 @
11429b35
...
...
@@ -5,22 +5,14 @@ make_EHelper(inv) {
/* invalid opcode */
uint32_t
instr
[
2
];
vaddr_t
ori_pc
=
cpu
.
pc
;
*
pc
=
ori_pc
;
*
pc
=
cpu
.
pc
;
instr
[
0
]
=
instr_fetch
(
pc
,
4
);
instr
[
1
]
=
instr_fetch
(
pc
,
4
);
printf
(
"invalid opcode(PC = 0x%08x): %08x %08x ...
\n\n
"
,
cpu
.
pc
,
instr
[
0
],
instr
[
1
]);
extern
char
logo
[];
printf
(
"There are two cases which will trigger this unexpected exception:
\n
"
"1. The instruction at PC = 0x%08x is not implemented.
\n
"
"2. Something is implemented incorrectly.
\n
"
,
ori_pc
);
printf
(
"Find this PC(0x%08x) in the disassembling result to distinguish which case it is.
\n\n
"
,
ori_pc
);
printf
(
"
\33
[1;31mIf it is the first case, see
\n
%s
\n
for more details.
\n\n
If it is the second case, remember:
\n
"
"* The machine is always right!
\n
"
"* Every line of untested code is always wrong!
\33
[0m
\n\n
"
,
logo
);
display_inv_msg
(
cpu
.
pc
);
rtl_exit
(
NEMU_ABORT
,
cpu
.
pc
,
-
1
);
...
...
src/isa/x86/exec/special.c
浏览文件 @
11429b35
...
...
@@ -9,23 +9,15 @@ make_EHelper(inv) {
/* invalid opcode */
uint32_t
temp
[
2
];
vaddr_t
ori_pc
=
cpu
.
pc
;
*
pc
=
ori_pc
;
*
pc
=
cpu
.
pc
;
temp
[
0
]
=
instr_fetch
(
pc
,
4
);
temp
[
1
]
=
instr_fetch
(
pc
,
4
);
uint8_t
*
p
=
(
void
*
)
temp
;
printf
(
"invalid opcode(PC = 0x%08x): %02x %02x %02x %02x %02x %02x %02x %02x ...
\n\n
"
,
ori_pc
,
p
[
0
],
p
[
1
],
p
[
2
],
p
[
3
],
p
[
4
],
p
[
5
],
p
[
6
],
p
[
7
]);
extern
char
logo
[];
printf
(
"There are two cases which will trigger this unexpected exception:
\n
"
"1. The instruction at PC = 0x%08x is not implemented.
\n
"
"2. Something is implemented incorrectly.
\n
"
,
ori_pc
);
printf
(
"Find this PC(0x%08x) in the disassembling result to distinguish which case it is.
\n\n
"
,
ori_pc
);
printf
(
"
\33
[1;31mIf it is the first case, see
\n
%s
\n
for more details.
\n\n
If it is the second case, remember:
\n
"
"* The machine is always right!
\n
"
"* Every line of untested code is always wrong!
\33
[0m
\n\n
"
,
logo
);
cpu
.
pc
,
p
[
0
],
p
[
1
],
p
[
2
],
p
[
3
],
p
[
4
],
p
[
5
],
p
[
6
],
p
[
7
]);
display_inv_msg
(
cpu
.
pc
);
rtl_exit
(
NEMU_ABORT
,
cpu
.
pc
,
-
1
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录