5

È a mia conoscenza che i processori ARMv7, come il Cortex-A9, sono per la maggior parte compatibili con il codice a ritroso per versioni di architettura ARM precedenti. Tuttavia, ho letto i report di segfaults trying to run ARM9 code on a Cortex-A8, ad esempio.Quali parti del codice ARMv4/5/6 non funzionano su ARMv7?

Quali parti del codice ARMv4/5/6 (ARM7TDMI/ARM9/ARM11) non funzionano su un processore ARMv7? Quali caratteristiche o caratteristiche architettoniche esistono in queste vecchie versioni dell'architettura ARM che possono causare il fallimento di un programma creato per queste versioni su ARMv7?

+0

http://infocenter.arm.com tutta la documentazione necessaria per questa domanda è lì, guarda i manuali di riferimento architettonico ei manuali tecnici di riferimento. –

+0

È un po 'troppo complicato, qualcuno può distillare queste informazioni in qualcosa di facilmente comprensibile? Sto cercando una risposta come "codice ARM più vecchio verrà eseguito generalmente su un processore ARMv7, ma con le seguenti eccezioni ..." – bwDraco

+1

Hai letto le appendici "M" e "O" del manuale di riferimento Architettura ARMv7a? Sembrano dare la risposta più vicina a ciò che stai cercando. –

risposta

3

Per il codice dell'applicazione il problema principale è l'accesso alla memoria non allineato. Prima di ARMv4 e configurabile su ARMv4 su ARMv6, un carico LDR da un indirizzo non allineato veniva ruotato nei dati di lettura, mentre l'altro accesso alla memoria si comporta come se i 2 bit meno significativi fossero zero.

+1

Questo è, in effetti, il comportamento visto in [questa domanda] (http://stackoverflow.com/questions/12451230/output-from-arbitrary-dereferenced-pointer). In sostanza, stai dicendo che l'output ruotato dell'OP della domanda collegata è caratteristico di ARMv6 e precedenti, e che lo stesso codice si bloccherebbe su ARMv7? – bwDraco

3

La compilazione per le istruzioni del braccio armv4 dovrebbe funzionare fino in fondo.

Il vero problema con la tua domanda, oltre a non svolgere la tua ricerca sull'argomento (ti ci è voluto molto più tempo per evitare di esaminarlo piuttosto che esaminarlo) è che la maggior parte del codice che potresti voler portare da una piattaforma all'altra ha a che fare con le periferiche e non con il set di istruzioni. La maggior parte del tuo codice non porta non a causa del set di istruzioni, ma a causa dei timer, e degli uarts, dei controller video e usb e così via. Queste non sono scatole di wintel che non cercano di essere compatibili con la retromarcia.

La domanda si è collegato in realtà non ha carne ad esso in quanto il PO non ha ancora messo alcun codice giù fatto fare qualsiasi lavoro sul tema, almeno non pubblicamente a StackOverflow, potrebbe essere un semplice caso di cattivo codice e non hanno nulla da fare con i core del processore, o potrebbe essere un caso di periferiche che non ci sono e accedendo a quelle, ci si aspetterebbe un blocco o un crash.