Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenXiangShan
nexus-am
提交
63f9d378
N
nexus-am
项目概览
OpenXiangShan
/
nexus-am
10 个月 前同步成功
通知
0
Star
21
Fork
25
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
N
nexus-am
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
63f9d378
编写于
4月 24, 2020
作者:
Z
Zihao Yu
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'jyy-upstream' into 'master'
Jyy upstream See merge request projectn/nexus-am!43
上级
ed7744a5
e1f877d2
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
14 addition
and
18 deletion
+14
-18
am/arch/native.mk
am/arch/native.mk
+3
-0
am/src/native/platform.c
am/src/native/platform.c
+6
-12
am/src/native/platform.h
am/src/native/platform.h
+2
-2
am/src/native/vme.c
am/src/native/vme.c
+3
-3
am/src/x86/qemu/x86-qemu.h
am/src/x86/qemu/x86-qemu.h
+0
-1
未找到文件。
am/arch/native.mk
浏览文件 @
63f9d378
...
...
@@ -19,3 +19,6 @@ image:
run
:
$(BINARY)
gdb
:
gdb
-ex
"handle SIGUSR1 SIGSEGV noprint nostop"
$(BINARY)
am/src/native/platform.c
浏览文件 @
63f9d378
#define _GNU_SOURCE
#include <sys/mman.h>
#include <sys/auxv.h>
#include <fcntl.h>
#include <elf.h>
#include <stdlib.h>
#include "platform.h"
...
...
@@ -10,7 +10,6 @@
#define PMEM_START (void *)0x3000000 // for nanos-lite with vme disabled
#define PMEM_SIZE (128 * 1024 * 1024) // 128MB
static
int
pmem_fd
=
0
;
static
char
pmem_shm_file
[]
=
"/native-pmem-XXXXXX"
;
static
void
*
pmem
=
NULL
;
static
ucontext_t
uc_example
=
{};
static
int
sys_pgsz
;
...
...
@@ -57,16 +56,14 @@ int main(const char *args);
static
void
init_platform
()
__attribute__
((
constructor
));
static
void
init_platform
()
{
// create shared memory object and set up mapping to simulate the physical memory
assert
(
access
(
"/"
,
W_OK
)
!=
0
);
assert
(
mkstemp
(
pmem_shm_file
)
<
0
);
pmem_fd
=
shm_open
(
pmem_shm_file
,
O_RDWR
|
O_CREAT
|
O_EXCL
,
0700
);
// create memory object and set up mapping to simulate the physical memory
pmem_fd
=
memfd_create
(
"pmem"
,
0
);
assert
(
pmem_fd
!=
-
1
);
assert
(
0
==
ftruncate
(
pmem_fd
,
PMEM_SIZE
));
pmem
=
mmap
(
PMEM_START
,
PMEM_SIZE
,
PROT_READ
|
PROT_WRITE
|
PROT_EXEC
,
MAP_SHARED
|
MAP_FIXED
,
pmem_fd
,
0
);
assert
(
_heap
.
start
!=
(
void
*
)
-
1
);
assert
(
pmem
!=
(
void
*
)
-
1
);
// allocate private per-cpu structure
thiscpu
=
mmap
(
NULL
,
sizeof
(
*
thiscpu
),
PROT_READ
|
PROT_WRITE
,
...
...
@@ -159,16 +156,13 @@ static void init_platform() {
}
void
__am_exit_platform
(
int
code
)
{
int
ret
=
shm_unlink
(
pmem_shm_file
);
printf
(
"Unlink pmem_shm_file %s
\n
"
,
(
ret
==
0
?
"successfully"
:
"fail"
));
// let Linux clean up other resource
extern
int
__am_mpe_init
;
if
(
__am_mpe_init
&&
_ncpu
()
>
1
)
kill
(
0
,
SIGKILL
);
exit
(
code
);
}
void
__am_
shm_m
map
(
void
*
va
,
void
*
pa
,
int
prot
)
{
void
__am_
pmem_
map
(
void
*
va
,
void
*
pa
,
int
prot
)
{
// translate AM prot to mmap prot
int
mmap_prot
=
PROT_NONE
;
// we do not support executable bit, so mark
...
...
@@ -180,7 +174,7 @@ void __am_shm_mmap(void *va, void *pa, int prot) {
assert
(
ret
!=
(
void
*
)
-
1
);
}
void
__am_
shm_m
unmap
(
void
*
va
)
{
void
__am_
pmem_
unmap
(
void
*
va
)
{
int
ret
=
munmap
(
va
,
__am_pgsize
);
assert
(
ret
==
0
);
}
...
...
am/src/native/platform.h
浏览文件 @
63f9d378
...
...
@@ -11,8 +11,8 @@ void __am_get_example_uc(_Context *r);
void
__am_get_intr_sigmask
(
sigset_t
*
s
);
int
__am_is_sigmask_sti
(
sigset_t
*
s
);
void
__am_init_timer_irq
();
void
__am_
shm_m
map
(
void
*
va
,
void
*
pa
,
int
prot
);
void
__am_
shm_m
unmap
(
void
*
va
);
void
__am_
pmem_
map
(
void
*
va
,
void
*
pa
,
int
prot
);
void
__am_
pmem_
unmap
(
void
*
va
);
// per-cpu structure
typedef
struct
{
...
...
am/src/native/vme.c
浏览文件 @
63f9d378
...
...
@@ -46,7 +46,7 @@ void __am_switch(_Context *c) {
// munmap all mappings
list_foreach
(
pp
,
thiscpu
->
vm_head
)
{
if
(
pp
->
is_mapped
)
{
__am_
shm_m
unmap
(
pp
->
va
);
__am_
pmem_
unmap
(
pp
->
va
);
pp
->
is_mapped
=
false
;
}
}
...
...
@@ -56,7 +56,7 @@ void __am_switch(_Context *c) {
// mmap all mappings
list_foreach
(
pp
,
head
)
{
assert
(
IN_RANGE
(
pp
->
va
,
USER_SPACE
));
__am_
shm_m
map
(
pp
->
va
,
pp
->
pa
,
pp
->
prot
);
__am_
pmem_
map
(
pp
->
va
,
pp
->
pa
,
pp
->
prot
);
pp
->
is_mapped
=
true
;
}
}
...
...
@@ -90,7 +90,7 @@ void _map(_AddressSpace *as, void *va, void *pa, int prot) {
if
(
vm_head
==
thiscpu
->
vm_head
)
{
// enforce the map immediately
__am_
shm_m
map
(
pp
->
va
,
pp
->
pa
,
pp
->
prot
);
__am_
pmem_
map
(
pp
->
va
,
pp
->
pa
,
pp
->
prot
);
pp
->
is_mapped
=
true
;
}
}
...
...
am/src/x86/qemu/x86-qemu.h
浏览文件 @
63f9d378
...
...
@@ -51,7 +51,6 @@ struct cpu_local {
TSS32
tss
;
#endif
struct
kernel_stack
stack
;
struct
kernel_stack
irq_stack
;
};
#if __x86_64__
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录