A specific handler is associated with a given trap. It receives as an argument, the context of the calling thread when the trap occurred. Such a trap handler is defined system-wide, that is, all actors will invoke the same handler after being defined. The handler has access to the information required to identify the system call and to retrieve the arguments.
Only one handler may be attached to a given trap. After the handler is installed, it is automatically invoked. The ChorusOS operating system provides an interface that is based on the LAP mechanism for connecting and disconnecting threads. This interface can be used by supervisor threads only and enables a specific trap handler to be connected to different trap numbers.
When a trap handler is called, its argument is a pointer to a KnSysTrapDesc object, which has the following fields:
The thread's context that is saved when the trap occurs. The values of the processor's registers can be accessed by the trap handler. The trap handler can also modify the register values before returning.
The number of the trap that was invoked.
The core executive API includes the following trap handler system calls:
Table 13-2 Trap Handler System Calls
System Call |
Purpose |
---|---|
svSysTrapHandlerConnect() |
Connects a trap handler |
svSysTrapHandlerDisconnect() |
Disconnects a trap handler |
svSysTrapHandlerGetConnected() |
Gets a trap handler |
svTrapConnect() |
Connects a trap handler |
svTrapDisconnect() |
Disconnects a trap handler |
svTrapConnect() and svTrapDisconnect() are implemented in the library and are provided for backward compatibility only. The new system calls svSysTrapHandlerConnect() and svSysTrapHandlerDisconnect() use a LAP handler for enhanced security.