Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
X
xv6-public
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
问题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
银宸时代
OS Lab Group
奖励实验
xv6-public
提交
623f09fa
提交
623f09fa
4月 02, 2012
创建
作者:
Nickolai Zeldovich
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
more precisely fish out needed code from libsupc++
上级
23869406
隐藏空白字符变更
内嵌
并排
正在显示
7 个修改的文件
包含
121 行增加
和
28 行删除
+121
-28
Makefile
Makefile
+1
-1
Makefrag
bin/Makefrag
+1
-1
proc.hh
include/proc.hh
+1
-0
Makefrag
kernel/Makefrag
+27
-5
cpprt.cc
kernel/cpprt.cc
+89
-20
proc.cc
kernel/proc.cc
+1
-0
Makefrag
lib/Makefrag
+1
-1
没有找到文件。
Makefile
浏览文件 @
623f09fa
...
...
@@ -32,7 +32,7 @@ COMFLAGS = -static -g -MD -m64 -O3 -Wall -Werror -DHW_$(HW) -DXV6 \
-mno-sse
-mcx16
-mno-red-zone
$(INCLUDES)
COMFLAGS
+=
$(
shell
$(CC)
-fno-stack-protector
-E
-x
c /dev/null
>
/dev/null 2>&1
&&
echo
-fno-stack-protector
)
-nostdinc
-I
$(
shell
$(CC)
-print-file-name
=
include
)
CFLAGS
:=
$(COMFLAGS)
-std
=
c99
$(CFLAGS)
CXXFLAGS
:=
$(COMFLAGS)
-std
=
c++0x
-Wno-sign-compare
-
fno-rtti
-fcheck-new
-
nostdinc
++
$(CXXFLAGS)
CXXFLAGS
:=
$(COMFLAGS)
-std
=
c++0x
-Wno-sign-compare
-nostdinc
++
$(CXXFLAGS)
ASFLAGS
=
-Iinclude
-I
$(O)
/include
-m64
-gdwarf-2
-MD
-DHW_
$(HW)
-include
param.h
LDFLAGS
=
-m
elf_x86_64
...
...
bin/Makefrag
浏览文件 @
623f09fa
$(O)/bin/%.o: CFLAGS:=$(CFLAGS) -DXV6_USER
$(O)/bin/%.o: CXXFLAGS:=$(CXXFLAGS) -DXV6_USER -fno-exceptions
$(O)/bin/%.o: CXXFLAGS:=$(CXXFLAGS) -DXV6_USER -fno-exceptions
-fno-rtti
UPROGS= \
bench \
...
...
include/proc.hh
浏览文件 @
623f09fa
...
...
@@ -83,6 +83,7 @@ struct proc : public rcu_freed {
int
run_cpuid_
;
int
in_exec_
;
int
uaccess_
;
u8
__cxa_eh_global
[
16
];
static
proc
*
alloc
();
void
set_state
(
procstate_t
s
);
...
...
kernel/Makefrag
浏览文件 @
623f09fa
...
...
@@ -51,22 +51,42 @@ OBJS = \
wqlib.o \
script.o \
zalloc.o \
incbin.o
incbin.o \
gccsup/eh_personality.o \
gccsup/eh_catch.o \
gccsup/eh_throw.o \
gccsup/eh_call.o \
gccsup/eh_exception.o \
gccsup/eh_alloc.o \
gccsup/eh_terminate.o \
gccsup/tinfo.o \
gccsup/class_type_info.o \
gccsup/si_class_type_info.o \
gccsup/vmi_class_type_info.o \
gccsup/fundamental_type_info.o \
gccsup/pointer_type_info.o \
gccsup/pbase_type_info.o \
OBJS := $(addprefix $(O)/kernel/, $(OBJS))
KERN = $(O)/kernel.elf
ALL += $(KERN)
$(O)/kernel/%.o: CFLAGS+=-mcmodel=kernel -DXV6_KERNEL
$(O)/kernel/%.o: CXXFLAGS+=-mcmodel=kernel -DXV6_KERNEL
-fno-exceptions
$(O)/kernel/%.o: CXXFLAGS+=-mcmodel=kernel -DXV6_KERNEL
$(KERN): $(O)/kernel/boot.o $(OBJS) $(LDEPS) kernel/kernel.ld
@echo " LD $@"
$(Q)mkdir -p $(@D)
$(Q)$(LD) $(LDFLAGS) -T kernel/kernel.ld -z max-page-size=4096 -e start \
-o $@ $(O)/kernel/boot.o $(OBJS) -L$(O) $(LFLAGS)
# $(shell $(CC) -print-file-name=libgcc_eh.a) \
# $(shell $(CC) -print-file-name=libsupc++.a)
-o $@ $(O)/kernel/boot.o $(OBJS) -L$(O) $(LFLAGS) \
$(shell $(CC) -print-file-name=libgcc_eh.a)
LIBSUPCPP := $(shell $(CC) -print-file-name=libsupc++.a)
$(O)/kernel/gccsup/%: $(LIBSUPCPP)
@echo " AR $@"
$(Q)mkdir -p $(@D)
$(Q)( cd $(O)/kernel/gccsup && ar x $(LIBSUPCPP) $(@F) )
$(O)/kernel/%.o: lib/%.cc
@echo " CXX $@"
...
...
@@ -99,3 +119,5 @@ $(O)/kernel/uaccess.o: $(O)/include/asmdefines.h
.PRECIOUS: $(O)/kernel/%.o
-include $(O)/kernel/*.d
# vim: set noexpandtab:
kernel/cpprt.cc
浏览文件 @
623f09fa
...
...
@@ -3,21 +3,38 @@
#include "cpputil.hh"
#include "spinlock.h"
#include "amd64.h"
#include "condvar.h"
#include "proc.hh"
#include "cpu.hh"
void
*
void
*
operator
new
(
unsigned
long
nbytes
)
{
u64
*
x
=
(
u64
*
)
kmalloc
(
nbytes
+
sizeof
(
u64
),
"cpprt new"
);
*
x
=
nbytes
;
return
x
+
1
;
}
void
operator
delete
(
void
*
p
)
{
u64
*
x
=
(
u64
*
)
p
;
kmfree
(
x
-
1
,
x
[
-
1
]
+
sizeof
(
u64
));
}
void
*
operator
new
[](
unsigned
long
nbytes
)
{
u64
*
x
=
(
u64
*
)
kmalloc
(
nbytes
+
sizeof
(
u64
),
"array"
);
*
x
=
nbytes
+
sizeof
(
u64
)
;
u64
*
x
=
(
u64
*
)
kmalloc
(
nbytes
+
sizeof
(
u64
),
"array"
);
*
x
=
nbytes
;
return
x
+
1
;
}
void
operator
delete
[](
void
*
p
)
operator
delete
[](
void
*
p
)
{
u64
*
x
=
(
u64
*
)
p
;
x
--
;
kmfree
(
x
,
*
x
);
u64
*
x
=
(
u64
*
)
p
;
kmfree
(
x
-
1
,
x
[
-
1
]
+
sizeof
(
u64
));
}
void
...
...
@@ -26,12 +43,44 @@ __cxa_pure_virtual(void)
panic
(
"__cxa_pure_virtual"
);
}
// Ugh: libsupc++ calls syscall(SYS_futex, ...)
extern
"C"
u64
syscall
(
void
);
u64
syscall
(
void
)
int
__cxa_guard_acquire
(
s64
*
guard
)
{
return
0
;
volatile
u8
*
x
=
(
u8
*
)
guard
;
volatile
u32
*
l
=
(
u32
*
)
(
x
+
4
);
pushcli
();
while
(
xchg32
(
l
,
1
)
!=
0
)
;
/* spin */
if
(
*
x
)
{
xchg32
(
l
,
0
);
popcli
();
return
0
;
}
return
1
;
}
void
__cxa_guard_release
(
s64
*
guard
)
{
volatile
u8
*
x
=
(
u8
*
)
guard
;
volatile
u32
*
l
=
(
u32
*
)
(
x
+
4
);
*
x
=
1
;
__sync_synchronize
();
xchg32
(
l
,
0
);
popcli
();
}
void
__cxa_guard_abort
(
s64
*
guard
)
{
volatile
u8
*
x
=
(
u8
*
)
guard
;
volatile
u32
*
l
=
(
u32
*
)
(
x
+
4
);
xchg32
(
l
,
0
);
popcli
();
}
int
...
...
@@ -40,11 +89,19 @@ __cxa_atexit(void (*f)(void*), void *p, void *d)
return
0
;
}
extern
"C"
void
abort
(
void
);
void
abort
(
void
)
{
panic
(
"abort"
);
}
void
*
__dso_handle
;
std
::
ostream
std
::
cout
;
namespace
std
{
std
::
ostream
cout
;
template
<>
u128
atomic
<
u128
>::
load
(
memory_order
__m
)
const
...
...
@@ -70,12 +127,10 @@ atomic<u128>::compare_exchange_weak(u128 &__i1, u128 i2, memory_order __m)
};
extern
"C"
void
abort
(
void
);
void
abort
(
void
)
{
panic
(
"abort"
);
}
namespace
__cxxabiv1
{
void
(
*
__terminate_handler
)()
=
abort
;
void
(
*
__unexpected_handler
)()
=
abort
;
};
extern
"C"
void
*
malloc
(
size_t
);
void
*
...
...
@@ -91,7 +146,7 @@ void
free
(
void
*
vp
)
{
u64
*
p
=
(
u64
*
)
vp
;
kmfree
(
vp
,
p
[
-
1
]
);
kmfree
(
p
-
1
,
p
[
-
1
]
+
8
);
}
extern
"C"
void
*
realloc
(
void
*
,
size_t
);
...
...
@@ -165,3 +220,17 @@ fputs(const char* s, int stream)
cprintf
(
"%s"
,
s
);
return
0
;
}
extern
"C"
void
*
__cxa_get_globals
(
void
);
void
*
__cxa_get_globals
(
void
)
{
return
myproc
()
->
__cxa_eh_global
;
}
extern
"C"
void
*
__cxa_get_globals_fast
(
void
);
void
*
__cxa_get_globals_fast
(
void
)
{
return
myproc
()
->
__cxa_eh_global
;
}
kernel/proc.cc
浏览文件 @
623f09fa
...
...
@@ -54,6 +54,7 @@ proc::proc(int npid) :
memset
(
&
runqlink
,
0
,
sizeof
(
runqlink
));
memset
(
&
cv_waiters
,
0
,
sizeof
(
cv_waiters
));
memset
(
&
cv_sleep
,
0
,
sizeof
(
cv_sleep
));
memset
(
__cxa_eh_global
,
0
,
sizeof
(
__cxa_eh_global
));
}
proc
::~
proc
(
void
)
...
...
lib/Makefrag
浏览文件 @
623f09fa
$(O)/lib/%.o: CFLAGS:=$(CFLAGS) -DXV6_USER
$(O)/lib/%.o: CXXFLAGS:=$(CXXFLAGS) -DXV6_USER -fno-exceptions
$(O)/lib/%.o: CXXFLAGS:=$(CXXFLAGS) -DXV6_USER -fno-exceptions
-fno-rtti
ULIB = ulib.o usys.o printf.o umalloc.o uthread.o fmt.o stream.o ipc.o \
threads.o crt.o wqlib.o wquser.o perf.o wqalloc.o
...
...
编写
预览
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论