2016-08-09 1 views
0

Я смог перевести свой процессор в режим ожидания из режима svc, используя команду hvC#0. Я сделал некоторые операции чтения и записи в регистре HVBAR, и я хочу вернуться в режим супервизора.
Я попытался следующими способами:как переключиться обратно в режим svc из режима hyp с помощью ELR_Hyp в armv7

  1. скопировал зр и Л перед вызовом HVC, а затем восстановить их после того, как регистр операция закончена. Затем разветвляется на значение регистра связи.

    mov r5,sp; 
    mov r6,lr; 
    bx lr; 
    
  2. Я также попробовал старый метод прохождения регистра связи непосредственно к программному счетчику

    mov pc,lr; 
    
  3. Я пытался сделать SVC вызова из режима Hyp и ожидается его изменить процессор состояния в режиме супервизора

    svC#0; 
    
  4. Я использовал eret инструкцию в конце операции регистра в себе е будет ли это иметь эффект. Это не оказало никакого влияния.

Но ничего из этого не вызвало изменение процессором состояния. После запуска кода Режим в моем CPSR и SPSR - это режим небезопасного гипервизора.
После изучения литературы у меня появилась идея, что мне нужно работать с регистром ELR_Hyp, так как я использую расширения виртуализации. Но я не понимаю, как использовать ELR_Hyp для возврата в режим Supervisor из режима Hyp.

+0

Справедливо, что вам нужен возврат исключений (а не только ветка), я думаю, что это явная инструкция в ARMv7 (но у меня нет времени на проверку прямо сейчас) –

+0

@achoora Не могли бы вы поделиться своим кодом для ввода hyp mode? Я имею в виду всю подготовку, прежде чем вы сможете назвать «hvC# 0». Для него нет кода для всей сети. – Joey

+0

@Joey Sorry Dude, я понимаю беспокойство, но код, который я написал, теперь запатентован. руководство по архитектуре руки имеет все, что вам нужно. особенно на странице B1136. Вы должны следить за стеками, возвращаясь из режимов, если хотите сохранить контекст. – achoora

ответ

1

Сбрасывание из режима Hyp в режим PL1 очень похоже на переход из режима PL1 в режим пользователя; это возврат исключения. Единственное различие заключается в том, что вам нужно использовать конкретные eret instruction, а не movs pc, lr и друзей.

+0

Я тоже это пробовал. Это не имело никакого эффекта. – achoora

+0

Хорошо, тогда в игре явно больше, чем основы. Каков режим в SPSR_hyp? Возможно, вы принимаете вложенные исключения (например, ваш 'svc' по-прежнему будет использоваться в режиме Hyp, и в этот момент вы застряли, потому что теперь вы перезаписали предыдущий ELR/SPSR). Кроме того, тот факт, что кто-то был рядом, чтобы ответить на ваш вызов «hvc», в первую очередь, означает, что у вас уже есть гипервизор, и это, вероятно, не слишком радует, что состояние системного регистра запущено. – Notlikethat

+0

Режим в SPSR_hyp также NSHyp i.e Режим гипервизора – achoora