[so] [Tema3][lin]Eroare ciudata tratare ssegv
Daniel CIOCÎRLAN
daniel.ciocirlan1607 at cti.pub.ro
Mon Apr 22 12:45:32 EEST 2013
Salut,
Dupa lupte seculare, am descoperit cauza. Functia-wrapper de protejare a memoriei virtuale primeste ca argunent _numarul de pagini_ de protejat, nu o dimensiune in bytes (cum primeste mprotect). Din cauza asta, la prima intrare in handler, protejam deja p_sz _pagini_ (nu bytes). Inca nu stiu de unde vine ultimul segfault, totusi, ar fi interesant sa aflu, dar am rezolvat problema.
Asta pentru cine ar mai da peste ceva asemanator.
________________________________________
From: so-bounces at cursuri.cs.pub.ro [so-bounces at cursuri.cs.pub.ro] on behalf of Adrian Sendroiu [molecula2788 at gmail.com]
Sent: Monday, April 22, 2013 11:07 AM
To: Sisteme de Operare
Subject: Re: [so] [Tema3][lin]Eroare ciudata tratare ssegv
Daniel CIOCÎRLAN <daniel.ciocirlan1607 at cti.pub.ro> writes:
> 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?
Salut,
Nu inteleg foarte exact ce se intampla. Nu iti intra in handlerul de
sigsegv pentru toate acele "faulting at"?
Adrian
_______________________________________________
http://ocw.cs.pub.ro/courses/so/info/lista-discutii
More information about the so
mailing list