Отговори на тема  [ 8 мнения ] 
openssl за armv5 - проблем 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Ное 21, 2004 11:31 pm
Мнения: 10088
Мнение openssl за armv5 - проблем
опитвам се да вкарам квадратен чеп в кръгла дупка - демек да (1) компилирам openssl; (2) да подкарам хардуерния ускорител да работи с него.

за сега удрям дървото в следния код:
Код:
armv4cpuid.S
.text
.code   32

.align  5
.global _armv7_neon_probe
.type   _armv7_neon_probe,%function
_armv7_neon_probe:
        .word   0xf26ee1fe      @ vorr  q15,q15,q15
        .word   0xe12fff1e      @ bx    lr
.size   _armv7_neon_probe,.-_armv7_neon_probe

защо ходиме да пробваме неон е въпрос, на който още нямам отговор, но е факт че стигаме до там, въпреки че съм му казал, че искам само v5.
като стигнем до там гърмим. излкючил съм кор-дъмпа, защото не знам какво да го правя, пък и е ясно защо гърмим.

две неща ме озадачават в тия 2 реда.
първото е какво правим, когато нямаме такава инструкция (Vop)
второто е, че не правим нормален ретърн от функцията.
доколкото схванах:
Код:
The BX and BLX instructions result in a HardFault exception if bit[0] of Rm is 0.

или правим? малко ми се губи при концепцията на "bx lr" как се гарантира дали бит[0] е в някакво конкретно състояние.

по-големия въпрос е как да заобиколя/прехвана фолта, че да продължи детектването на процесора.


Вто Юли 30, 2013 8:14 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Окт 11, 2011 11:53 pm
Мнения: 4582
Местоположение: Brussels / Пловдив
Мнение Re: openssl за armv5 - проблем
Нещо неми става много ясно, този дисасм от опенссл ли е или от кернела?
Има си прекъсване за невалидна инструкция, от там вариантите са според ОС:
- емулация, разбирай бавно ама работи
- мълчаливо игнориране и преминаване на следващия ред - и това съм го виждал, особенно гадно е като не е невалидна инструкция ами невалиден адрес
- син екран и ребоот

bx lr - това всъщност е връщане от функция за арм - адреса за връщане хардуерно се записва в този регистър, пък функцията може да си го пусне в стека, може и да не го ако не вика други функции

бит 0 не се гарантира. При 32 битов класически АРМ инструкциите са винаги на адрес кратен на 4 - т.е. младшите 2 бита са 0 - и като са решили да правят 16 битови инструкции за да не вкарват нови инструкции за преход използват този факт за да познаят в какъв режим са. Хитро като концепция, записването в стека си идва на готово, не се налага да се грижиш за още един регистър с флагове на процесора. Минимализъм, ама до колко има смисъл е спорно, това използване на неизползвани битове според контекста излишно усложнява нещата.

_________________
Мразя да мразя ...


Вто Юли 30, 2013 8:36 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Ное 21, 2004 11:31 pm
Мнения: 10088
Мнение Re: openssl за armv5 - проблем
това парче е част от сорса armv4cpuid.S на openss
в случая не знам кой ексепшин се задейства - невалидна инструкция или HardFault (заради бит[0]), и явно openssl не го прехваща, че да си го анализира. не съм дълбал още и колко пъти се вика самата функция _armv7_neon_probe, дали на всеки фрейм или само в началото.
би било гениално за всеки фрейм да бичи ексепшъни.


Вто Юли 30, 2013 8:56 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Окт 11, 2011 11:53 pm
Мнения: 4582
Местоположение: Brussels / Пловдив
Мнение Re: openssl за armv5 - проблем
ексепшън заради бит 0 е много трудно да го постигнеш без да искаш - единствения начин е някой да омаже яко стека - т.е. да запише адрес за връщане в който бита за 16 бита thumb е сетнат
по скоро е невалидна инструкция
абе нещо налудничаво ми се струва някой да проверява за дадена архитектура с невалидна инструкция - това си е достоен повод да се затвори програмата
едва ли се вика повече от веднъж де - после резултата се кешира
ако това го правиш за ембедед устройство където всичко ти е ясно направо си сетни архитектурата както си трябва и не му давай да си губи времето да се прави на умен и да проверява

_________________
Мразя да мразя ...


Вто Юли 30, 2013 10:31 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Ное 21, 2004 11:31 pm
Мнения: 10088
Мнение Re: openssl за armv5 - проблем
ей го на файла, и аз не вярвах на ушите си.
кода се вика от тук, като се прихващат всички ексепшъни. при мен явно е нещо друго, ще го ровичкам утре на прясна глава

сега, според теб, бит[0] винаги е 0, или поне нормално би трябвало да е 0
ама според АРМ (втория цитат), bx инструкцията генерира HardFault именно, когато този бит е 0.
кода определено е за 32-битов режим, но ме озадачава ".align 5" :-s


Вто Юли 30, 2013 11:27 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Окт 11, 2011 11:53 pm
Мнения: 4582
Местоположение: Brussels / Пловдив
Мнение Re: openssl за armv5 - проблем
Ами ей го де, във втория файл:
Код:
  42         if ((e=getenv("OPENSSL_armcap")))
  43                 {
  44                 OPENSSL_armcap_P=strtoul(e,NULL,0);
  45                 return;
  46                 }

конфигурираш си го през обкръжението и не му даваш да се пробва с тоя безумен асемблер.
За разлика от х86 на АРМ асемблер почти не съм писал и ми е трудно да го чета, може би Миро ще е по в час ако те вълнува какъв точно му е яда.
Моя съвет е да не си губиш повече времето ами да си сетнеш тоя OPENSSL_armcap с каквото трябва.

_________________
Мразя да мразя ...


Вто Юли 30, 2013 11:58 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 6:52 pm
Мнения: 11266
Местоположение: Добрич
Мнение Re: openssl за armv5 - проблем
Дедо сега го виждам и утре на свежа глава ще ти го проверя, ама като цяло е ясно че:
1. Като я няма инструкцията ще гърми
2. Ти си в ARM режим или поне би трябвало да си съдейки по 32 битовите кодове на инструкции. Линк регистъра ти попълнен от викащия, демек от Ц-компилатора така че не бери грижа.По-скоро ако гръмне ще е щото Ц-то ти компилира за тъмб (трябва да ми кажеш флаговете ако е гцц) а вика АРМ асемблер. Между другото малцина са тия като мен дето ползват тъмб режим. За подобен род библиотеки е почти изключено.
Align 5 означава да подравни на 5 адресни бита, демек на 32 байта. Та да може фетчването да пасне на кеш лайна. Само дето ми изглежда като презастраховане. Обикновено се подравнява на 16 байта. Както и да е, това касае само скорост, не може да гърми от това.


Сря Юли 31, 2013 1:14 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Ное 21, 2004 11:31 pm
Мнения: 10088
Мнение Re: openssl за armv5 - проблем
установих със сигурност, че гърми заради инструкцията
Код:
Program received signal SIGILL, Illegal instruction.
0x406a9e00 in _armv7_neon_probe () from /usr/lib/libcrypto.so.1.0.0

викам го като библиотека, може би затова има запек с четенето на обкръжението.
обаче защо не прихваща и сигналите... аз лесно ще го хардкодна, ама че се губят сигнали е опасно. ще го търся.

а алайна мислех че е на байтове/думи, не очаквах да е на битове. затова ме озадачи.

изясни се ситуацията, сега остава да намерим буболечката къде се вихри


Сря Юли 31, 2013 9:29 am
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 8 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 2 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни