siginfo_t.si_code macro constants

Siavosh Benabbas sbenabas at gmail.com
Thu Jan 18 03:21:10 UTC 2007


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


More information about the freebsd-arch mailing list