Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
X
xv6-public
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
问题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
银宸时代
OS Lab Group
奖励实验
xv6-public
提交
23869406
提交
23869406
4月 02, 2012
创建
作者:
Nickolai Zeldovich
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ugh: runtime support for c++ exception handling
(links, but crashes if an exception is thrown).
上级
2a78d8e2
隐藏空白字符变更
内嵌
并排
正在显示
7 个修改的文件
包含
109 行增加
和
49 行删除
+109
-49
Makefile
Makefile
+1
-1
Makefrag
bin/Makefrag
+1
-1
kernel.hh
include/kernel.hh
+1
-1
Makefrag
kernel/Makefrag
+3
-1
cpprt.cc
kernel/cpprt.cc
+101
-27
Makefrag
lib/Makefrag
+2
-2
rt.c
lib/rt.c
+0
-16
没有找到文件。
Makefile
浏览文件 @
23869406
...
...
@@ -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-
exceptions
-fno-
rtti
-fcheck-new
-nostdinc
++
$(CXXFLAGS)
CXXFLAGS
:=
$(COMFLAGS)
-std
=
c++0x
-Wno-sign-compare
-fno-rtti
-fcheck-new
-nostdinc
++
$(CXXFLAGS)
ASFLAGS
=
-Iinclude
-I
$(O)
/include
-m64
-gdwarf-2
-MD
-DHW_
$(HW)
-include
param.h
LDFLAGS
=
-m
elf_x86_64
...
...
bin/Makefrag
浏览文件 @
23869406
$(O)/bin/%.o: CFLAGS:=$(CFLAGS) -DXV6_USER
$(O)/bin/%.o: CXXFLAGS:=$(CXXFLAGS) -DXV6_USER
$(O)/bin/%.o: CXXFLAGS:=$(CXXFLAGS) -DXV6_USER
-fno-exceptions
UPROGS= \
bench \
...
...
include/kernel.hh
浏览文件 @
23869406
...
...
@@ -219,7 +219,7 @@ char* safestrcpy(char*, const char*, size_t);
extern
"C"
unsigned
int
strlen
(
const
char
*
);
int
strncmp
(
const
char
*
,
const
char
*
,
size_t
);
char
*
strncpy
(
char
*
,
const
char
*
,
size_t
);
int
strcmp
(
const
char
*
p
,
const
char
*
q
);
extern
"C"
int
strcmp
(
const
char
*
p
,
const
char
*
q
);
// swtch.S
void
swtch
(
struct
context
**
,
struct
context
*
);
...
...
kernel/Makefrag
浏览文件 @
23869406
...
...
@@ -58,13 +58,15 @@ KERN = $(O)/kernel.elf
ALL += $(KERN)
$(O)/kernel/%.o: CFLAGS+=-mcmodel=kernel -DXV6_KERNEL
$(O)/kernel/%.o: CXXFLAGS+=-mcmodel=kernel -DXV6_KERNEL
$(O)/kernel/%.o: CXXFLAGS+=-mcmodel=kernel -DXV6_KERNEL
-fno-exceptions
$(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)/kernel/%.o: lib/%.cc
@echo " CXX $@"
...
...
kernel/cpprt.cc
浏览文件 @
23869406
...
...
@@ -26,34 +26,12 @@ __cxa_pure_virtual(void)
panic
(
"__cxa_pure_virtual"
);
}
int
__cxa_guard_acquire
(
s64
*
guard
)
{
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
)
// Ugh: libsupc++ calls syscall(SYS_futex, ...)
extern
"C"
u64
syscall
(
void
);
u64
syscall
(
void
)
{
volatile
u8
*
x
=
(
u8
*
)
guard
;
volatile
u32
*
l
=
(
u32
*
)
(
x
+
4
);
*
x
=
1
;
__sync_synchronize
();
xchg32
(
l
,
0
);
popcli
();
return
0
;
}
int
...
...
@@ -91,3 +69,99 @@ atomic<u128>::compare_exchange_weak(u128 &__i1, u128 i2, memory_order __m)
}
};
extern
"C"
void
abort
(
void
);
void
abort
(
void
)
{
panic
(
"abort"
);
}
extern
"C"
void
*
malloc
(
size_t
);
void
*
malloc
(
size_t
n
)
{
u64
*
p
=
(
u64
*
)
kmalloc
(
n
+
8
,
"cpprt malloc"
);
*
p
=
n
;
return
p
+
1
;
}
extern
"C"
void
free
(
void
*
);
void
free
(
void
*
vp
)
{
u64
*
p
=
(
u64
*
)
vp
;
kmfree
(
vp
,
p
[
-
1
]);
}
extern
"C"
void
*
realloc
(
void
*
,
size_t
);
void
*
realloc
(
void
*
vp
,
size_t
n
)
{
u64
*
p
=
(
u64
*
)
vp
;
u64
*
np
=
(
u64
*
)
malloc
(
n
);
memcpy
(
np
,
p
,
p
[
-
1
]);
free
(
p
);
return
np
;
}
extern
"C"
int
dl_iterate_phdr
(
void
);
int
dl_iterate_phdr
(
void
)
{
return
-
1
;
}
extern
"C"
int
__sprintf_chk
(
char
*
buf
,
int
flags
,
size_t
n
,
const
char
*
fmt
,
...);
int
__sprintf_chk
(
char
*
buf
,
int
flags
,
size_t
n
,
const
char
*
fmt
,
...)
{
va_list
ap
;
va_start
(
ap
,
fmt
);
vsnprintf
(
buf
,
n
,
fmt
,
ap
);
va_end
(
ap
);
return
0
;
// XXX
}
extern
"C"
void
__stack_chk_fail
(
void
);
void
__stack_chk_fail
(
void
)
{
panic
(
"stack_chk_fail"
);
}
extern
"C"
char
*
strcpy
(
char
*
,
const
char
*
);
char
*
strcpy
(
char
*
dst
,
const
char
*
src
)
{
return
strncpy
(
dst
,
src
,
__SIZE_MAX__
);
}
// stdio stubs to satisfy libsupc++
int
stderr
=
1
;
extern
"C"
int
fputc
(
int
c
,
int
stream
);
int
fputc
(
int
c
,
int
stream
)
{
cprintf
(
"%c"
,
(
u8
)
c
);
return
(
u8
)
c
;
}
extern
"C"
size_t
fwrite
(
const
void
*
buf
,
size_t
n
,
size_t
nmemb
,
int
stream
);
size_t
fwrite
(
const
void
*
buf
,
size_t
n
,
size_t
nmemb
,
int
stream
)
{
cprintf
(
"%s"
,
(
char
*
)
buf
);
return
n
;
}
extern
"C"
int
fputs
(
const
char
*
s
,
int
stream
);
int
fputs
(
const
char
*
s
,
int
stream
)
{
cprintf
(
"%s"
,
s
);
return
0
;
}
lib/Makefrag
浏览文件 @
23869406
$(O)/lib/%.o: CFLAGS:=$(CFLAGS) -DXV6_USER
$(O)/lib/%.o: CXXFLAGS:=$(CXXFLAGS) -DXV6_USER
$(O)/lib/%.o: CXXFLAGS:=$(CXXFLAGS) -DXV6_USER
-fno-exceptions
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
rt.o
threads.o crt.o wqlib.o wquser.o perf.o wqalloc.o
ULIB := $(addprefix $(O)/lib/, $(ULIB))
.PRECIOUS: $(O)/lib/%.o
...
...
lib/rt.c
deleted
100644 → 0
浏览文件 @
2a78d8e2
#include "types.h"
#include "user.h"
void
abort
(
void
)
{
char
*
p
=
(
char
*
)
1
;
*
p
=
1
;
exit
();
}
int
dl_iterate_phdr
(
void
)
{
return
-
1
;
}
编写
预览
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论