siginfo_t content
John Baldwin
jhb at FreeBSD.org
Fri Feb 15 18:12:16 UTC 2019
On 2/15/19 8:43 AM, Christian Barthel wrote:
> John Baldwin <jhb at FreeBSD.org> writes:
>
>> See the siginfo(3) manpage. SI_TIMER is described there as:
>>
>> SI_TIMER signal generated by expiration of a
>> timer set by timer_settime(2)
>>
>> It is not for setitimer. Similarly, si_addr is usually only specified for
>> synchronous signals and usually holds the PC of the faulting instruction
>> except for SIGSEGV when it holds the faulting virtual address.
>
> Thanks for your reply.
> Ah, yes, siginfo(3) has more details on siginfo_t (missed that
> one; sorry). This clarifies my question.
> I've looked up the POSIX standard but I haven't seen a reason why
> si_addr is only set for SIGSEGV and "only" a few others - are
> there reasons for this?
I think it's only intended for use with synchronous traps where the signal
is the result of executing an instruction (so si_addr is usually the PC of
the instruction triggering the signal). Async events like timers aren't
triggered by instructions, so there's no meaningful si_addr to use.
However, in a signal handler you can look at the architecture-specific
ucontext_t * (3rd argument to handler when using SA_SIGINFO) to determine
the PC of the thread at the time it was interrupted by the signal.
What are you trying to do exactly?
--
John Baldwin
More information about the freebsd-chat
mailing list