Я хотел бы добавить два дополнительных поля типа 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 также приветствуются.