[so] [Tema3][lin]Eroare ciudata tratare ssegv

Daniel CIOCÎRLAN daniel.ciocirlan1607 at cti.pub.ro
Sun Apr 21 19:51:04 EEST 2013


Salut,

Am nevoie de putin ajutor la o situatie pe care nu o inteleg.

Testul 21 (si probabil nu numai el, ca mai multe imi pica) imi da urmatoarea situatie:

for i
        pos = get_random_byte_mapping_position(1);
        printf("faulting at %p\n", map.start + i * p_sz + pos); // linia asta am pus-o eu
        tmp = ((char *) map.start)[i * p_sz + pos];    // linia asta genereaza segfault de citire

iar la handler-ul de tratare a semnalului sigsegv, primele doua linii la mine, dupa declaratiile de variabile, sunt:

    addr = (char*)siginfo->si_addr;
    printf("faulted by %p\n", addr);

Pentru ca testul 21 are 10 pagini din care se incearca citire, voi avea 10 semnale. Problema e ca nu inteleg de ce am urmatorul output:

faulting at 0xb77d3000
faulted by 0xb77d3000
-- pana aici primul semnal a fost tratat
-- acum ar trebui sa urmeze fault-uri pentru toate celelalte pagini
faulting at 0xb77d4000
faulting at 0xb77d5000
faulting at 0xb77d6000
faulting at 0xb77d7000
faulting at 0xb77d8000
faulting at 0xb77d9000
faulting at 0xb77da000
faulting at 0xb77db000
faulting at 0xb77dc000
--- faultat aici
faulted by 0xb77deab4
--- dupa care
Segmentation fault

Nu inteleg de ce, daca "pos" a fost luat aleator, adresele de fault au numere intregi (multipli de pagesize) si de ce, daca outputul fault-ului al doilea zice ca va urma xxxx4000, in handler am xxxxeab4 (care evident e in afara intregii zone alocate, pana la c000).

Are cineva vreo idee?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/so/attachments/20130421/066c5d6d/attachment.html>


More information about the so mailing list