You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

159 lines
4.8 KiB

/*
* Copyright 2002-2019 Intel Corporation.
*
* This software and the related documents are Intel copyrighted materials, and your
* use of them is governed by the express license under which they were provided to
* you ("License"). Unless the License provides otherwise, you may not use, modify,
* copy, publish, distribute, disclose or transmit this software or the related
* documents without Intel's prior written permission.
*
* This software and the related documents are provided as is, with no express or
* implied warranties, other than those that are expressly stated in the License.
*/
// <COMPONENT>: os-apis
// <FILE-TYPE>: component public header
/*!
* @defgroup OS_APIS_SIGNALS Signals
* @brief Contains signals related os apis
*/
#ifndef OS_APIS_SIGNALS_H
#define OS_APIS_SIGNALS_H
#include "os-apis.h"
#include "signals-core.h"
/*!
* Retrun the Max number of signals possible
*/
int OS_MaxSignalNumber();
/*!
* This enum is used only for the OS_PinSigactionToKernelSigaction function
* you cannot use these values directly in other OS-APIs functions or system calls
*/
typedef enum
{
SIGACTION_SIGINFO,
SIGACTION_NODEFER,
SIGACTION_RESETHAND,
SIGACTION_ONSTACK,
SIGACTION_NOCLDSTOP,
SIGACTION_RESTART,
SIGACTION_RESTORER
}SigactionDefines ;
/*
* This function is used to convert the defines into the right
* value according to the OS (bit map value)
*/
UINT64 OS_PinSigactionToKernelSigaction(SigactionDefines input);
#ifdef TARGET_MAC
typedef void(*OS_SIGTRAP_PTR)(void *, unsigned int, int, void *, void *);
void OS_SigReturn(void *uctx, int infostyle);
#endif
/*! @ingroup OS_APIS_SIGNALS
* Specifies an action to OS_SigAction()
*/
struct SIGACTION {
union {
void (*_sa_handler)(int); //! Signal handle function (old way)
void (*_sa_sigaction)(int, void *, void *); //! Signal handle function (new way)
void *_sa_handler_ptr; //! Convenience void* pointer to the signal handler.
} _u;
SIGSET_T sa_mask; //! Mask of signals to block during the handling of the signal
unsigned long sa_flags; //! Additional flags (OS specific).
void (*sa_restorer)(void); //! Signal restorer.
};
#ifdef TARGET_MAC
struct SIGACTION_WITH_TRAMP {
struct SIGACTION act;
void(*sa_tramp)(void *, unsigned int, int, void *, void *);
};
#endif
#ifdef TARGET_MAC
/**
* Same as OS_SigAction but the specified act contains a trampoline (meaning don't use the default Pin trampoline
* but the the one that is exists in act)
*/
OS_RETURN_CODE OS_SigActionWithTrampoline(INT signum, const struct SIGACTION_WITH_TRAMP *actWithTramp, struct SIGACTION *oldact);
#endif
/*! @ingroup OS_APIS_SIGNALS
* Change the action taken by a process on receipt of a specific signal.
* This function is compatible with POSIX sigaction().
*
* @param[in] signum The signal to alter its behavior.
* @param[in] act The action to be taken upon signal reception.
* @param[in] oldact The previous action that was taken upon signal reception.
*
* @return Operation status code.
*
* @par Availability:
* @b O/S: Linux & macOS*\n
* @b CPU: All\n
*/
OS_RETURN_CODE OS_SigAction(INT signum, const struct SIGACTION *act, struct SIGACTION *oldact);
/*! @ingroup OS_APIS_SIGNALS
* Temporarily replaces the signal mask of the calling process with the mask given
* by mask and then suspends the process until delivery of a signal whose action is to
* invoke a signal handler or to terminate a process.
*
* @param[in] mask The mask to use for the signals
*
* @return Operation status code.
*
* @par Availability:
* @b O/S: Linux & macOS*\n
* @b CPU: All\n
*/
OS_RETURN_CODE OS_SigSuspend(const SIGSET_T *mask);
/*! @ingroup OS_APIS_SIGNALS
* Returns the set of signals that are pending for delivery to the calling thread
* (i.e., the signals which have been raised while blocked). The mask of
* pending signals is returned in set.
*
* @param[out] set Where to store the signal set.
*
* @return Operation status code.
*
* @par Availability:
* @b O/S: Linux & macOS*\n
* @b CPU: All\n
*/
OS_RETURN_CODE OS_SigPending(const SIGSET_T *set);
/*! @ingroup OS_APIS_SIGNALS
* Send signal to a particular thread inside a process.
*
* @param[in] pid The process ID where the thread is running.if it's INVALID_NATIVE_PID then we
ignore the pid.
* @param[in] tid The thread ID to send the signal to.
* @param[in] signal The signal to send.
*
* @return Operation status code.
*
* @par Availability:
* @b O/S: Linux & macOS*\n
* @b CPU: All\n
*/
OS_RETURN_CODE OS_SendSignalToThread(NATIVE_PID pid, NATIVE_TID tid, UINT32 signal);
#endif // OS_APIS_SIGNALS_H