我想向线程状态对象 (TSO) 添加两个额外的StgWord32
类型字段。根据我在 GHC-Wiki 上找到的信息和查看源代码,我扩展了结构/includes/rts/storage/TSO.h
并更改了创建不同偏移量的程序(创建DerivedConstants.h
)。编译器、rts 和一个简单的应用程序重新编译,但在执行结束时(in 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 处理的差异的评论。