Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
qemu
提交
96df2bc9
Q
qemu
项目概览
openeuler
/
qemu
通知
10
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Q
qemu
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
96df2bc9
编写于
2月 09, 2016
作者:
A
Artyom Tarasenko
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
target-sparc: use SparcV9MMU type for sparc64 I/D-MMUs
Signed-off-by:
N
Artyom Tarasenko
<
atar4qemu@gmail.com
>
上级
4797a685
变更
4
显示空白变更内容
内联
并排
Showing
4 changed file
with
25 addition
and
37 deletion
+25
-37
linux-user/main.c
linux-user/main.c
+1
-1
target/sparc/cpu.h
target/sparc/cpu.h
+18
-30
target/sparc/ldst_helper.c
target/sparc/ldst_helper.c
+4
-4
target/sparc/machine.c
target/sparc/machine.c
+2
-2
未找到文件。
linux-user/main.c
浏览文件 @
96df2bc9
...
@@ -1166,7 +1166,7 @@ void cpu_loop (CPUSPARCState *env)
...
@@ -1166,7 +1166,7 @@ void cpu_loop (CPUSPARCState *env)
/* XXX: check env->error_code */
/* XXX: check env->error_code */
info
.
si_code
=
TARGET_SEGV_MAPERR
;
info
.
si_code
=
TARGET_SEGV_MAPERR
;
if
(
trapnr
==
TT_DFAULT
)
if
(
trapnr
==
TT_DFAULT
)
info
.
_sifields
.
_sigfault
.
_addr
=
env
->
dmmuregs
[
4
];
info
.
_sifields
.
_sigfault
.
_addr
=
env
->
dmmu
.
mmu
regs
[
4
];
else
else
info
.
_sifields
.
_sigfault
.
_addr
=
cpu_tsptr
(
env
)
->
tpc
;
info
.
_sifields
.
_sigfault
.
_addr
=
cpu_tsptr
(
env
)
->
tpc
;
queue_signal
(
env
,
info
.
si_signo
,
QEMU_SI_FAULT
,
&
info
);
queue_signal
(
env
,
info
.
si_signo
,
QEMU_SI_FAULT
,
&
info
);
...
...
target/sparc/cpu.h
浏览文件 @
96df2bc9
...
@@ -404,7 +404,22 @@ struct CPUTimer
...
@@ -404,7 +404,22 @@ struct CPUTimer
typedef
struct
CPUTimer
CPUTimer
;
typedef
struct
CPUTimer
CPUTimer
;
typedef
struct
CPUSPARCState
CPUSPARCState
;
typedef
struct
CPUSPARCState
CPUSPARCState
;
#if defined(TARGET_SPARC64)
typedef
union
{
uint64_t
mmuregs
[
16
];
struct
{
uint64_t
tsb_tag_target
;
uint64_t
mmu_primary_context
;
uint64_t
mmu_secondary_context
;
uint64_t
sfsr
;
uint64_t
sfar
;
uint64_t
tsb
;
uint64_t
tag_access
;
uint64_t
virtual_watchpoint
;
uint64_t
physical_watchpoint
;
};
}
SparcV9MMU
;
#endif
struct
CPUSPARCState
{
struct
CPUSPARCState
{
target_ulong
gregs
[
8
];
/* general registers */
target_ulong
gregs
[
8
];
/* general registers */
target_ulong
*
regwptr
;
/* pointer to current register window */
target_ulong
*
regwptr
;
/* pointer to current register window */
...
@@ -457,35 +472,8 @@ struct CPUSPARCState {
...
@@ -457,35 +472,8 @@ struct CPUSPARCState {
uint64_t
lsu
;
uint64_t
lsu
;
#define DMMU_E 0x8
#define DMMU_E 0x8
#define IMMU_E 0x4
#define IMMU_E 0x4
//typedef struct SparcMMU
SparcV9MMU
immu
;
union
{
SparcV9MMU
dmmu
;
uint64_t
immuregs
[
16
];
struct
{
uint64_t
tsb_tag_target
;
uint64_t
unused_mmu_primary_context
;
// use DMMU
uint64_t
unused_mmu_secondary_context
;
// use DMMU
uint64_t
sfsr
;
uint64_t
sfar
;
uint64_t
tsb
;
uint64_t
tag_access
;
uint64_t
virtual_watchpoint
;
uint64_t
physical_watchpoint
;
}
immu
;
};
union
{
uint64_t
dmmuregs
[
16
];
struct
{
uint64_t
tsb_tag_target
;
uint64_t
mmu_primary_context
;
uint64_t
mmu_secondary_context
;
uint64_t
sfsr
;
uint64_t
sfar
;
uint64_t
tsb
;
uint64_t
tag_access
;
uint64_t
virtual_watchpoint
;
uint64_t
physical_watchpoint
;
}
dmmu
;
};
SparcTLBEntry
itlb
[
64
];
SparcTLBEntry
itlb
[
64
];
SparcTLBEntry
dtlb
[
64
];
SparcTLBEntry
dtlb
[
64
];
uint32_t
mmu_version
;
uint32_t
mmu_version
;
...
...
target/sparc/ldst_helper.c
浏览文件 @
96df2bc9
...
@@ -1483,7 +1483,7 @@ void helper_st_asi(CPUSPARCState *env, target_ulong addr, target_ulong val,
...
@@ -1483,7 +1483,7 @@ void helper_st_asi(CPUSPARCState *env, target_ulong addr, target_ulong val,
int
reg
=
(
addr
>>
3
)
&
0xf
;
int
reg
=
(
addr
>>
3
)
&
0xf
;
uint64_t
oldreg
;
uint64_t
oldreg
;
oldreg
=
env
->
immuregs
[
reg
];
oldreg
=
env
->
immu
.
mmu
regs
[
reg
];
switch
(
reg
)
{
switch
(
reg
)
{
case
0
:
/* RO */
case
0
:
/* RO */
return
;
return
;
...
@@ -1514,7 +1514,7 @@ void helper_st_asi(CPUSPARCState *env, target_ulong addr, target_ulong val,
...
@@ -1514,7 +1514,7 @@ void helper_st_asi(CPUSPARCState *env, target_ulong addr, target_ulong val,
break
;
break
;
}
}
if
(
oldreg
!=
env
->
immuregs
[
reg
])
{
if
(
oldreg
!=
env
->
immu
.
mmu
regs
[
reg
])
{
DPRINTF_MMU
(
"immu change reg[%d]: 0x%016"
PRIx64
" -> 0x%016"
DPRINTF_MMU
(
"immu change reg[%d]: 0x%016"
PRIx64
" -> 0x%016"
PRIx64
"
\n
"
,
reg
,
oldreg
,
env
->
immuregs
[
reg
]);
PRIx64
"
\n
"
,
reg
,
oldreg
,
env
->
immuregs
[
reg
]);
}
}
...
@@ -1548,7 +1548,7 @@ void helper_st_asi(CPUSPARCState *env, target_ulong addr, target_ulong val,
...
@@ -1548,7 +1548,7 @@ void helper_st_asi(CPUSPARCState *env, target_ulong addr, target_ulong val,
int
reg
=
(
addr
>>
3
)
&
0xf
;
int
reg
=
(
addr
>>
3
)
&
0xf
;
uint64_t
oldreg
;
uint64_t
oldreg
;
oldreg
=
env
->
dmmuregs
[
reg
];
oldreg
=
env
->
dmmu
.
mmu
regs
[
reg
];
switch
(
reg
)
{
switch
(
reg
)
{
case
0
:
/* RO */
case
0
:
/* RO */
case
4
:
case
4
:
...
@@ -1591,7 +1591,7 @@ void helper_st_asi(CPUSPARCState *env, target_ulong addr, target_ulong val,
...
@@ -1591,7 +1591,7 @@ void helper_st_asi(CPUSPARCState *env, target_ulong addr, target_ulong val,
break
;
break
;
}
}
if
(
oldreg
!=
env
->
dmmuregs
[
reg
])
{
if
(
oldreg
!=
env
->
dmmu
.
mmu
regs
[
reg
])
{
DPRINTF_MMU
(
"dmmu change reg[%d]: 0x%016"
PRIx64
" -> 0x%016"
DPRINTF_MMU
(
"dmmu change reg[%d]: 0x%016"
PRIx64
" -> 0x%016"
PRIx64
"
\n
"
,
reg
,
oldreg
,
env
->
dmmuregs
[
reg
]);
PRIx64
"
\n
"
,
reg
,
oldreg
,
env
->
dmmuregs
[
reg
]);
}
}
...
...
target/sparc/machine.c
浏览文件 @
96df2bc9
...
@@ -148,8 +148,8 @@ const VMStateDescription vmstate_sparc_cpu = {
...
@@ -148,8 +148,8 @@ const VMStateDescription vmstate_sparc_cpu = {
VMSTATE_UINT64_ARRAY
(
env
.
mmubpregs
,
SPARCCPU
,
4
),
VMSTATE_UINT64_ARRAY
(
env
.
mmubpregs
,
SPARCCPU
,
4
),
#else
#else
VMSTATE_UINT64
(
env
.
lsu
,
SPARCCPU
),
VMSTATE_UINT64
(
env
.
lsu
,
SPARCCPU
),
VMSTATE_UINT64_ARRAY
(
env
.
immuregs
,
SPARCCPU
,
16
),
VMSTATE_UINT64_ARRAY
(
env
.
immu
.
mmu
regs
,
SPARCCPU
,
16
),
VMSTATE_UINT64_ARRAY
(
env
.
dmmuregs
,
SPARCCPU
,
16
),
VMSTATE_UINT64_ARRAY
(
env
.
dmmu
.
mmu
regs
,
SPARCCPU
,
16
),
VMSTATE_STRUCT_ARRAY
(
env
.
itlb
,
SPARCCPU
,
64
,
0
,
VMSTATE_STRUCT_ARRAY
(
env
.
itlb
,
SPARCCPU
,
64
,
0
,
vmstate_tlb_entry
,
SparcTLBEntry
),
vmstate_tlb_entry
,
SparcTLBEntry
),
VMSTATE_STRUCT_ARRAY
(
env
.
dtlb
,
SPARCCPU
,
64
,
0
,
VMSTATE_STRUCT_ARRAY
(
env
.
dtlb
,
SPARCCPU
,
64
,
0
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录