Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
qemu
提交
7fe48483
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看板
提交
7fe48483
编写于
10月 09, 2004
作者:
B
bellard
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
monitor fixes
git-svn-id:
svn://svn.savannah.nongnu.org/qemu/trunk@1110
c046a42c-6fe2-441c-8c8c-71466251a162
上级
8e3a9fd2
变更
20
隐藏空白更改
内联
并排
Showing
20 changed file
with
106 addition
and
82 deletion
+106
-82
cpu-all.h
cpu-all.h
+4
-4
cpu-exec.c
cpu-exec.c
+4
-4
disas.c
disas.c
+1
-1
exec.c
exec.c
+3
-1
linux-user/main.c
linux-user/main.c
+3
-3
monitor.c
monitor.c
+22
-2
target-arm/cpu.h
target-arm/cpu.h
+0
-2
target-arm/translate.c
target-arm/translate.c
+7
-5
target-i386/cpu.h
target-i386/cpu.h
+0
-1
target-i386/helper.c
target-i386/helper.c
+3
-3
target-i386/helper2.c
target-i386/helper2.c
+13
-11
target-i386/translate.c
target-i386/translate.c
+1
-1
target-ppc/cpu.h
target-ppc/cpu.h
+0
-1
target-ppc/helper.c
target-ppc/helper.c
+2
-2
target-ppc/op_helper.c
target-ppc/op_helper.c
+2
-2
target-ppc/translate.c
target-ppc/translate.c
+19
-18
target-sparc/cpu.h
target-sparc/cpu.h
+0
-1
target-sparc/helper.c
target-sparc/helper.c
+1
-1
target-sparc/translate.c
target-sparc/translate.c
+19
-17
vl.c
vl.c
+2
-2
未找到文件。
cpu-all.h
浏览文件 @
7fe48483
...
@@ -570,7 +570,6 @@ void page_unprotect_range(uint8_t *data, unsigned long data_size);
...
@@ -570,7 +570,6 @@ void page_unprotect_range(uint8_t *data, unsigned long data_size);
#define cpu_exec cpu_x86_exec
#define cpu_exec cpu_x86_exec
#define cpu_gen_code cpu_x86_gen_code
#define cpu_gen_code cpu_x86_gen_code
#define cpu_signal_handler cpu_x86_signal_handler
#define cpu_signal_handler cpu_x86_signal_handler
#define cpu_dump_state cpu_x86_dump_state
#elif defined(TARGET_ARM)
#elif defined(TARGET_ARM)
...
@@ -579,7 +578,6 @@ void page_unprotect_range(uint8_t *data, unsigned long data_size);
...
@@ -579,7 +578,6 @@ void page_unprotect_range(uint8_t *data, unsigned long data_size);
#define cpu_exec cpu_arm_exec
#define cpu_exec cpu_arm_exec
#define cpu_gen_code cpu_arm_gen_code
#define cpu_gen_code cpu_arm_gen_code
#define cpu_signal_handler cpu_arm_signal_handler
#define cpu_signal_handler cpu_arm_signal_handler
#define cpu_dump_state cpu_arm_dump_state
#elif defined(TARGET_SPARC)
#elif defined(TARGET_SPARC)
...
@@ -588,7 +586,6 @@ void page_unprotect_range(uint8_t *data, unsigned long data_size);
...
@@ -588,7 +586,6 @@ void page_unprotect_range(uint8_t *data, unsigned long data_size);
#define cpu_exec cpu_sparc_exec
#define cpu_exec cpu_sparc_exec
#define cpu_gen_code cpu_sparc_gen_code
#define cpu_gen_code cpu_sparc_gen_code
#define cpu_signal_handler cpu_sparc_signal_handler
#define cpu_signal_handler cpu_sparc_signal_handler
#define cpu_dump_state cpu_sparc_dump_state
#elif defined(TARGET_PPC)
#elif defined(TARGET_PPC)
...
@@ -597,7 +594,6 @@ void page_unprotect_range(uint8_t *data, unsigned long data_size);
...
@@ -597,7 +594,6 @@ void page_unprotect_range(uint8_t *data, unsigned long data_size);
#define cpu_exec cpu_ppc_exec
#define cpu_exec cpu_ppc_exec
#define cpu_gen_code cpu_ppc_gen_code
#define cpu_gen_code cpu_ppc_gen_code
#define cpu_signal_handler cpu_ppc_signal_handler
#define cpu_signal_handler cpu_ppc_signal_handler
#define cpu_dump_state cpu_ppc_dump_state
#else
#else
...
@@ -607,6 +603,10 @@ void page_unprotect_range(uint8_t *data, unsigned long data_size);
...
@@ -607,6 +603,10 @@ void page_unprotect_range(uint8_t *data, unsigned long data_size);
#endif
/* SINGLE_CPU_DEFINES */
#endif
/* SINGLE_CPU_DEFINES */
void
cpu_dump_state
(
CPUState
*
env
,
FILE
*
f
,
int
(
*
cpu_fprintf
)(
FILE
*
f
,
const
char
*
fmt
,
...),
int
flags
);
void
cpu_abort
(
CPUState
*
env
,
const
char
*
fmt
,
...);
void
cpu_abort
(
CPUState
*
env
,
const
char
*
fmt
,
...);
extern
CPUState
*
cpu_single_env
;
extern
CPUState
*
cpu_single_env
;
extern
int
code_copy_enabled
;
extern
int
code_copy_enabled
;
...
...
cpu-exec.c
浏览文件 @
7fe48483
...
@@ -304,16 +304,16 @@ int cpu_exec(CPUState *env1)
...
@@ -304,16 +304,16 @@ int cpu_exec(CPUState *env1)
env
->
regs
[
R_EBP
]
=
EBP
;
env
->
regs
[
R_EBP
]
=
EBP
;
env
->
regs
[
R_ESP
]
=
ESP
;
env
->
regs
[
R_ESP
]
=
ESP
;
env
->
eflags
=
env
->
eflags
|
cc_table
[
CC_OP
].
compute_all
()
|
(
DF
&
DF_MASK
);
env
->
eflags
=
env
->
eflags
|
cc_table
[
CC_OP
].
compute_all
()
|
(
DF
&
DF_MASK
);
cpu_
x86_dump_state
(
env
,
logfile
,
X86_DUMP_CCOP
);
cpu_
dump_state
(
env
,
logfile
,
fprintf
,
X86_DUMP_CCOP
);
env
->
eflags
&=
~
(
DF_MASK
|
CC_O
|
CC_S
|
CC_Z
|
CC_A
|
CC_P
|
CC_C
);
env
->
eflags
&=
~
(
DF_MASK
|
CC_O
|
CC_S
|
CC_Z
|
CC_A
|
CC_P
|
CC_C
);
#elif defined(TARGET_ARM)
#elif defined(TARGET_ARM)
env
->
cpsr
=
compute_cpsr
();
env
->
cpsr
=
compute_cpsr
();
cpu_
arm_dump_state
(
env
,
logfile
,
0
);
cpu_
dump_state
(
env
,
logfile
,
fprintf
,
0
);
env
->
cpsr
&=
~
0xf0000000
;
env
->
cpsr
&=
~
0xf0000000
;
#elif defined(TARGET_SPARC)
#elif defined(TARGET_SPARC)
cpu_
sparc_dump_state
(
env
,
logfile
,
0
);
cpu_
dump_state
(
env
,
logfile
,
fprintf
,
0
);
#elif defined(TARGET_PPC)
#elif defined(TARGET_PPC)
cpu_
ppc_dump_state
(
env
,
logfile
,
0
);
cpu_
dump_state
(
env
,
logfile
,
fprintf
,
0
);
#else
#else
#error unsupported target CPU
#error unsupported target CPU
#endif
#endif
...
...
disas.c
浏览文件 @
7fe48483
...
@@ -282,7 +282,7 @@ void monitor_disas(target_ulong pc, int nb_insn, int is_physical, int flags)
...
@@ -282,7 +282,7 @@ void monitor_disas(target_ulong pc, int nb_insn, int is_physical, int flags)
#elif defined(TARGET_PPC)
#elif defined(TARGET_PPC)
print_insn
=
print_insn_ppc
;
print_insn
=
print_insn_ppc
;
#else
#else
fprintf
(
out
,
"Asm output not supported on this arch
\n
"
);
term_printf
(
"Asm output not supported on this arch
\n
"
);
return
;
return
;
#endif
#endif
...
...
exec.c
浏览文件 @
7fe48483
...
@@ -1255,7 +1255,9 @@ void cpu_abort(CPUState *env, const char *fmt, ...)
...
@@ -1255,7 +1255,9 @@ void cpu_abort(CPUState *env, const char *fmt, ...)
vfprintf
(
stderr
,
fmt
,
ap
);
vfprintf
(
stderr
,
fmt
,
ap
);
fprintf
(
stderr
,
"
\n
"
);
fprintf
(
stderr
,
"
\n
"
);
#ifdef TARGET_I386
#ifdef TARGET_I386
cpu_x86_dump_state
(
env
,
stderr
,
X86_DUMP_FPU
|
X86_DUMP_CCOP
);
cpu_dump_state
(
env
,
stderr
,
fprintf
,
X86_DUMP_FPU
|
X86_DUMP_CCOP
);
#else
cpu_dump_state
(
env
,
stderr
,
fprintf
,
0
);
#endif
#endif
va_end
(
ap
);
va_end
(
ap
);
abort
();
abort
();
...
...
linux-user/main.c
浏览文件 @
7fe48483
...
@@ -372,7 +372,7 @@ void cpu_loop(CPUARMState *env)
...
@@ -372,7 +372,7 @@ void cpu_loop(CPUARMState *env)
error:
error:
fprintf
(
stderr
,
"qemu: unhandled CPU exception 0x%x - aborting
\n
"
,
fprintf
(
stderr
,
"qemu: unhandled CPU exception 0x%x - aborting
\n
"
,
trapnr
);
trapnr
);
cpu_
arm_dump_state
(
env
,
stderr
,
0
);
cpu_
dump_state
(
env
,
stderr
,
fprintf
,
0
);
abort
();
abort
();
}
}
process_pending_signals
(
env
);
process_pending_signals
(
env
);
...
@@ -499,7 +499,7 @@ void cpu_loop (CPUSPARCState *env)
...
@@ -499,7 +499,7 @@ void cpu_loop (CPUSPARCState *env)
break
;
break
;
default:
default:
printf
(
"Unhandled trap: 0x%x
\n
"
,
trapnr
);
printf
(
"Unhandled trap: 0x%x
\n
"
,
trapnr
);
cpu_
sparc_dump_state
(
env
,
stderr
,
0
);
cpu_
dump_state
(
env
,
stderr
,
fprintf
,
0
);
exit
(
1
);
exit
(
1
);
}
}
process_pending_signals
(
env
);
process_pending_signals
(
env
);
...
@@ -563,7 +563,7 @@ void cpu_loop(CPUPPCState *env)
...
@@ -563,7 +563,7 @@ void cpu_loop(CPUPPCState *env)
if
(
trapnr
!=
EXCP_SYSCALL_USER
&&
trapnr
!=
EXCP_BRANCH
&&
if
(
trapnr
!=
EXCP_SYSCALL_USER
&&
trapnr
!=
EXCP_BRANCH
&&
trapnr
!=
EXCP_TRACE
)
{
trapnr
!=
EXCP_TRACE
)
{
if
(
loglevel
>
0
)
{
if
(
loglevel
>
0
)
{
cpu_
ppc_dump_state
(
env
,
logfile
,
0
);
cpu_
dump_state
(
env
,
logfile
,
fprintf
,
0
);
}
}
}
}
switch
(
trapnr
)
{
switch
(
trapnr
)
{
...
...
monitor.c
浏览文件 @
7fe48483
...
@@ -101,6 +101,15 @@ void term_printf(const char *fmt, ...)
...
@@ -101,6 +101,15 @@ void term_printf(const char *fmt, ...)
va_end
(
ap
);
va_end
(
ap
);
}
}
static
int
monitor_fprintf
(
FILE
*
stream
,
const
char
*
fmt
,
...)
{
va_list
ap
;
va_start
(
ap
,
fmt
);
term_vprintf
(
fmt
,
ap
);
va_end
(
ap
);
return
0
;
}
static
int
compare_cmd
(
const
char
*
name
,
const
char
*
list
)
static
int
compare_cmd
(
const
char
*
name
,
const
char
*
list
)
{
{
const
char
*
p
,
*
pstart
;
const
char
*
p
,
*
pstart
;
...
@@ -206,9 +215,11 @@ static void do_info_block(void)
...
@@ -206,9 +215,11 @@ static void do_info_block(void)
static
void
do_info_registers
(
void
)
static
void
do_info_registers
(
void
)
{
{
#ifdef TARGET_I386
#ifdef TARGET_I386
cpu_dump_state
(
cpu_single_env
,
stdout
,
X86_DUMP_FPU
|
X86_DUMP_CCOP
);
cpu_dump_state
(
cpu_single_env
,
stdout
,
monitor_fprintf
,
X86_DUMP_FPU
|
X86_DUMP_CCOP
);
#else
#else
cpu_dump_state
(
cpu_single_env
,
stdout
,
0
);
cpu_dump_state
(
cpu_single_env
,
stdout
,
monitor_fprintf
,
0
);
#endif
#endif
}
}
...
@@ -1852,6 +1863,15 @@ void readline_find_completion(const char *cmdline)
...
@@ -1852,6 +1863,15 @@ void readline_find_completion(const char *cmdline)
completion_index
=
strlen
(
str
);
completion_index
=
strlen
(
str
);
bdrv_iterate
(
block_completion_it
,
(
void
*
)
str
);
bdrv_iterate
(
block_completion_it
,
(
void
*
)
str
);
break
;
break
;
case
's'
:
/* XXX: more generic ? */
if
(
!
strcmp
(
cmd
->
name
,
"info"
))
{
completion_index
=
strlen
(
str
);
for
(
cmd
=
info_cmds
;
cmd
->
name
!=
NULL
;
cmd
++
)
{
cmd_completion
(
str
,
cmd
->
name
);
}
}
break
;
default:
default:
break
;
break
;
}
}
...
...
target-arm/cpu.h
浏览文件 @
7fe48483
...
@@ -64,8 +64,6 @@ struct siginfo;
...
@@ -64,8 +64,6 @@ struct siginfo;
int
cpu_arm_signal_handler
(
int
host_signum
,
struct
siginfo
*
info
,
int
cpu_arm_signal_handler
(
int
host_signum
,
struct
siginfo
*
info
,
void
*
puc
);
void
*
puc
);
void
cpu_arm_dump_state
(
CPUARMState
*
env
,
FILE
*
f
,
int
flags
);
#define TARGET_PAGE_BITS 12
#define TARGET_PAGE_BITS 12
#include "cpu-all.h"
#include "cpu-all.h"
...
...
target-arm/translate.c
浏览文件 @
7fe48483
...
@@ -824,18 +824,20 @@ void cpu_arm_close(CPUARMState *env)
...
@@ -824,18 +824,20 @@ void cpu_arm_close(CPUARMState *env)
free
(
env
);
free
(
env
);
}
}
void
cpu_arm_dump_state
(
CPUARMState
*
env
,
FILE
*
f
,
int
flags
)
void
cpu_dump_state
(
CPUState
*
env
,
FILE
*
f
,
int
(
*
cpu_fprintf
)(
FILE
*
f
,
const
char
*
fmt
,
...),
int
flags
)
{
{
int
i
;
int
i
;
for
(
i
=
0
;
i
<
16
;
i
++
)
{
for
(
i
=
0
;
i
<
16
;
i
++
)
{
fprintf
(
f
,
"R%02d=%08x"
,
i
,
env
->
regs
[
i
]);
cpu_
fprintf
(
f
,
"R%02d=%08x"
,
i
,
env
->
regs
[
i
]);
if
((
i
%
4
)
==
3
)
if
((
i
%
4
)
==
3
)
fprintf
(
f
,
"
\n
"
);
cpu_
fprintf
(
f
,
"
\n
"
);
else
else
fprintf
(
f
,
" "
);
cpu_
fprintf
(
f
,
" "
);
}
}
fprintf
(
f
,
"PSR=%08x %c%c%c%c
\n
"
,
cpu_
fprintf
(
f
,
"PSR=%08x %c%c%c%c
\n
"
,
env
->
cpsr
,
env
->
cpsr
,
env
->
cpsr
&
(
1
<<
31
)
?
'N'
:
'-'
,
env
->
cpsr
&
(
1
<<
31
)
?
'N'
:
'-'
,
env
->
cpsr
&
(
1
<<
30
)
?
'Z'
:
'-'
,
env
->
cpsr
&
(
1
<<
30
)
?
'Z'
:
'-'
,
...
...
target-i386/cpu.h
浏览文件 @
7fe48483
...
@@ -454,7 +454,6 @@ void cpu_x86_update_cr0(CPUX86State *env, uint32_t new_cr0);
...
@@ -454,7 +454,6 @@ void cpu_x86_update_cr0(CPUX86State *env, uint32_t new_cr0);
/* used to debug */
/* used to debug */
#define X86_DUMP_FPU 0x0001
/* dump FPU state too */
#define X86_DUMP_FPU 0x0001
/* dump FPU state too */
#define X86_DUMP_CCOP 0x0002
/* dump qemu flag cache */
#define X86_DUMP_CCOP 0x0002
/* dump qemu flag cache */
void
cpu_x86_dump_state
(
CPUX86State
*
env
,
FILE
*
f
,
int
flags
);
#define TARGET_PAGE_BITS 12
#define TARGET_PAGE_BITS 12
#include "cpu-all.h"
#include "cpu-all.h"
...
...
target-i386/helper.c
浏览文件 @
7fe48483
...
@@ -872,7 +872,7 @@ void do_interrupt(int intno, int is_int, int error_code,
...
@@ -872,7 +872,7 @@ void do_interrupt(int intno, int is_int, int error_code,
}
}
fprintf
(
logfile
,
"
\n
"
);
fprintf
(
logfile
,
"
\n
"
);
#if 0
#if 0
cpu_
x86_dump_state(env, logfile
, X86_DUMP_CCOP);
cpu_
dump_state(env, logfile, fprintf
, X86_DUMP_CCOP);
{
{
int i;
int i;
uint8_t *ptr;
uint8_t *ptr;
...
@@ -1334,7 +1334,7 @@ void helper_lcall_protected_T0_T1(int shift, int next_eip)
...
@@ -1334,7 +1334,7 @@ void helper_lcall_protected_T0_T1(int shift, int next_eip)
if
(
loglevel
&
CPU_LOG_PCALL
)
{
if
(
loglevel
&
CPU_LOG_PCALL
)
{
fprintf
(
logfile
,
"lcall %04x:%08x s=%d
\n
"
,
fprintf
(
logfile
,
"lcall %04x:%08x s=%d
\n
"
,
new_cs
,
new_eip
,
shift
);
new_cs
,
new_eip
,
shift
);
cpu_
x86_dump_state
(
env
,
logfile
,
X86_DUMP_CCOP
);
cpu_
dump_state
(
env
,
logfile
,
fprintf
,
X86_DUMP_CCOP
);
}
}
#endif
#endif
if
((
new_cs
&
0xfffc
)
==
0
)
if
((
new_cs
&
0xfffc
)
==
0
)
...
@@ -1596,7 +1596,7 @@ static inline void helper_ret_protected(int shift, int is_iret, int addend)
...
@@ -1596,7 +1596,7 @@ static inline void helper_ret_protected(int shift, int is_iret, int addend)
if
(
loglevel
&
CPU_LOG_PCALL
)
{
if
(
loglevel
&
CPU_LOG_PCALL
)
{
fprintf
(
logfile
,
"lret new %04x:%08x s=%d addend=0x%x
\n
"
,
fprintf
(
logfile
,
"lret new %04x:%08x s=%d addend=0x%x
\n
"
,
new_cs
,
new_eip
,
shift
,
addend
);
new_cs
,
new_eip
,
shift
,
addend
);
cpu_
x86_dump_state
(
env
,
logfile
,
X86_DUMP_CCOP
);
cpu_
dump_state
(
env
,
logfile
,
fprintf
,
X86_DUMP_CCOP
);
}
}
#endif
#endif
if
((
new_cs
&
0xfffc
)
==
0
)
if
((
new_cs
&
0xfffc
)
==
0
)
...
...
target-i386/helper2.c
浏览文件 @
7fe48483
...
@@ -168,14 +168,16 @@ static const char *cc_op_str[] = {
...
@@ -168,14 +168,16 @@ static const char *cc_op_str[] = {
"SARL"
,
"SARL"
,
};
};
void
cpu_x86_dump_state
(
CPUX86State
*
env
,
FILE
*
f
,
int
flags
)
void
cpu_dump_state
(
CPUState
*
env
,
FILE
*
f
,
int
(
*
cpu_fprintf
)(
FILE
*
f
,
const
char
*
fmt
,
...),
int
flags
)
{
{
int
eflags
,
i
;
int
eflags
,
i
;
char
cc_op_name
[
32
];
char
cc_op_name
[
32
];
static
const
char
*
seg_name
[
6
]
=
{
"ES"
,
"CS"
,
"SS"
,
"DS"
,
"FS"
,
"GS"
};
static
const
char
*
seg_name
[
6
]
=
{
"ES"
,
"CS"
,
"SS"
,
"DS"
,
"FS"
,
"GS"
};
eflags
=
env
->
eflags
;
eflags
=
env
->
eflags
;
fprintf
(
f
,
"EAX=%08x EBX=%08x ECX=%08x EDX=%08x
\n
"
cpu_
fprintf
(
f
,
"EAX=%08x EBX=%08x ECX=%08x EDX=%08x
\n
"
"ESI=%08x EDI=%08x EBP=%08x ESP=%08x
\n
"
"ESI=%08x EDI=%08x EBP=%08x ESP=%08x
\n
"
"EIP=%08x EFL=%08x [%c%c%c%c%c%c%c] CPL=%d II=%d A20=%d
\n
"
,
"EIP=%08x EFL=%08x [%c%c%c%c%c%c%c] CPL=%d II=%d A20=%d
\n
"
,
env
->
regs
[
R_EAX
],
env
->
regs
[
R_EBX
],
env
->
regs
[
R_ECX
],
env
->
regs
[
R_EDX
],
env
->
regs
[
R_EAX
],
env
->
regs
[
R_EBX
],
env
->
regs
[
R_ECX
],
env
->
regs
[
R_EDX
],
...
@@ -193,28 +195,28 @@ void cpu_x86_dump_state(CPUX86State *env, FILE *f, int flags)
...
@@ -193,28 +195,28 @@ void cpu_x86_dump_state(CPUX86State *env, FILE *f, int flags)
(
env
->
a20_mask
>>
20
)
&
1
);
(
env
->
a20_mask
>>
20
)
&
1
);
for
(
i
=
0
;
i
<
6
;
i
++
)
{
for
(
i
=
0
;
i
<
6
;
i
++
)
{
SegmentCache
*
sc
=
&
env
->
segs
[
i
];
SegmentCache
*
sc
=
&
env
->
segs
[
i
];
fprintf
(
f
,
"%s =%04x %08x %08x %08x
\n
"
,
cpu_
fprintf
(
f
,
"%s =%04x %08x %08x %08x
\n
"
,
seg_name
[
i
],
seg_name
[
i
],
sc
->
selector
,
sc
->
selector
,
(
int
)
sc
->
base
,
(
int
)
sc
->
base
,
sc
->
limit
,
sc
->
limit
,
sc
->
flags
);
sc
->
flags
);
}
}
fprintf
(
f
,
"LDT=%04x %08x %08x %08x
\n
"
,
cpu_
fprintf
(
f
,
"LDT=%04x %08x %08x %08x
\n
"
,
env
->
ldt
.
selector
,
env
->
ldt
.
selector
,
(
int
)
env
->
ldt
.
base
,
(
int
)
env
->
ldt
.
base
,
env
->
ldt
.
limit
,
env
->
ldt
.
limit
,
env
->
ldt
.
flags
);
env
->
ldt
.
flags
);
fprintf
(
f
,
"TR =%04x %08x %08x %08x
\n
"
,
cpu_
fprintf
(
f
,
"TR =%04x %08x %08x %08x
\n
"
,
env
->
tr
.
selector
,
env
->
tr
.
selector
,
(
int
)
env
->
tr
.
base
,
(
int
)
env
->
tr
.
base
,
env
->
tr
.
limit
,
env
->
tr
.
limit
,
env
->
tr
.
flags
);
env
->
tr
.
flags
);
fprintf
(
f
,
"GDT= %08x %08x
\n
"
,
cpu_
fprintf
(
f
,
"GDT= %08x %08x
\n
"
,
(
int
)
env
->
gdt
.
base
,
env
->
gdt
.
limit
);
(
int
)
env
->
gdt
.
base
,
env
->
gdt
.
limit
);
fprintf
(
f
,
"IDT= %08x %08x
\n
"
,
cpu_
fprintf
(
f
,
"IDT= %08x %08x
\n
"
,
(
int
)
env
->
idt
.
base
,
env
->
idt
.
limit
);
(
int
)
env
->
idt
.
base
,
env
->
idt
.
limit
);
fprintf
(
f
,
"CR0=%08x CR2=%08x CR3=%08x CR4=%08x
\n
"
,
cpu_
fprintf
(
f
,
"CR0=%08x CR2=%08x CR3=%08x CR4=%08x
\n
"
,
env
->
cr
[
0
],
env
->
cr
[
2
],
env
->
cr
[
3
],
env
->
cr
[
4
]);
env
->
cr
[
0
],
env
->
cr
[
2
],
env
->
cr
[
3
],
env
->
cr
[
4
]);
if
(
flags
&
X86_DUMP_CCOP
)
{
if
(
flags
&
X86_DUMP_CCOP
)
{
...
@@ -222,16 +224,16 @@ void cpu_x86_dump_state(CPUX86State *env, FILE *f, int flags)
...
@@ -222,16 +224,16 @@ void cpu_x86_dump_state(CPUX86State *env, FILE *f, int flags)
snprintf
(
cc_op_name
,
sizeof
(
cc_op_name
),
"%s"
,
cc_op_str
[
env
->
cc_op
]);
snprintf
(
cc_op_name
,
sizeof
(
cc_op_name
),
"%s"
,
cc_op_str
[
env
->
cc_op
]);
else
else
snprintf
(
cc_op_name
,
sizeof
(
cc_op_name
),
"[%d]"
,
env
->
cc_op
);
snprintf
(
cc_op_name
,
sizeof
(
cc_op_name
),
"[%d]"
,
env
->
cc_op
);
fprintf
(
f
,
"CCS=%08x CCD=%08x CCO=%-8s
\n
"
,
cpu_
fprintf
(
f
,
"CCS=%08x CCD=%08x CCO=%-8s
\n
"
,
env
->
cc_src
,
env
->
cc_dst
,
cc_op_name
);
env
->
cc_src
,
env
->
cc_dst
,
cc_op_name
);
}
}
if
(
flags
&
X86_DUMP_FPU
)
{
if
(
flags
&
X86_DUMP_FPU
)
{
fprintf
(
f
,
"ST0=%f ST1=%f ST2=%f ST3=%f
\n
"
,
cpu_
fprintf
(
f
,
"ST0=%f ST1=%f ST2=%f ST3=%f
\n
"
,
(
double
)
env
->
fpregs
[
0
],
(
double
)
env
->
fpregs
[
0
],
(
double
)
env
->
fpregs
[
1
],
(
double
)
env
->
fpregs
[
1
],
(
double
)
env
->
fpregs
[
2
],
(
double
)
env
->
fpregs
[
2
],
(
double
)
env
->
fpregs
[
3
]);
(
double
)
env
->
fpregs
[
3
]);
fprintf
(
f
,
"ST4=%f ST5=%f ST6=%f ST7=%f
\n
"
,
cpu_
fprintf
(
f
,
"ST4=%f ST5=%f ST6=%f ST7=%f
\n
"
,
(
double
)
env
->
fpregs
[
4
],
(
double
)
env
->
fpregs
[
4
],
(
double
)
env
->
fpregs
[
5
],
(
double
)
env
->
fpregs
[
5
],
(
double
)
env
->
fpregs
[
7
],
(
double
)
env
->
fpregs
[
7
],
...
...
target-i386/translate.c
浏览文件 @
7fe48483
...
@@ -4641,7 +4641,7 @@ static inline int gen_intermediate_code_internal(CPUState *env,
...
@@ -4641,7 +4641,7 @@ static inline int gen_intermediate_code_internal(CPUState *env,
#ifdef DEBUG_DISAS
#ifdef DEBUG_DISAS
if
(
loglevel
&
CPU_LOG_TB_CPU
)
{
if
(
loglevel
&
CPU_LOG_TB_CPU
)
{
cpu_dump_state
(
env
,
logfile
,
X86_DUMP_CCOP
);
cpu_dump_state
(
env
,
logfile
,
fprintf
,
X86_DUMP_CCOP
);
}
}
if
(
loglevel
&
CPU_LOG_TB_IN_ASM
)
{
if
(
loglevel
&
CPU_LOG_TB_IN_ASM
)
{
fprintf
(
logfile
,
"----------------
\n
"
);
fprintf
(
logfile
,
"----------------
\n
"
);
...
...
target-ppc/cpu.h
浏览文件 @
7fe48483
...
@@ -189,7 +189,6 @@ int cpu_ppc_signal_handler(int host_signum, struct siginfo *info,
...
@@ -189,7 +189,6 @@ int cpu_ppc_signal_handler(int host_signum, struct siginfo *info,
void
do_interrupt
(
CPUPPCState
*
env
);
void
do_interrupt
(
CPUPPCState
*
env
);
void
cpu_loop_exit
(
void
);
void
cpu_loop_exit
(
void
);
void
cpu_ppc_dump_state
(
CPUPPCState
*
env
,
FILE
*
f
,
int
flags
);
void
dump_stack
(
CPUPPCState
*
env
);
void
dump_stack
(
CPUPPCState
*
env
);
uint32_t
_load_xer
(
CPUPPCState
*
env
);
uint32_t
_load_xer
(
CPUPPCState
*
env
);
...
...
target-ppc/helper.c
浏览文件 @
7fe48483
...
@@ -521,7 +521,7 @@ int cpu_ppc_handle_mmu_fault (CPUState *env, uint32_t address, int rw,
...
@@ -521,7 +521,7 @@ int cpu_ppc_handle_mmu_fault (CPUState *env, uint32_t address, int rw,
do_fault:
do_fault:
#if defined (DEBUG_MMU)
#if defined (DEBUG_MMU)
if
(
loglevel
>
0
)
if
(
loglevel
>
0
)
cpu_
ppc_dump_state
(
env
,
logfile
,
0
);
cpu_
dump_state
(
env
,
logfile
,
fprintf
,
0
);
#endif
#endif
if
(
access_type
==
ACCESS_CODE
)
{
if
(
access_type
==
ACCESS_CODE
)
{
exception
=
EXCP_ISI
;
exception
=
EXCP_ISI
;
...
@@ -676,7 +676,7 @@ void do_interrupt (CPUState *env)
...
@@ -676,7 +676,7 @@ void do_interrupt (CPUState *env)
env
->
nip
,
excp
<<
8
,
env
->
error_code
);
env
->
nip
,
excp
<<
8
,
env
->
error_code
);
}
}
if
(
loglevel
>
0
)
if
(
loglevel
>
0
)
cpu_
ppc_dump_state
(
env
,
logfile
,
0
);
cpu_
dump_state
(
env
,
logfile
,
fprintf
,
0
);
}
}
#endif
#endif
if
(
loglevel
&
CPU_LOG_INT
)
{
if
(
loglevel
&
CPU_LOG_INT
)
{
...
...
target-ppc/op_helper.c
浏览文件 @
7fe48483
...
@@ -466,14 +466,14 @@ void do_store_dbat (int ul, int nr)
...
@@ -466,14 +466,14 @@ void do_store_dbat (int ul, int nr)
/* Special helpers for debug */
/* Special helpers for debug */
void
dump_state
(
void
)
void
dump_state
(
void
)
{
{
// cpu_
ppc_dump_state(env, stdout
, 0);
// cpu_
dump_state(env, stdout, fprintf
, 0);
}
}
void
dump_rfi
(
void
)
void
dump_rfi
(
void
)
{
{
#if 0
#if 0
printf("Return from interrupt => 0x%08x\n", env->nip);
printf("Return from interrupt => 0x%08x\n", env->nip);
// cpu_
ppc_dump_state(env, stdout
, 0);
// cpu_
dump_state(env, stdout, fprintf
, 0);
#endif
#endif
}
}
...
...
target-ppc/translate.c
浏览文件 @
7fe48483
...
@@ -2924,24 +2924,26 @@ static int create_ppc_proc (opc_handler_t **ppc_opcodes, unsigned long pvr)
...
@@ -2924,24 +2924,26 @@ static int create_ppc_proc (opc_handler_t **ppc_opcodes, unsigned long pvr)
/*****************************************************************************/
/*****************************************************************************/
/* Misc PPC helpers */
/* Misc PPC helpers */
void
cpu_ppc_dump_state
(
CPUPPCState
*
env
,
FILE
*
f
,
int
flags
)
void
cpu_dump_state
(
CPUState
*
env
,
FILE
*
f
,
int
(
*
cpu_fprintf
)(
FILE
*
f
,
const
char
*
fmt
,
...),
int
flags
)
{
{
int
i
;
int
i
;
fprintf
(
f
,
"nip=0x%08x LR=0x%08x CTR=0x%08x XER=0x%08x "
cpu_
fprintf
(
f
,
"nip=0x%08x LR=0x%08x CTR=0x%08x XER=0x%08x "
"MSR=0x%08x
\n
"
,
env
->
nip
,
env
->
lr
,
env
->
ctr
,
"MSR=0x%08x
\n
"
,
env
->
nip
,
env
->
lr
,
env
->
ctr
,
_load_xer
(
env
),
_load_msr
(
env
));
_load_xer
(
env
),
_load_msr
(
env
));
for
(
i
=
0
;
i
<
32
;
i
++
)
{
for
(
i
=
0
;
i
<
32
;
i
++
)
{
if
((
i
&
7
)
==
0
)
if
((
i
&
7
)
==
0
)
fprintf
(
f
,
"GPR%02d:"
,
i
);
cpu_
fprintf
(
f
,
"GPR%02d:"
,
i
);
fprintf
(
f
,
" %08x"
,
env
->
gpr
[
i
]);
cpu_
fprintf
(
f
,
" %08x"
,
env
->
gpr
[
i
]);
if
((
i
&
7
)
==
7
)
if
((
i
&
7
)
==
7
)
fprintf
(
f
,
"
\n
"
);
cpu_
fprintf
(
f
,
"
\n
"
);
}
}
fprintf
(
f
,
"CR: 0x"
);
cpu_
fprintf
(
f
,
"CR: 0x"
);
for
(
i
=
0
;
i
<
8
;
i
++
)
for
(
i
=
0
;
i
<
8
;
i
++
)
fprintf
(
f
,
"%01x"
,
env
->
crf
[
i
]);
cpu_
fprintf
(
f
,
"%01x"
,
env
->
crf
[
i
]);
fprintf
(
f
,
" ["
);
cpu_
fprintf
(
f
,
" ["
);
for
(
i
=
0
;
i
<
8
;
i
++
)
{
for
(
i
=
0
;
i
<
8
;
i
++
)
{
char
a
=
'-'
;
char
a
=
'-'
;
if
(
env
->
crf
[
i
]
&
0x08
)
if
(
env
->
crf
[
i
]
&
0x08
)
...
@@ -2950,22 +2952,21 @@ void cpu_ppc_dump_state(CPUPPCState *env, FILE *f, int flags)
...
@@ -2950,22 +2952,21 @@ void cpu_ppc_dump_state(CPUPPCState *env, FILE *f, int flags)
a
=
'G'
;
a
=
'G'
;
else
if
(
env
->
crf
[
i
]
&
0x02
)
else
if
(
env
->
crf
[
i
]
&
0x02
)
a
=
'E'
;
a
=
'E'
;
fprintf
(
f
,
" %c%c"
,
a
,
env
->
crf
[
i
]
&
0x01
?
'O'
:
' '
);
cpu_
fprintf
(
f
,
" %c%c"
,
a
,
env
->
crf
[
i
]
&
0x01
?
'O'
:
' '
);
}
}
fprintf
(
f
,
" ] "
);
cpu_
fprintf
(
f
,
" ] "
);
fprintf
(
f
,
"TB: 0x%08x %08x
\n
"
,
cpu_ppc_load_tbu
(
env
),
cpu_
fprintf
(
f
,
"TB: 0x%08x %08x
\n
"
,
cpu_ppc_load_tbu
(
env
),
cpu_ppc_load_tbl
(
env
));
cpu_ppc_load_tbl
(
env
));
for
(
i
=
0
;
i
<
16
;
i
++
)
{
for
(
i
=
0
;
i
<
16
;
i
++
)
{
if
((
i
&
3
)
==
0
)
if
((
i
&
3
)
==
0
)
fprintf
(
f
,
"FPR%02d:"
,
i
);
cpu_
fprintf
(
f
,
"FPR%02d:"
,
i
);
fprintf
(
f
,
" %016llx"
,
*
((
uint64_t
*
)
&
env
->
fpr
[
i
]));
cpu_
fprintf
(
f
,
" %016llx"
,
*
((
uint64_t
*
)
&
env
->
fpr
[
i
]));
if
((
i
&
3
)
==
3
)
if
((
i
&
3
)
==
3
)
fprintf
(
f
,
"
\n
"
);
cpu_
fprintf
(
f
,
"
\n
"
);
}
}
fprintf
(
f
,
"SRR0 0x%08x SRR1 0x%08x DECR=0x%08x
\n
"
,
cpu_
fprintf
(
f
,
"SRR0 0x%08x SRR1 0x%08x DECR=0x%08x
\n
"
,
env
->
spr
[
SRR0
],
env
->
spr
[
SRR1
],
cpu_ppc_load_decr
(
env
));
env
->
spr
[
SRR0
],
env
->
spr
[
SRR1
],
cpu_ppc_load_decr
(
env
));
fprintf
(
f
,
"reservation 0x%08x
\n
"
,
env
->
reserve
);
cpu_fprintf
(
f
,
"reservation 0x%08x
\n
"
,
env
->
reserve
);
fflush
(
f
);
}
}
#if !defined(CONFIG_USER_ONLY) && defined (USE_OPENFIRMWARE)
#if !defined(CONFIG_USER_ONLY) && defined (USE_OPENFIRMWARE)
...
@@ -3170,7 +3171,7 @@ int gen_intermediate_code_internal (CPUState *env, TranslationBlock *tb,
...
@@ -3170,7 +3171,7 @@ int gen_intermediate_code_internal (CPUState *env, TranslationBlock *tb,
#ifdef DEBUG_DISAS
#ifdef DEBUG_DISAS
if
(
loglevel
&
CPU_LOG_TB_CPU
)
{
if
(
loglevel
&
CPU_LOG_TB_CPU
)
{
fprintf
(
logfile
,
"---------------- excp: %04x
\n
"
,
ctx
.
exception
);
fprintf
(
logfile
,
"---------------- excp: %04x
\n
"
,
ctx
.
exception
);
cpu_
ppc_dump_state
(
env
,
logfile
,
0
);
cpu_
dump_state
(
env
,
logfile
,
fprintf
,
0
);
}
}
if
(
loglevel
&
CPU_LOG_TB_IN_ASM
)
{
if
(
loglevel
&
CPU_LOG_TB_IN_ASM
)
{
fprintf
(
logfile
,
"IN: %s
\n
"
,
lookup_symbol
((
void
*
)
pc_start
));
fprintf
(
logfile
,
"IN: %s
\n
"
,
lookup_symbol
((
void
*
)
pc_start
));
...
...
target-sparc/cpu.h
浏览文件 @
7fe48483
...
@@ -147,7 +147,6 @@ int cpu_sparc_close(CPUSPARCState *s);
...
@@ -147,7 +147,6 @@ int cpu_sparc_close(CPUSPARCState *s);
struct
siginfo
;
struct
siginfo
;
int
cpu_sparc_signal_handler
(
int
hostsignum
,
struct
siginfo
*
info
,
void
*
puc
);
int
cpu_sparc_signal_handler
(
int
hostsignum
,
struct
siginfo
*
info
,
void
*
puc
);
void
cpu_sparc_dump_state
(
CPUSPARCState
*
env
,
FILE
*
f
,
int
flags
);
#define TARGET_PAGE_BITS 12
/* 4k */
#define TARGET_PAGE_BITS 12
/* 4k */
#include "cpu-all.h"
#include "cpu-all.h"
...
...
target-sparc/helper.c
浏览文件 @
7fe48483
...
@@ -290,7 +290,7 @@ void do_interrupt(int intno, int is_int, int error_code,
...
@@ -290,7 +290,7 @@ void do_interrupt(int intno, int is_int, int error_code,
env
->
pc
,
env
->
pc
,
env
->
npc
,
env
->
regwptr
[
6
]);
env
->
npc
,
env
->
regwptr
[
6
]);
#if 0
#if 0
cpu_
sparc_dump_state(env, logfile
, 0);
cpu_
dump_state(env, logfile, fprintf
, 0);
{
{
int i;
int i;
uint8_t *ptr;
uint8_t *ptr;
...
...
target-sparc/translate.c
浏览文件 @
7fe48483
...
@@ -1391,44 +1391,46 @@ CPUSPARCState *cpu_sparc_init(void)
...
@@ -1391,44 +1391,46 @@ CPUSPARCState *cpu_sparc_init(void)
#define GET_FLAG(a,b) ((env->psr & a)?b:'-')
#define GET_FLAG(a,b) ((env->psr & a)?b:'-')
void
cpu_sparc_dump_state
(
CPUSPARCState
*
env
,
FILE
*
f
,
int
flags
)
void
cpu_dump_state
(
CPUState
*
env
,
FILE
*
f
,
int
(
*
cpu_fprintf
)(
FILE
*
f
,
const
char
*
fmt
,
...),
int
flags
)
{
{
int
i
,
x
;
int
i
,
x
;
fprintf
(
f
,
"pc: 0x%08x npc: 0x%08x
\n
"
,
(
int
)
env
->
pc
,
(
int
)
env
->
npc
);
cpu_
fprintf
(
f
,
"pc: 0x%08x npc: 0x%08x
\n
"
,
(
int
)
env
->
pc
,
(
int
)
env
->
npc
);
fprintf
(
f
,
"General Registers:
\n
"
);
cpu_
fprintf
(
f
,
"General Registers:
\n
"
);
for
(
i
=
0
;
i
<
4
;
i
++
)
for
(
i
=
0
;
i
<
4
;
i
++
)
fprintf
(
f
,
"%%g%c: 0x%08x
\t
"
,
i
+
'0'
,
env
->
gregs
[
i
]);
cpu_
fprintf
(
f
,
"%%g%c: 0x%08x
\t
"
,
i
+
'0'
,
env
->
gregs
[
i
]);
fprintf
(
f
,
"
\n
"
);
cpu_
fprintf
(
f
,
"
\n
"
);
for
(;
i
<
8
;
i
++
)
for
(;
i
<
8
;
i
++
)
fprintf
(
f
,
"%%g%c: 0x%08x
\t
"
,
i
+
'0'
,
env
->
gregs
[
i
]);
cpu_
fprintf
(
f
,
"%%g%c: 0x%08x
\t
"
,
i
+
'0'
,
env
->
gregs
[
i
]);
fprintf
(
f
,
"
\n
Current Register Window:
\n
"
);
cpu_
fprintf
(
f
,
"
\n
Current Register Window:
\n
"
);
for
(
x
=
0
;
x
<
3
;
x
++
)
{
for
(
x
=
0
;
x
<
3
;
x
++
)
{
for
(
i
=
0
;
i
<
4
;
i
++
)
for
(
i
=
0
;
i
<
4
;
i
++
)
fprintf
(
f
,
"%%%c%d: 0x%08x
\t
"
,
cpu_
fprintf
(
f
,
"%%%c%d: 0x%08x
\t
"
,
(
x
==
0
?
'o'
:
(
x
==
1
?
'l'
:
'i'
)),
i
,
(
x
==
0
?
'o'
:
(
x
==
1
?
'l'
:
'i'
)),
i
,
env
->
regwptr
[
i
+
x
*
8
]);
env
->
regwptr
[
i
+
x
*
8
]);
fprintf
(
f
,
"
\n
"
);
cpu_
fprintf
(
f
,
"
\n
"
);
for
(;
i
<
8
;
i
++
)
for
(;
i
<
8
;
i
++
)
fprintf
(
f
,
"%%%c%d: 0x%08x
\t
"
,
cpu_
fprintf
(
f
,
"%%%c%d: 0x%08x
\t
"
,
(
x
==
0
?
'o'
:
x
==
1
?
'l'
:
'i'
),
i
,
(
x
==
0
?
'o'
:
x
==
1
?
'l'
:
'i'
),
i
,
env
->
regwptr
[
i
+
x
*
8
]);
env
->
regwptr
[
i
+
x
*
8
]);
fprintf
(
f
,
"
\n
"
);
cpu_
fprintf
(
f
,
"
\n
"
);
}
}
fprintf
(
f
,
"
\n
Floating Point Registers:
\n
"
);
cpu_
fprintf
(
f
,
"
\n
Floating Point Registers:
\n
"
);
for
(
i
=
0
;
i
<
32
;
i
++
)
{
for
(
i
=
0
;
i
<
32
;
i
++
)
{
if
((
i
&
3
)
==
0
)
if
((
i
&
3
)
==
0
)
fprintf
(
f
,
"%%f%02d:"
,
i
);
cpu_
fprintf
(
f
,
"%%f%02d:"
,
i
);
fprintf
(
f
,
" %016lf"
,
env
->
fpr
[
i
]);
cpu_
fprintf
(
f
,
" %016lf"
,
env
->
fpr
[
i
]);
if
((
i
&
3
)
==
3
)
if
((
i
&
3
)
==
3
)
fprintf
(
f
,
"
\n
"
);
cpu_
fprintf
(
f
,
"
\n
"
);
}
}
fprintf
(
f
,
"psr: 0x%08x -> %c%c%c%c %c%c%c wim: 0x%08x
\n
"
,
GET_PSR
(
env
),
cpu_
fprintf
(
f
,
"psr: 0x%08x -> %c%c%c%c %c%c%c wim: 0x%08x
\n
"
,
GET_PSR
(
env
),
GET_FLAG
(
PSR_ZERO
,
'Z'
),
GET_FLAG
(
PSR_OVF
,
'V'
),
GET_FLAG
(
PSR_ZERO
,
'Z'
),
GET_FLAG
(
PSR_OVF
,
'V'
),
GET_FLAG
(
PSR_NEG
,
'N'
),
GET_FLAG
(
PSR_CARRY
,
'C'
),
GET_FLAG
(
PSR_NEG
,
'N'
),
GET_FLAG
(
PSR_CARRY
,
'C'
),
env
->
psrs
?
'S'
:
'-'
,
env
->
psrps
?
'P'
:
'-'
,
env
->
psrs
?
'S'
:
'-'
,
env
->
psrps
?
'P'
:
'-'
,
env
->
psret
?
'E'
:
'-'
,
env
->
wim
);
env
->
psret
?
'E'
:
'-'
,
env
->
wim
);
fprintf
(
f
,
"fsr: 0x%08x
\n
"
,
env
->
fsr
);
cpu_
fprintf
(
f
,
"fsr: 0x%08x
\n
"
,
env
->
fsr
);
}
}
target_ulong
cpu_get_phys_page_debug
(
CPUState
*
env
,
target_ulong
addr
)
target_ulong
cpu_get_phys_page_debug
(
CPUState
*
env
,
target_ulong
addr
)
...
...
vl.c
浏览文件 @
7fe48483
...
@@ -406,9 +406,9 @@ void hw_error(const char *fmt, ...)
...
@@ -406,9 +406,9 @@ void hw_error(const char *fmt, ...)
vfprintf
(
stderr
,
fmt
,
ap
);
vfprintf
(
stderr
,
fmt
,
ap
);
fprintf
(
stderr
,
"
\n
"
);
fprintf
(
stderr
,
"
\n
"
);
#ifdef TARGET_I386
#ifdef TARGET_I386
cpu_
x86_dump_state
(
global_env
,
stderr
,
X86_DUMP_FPU
|
X86_DUMP_CCOP
);
cpu_
dump_state
(
global_env
,
stderr
,
fprintf
,
X86_DUMP_FPU
|
X86_DUMP_CCOP
);
#else
#else
cpu_dump_state
(
global_env
,
stderr
,
0
);
cpu_dump_state
(
global_env
,
stderr
,
fprintf
,
0
);
#endif
#endif
va_end
(
ap
);
va_end
(
ap
);
abort
();
abort
();
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录