Ретаргетинг gcc/llvm для новой гарвардской архитектуры RISC
Мне было интересно, если кто-то с опытом работы с компиляторами может сказать мне, если моя идея осуществима или нет.
По сути, я собираюсь предложить проектную идею одному из моих профессоров и пройти "курс проекта" - я не буду здесь подробно описывать процесс, просто скажу, что это курс по студенческому проекту, где я могу предложить идею.
Я собираюсь сделать новый RISC ISA (похожий на MIPS, но без слотов задержки, без плавающей запятой...) и написать для него программный эмулятор, так как это должно быть сделано полностью программно.
Но я собираюсь сделать это с процессором Гарвардской архитектуры - то есть данные не могут быть выполнены; Код и данные хранятся отдельно.
Сделать ISA и эмулятор для него относительно легко, я не ожидаю столкнуться с чем-то, с чем я еще не знаком.
Затем я хочу создать gcc или llvm для моего нового ISA, чтобы программы на C могли быть скомпилированы для моего нового ISA.
Теперь я никогда не писал компилятор. Учитывая, что мой ISA в основном смоделирован после MIPS, я могу просто моделировать бэкэнд после бэкэнда MIPS (или другого RISC).
У меня есть вопрос об архитектуре Гарварда. Должен ли я столкнуться с серьезными проблемами здесь? Как это усложнит процесс генерации кода?
В конце я напишу отчет о моем эмулируемом процессоре Harvard и проанализирую некоторые его аспекты безопасности (например, запрет на выполнение данных может предотвратить атаки переполнения буфера и т. Д. И т. Д.).
В случае, если я злоупотребил здесь термином "Гарвардская архитектура", позвольте мне уточнить, что я имею в виду. Я не говорю о внутренних кешах или чем-то подобном. Я просто имею в виду, что процессор хранит код и данные отдельно, чтобы данные не могли быть выполнены.