Vijos (OS)现已支持C++异常

Vijos (OS)现在支持C++异常了。

其实不需要对OS或libc做很多修改, 只需要正确编写链接器的参数。具体而言, 链接时的对象应当严格按照这个顺序: crt1.o、crti.o、crtbegin.o、待链接的对象以及依赖的函数库(包括libc、libstdc++、libsupc++、libgcc、libgcc_eh等等)、crtend.o。其中, 静态链接时crtbegin一定要使用crtbeginT.o。crtbeginT.o里面比crtbegin.o多一个frame_dummy函数, 该函数会调用__register_frame_info来注册C++异常处理、unwind相关的数据。不调用该函数就会导致catch不到任何异常。

crt开头的.o文件的用途可以在网上查询。

参考资料:

  1. https://wiki.osdev.org/Creating_a_C_Library
  2. https://wiki.osdev.org/Calling_Global_Constructors
  3. https://wiki.osdev.org/C%2B%2B
  4. https://wiki.osdev.org/C%2B%2B_Exception_Support
  5. https://wiki.osdev.org/Libsupcxx#Full_C.2B.2B_Runtime_Support_Using_libgcc_And_libsupc.2B.2B
  6. https://itanium-cxx-abi.github.io/cxx-abi/abi.html
  7. https://itanium-cxx-abi.github.io/cxx-abi/abi-eh.html
  8. http://dbp-consulting.com/tutorials/debugging/linuxProgramStartup.html

发表评论

注意 - 你可以用以下 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/14438QrCode