Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

openssl за armv5 - проблем
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=11605
Страница 1 от 1

Автор:  ДедоБоре [ Вто Юли 30, 2013 8:14 pm ]
Заглавие:  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] е в някакво конкретно състояние.

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

Автор:  palavrov [ Вто Юли 30, 2013 8:36 pm ]
Заглавие:  Re: openssl за armv5 - проблем

Нещо неми става много ясно, този дисасм от опенссл ли е или от кернела?
Има си прекъсване за невалидна инструкция, от там вариантите са според ОС:
- емулация, разбирай бавно ама работи
- мълчаливо игнориране и преминаване на следващия ред - и това съм го виждал, особенно гадно е като не е невалидна инструкция ами невалиден адрес
- син екран и ребоот

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

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

Автор:  ДедоБоре [ Вто Юли 30, 2013 8:56 pm ]
Заглавие:  Re: openssl за armv5 - проблем

това парче е част от сорса armv4cpuid.S на openss
в случая не знам кой ексепшин се задейства - невалидна инструкция или HardFault (заради бит[0]), и явно openssl не го прехваща, че да си го анализира. не съм дълбал още и колко пъти се вика самата функция _armv7_neon_probe, дали на всеки фрейм или само в началото.
би било гениално за всеки фрейм да бичи ексепшъни.

Автор:  palavrov [ Вто Юли 30, 2013 10:31 pm ]
Заглавие:  Re: openssl за armv5 - проблем

ексепшън заради бит 0 е много трудно да го постигнеш без да искаш - единствения начин е някой да омаже яко стека - т.е. да запише адрес за връщане в който бита за 16 бита thumb е сетнат
по скоро е невалидна инструкция
абе нещо налудничаво ми се струва някой да проверява за дадена архитектура с невалидна инструкция - това си е достоен повод да се затвори програмата
едва ли се вика повече от веднъж де - после резултата се кешира
ако това го правиш за ембедед устройство където всичко ти е ясно направо си сетни архитектурата както си трябва и не му давай да си губи времето да се прави на умен и да проверява

Автор:  ДедоБоре [ Вто Юли 30, 2013 11:27 pm ]
Заглавие:  Re: openssl за armv5 - проблем

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

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

Автор:  palavrov [ Вто Юли 30, 2013 11:58 pm ]
Заглавие:  Re: openssl за armv5 - проблем

Ами ей го де, във втория файл:
Код:
  42         if ((e=getenv("OPENSSL_armcap")))
  43                 {
  44                 OPENSSL_armcap_P=strtoul(e,NULL,0);
  45                 return;
  46                 }

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

Автор:  miro_atc [ Сря Юли 31, 2013 1:14 am ]
Заглавие:  Re: openssl за armv5 - проблем

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

Автор:  ДедоБоре [ Сря Юли 31, 2013 9:29 am ]
Заглавие:  Re: openssl за armv5 - проблем

установих със сигурност, че гърми заради инструкцията
Код:
Program received signal SIGILL, Illegal instruction.
0x406a9e00 in _armv7_neon_probe () from /usr/lib/libcrypto.so.1.0.0

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

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

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

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/