gpt4 book ai didi

haskell - 如何扩展 GHC 的线程状态对象

转载 作者:行者123 更新时间:2023-12-03 23:57:33 25 4
gpt4 key购买 nike

我想添加两个类型为 StgWord32 的额外字段到线程状态对象(TSO)。根据我在 GHC-Wiki 上找到的信息和查看源代码,我扩展了 /includes/rts/storage/TSO.h 中的结构并更改了创建不同偏移量的程序(创建 DerivedConstants.h )。编译器、rts 和一个简单的应用程序重新编译,但在执行结束时(在 hs_exit_ 中)垃圾收集器提示:

 internal error: scavenge_stack: weird activation record found on stack: 45

我想它必须与 cmm和/或 STG 实现细节(由于结构在 cmm 级别不可见,因此生成偏移量,如果我错了,请纠正我)。字段的顺序是否重要?我错过了应该更改的文件吗?

我在 64 位架构上使用编译器和 RTS 的调试版本以及相当过时的 ghc 6.12.3。对相关文档和评论的任何提示
关于 ghc 6 和 7 在 TSO 处理方面的区别也值得欢迎。

最佳答案

您得到的错误来自:ghc/rts/sm/Scav.c .特别是在第 1917 行:

 default:
barf("scavenge_stack: weird activation record found on stack: %d", (int)(info->i.type));

看来您还需要修改 ClosureTypes.h ,您可以在 ghc/includes/rts/storage 中找到.该文件似乎包含可以出现在堆对象中的不同类型的 header 。我还遇到了一些奇怪的引导错误,如果我尝试使用 stage-1 编译器进行重建,我会得到你提到的错误,但如果我进行干净的构建,那么它编译得很好。

关于haskell - 如何扩展 GHC 的线程状态对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29607663/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com