Project

General

Profile

Actions

Bug #13968

open
PP AP

Декодирование кода из бинарного формата не учитывает assert-ы

Bug #13968: Декодирование кода из бинарного формата не учитывает assert-ы

Added by Pavel Putro 15 days ago. Updated 6 days ago.

Status:
Feedback
Priority:
Normal
Category:
Disassembler
Target version:
-
Start date:
09/23/2026
Due date:
% Done:

0%

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

Description

Используемая модель riscv32 (RV32FULL).
Конфликт возникает между инструкциями c_lui и c_addi16sp. Эти инструкции делят один опкод и выбор корректной инструкции при декодировании определяется её аргументами. Различить их на уровне модели позволяет строка assert(rd.i != 2, "C.LUI: rd == x2 (invalid)"); в спецификации c_lui. Однако MicroTESK при декодировании из бинарного формата не учитывает этот assert и декодирует код 0x7179 в некорректную инструкцию c.lui sp, 0x3e, а не c.addi16sp -48.
В приложенном архиве:
f.bin - бинарный код, подаваемый на вход microtesk
f.s - вывод microtesk с некорректными инструкциями на строках 1 и 35
f_objdump.s - вывод стандартной утилиты objdump. Вместо c.addi16sp imm используется формат addi sp, sp, imm
f.mir - лог построения mir.


Files

build_f.zip (122 KB) build_f.zip Pavel Putro, 09/23/2026 08:55 AM

AP Updated by Alexander Protsenko 6 days ago Actions #1

  • Status changed from New to Open

Модель riscv, сборка с параметром: specRevision=RV32FULL
Запуск примера в Eclipse командой: -dp -d riscv riscv_examples\\build_f\\f.bin.
Было:

c.lui sp, 0x3e
c.swsp ra, 44(sp)
c.swsp s0, 40(sp)
...
c.lwsp s0, 40(sp)
c.lui sp, 0x11
c.jr ra

Стало:

c.addi16sp sp, -48
c.swsp ra, 44(sp)
c.swsp s0, 40(sp)
...
c.lwsp s0, 40(sp)
c.addi16sp sp, 48
c.jr ra

Необходимо обновить версию MicroTESK for RISC-V.

AP Updated by Alexander Protsenko 6 days ago Actions #2

  • Status changed from Open to Feedback

@Pavel Putro переведи задачу в статус "Resolved", если эта ошибка больше не проявляется.

Actions

Also available in: PDF Atom