[so2] [curs2] nelamuriri

Silviu Popescu silviupopescu1990 at gmail.com
Thu Mar 7 01:02:34 EET 2013


2013/3/7 Andrei Epure <epure.andrei at gmail.com>

> slide 38
> Am înțeles că se face căutare binară a adresei instr. care a cauzat
> page-fault [1] folosind adresele __start_ex_table și __stop_ex_table.
> Întrebări:
> - Nu înțeleg ce este punctul aici: "__start_ex_table = ."
> - *(__ex_table) înseamnă ceva de genul copiere a tabelei acolo?
> - Ce înseamnă AT(ADDR(__ex_table) - LOAD_OFFSET)?
> - În general, ce se întâmplă în codul ăla?
>
> Se poate pune pe ocw o legătură către cursul extra de assembly
> language [3]? Ar fi util. Mie mi-au folosit puțin și extra explicații
> la [4].
>
> Mersi,
> Andrei
>
> [1] http://lxr.linux.no/#linux+v3.8.2/arch/x86/mm/extable.c#L82
> [2] http://lxr.linux.no/#linux+v3.8.2/kernel/extable.c#L51
> [3]
> https://docs.google.com/presentation/d/1qmKGpAiDX0GNAXnNXBtSE2xV8s659PZDb2ZLtQKjzbw/edit#slide=id.i178
> [4]
> http://staff.ustc.edu.cn/~xlanchen/cailiao/x86%20Assembly%20Programming.htm



​Salut,

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

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:
MESSAGE DB "test"
LENGTH EQU $ - MESSAGE - 1

Vezi link-urile [2] si [3] pentru o explicatie mai corecta din punct de
vedere tehnic.

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.
Se plaseaza un fel de etichete de start si stop la contorul de locatie.
*(__ex_table) inseamna ca sectiunea __ex_table din fisierul de iesire este
compusa din sectiunile __ex_table ale fisierelor de intrare.

Deci, intuitia mea e ca acel cod face urmatoarele lucruri:
- aliniaza inceputul tabelei de exceptii la un multiplu de 16
- 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
- marcheaza inceputul si sfarsitul tabelei de exceptii
- concateneaza sectiunile __ex_table ale fisierelor de intrare intr-o
sectiune __ex_table mare

Hope this helps a little.


​[1]
http://lxr.linux.no/#linux+v3.8.2/include/asm-generic/vmlinux.lds.h#L456
[2] http://www.math.utah.edu/docs/info/ld_3.html
[3] http://elf.cs.pub.ro/cpl/wiki/laboratoare/laborator-07

-- 
Silviu Popescu
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/so2/attachments/20130307/2e7e3b83/attachment.html>


More information about the so2 mailing list