我想在线程状态对象(TSO)中添加两个额外的StgWord32
类型字段。根据我在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实现细节有关(偏移量是由于在级别上结构体不可见生成的,如果我错了请纠正我)。字段的顺序重要吗?我错过了应该更改的文件吗?
我使用编译器和运行时系统的调试版本,在64位架构上使用相当陈旧的ghc 6.12.3。对于有关ghc 6和7之间TSO处理差异的相关文档和评论的任何提示也非常欢迎。