当前位置:   article > 正文

2402d,d的静态构造器

2402d,d的静态构造器

原文
在D中是如何实现的静态构造器?印象是,druntime启动代码遍历,在可执行文件中存储的某种表.但显然这是依赖操作系统的,我试让静态构造器wasm中工作,但找不到方法.

我研究的druntime代码都勾挂到依赖于可执行格式的东西,显然还没有wasm的.

这在wasm中甚至可能吗,或我是否遗漏了一些明显的东西

它主要依赖于二进制格式,是编译器druntime之间的合作.
一般,编译器发射不可链接时去掉的指向生成ModuleInfo结构的指针到一个(__minfo,.minfo等)特殊节,把每个.d模块编译到特定的目标文件中.
链接到可执行文件/共享库后,在数据段的命名节连续存储每个链接目标文件的所有.d模块的ModuleInfo指针.

这样,druntime可通过取ModuleInfo指针的数据区间(如,通过链接器生成的__{start,stop}___minfoELF括号符号)来反射链接二进制文件的所有D模块/ModuleInfos.从那里可推导出模块构造器,单元测试等.

这在wasm中甚至可能吗,还是我错过了一些明显的东西

LDC有个外来平台回退,它使用链表编译器生成的,在初化程序时(按未定义的顺序)插入ModuleInfo指针,由C运行时,在Cmain()之前调用的CRT构造器.

因此,如果wasm不支持命名节/数据区间,但"隐式"支持可能潜在路线的初化器函数(CRT构造器).

哦,好吧,wasm-ld(即lld)支持与ELF完全相同的神奇__{start,stop}_*符号:这里

哦,伙计,我甚至为此添加了一个LDC测试,但差不多4年前就忘记了.

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/111229
推荐阅读