Как генерировать ловушки SPARC HW (тип ловушки tt ‹ 128)

Я программирую систему SPARC v8 (32-битную), и мне нужно проверить реакцию на аппаратные ловушки.

SPARC предоставляет 256 ловушек, каждая из которых отличается типом ловушки, tt, из которых первые 128 являются аппаратными ловушками, а типы ловушек со 128 по 255 являются программными ловушками. . В документах набора инструкций SPARC говорится, что выполнение

ta N    ; trap always, n = 0..127

вызывает ловушку типа tt=N+128. Ловушка вызывает переход на базовый адрес ловушки + tt * 16.

Есть ли способ программно вызвать аппаратную ловушку без написания кода, демонстрирующего каждое из условий аппаратной ловушки, таких как потеря значимости окна, невыровненный доступ и т. д.?

Я подумываю об установке программных обработчиков ловушек, которые просто переходят к обработчику ловушек (N-128) и держат пальцы скрещенными. Мне не нравится эта идея, потому что ловушки HW могут вызвать изменение состояния другого процессора, чего ловушка SW не изменила бы...


person Jens    schedule 12.07.2018    source источник
comment
Как правило, нет, но ваша конкретная реализация Sparc v8 может иметь интерфейс отладки, который позволяет тестировать аппаратные сбои, если это возможно, обратитесь к поставщику.   -  person cb88    schedule 30.07.2018


Ответы (1)


Есть ли способ программно вызвать аппаратную ловушку без написания кода, демонстрирующего каждое из условий аппаратной ловушки, таких как потеря значимости окна, невыровненный доступ и т. д.?

Нет, программно воспроизвести все эффекты аппаратной ловушки невозможно. Например, настоящая аппаратная ловушка устанавливает tt (поле типа ловушки) в регистре TBR, чтобы указать тип ловушки. Это поле не может быть изменено программистом путем записи в регистр TBR. Если это поле считывается внутри обработчиков прерываний (по каким-либо причинам), возможно, вы не сможете установить его искусственно. Однако, как упоминается в комментарии, может быть возможно вызвать аппаратную ловушку, если реализация вашего процессора предоставляет интерфейс отладки.

Я программирую систему SPARC v8 (32-битную), и мне нужно проверить реакцию на аппаратные ловушки.

Есть ли конкретная причина, по которой вы не можете написать код, который фактически вызывает аппаратную ловушку (например, переполнение окна или деление на ноль и т. д.? На самом деле довольно просто написать небольшие модульные тесты в sparc-asm для тестирования таких ловушек. Если вы Если вы хотите тщательно протестировать реакцию на ловушки, это может быть необходимо.Другая возможность заключается в использовании симулятора sparc V8.

person Neha Karanjkar    schedule 03.08.2018
comment
Моя конкретная причина заключалась в том, что я действительно пишу код, вызывающий каждый тип ловушки, но для некоторых это довольно сложно; рассматриваемой реализацией является LEON3. Я подумал, что, возможно, мне не хватает чего-то, что упростило бы мой код. - person Jens; 03.08.2018