Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
X
xv6-public
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
问题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
银宸时代
OS Lab Group
奖励实验
xv6-public
提交
53d7ac6f
提交
53d7ac6f
4月 02, 2012
创建
作者:
Nickolai Zeldovich
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
dl_iterate_phdr
上级
3f3c2501
显示空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
34 行增加
和
7 行删除
+34
-7
boot.S
kernel/boot.S
+1
-1
cpprt.cc
kernel/cpprt.cc
+28
-4
kernel.ld
kernel/kernel.ld
+5
-2
没有找到文件。
kernel/boot.S
浏览文件 @
53d7ac6f
...
@@ -33,7 +33,7 @@ multiboot_header:
...
@@ -33,7 +33,7 @@ multiboot_header:
.long flags
.long flags
.long (- magic - flags) # checksum
.long (- magic - flags) # checksum
.long PADDR(multiboot_header) # header address
.long PADDR(multiboot_header) # header address
.long PADDR(multiboot_header)
# load addres
s
.long PADDR(multiboot_header)
-0x1000 # load address, incl elf header
s
.long PADDR(edata) # load end address
.long PADDR(edata) # load end address
.long PADDR(end) # bss end address
.long PADDR(end) # bss end address
.long PADDR(start) # entry address
.long PADDR(start) # entry address
...
...
kernel/cpprt.cc
浏览文件 @
53d7ac6f
...
@@ -6,6 +6,7 @@
...
@@ -6,6 +6,7 @@
#include "condvar.h"
#include "condvar.h"
#include "proc.hh"
#include "proc.hh"
#include "cpu.hh"
#include "cpu.hh"
#include "elf.hh"
void
*
void
*
operator
new
(
unsigned
long
nbytes
)
operator
new
(
unsigned
long
nbytes
)
...
@@ -159,11 +160,34 @@ free(void* vp)
...
@@ -159,11 +160,34 @@ free(void* vp)
kmfree
(
p
-
1
,
p
[
-
1
]
+
8
);
kmfree
(
p
-
1
,
p
[
-
1
]
+
8
);
}
}
extern
"C"
int
dl_iterate_phdr
(
void
);
struct
dl_phdr_info
{
Elf64_Addr
dlpi_addr
;
const
char
*
dlpi_name
;
const
struct
proghdr
*
dlpi_phdr
;
Elf64_Half
dlpi_phnum
;
unsigned
long
long
int
dlpi_adds
;
unsigned
long
long
int
dlpi_subs
;
};
extern
"C"
int
dl_iterate_phdr
(
int
(
*
cb
)
(
struct
dl_phdr_info
*
info
,
size_t
size
,
void
*
data
),
void
*
data
);
int
int
dl_iterate_phdr
(
void
)
dl_iterate_phdr
(
int
(
*
cb
)
(
struct
dl_phdr_info
*
info
,
size_t
size
,
void
*
data
),
{
void
*
data
)
return
-
1
;
{
extern
char
multiboot_header
[];
elfhdr
*
eh
=
(
elfhdr
*
)
&
multiboot_header
[
-
0x1000
];
assert
(
eh
->
magic
==
ELF_MAGIC
);
struct
dl_phdr_info
info
;
info
.
dlpi_addr
=
0
;
info
.
dlpi_name
=
"kernel"
;
info
.
dlpi_phdr
=
(
proghdr
*
)
(((
char
*
)
eh
)
+
eh
->
phoff
);
info
.
dlpi_phnum
=
eh
->
phnum
;
info
.
dlpi_adds
=
0
;
info
.
dlpi_subs
=
0
;
return
cb
(
&
info
,
sizeof
(
struct
dl_phdr_info
),
data
);
}
}
extern
"C"
void
__stack_chk_fail
(
void
);
extern
"C"
void
__stack_chk_fail
(
void
);
...
...
kernel/kernel.ld
浏览文件 @
53d7ac6f
...
@@ -4,9 +4,12 @@ ENTRY(xxx)
...
@@ -4,9 +4,12 @@ ENTRY(xxx)
SECTIONS
SECTIONS
{
{
. = 0xFFFFFFFFC0100000;
/* Skip one page to leave room for ELF headers.
* See multiboot_header and dl_iterate_phdr.
*/
. = 0xFFFFFFFFC0101000;
PROVIDE(text = .);
PROVIDE(text = .);
.text : AT(0x10
0
000) {
.text : AT(0x10
1
000) {
*(.text .stub .text.* .gnu.linkonce.t.*)
*(.text .stub .text.* .gnu.linkonce.t.*)
}
}
.rodata : {
.rodata : {
...
...
编写
预览
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论