运行sv6

课程大作业需要运行sv6, 然而sv6是5年前写的, 用现在的编译器编译, 会有如下一些问题。经修复, 可运行。

  1. (可选) 编译器选项的-std=c++0x改为-std=c++11
  2. 关闭-Werror, 因为warning实在无法修复
  3. 注释掉用到了has_trivial_default_constructor的代码段, 因为此类模板已被废弃
  4. G++生成的函数__gxx_personality_v0中, 为保护栈, 用到了fs段寄存器, 直接运行会产生page fault, 所以需要对fs寄存器及其基址寄存器进行初始化, 加入: static char fs_base[0x200]; writefs(KDSEG); writemsr(MSR_FS_BASE, (uint64_t)&fs_base);可以暂时解决这个问题
  5. __thread已废弃, 需要改为thread_local

注: x86-64长模式下, fs段寄存器意义与保护模式下的意义不同。

发表评论?

1 条评论。

  1. 谷歌观光团路过… :wink:

发表评论

注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

:wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)

本文链接:https://twd2.me/archives/10571QrCode