Date: Sat, 29 Jul 2006 12:57:52 -0700 From: "Kip Macy" <kip.macy@gmail.com> To: "Tijl Coosemans" <tijl@ulyssis.org> Cc: freebsd-hackers@freebsd.org Subject: Re: i386 page fault clobbers error code in trap frame Message-ID: <b1fa29170607291257h43592826j75513b465074f115@mail.gmail.com> In-Reply-To: <200607292110.37733.tijl@ulyssis.org> References: <200607292110.37733.tijl@ulyssis.org>
next in thread | previous in thread | raw e-mail | index | archive | help
Looking at siginfo it isn't clear that there is a "right way" to provide SIGSEGV, eva, and the error code. _fault._trapno should contain the machine's error code and si_signo should contain SIGSEGV, and si_addr contains the faulting pc. Maybe one could abuse si_code to contain eva. Sorry for asking a question that has already been answered but where is eva being put currently? typedef struct __siginfo { int si_signo; /* signal number */ int si_errno; /* errno association */ /* * Cause of signal, one of the SI_ macros or signal-specific * values, i.e. one of the FPE_... values for SIGFPE. This * value is equivalent to the second argument to an old-style * FreeBSD signal handler. */ int si_code; /* signal code */ __pid_t si_pid; /* sending process */ __uid_t si_uid; /* sender's ruid */ int si_status; /* exit value */ void *si_addr; /* faulting instruction */ union sigval si_value; /* signal value */ union { struct { int _trapno;/* machine specific trap code */ } _fault; /* .... */ On 7/29/06, Tijl Coosemans <tijl@ulyssis.org> wrote: > I'm refering to the following two lines in sys/i386/i386/trap.c > > /* kludge to pass faulting virtual address to sendsig */ > frame->tf_err = eva; > > Isn't there some other way to do this? Wouldn't the address still be > available in %cr2 inside sendsig? Or could there have been other page > faults by then? > > The reason I'm asking this is that Wine wants to know the error code in > case of a page fault (the No eXec bit (AMD) and the read/write bit > specifically). > > >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?b1fa29170607291257h43592826j75513b465074f115>