1 / 13

Portare Valgrind pe MIPS

Irina Orlandea irina.orlandea@gmail.com Aurelian Ghiţă aurelian_ghita@yahoo.com. 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:

laken
Download Presentation

Portare Valgrind pe MIPS

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Irina Orlandea irina.orlandea@gmail.com Aurelian Ghiţă aurelian_ghita@yahoo.com Portare Valgrind pe MIPS

  2. Ce este LibVEX? • Bibliotecade 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

  3. 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

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

  5. 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 !

  6. 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

  7. 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

  8. Exemplu: bne a1, v1, 0x17 addu gp, gp, t9 IRBB { ---------IMark(0xFF, 4)--------- t0 = CmpNE32(GET:I32(20), GET:I32(12)) ---------IMark(0x103, 0)-------- PUT(128) = 0x103:I32 PUT(112) = Add32(GET:I32(112),GET:I32(100)) if (t0) goto {Boring} 0x15F:I32 goto {Boring} 0x107:I32 } Portarea pe MIPS – Modulul de dezasamblare (2)

  9. 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

  10. IRBB { -----IMark(0xFF, 4)------ t0 = CmpNE32(GET:I32(20), GET:I32(12)) -----IMark(0x103, 0)----- PUT(128) = 0x103:I32 PUT(112) = Add32(GET:I32(112), GET:I32(100)) if (t0) goto {Boring} 0x15F:I32 goto {Boring} 0x107:I32 } mflr %r2 lw %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,%r4 sw %r6,112(%r25) goto: if ( %%r5 ){ 351 } mtlr %r2 goto: (always) { 263 } Portarea pe MIPS – Selectorul de instrucţiuni (2)

  11. 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

  12. 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

  13. Referinţe • http://www.valgrind.org • http://www.mips.com Intrebări?

More Related