siginfo_t.si_code macro constants

David Xu davidxu at freebsd.org
Thu Jan 18 03:41:37 UTC 2007


Siavosh Benabbas wrote:
> Hi,
> I am trying to compile parted on freebsd and I came across this. It seems
> that many macro constants of POSIX that one should be able to check the
> value of siginfo_t.si_code in a 3 parameter signal handler (set by
> sigaction) are missing. These in particular include SEGV_MAPPER,
> SEGV_ACCERR, and many ILL_* constants the man page of sigaction mentions:
> 
>     "The code argument of the BSD-style handler and the si_code member of
> the
>     info argument to a SA_SIGINFO handler contain a numeric code explaining
>     the cause of the signal, usually one of the SI_... values from
>     <sys/signal.h> or codes specific to a signal, i.e., one of the FPE_...
>     values for SIGFPE."
> 
> But it doesn't specifically list the macro's available. According to the
> POSIX standard there should be some SEGV_* and ILL_* constants too. I
> searched in the archives and it seems that this was pointed out around a
> year ago. The mail in the archive also mentioned that siginfo_t.si_code
> actually gets populated but there is no constant to check this against. The
> following is from (a distribution of) linux's man page for sigaction
> describing some of the constants available on Linux:
> 
>       +-------------------------------------+
>       |               SIGILL                |
>       +-----------+-------------------------+
>       |ILL_ILLOPC | illegal opcode          |
>       +-----------+-------------------------+
>       |ILL_ILLOPN | illegal operand         |
>       +-----------+-------------------------+
>       |ILL_ILLADR | illegal addressing mode |
>       +-----------+-------------------------+
>       |ILL_ILLTRP | illegal trap            |
>       +-----------+-------------------------+
>       |ILL_PRVOPC | privileged opcode       |
>       +-----------+-------------------------+
>       |ILL_PRVREG | privileged register     |
>       +-----------+-------------------------+
>       |ILL_COPROC | coprocessor error       |
>       +-----------+-------------------------+
>       |ILL_BADSTK | internal stack error    |
>       +-----------+-------------------------+
> ....
>       +----------------------------------------------------+
>       |                      SIGSEGV                       |
>       +------------+---------------------------------------+
>       |SEGV_MAPERR | address not mapped to object          |
>       +------------+---------------------------------------+
>       |SEGV_ACCERR | invalid permissions for mapped object |
>       +------------+---------------------------------------+
> ....
> 
> Unfortunately I lack the expertise to implement any of these but I 
> wanted to
> ask if anybody has a similar problem and/or is working on this.
> 
> Thanks,
> Siavosh Benabbas

These codes are defined in -HEAD branch, RELENG_6 does not have
them, I had added them when I was implementing signal queue.

Regards,
David Xu




More information about the freebsd-arch mailing list