Attach the pseudo interrupt handler that the instrumented module uses
#include <sys/neutrino.h> int InterruptHookTrace( const struct sigevent * (* handler)(int), unsigned flags );
libc
Use the -l c option to qcc to link against this library. This library is usually included automatically.
The InterruptHookTrace() kernel call attaches the pseudo interrupt handler handle that the instrumented module uses.
This function requires the instrumented kernel. For more information, see the System Analysis Toolkit (SAT) User's Guide. |
Before calling this function, the thread must request I/O privileges by calling:
ThreadCtl( _NTO_TCTL_IO, 0 );
The handler argument specifies the pseudo interrupt handler that receives trace events from the kernel. The integer that's passed to the handler is a combination of the buffer index and the sequence number; to extract each part, pass the integer to the _TRACE_GET_BUFFNUM() and _TRACE_GET_BUFFSEQ() macros defined in <sys/trace.h>.
The flags argument is a bitwise OR of the following values, or 0:
Flag | Description |
---|---|
_NTO_INTR_FLAGS_END | Put the new handler at the end of the list of existing handlers (for shared interrupts) instead of the start. |
The interrupt structure allows trace interrupts to be shared. For example, if two processes take over the same trace interrupt, both handlers are invoked consecutively. When a handler attaches, it's placed in front of any existing handlers for that interrupt and is called first. This behavior can be changed by setting the _NTO_INTR_FLAGS_END flag in the flags argument. This adds the handler at the end of any existing handlers.
This call doesn't block.
An interrupt function ID, or -1 if an error occurs (errno is set).
Safety: | |
---|---|
Cancellation point | No |
Interrupt handler | No |
Signal handler | Yes |
Thread | Yes |
InterruptAttach(), TraceEvent()
Writing an Interrupt Handler chapter of the Neutrino Programmer's Guide
System Analysis Toolkit (SAT) User's Guide