Bug #7719
closedОшибка при попытке запуска тестовых шаблонов
0%
Description
При попытке запуска любого из тестовых шаблонов выдаёт сообщение об ошибке. Модель генерируется без ошибок. Используется ОС windows 10 и java 8 (7 версия недоступна в открытом доступе).
Текст ошибки:
D:\work\microtesk\microtesk\arch\powerpc\templates>generate powerpc instruction_alu.rb D:\work\microtesk\microtesk\arch\powerpc\templates>java -ea -jar "D:\work\microtesk\microtesk/lib/jars/microtesk.jar" -g powerpc instruction_alu.rb Loaded template PowerPCBaseTemplate defined in D:/work/microtesk/microtesk/arch/powerpc/templates/powerpc_base.rb Loaded template InstructionALU defined in D:/work/microtesk/microtesk/arch/powerpc/templates/instruction_alu.rb Processing template InstructionALU defined in D:/work/microtesk/microtesk/arch/powerpc/templates/instruction_alu.rb... Instance number: 1 Error: Failed to load the ru.ispras.microtesk.model.powerpc.mmu.sim.Model class from D:\work\microtesk\microtesk\lib\jars\models.jar. Reason: ru.ispras.microtesk.model.powerpc.mmu.sim.Model ******************************************************************************** ATTENTION! An unexpected error has occurred: java.lang.IllegalArgumentException: Settings were not loaded. The program will be terminated. Please contact us at: microtesk-support@ispras.ru We are sorry for the inconvenience. Exception stack: java.lang.IllegalArgumentException: Settings were not loaded. at ru.ispras.fortress.util.InvariantChecks.checkTrue(ru/ispras/fortress/util/InvariantChecks.java:53) at ru.ispras.fortress.util.InvariantChecks.checkNotNull(ru/ispras/fortress/util/InvariantChecks.java:107) at ru.ispras.microtesk.test.sequence.engine.EngineContext.<init>(ru/ispras/microtesk/test/sequence/engine/EngineContext.java:69) at ru.ispras.microtesk.test.TestEngine.newTemplate(ru/ispras/microtesk/test/TestEngine.java:218) at RUBY.generate(D:/work/microtesk/microtesk/lib/ruby/template.rb:915) at RUBY.main(D:\work\microtesk\microtesk/lib/ruby/microtesk.rb:35) at org.jruby.RubyHash.each(org/jruby/RubyHash.java:1342) at RUBY.main(D:\work\microtesk\microtesk/lib/ruby/microtesk.rb:31) at RUBY.(root)(D:\work\microtesk\microtesk/lib/ruby/microtesk.rb:54) at ru.ispras.microtesk.test.TestEngine.processTemplate(ru/ispras/microtesk/test/TestEngine.java:169) at ru.ispras.microtesk.test.TestEngine.generate(ru/ispras/microtesk/test/TestEngine.java:158) at ru.ispras.microtesk.MicroTESK.generate(ru/ispras/microtesk/MicroTESK.java:200) at ru.ispras.microtesk.MicroTESK.main(ru/ispras/microtesk/MicroTESK.java:70) ********************************************************************************
Updated by Andrei Tatarnikov over 7 years ago
Используется ОС windows 10 и java 8 (7 версия недоступна в открытом доступе).
Вот на этой странице есть ссылки на JDK 7.80:
http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
http://download.oracle.com/otn-pub/java/jdk/7u80-b15/jdk-7u80-windows-i586.exe
http://download.oracle.com/otn-pub/java/jdk/7u80-b15/jdk-7u80-windows-x64.exe
Это подойдет?
Хотя проблема необязательно в версии Java. Здесь что-то не так с конфигурационными файлами.
Updated by Andrei Tatarnikov over 7 years ago
- Status changed from New to Feedback
- Assignee set to Pavel Putro
Проблема происходит из-за того, что в файле <MICROTESK_HOME>/etc/settings.xml
, который вы используете, не хватает ссылки на настройки для PowerPC, которые хранятся в файле <MICROTESK_HOME>/arch/powerpc/settings.xml
.
Когда запускается генерация, MicroTESK выполяется следующие шаги:
1. Загружает глобальные настройки из файла <MICROTESK_HOME>/etc/settings.xml
.
2. Загружает настройки для выбранной архитектуры (в нашем случае powerpc
), храняшиеся в файле, путь к которому задается глобальной настройкой arch-dirs
. Эти настройки на зачитались.
Похоже, что вы взяли файл <MICROTESK_HOME>/etc/settings.xml
из проекта MicroTESK, который не содержит информации о PowerPC. Он должен выглядеть так (обратить внимание на powerpc=arch/powerpc/settings.xml):
<?xml version="1.0" encoding="utf-8"?>
<settings>
<setting name="random-seed" value="0"/>
<setting name="branch-exec-limit" value="200"/>
<setting name="code-file-extension" value="s"/>
<setting name="code-file-prefix" value="test"/>
<setting name="data-file-extension" value="s"/>
<setting name="data-file-prefix" value="data"/>
<setting name="exception-file-prefix" value="boot"/>
<setting name="program-length-limit" value="10000"/>
<setting name="trace-length-limit" value="100000"/>
<setting name="comments-enabled" value=""/>
<setting name="comments-debug" value=""/>
<setting name="default-test-data" value=""/>
<setting name="reserve-explicit" value="true"/>
<setting name="tarmac-log" value="true"/>
<setting
name="arch-dirs"
value="powerpc=arch/powerpc/settings.xml:cpu=arch/demo/cpu/settings.xml:vliw=arch/demo/vliw/settings.xml:minimips=arch/minimips/settings.xml"
/>
</settings>
Со своей стороны я поправил реализацию. Сейчас в таких случаях, будет выводиться сообщение об ошибке типа "Failed to start generation. The --arch-dirs option does not contain path to settings for powerpc."
Updated by Pavel Putro over 7 years ago
- Status changed from Feedback to Resolved
Данное решение помогло. Тесты удалось сгенерировать.
Updated by Andrei Tatarnikov over 7 years ago
Хорошо.
P.S: Когда будешь создавать новый баг, поставь галочку в Watchers напротив меня (Andrei Tatarnikov). Тогда я буду получать e-mail'ы и смогу сразу что-то ответить.
Updated by Alexey Khoroshilov over 7 years ago
Andrei Tatarnikov wrote:
P.S: Когда будешь создавать новый баг, поставь галочку в Watchers напротив меня (Andrei Tatarnikov). Тогда я буду получать e-mail'ы и смогу сразу что-то ответить.
В redmine, чтобы получать уведомления о всех тикетах в проекте (что часто бывает весьма полезно), надо пойти по ссылке My account и поставить галочки у проектов, за котороми хочешь следить.
Updated by Alexander Protsenko about 7 years ago
Небольшое замечание относительно "syntax" у инструкций.
В качестве примера предлагаю рассмотреть addi
op addi (rd: R, ra: R, simm: SHORT) syntax = format("addi %s, %s, %d", rd.syntax, ra.syntax, simm)
Для переменных типа SHORT (int(16)) и прочих card(X) в выводе syntax надо использовать %d.
Иначе данные будут выводиться в двоичном формате:
rlwinm r14, r13, 11111, 10000, 01111
Это инструкция rlwinm, вот пример кода с ошибкой:
internal op rlwinm_general (Rc_op: BIT, ra: R, rs: R, SH: SHIFT, MB: SHIFT, ME: SHIFT) syntax = format("%s, %s, %s, %s, %s", ra.syntax, rs.syntax, SH, MB, ME)
Правильный вариант должен выглядеть так:
syntax = format("%s, %s, %d, %d, %d", ra.syntax, rs.syntax, SH, MB, ME)
Updated by Alexander Protsenko about 7 years ago
- Status changed from Resolved to Open
Updated by Pavel Putro about 7 years ago
- Status changed from Open to Resolved
- Assignee deleted (
Pavel Putro)
Поправил спецификации.
У меня возник один вопрос. Есть ли в MicroTESK поддержка аргументов со значениями по умолчанию? А то, к примеру, у операции bclr есть зарезервированные биты (в теории могут быть любыми), а также т.н. hint от компилятора, который при кодировании инструкции, по идее, явно указываться не должен.
Updated by Andrei Tatarnikov about 7 years ago
Т.е. у инструкций есть поля, которые не должны на что-либо влиять?
Ты можешь объявить параметр инструкции (например, op instr(..., hint: card(3)
) и использовать его только в атрибуте image
. Тогда декодер будет считывать его значение, но использоваться оно нигде больше не будет и при печати в виде текста его не видно будет.
Если нужно вызывать эту инструкцию из Ruby без этого параметра (предполагая, что ему присвоено некое значение по умолчанию), то это можно сделать двумя способами:
- Определить в nML всевдоинструкцию, которая будет вызывать данную инструкцию с фиксированным значением этого аргумента.
- Объявить в Ruby (в базовом шаблоне для PowerPC) метод, который будет вызывать данную инструкцию с фиксированным значением этого аргумента.
Updated by Andrei Tatarnikov about 7 years ago
Главное - проблема и именами. Перегрузка методов в Ruby и перегрузка операций в nML не разрешаются. Тогда у Ruby-метода или псевдоинструкции должно быть нормальное имя, а у вызываемой - фиктивное с каким-нибудь суффиксом (op <name>_<suffix>(...)
). В аттрибуте syntax тоже будет нормальное имя - и "подмена" снаружи будет назаметна.
Updated by Sergey Smolov over 4 years ago
- Status changed from Resolved to Verified
- Detected in build changed from svn to master
Updated by Sergey Smolov over 4 years ago
- Status changed from Verified to Closed