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 <[EMAIL PROTECTED]> 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).



_______________________________________________
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to