<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">2013/3/7 Andrei Epure <span dir="ltr"><<a href="mailto:epure.andrei@gmail.com" target="_blank">epure.andrei@gmail.com</a>></span><br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
slide 38<br>
Am înțeles că se face căutare binară a adresei instr. care a cauzat<br>
page-fault [1] folosind adresele __start_ex_table și __stop_ex_table.<br>
Întrebări:<br>
- Nu înțeleg ce este punctul aici: "__start_ex_table = ."<br>
- *(__ex_table) înseamnă ceva de genul copiere a tabelei acolo?<br>
- Ce înseamnă AT(ADDR(__ex_table) - LOAD_OFFSET)?<br>
- În general, ce se întâmplă în codul ăla?<br>
<br>
Se poate pune pe ocw o legătură către cursul extra de assembly<br>
language [3]? Ar fi util. Mie mi-au folosit puțin și extra explicații<br>
la [4].<br>
<br>
Mersi,<br>
Andrei<br>
<br>
[1] <a href="http://lxr.linux.no/#linux+v3.8.2/arch/x86/mm/extable.c#L82" target="_blank">http://lxr.linux.no/#linux+v3.8.2/arch/x86/mm/extable.c#L82</a><br>
[2] <a href="http://lxr.linux.no/#linux+v3.8.2/kernel/extable.c#L51" target="_blank">http://lxr.linux.no/#linux+v3.8.2/kernel/extable.c#L51</a><br>
[3] <a href="https://docs.google.com/presentation/d/1qmKGpAiDX0GNAXnNXBtSE2xV8s659PZDb2ZLtQKjzbw/edit#slide=id.i178" target="_blank">https://docs.google.com/presentation/d/1qmKGpAiDX0GNAXnNXBtSE2xV8s659PZDb2ZLtQKjzbw/edit#slide=id.i178</a><br>

[4] <a href="http://staff.ustc.edu.cn/~xlanchen/cailiao/x86%20Assembly%20Programming.htm" target="_blank">http://staff.ustc.edu.cn/~xlanchen/cailiao/x86%20Assembly%20Programming.htm</a></blockquote><div><br><br><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline">
​Salut,<br><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline">Am gasit via LXR codul care te intereseaza[1]. Practic, slide-ul contine cod de linker script. Poti gasi detalii pe net[2] si in laboratorul de CPL[3].<br>
<br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline">Punctul ala reprezinta contorul de locatie si e un fel de pointer catre locatia curenta. E similar cu $ in limbaj de asamblare, unde $ era folosit in ceva de genul:<br>
</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline">MESSAGE DB "test"<br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline">
LENGTH EQU $ - MESSAGE - 1</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline">Vezi link-urile [2] si [3] pentru o explicatie mai corecta din punct de vedere tehnic.<br>
<br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline">In continuare se defineste sectiunea __ex_table in fisierul de iesire, care va fi incarcata la adresa rezultatata din diferenta dintre adresa sectiunii __ex_table (?) si LOAD_OFFSET.<br>
</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline">Se plaseaza un fel de etichete de start si stop la contorul de locatie.<br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline">
*(__ex_table) inseamna ca sectiunea __ex_table din fisierul de iesire este compusa din sectiunile __ex_table ale fisierelor de intrare.<br><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline">
Deci, intuitia mea e ca acel cod face urmatoarele lucruri:<br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline">- aliniaza inceputul tabelei de exceptii la un multiplu de 16<br>
</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline">- plaseaza sectiunea __ex_table la o adresa particulara; nu inteleg care este rolul acelei diferente pasate ca argument lui AT(), poate stie cineva mai bine<br>
</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline">- marcheaza inceputul si sfarsitul tabelei de exceptii<br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline">
- concateneaza sectiunile __ex_table ale fisierelor de intrare intr-o sectiune __ex_table mare<br><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline">Hope this helps a little.<br>
</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;display:inline">​</div> </div></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">​[1] <a href="http://lxr.linux.no/#linux+v3.8.2/include/asm-generic/vmlinux.lds.h#L456">http://lxr.linux.no/#linux+v3.8.2/include/asm-generic/vmlinux.lds.h#L456</a>​<br>
[2] <a href="http://www.math.utah.edu/docs/info/ld_3.html">http://www.math.utah.edu/docs/info/ld_3.html</a><br>[3] <a href="http://elf.cs.pub.ro/cpl/wiki/laboratoare/laborator-07">http://elf.cs.pub.ro/cpl/wiki/laboratoare/laborator-07</a><br>
</div><br>-- <br>Silviu Popescu<br><br>
</div></div>