幽灵仁

2021-03-18 13:26:36

使用最新的提交,C ++运行时功能(最值得注意的例外)和线程本地存储现在都支持可执行文件和共享库。

修改了工具链构建,以便现在构建了Libgcc libgcc_s.so.1的共享版本。使用-shared-libgcc作为链接器标志现在将导致libgcc动态链接,因此允许异常处理多个共享对象。

i' ve调整了测试套件现在调用运行时测试程序,对全局构造函数,异常处理和TLS执行多个测试。

通过那些添加,共享库支持现在应该足以继续工作,以继续在其他部分上工作,因此下一步将在新的内核实现中实现进程间消息传递。

0评论

我终于在内核和#39; SELF32装载机中实现了对共享库对象的基本支持。这可以在分支动态链接中找到。

这为此的主要动机正在提高可执行文件的大小,并作为未来绩效改进的准备。当前实现始终早期绑定所有符号(因此它表现得像LD_Bind_Now已设置),因此尚未使用延迟链接。

通过此更改,Libc,libghostapi和libuser的构建过程,其中还适用,因此它们另外发出.so文件。因此,默认情况下,系统库libc和libghostapi现在将被链接共享。 "卡莫伦" Demo程序用于现在测试各种功能。

当共享库提供或访问这样的变量时,下一步骤是对线程本地存储的支持。在现有实现中,加载主对象的TLS段,并将该TLS主站的副本分配给每个线程。现在使用共享库时有一些工作,因为每个加载的ELF对象都可以具有TLS段和必须满足的TLS重新定位。为此,必须调整过程结构,以便稍后可以存储和评估所有这些信息。

无论如何,看看,但看看这个漂亮的小共享库呼叫:-)

5点评论

Redux分支现在支持内核级线程和线程系统调用。以前的实现仅支持有一些优势的用户空间线程,但也使特定的呼叫实现更复杂。这种方法将提高效率并长期允许更好的调度实现。

有一些有趣的问题可以解决;由于内核线程可能在持有内核锁时会导致中断,G_MUTEX实现现在必须跟踪每个处理器保持的锁数。只要任务持有内核锁,就不会安排其他任务,直到任务完成工作。

系统调用现在可以注册为线程或直接呼叫。执行线程呼叫时,在内核级线程中调用相应的处理程序。这些处理任务因同一任务而重复使用连续的系统调用。这允许在呼叫处理期间抢占并避免阻止调度器以用于长时间运行的请求。

8评论 现在可以在此处找到文档。 它将定期从GitHub存储库更新。 已经更新以匹配Redux分支的某些部分,但某些部分也与现有代码大多相关。 3评论 更新到Binutils 2.31和GCC 8.2.0。 使用这个分支,我终于开始了我计划更长的时间 - 做出代码库的更大重构。 主要焦点将重写Taskign实现。 在我的初步计划中,我认为实施Syscall-Logic是可以在服务员结构中花费一些时间的可行性。 这些服务员现在又非常复杂,我觉得使用实际的内核线程对于一些任务来说更有意义。 我还更新了关于如何在本地机器上构建Ghost的文档 - i' m很快就完成了这个网站。

7点评论