提交 c73483e4 创建 作者: Silas Boyd-Wickizer's avatar Silas Boyd-Wickizer

Merge branch 'scale-amd64' of git+ssh://amsterdam.csail.mit.edu/home/am0/6.828/xv6 into scale-amd64

...@@ -18,6 +18,14 @@ SECTIONS ...@@ -18,6 +18,14 @@ SECTIONS
*(.prof) *(.prof)
} }
PROVIDE(eprof = .); PROVIDE(eprof = .);
PROVIDE(sctors = .);
.ctors : {
KEEP(*(SORT(.ctors.*)));
KEEP(*(.ctors));
}
PROVIDE(ectors = .);
. = ALIGN(0x1000); . = ALIGN(0x1000);
.data : { .data : {
*(.data .data.* .gnu.linkonce.d.*) *(.data .data.* .gnu.linkonce.d.*)
......
...@@ -36,7 +36,6 @@ void initnet(void); ...@@ -36,7 +36,6 @@ void initnet(void);
void initsched(void); void initsched(void);
void initlockstat(void); void initlockstat(void);
void initwq(void); void initwq(void);
void initsperf(void);
void initidle(void); void initidle(void);
void initcpprt(void); void initcpprt(void);
void initfutex(void); void initfutex(void);
...@@ -133,6 +132,11 @@ cmain(u64 mbmagic, u64 mbaddr) ...@@ -133,6 +132,11 @@ cmain(u64 mbmagic, u64 mbaddr)
{ {
extern u64 cpuhz; extern u64 cpuhz;
// Call global constructors
extern const uptr sctors[], ectors[];
for (const uptr *ctorva = ectors; ctorva > sctors; )
((void(*)()) *--ctorva)();
initpg(); initpg();
inithz(); // CPU Hz, microdelay inithz(); // CPU Hz, microdelay
initpic(); // interrupt controller initpic(); // interrupt controller
...@@ -144,7 +148,6 @@ cmain(u64 mbmagic, u64 mbaddr) ...@@ -144,7 +148,6 @@ cmain(u64 mbmagic, u64 mbaddr)
initacpi(); initacpi();
initseg(); initseg();
initsperf();
inittrap(); inittrap();
initlapic(); initlapic();
initcmdline(); initcmdline();
......
...@@ -9,11 +9,3 @@ using namespace scopedperf; ...@@ -9,11 +9,3 @@ using namespace scopedperf;
static tsc_ctr tsc; static tsc_ctr tsc;
ctrgroup_chain<tsc_ctr> perfgroup(&tsc); ctrgroup_chain<tsc_ctr> perfgroup(&tsc);
// but xv6 doesn't run static constructors, so call them explicitly below..
void
initsperf()
{
new (&tsc) tsc_ctr();
new (&perfgroup) ctrgroup_chain<tsc_ctr>(&tsc);
}
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论