Project

General

Profile

Bug #7719

Ошибка при попытке запуска тестовых шаблонов

Added by Pavel Putro over 3 years ago. Updated about 1 month ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Target version:
-
Start date:
11/11/2016
Due date:
% Done:

0%

Estimated time:
Detected in build:
master
Platform:
Published in build:

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)

********************************************************************************

History

#1

Updated by Andrei Tatarnikov over 3 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. Здесь что-то не так с конфигурационными файлами.

#2

Updated by Andrei Tatarnikov over 3 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."

#3

Updated by Pavel Putro over 3 years ago

  • Status changed from Feedback to Resolved

Данное решение помогло. Тесты удалось сгенерировать.

#4

Updated by Andrei Tatarnikov over 3 years ago

Хорошо.

P.S: Когда будешь создавать новый баг, поставь галочку в Watchers напротив меня (Andrei Tatarnikov). Тогда я буду получать e-mail'ы и смогу сразу что-то ответить.

#5

Updated by Alexey Khoroshilov over 3 years ago

Andrei Tatarnikov wrote:

P.S: Когда будешь создавать новый баг, поставь галочку в Watchers напротив меня (Andrei Tatarnikov). Тогда я буду получать e-mail'ы и смогу сразу что-то ответить.

В redmine, чтобы получать уведомления о всех тикетах в проекте (что часто бывает весьма полезно), надо пойти по ссылке My account и поставить галочки у проектов, за котороми хочешь следить.

#6

Updated by Alexander Kamkin over 3 years ago

  • Description updated (diff)
#7

Updated by Alexander Protsenko about 3 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)

#8

Updated by Alexander Protsenko about 3 years ago

  • Status changed from Resolved to Open
#9

Updated by Pavel Putro about 3 years ago

  • Status changed from Open to Resolved
  • Assignee deleted (Pavel Putro)

Поправил спецификации.

У меня возник один вопрос. Есть ли в MicroTESK поддержка аргументов со значениями по умолчанию? А то, к примеру, у операции bclr есть зарезервированные биты (в теории могут быть любыми), а также т.н. hint от компилятора, который при кодировании инструкции, по идее, явно указываться не должен.

#10

Updated by Andrei Tatarnikov about 3 years ago

Т.е. у инструкций есть поля, которые не должны на что-либо влиять?

Ты можешь объявить параметр инструкции (например, op instr(..., hint: card(3)) и использовать его только в атрибуте image. Тогда декодер будет считывать его значение, но использоваться оно нигде больше не будет и при печати в виде текста его не видно будет.

Если нужно вызывать эту инструкцию из Ruby без этого параметра (предполагая, что ему присвоено некое значение по умолчанию), то это можно сделать двумя способами:

  1. Определить в nML всевдоинструкцию, которая будет вызывать данную инструкцию с фиксированным значением этого аргумента.
  2. Объявить в Ruby (в базовом шаблоне для PowerPC) метод, который будет вызывать данную инструкцию с фиксированным значением этого аргумента.
#11

Updated by Andrei Tatarnikov about 3 years ago

Главное - проблема и именами. Перегрузка методов в Ruby и перегрузка операций в nML не разрешаются. Тогда у Ruby-метода или псевдоинструкции должно быть нормальное имя, а у вызываемой - фиктивное с каким-нибудь суффиксом (op <name>_<suffix>(...)). В аттрибуте syntax тоже будет нормальное имя - и "подмена" снаружи будет назаметна.

#12

Updated by Sergey Smolov about 1 month ago

  • Detected in build changed from svn to master
  • Status changed from Resolved to Verified
#13

Updated by Sergey Smolov about 1 month ago

  • Status changed from Verified to Closed

Also available in: Atom PDF