Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 21 Oct 1998 08:44:43 +0100 (MET)
From:      Luigi Rizzo <luigi@labinfo.iet.unipi.it>
To:        hackers@FreeBSD.ORG
Subject:   Handling page faults in user space ?
Message-ID:  <199810210744.IAA09732@labinfo.iet.unipi.it>

next in thread | raw e-mail | index | archive | help
Hi,

i was wondering how to handle page faults/segment violations in user
space. Looking at mmap, signal and friends it looks like it is almost
possible.

E.g. take the following program segment:

int *p = 0xdeadbeef ;

sig_t
handle_sigsegv(int i)
{
    fprintf(stderr, "got sigsegv\n");
    mmap(p, 0x1000, PROT_READ, MAP_ANON, -1, 0);
}

main()
{
    int a;
    signal(SIGSEGV, handle_sigsegv);

    a = *p ; /* this results in a SIGSEGV being posted */
    fprintf(stderr, "ahhh....\n");
}

causes first a fault and then the faulting instruction is restarted and
produces the right output. What is missing is how to know, in the
signal handler, the fault virtual address and maybe IP associated to
the faulting instruction.

Ideas anyone ?

	thanks
	luigi
-----------------------------+--------------------------------------
Luigi Rizzo                  |  Dip. di Ingegneria dell'Informazione
email: luigi@iet.unipi.it    |  Universita' di Pisa
tel: +39-50-568533           |  via Diotisalvi 2, 56126 PISA (Italy)
fax: +39-50-568522           |  http://www.iet.unipi.it/~luigi/
_____________________________|______________________________________



To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199810210744.IAA09732>