portare valgrind pe mips

13
Irina Orlandea [email protected] Aurelian Ghiţă [email protected] Portare Valgrind pe MIPS

Upload: laken

Post on 15-Jan-2016

49 views

Category:

Documents


0 download

DESCRIPTION

Irina Orlandea [email protected] Aurelian Ghiţă [email protected]. Portare Valgrind pe MIPS. Ce este LibVEX?. Biblioteca de translaţie ce funcţionează ca parte a nucleului Valgrind Permite instrumentarea codului într-o manieră generică Specificaţii funcţionale: - PowerPoint PPT Presentation

TRANSCRIPT

Page 2: Portare Valgrind pe MIPS

Ce este LibVEX?

Biblioteca de translaţie ce funcţionează ca parte a nucleului Valgrind

Permite instrumentarea codului într-o manieră generică

Specificaţii funcţionale:

Primeşte de la nucleu un bloc de cod maşină aparţinând programului analizat

Execută translaţia în reprezentare intermediară (RI), optimizarea codului, instrumentarea lui cu ajutorul funcţiilor oferite de utilitare şi translaţia inversă

Întoarce nucleului cod maşină gata de execuţie

Page 3: Portare Valgrind pe MIPS

Relaţia cu nucleul

• LibVEX_Init – funcţie apelată de nucleu pentru iniţializarea bibliotecii de translaţie

• LibVEX_Translate – execută translaţia unui bloc de cod

Page 4: Portare Valgrind pe MIPS

Structura bibliotecii

Oglindeşte designul Valgrind - Combinaţie de module generice şi module dependente de arhitectură care acoperă toate fazele translaţiei

Page 5: Portare Valgrind pe MIPS

Structura bibliotecii - detalii

Fiecare arhitectură deţine două module: Guest – translaţie cod binar → RI Host – translaţie RI → cod binar Plus părţi generice care ajută translaţiile

Reprezentarea intermediară (ir) Funcţii pentru interfaţarea cu RI Funcţii pentru optimizări (eliminarea codului nefolosit,

propagarea constantelor, etc.) Interfaţa principală a bibliotecii (main)

! Pentru portare pe MIPS trebuie introduse module guest/host specifice arhitecturii !

Page 6: Portare Valgrind pe MIPS

Reprezentarea intermediară

Declaraţii – operaţii cu efecte laterale Scrieri în memorie / regiştri, atribuire de valori

temporarelor, etc.

Expresii – operaţii fără efecte laterale Operaţii aritmetice, încărcări din memorie, constante Pot conţine subexpresii => structuri arborescente

Exemplu t1 = (3+(4*load(adr1))

Blocuri de cod – secvenţe de instrucţiuni Un singur punct de intrare, mai multe puncte de ieşire Conţin o listă de declaraţii reprezentând codul efectiv Se încheie cu o instrucţiune de salt la blocul următor

Page 7: Portare Valgrind pe MIPS

Portarea pe MIPS – Modulul de dezasamblare

E oferit un set redus de instrucţiuni – instrucţiuni din user-space MIPS I ce apar frecvent

Se dezasamblează instrucţiune cu instrucţiune

Rezultă o listă de declaraţii RI care conţin expresii (structură arborescentă)

La terminarea blocului de cod se notează adresa următorului bloc

Page 8: Portare Valgrind pe MIPS

Portarea pe MIPS – Modulul de dezasamblare (2)

Exemplu:bne a1, v1, 0x17addu gp, gp, t9

IRBB {

---------IMark(0xFF, 4)---------t0 = CmpNE32(GET:I32(20),

GET:I32(12))

---------IMark(0x103, 0)--------PUT(128) = 0x103:I32PUT(112) =Add32(GET:I32(112),GET:I32(100))if (t0)

goto {Boring} 0x15F:I32goto {Boring} 0x107:I32

}

Page 9: Portare Valgrind pe MIPS

Portarea pe MIPS – Selectorul de instrucţiuni

Instrucţiunile MIPS sunt modelate la modul abstract cu ajutorul unor structuri

Blocul de cod în reprezentare intermediară este parcurs declaraţie cu declaraţie

Pentru o declaraţie se parcurge întreg arborele de expresii asociat

În final rezultă o listă de instrucţiuni reprezentate abstract

Page 10: Portare Valgrind pe MIPS

Portarea pe MIPS – Selectorul de instrucţiuni (2)

IRBB {-----IMark(0xFF, 4)------t0 =CmpNE32(GET:I32(20),

GET:I32(12))-----IMark(0x103, 0)----- PUT(128) = 0x103:I32PUT(112) =

Add32(GET:I32(112),GET:I32(100))

if (t0) goto {Boring} 0x15F:I32

goto {Boring} 0x107:I32}

mflr %r2lw %r3,20(%r25)lw %r4,12(%r25)word_compare %r5 =

ne( %r3, %r4 )

li_word %r3,0x0000000000000103

sw %r3,128(%r25)lw %r3,112(%r25)lw %r4,100(%r25)addu %r6,%r3,%r4sw %r6,112(%r25)goto: if ( %%r5 ){ 351 }mtlr %r2goto: (always) { 263 }

Page 11: Portare Valgrind pe MIPS

Portarea pe MIPS – Generatorul de cod

• Parcurge blocul de cod instrucţiune cu instrucţiune• Rezultă un şir de caractere reprezentând codul binar gata de

execuţie• Organizat pe nivele

Nivel 3 – identifică structura fizică a instrucţiunilor studiind reprezentarea abstractă

Nivel 2 – uneşte componentele unei instrucţiuni într-un întreg pe 32 de biţi

Nivel 1 – primeşte un întreg pe 32 de biţi şi îl adaugă la şirul de ieşire

Page 12: Portare Valgrind pe MIPS

Portare pe MIPSPaşii următori

Suport pentru maşini ce folosesc reprezentarea big-endian (modulele de dezasamblare şi generare de cod)

Extinderea setului de instrucţiuni maşină oferite Suport pentru operaţii în virgulă mobilă Extindere de la arhitectura MIPS I la MIPS32

Page 13: Portare Valgrind pe MIPS

Referinţe

• http://www.valgrind.org• http://www.mips.com

Intrebări?