课程大作业需要运行sv6, 然而sv6是5年前写的, 用现在的编译器编译, 会有如下一些问题。经修复, 可运行。
- (可选) 编译器选项的-std=c++0x改为-std=c++11
- 关闭-Werror, 因为warning实在无法修复
- 注释掉用到了has_trivial_default_constructor的代码段, 因为此类模板已被废弃
- G++生成的函数__gxx_personality_v0中, 为保护栈, 用到了fs段寄存器, 直接运行会产生page fault, 所以需要对fs寄存器及其基址寄存器进行初始化, 加入: static char fs_base[0x200]; writefs(KDSEG); writemsr(MSR_FS_BASE, (uint64_t)&fs_base);可以暂时解决这个问题
- __thread已废弃, 需要改为thread_local
注: x86-64长模式下, fs段寄存器意义与保护模式下的意义不同。
谷歌观光团路过…