Я хотел бы добавить два дополнительных поля типа 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, исправьте меня, если я ошибаюсь). Значит ли порядок полей? Я пропустил файл, который нужно изменить?
Я использую отладочную сборку компилятора и RTS и довольно датированный ghc 6.12.3 в 64-битной архитектуре. Любые намеки на соответствующую документацию и комментарии о разнице между ghc 6 и 7 относительно обработки TSO также приветствуются.