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.
211 lines
6.0 KiB
211 lines
6.0 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>: debugger-protocol
|
|
// <FILE-TYPE>: component public header
|
|
|
|
#ifndef DEBUGGER_PROTOCOL_EVENT_LINUX_HPP
|
|
#define DEBUGGER_PROTOCOL_EVENT_LINUX_HPP
|
|
|
|
#include "debugger-protocol.hpp"
|
|
|
|
|
|
namespace DEBUGGER_PROTOCOL {
|
|
|
|
/*!
|
|
* The Linux signal numbers. These are the same values defined in the system <signal.h> header.
|
|
*/
|
|
enum LINUX_SIGNAL
|
|
{
|
|
LINUX_SIGNAL_HUP = 1,
|
|
LINUX_SIGNAL_INT = 2,
|
|
LINUX_SIGNAL_QUIT = 3,
|
|
LINUX_SIGNAL_ILL = 4,
|
|
LINUX_SIGNAL_TRAP = 5,
|
|
LINUX_SIGNAL_ABRT = 6,
|
|
LINUX_SIGNAL_BUS = 7,
|
|
LINUX_SIGNAL_FPE = 8,
|
|
LINUX_SIGNAL_KILL = 9,
|
|
LINUX_SIGNAL_USR1 = 10,
|
|
LINUX_SIGNAL_SEGV = 11,
|
|
LINUX_SIGNAL_USR2 = 12,
|
|
LINUX_SIGNAL_PIPE = 13,
|
|
LINUX_SIGNAL_ALRM = 14,
|
|
LINUX_SIGNAL_TERM = 15,
|
|
LINUX_SIGNAL_STKFLT = 16,
|
|
LINUX_SIGNAL_CHLD = 17,
|
|
LINUX_SIGNAL_CONT = 18,
|
|
LINUX_SIGNAL_STOP = 19,
|
|
LINUX_SIGNAL_TSTP = 20,
|
|
LINUX_SIGNAL_TTIN = 21,
|
|
LINUX_SIGNAL_TTOU = 22,
|
|
LINUX_SIGNAL_URG = 23,
|
|
LINUX_SIGNAL_XCPU = 24,
|
|
LINUX_SIGNAL_XFSZ = 25,
|
|
LINUX_SIGNAL_VTALRM = 26,
|
|
LINUX_SIGNAL_PROF = 27,
|
|
LINUX_SIGNAL_WINCH = 28,
|
|
LINUX_SIGNAL_POLL = 29,
|
|
LINUX_SIGNAL_PWR = 30,
|
|
LINUX_SIGNAL_SYS = 31,
|
|
LINUX_SIGNAL_RT32 = 32,
|
|
LINUX_SIGNAL_RT33 = 33,
|
|
LINUX_SIGNAL_RT34 = 34,
|
|
LINUX_SIGNAL_RT35 = 35,
|
|
LINUX_SIGNAL_RT36 = 36,
|
|
LINUX_SIGNAL_RT37 = 37,
|
|
LINUX_SIGNAL_RT38 = 38,
|
|
LINUX_SIGNAL_RT39 = 39,
|
|
LINUX_SIGNAL_RT40 = 40,
|
|
LINUX_SIGNAL_RT41 = 41,
|
|
LINUX_SIGNAL_RT42 = 42,
|
|
LINUX_SIGNAL_RT43 = 43,
|
|
LINUX_SIGNAL_RT44 = 44,
|
|
LINUX_SIGNAL_RT45 = 45,
|
|
LINUX_SIGNAL_RT46 = 46,
|
|
LINUX_SIGNAL_RT47 = 47,
|
|
LINUX_SIGNAL_RT48 = 48,
|
|
LINUX_SIGNAL_RT49 = 49,
|
|
LINUX_SIGNAL_RT50 = 50,
|
|
LINUX_SIGNAL_RT51 = 51,
|
|
LINUX_SIGNAL_RT52 = 52,
|
|
LINUX_SIGNAL_RT53 = 53,
|
|
LINUX_SIGNAL_RT54 = 54,
|
|
LINUX_SIGNAL_RT55 = 55,
|
|
LINUX_SIGNAL_RT56 = 56,
|
|
LINUX_SIGNAL_RT57 = 57,
|
|
LINUX_SIGNAL_RT58 = 58,
|
|
LINUX_SIGNAL_RT59 = 59,
|
|
LINUX_SIGNAL_RT60 = 60,
|
|
LINUX_SIGNAL_RT61 = 61,
|
|
LINUX_SIGNAL_RT62 = 62,
|
|
LINUX_SIGNAL_RT63 = 63
|
|
};
|
|
|
|
|
|
#if defined(DEBUGGER_PROTOCOL_BUILD) // Library clients should NOT define this.
|
|
|
|
/*!
|
|
* When GDB connects to a Linux process, it expects that these signals are initially not
|
|
* intercepted. If a back-end connects to a debugger of type FRONTEND_TYPE_GDB, the
|
|
* back-end should arrange for these signals to be handled internally by the process,
|
|
* without notifying GDB. Note that these are only an initial default setting. GDB may
|
|
* explicitly ask to intercept these signals later via IEVENT_INTERCEPTION.
|
|
*/
|
|
DEBUGGER_PROTOCOL_API EVENT DefaultLinuxSignalsNotInterceptedByGdb[] =
|
|
{
|
|
LINUX_SIGNAL_ALRM,
|
|
LINUX_SIGNAL_URG,
|
|
LINUX_SIGNAL_CHLD,
|
|
LINUX_SIGNAL_VTALRM,
|
|
LINUX_SIGNAL_PROF,
|
|
LINUX_SIGNAL_WINCH,
|
|
LINUX_SIGNAL_POLL,
|
|
LINUX_SIGNAL_RT32,
|
|
LINUX_SIGNAL_RT33
|
|
};
|
|
|
|
/*!
|
|
* Number of entries in DefaultLinuxSignalsNotInterceptedByGdb.
|
|
*/
|
|
DEBUGGER_PROTOCOL_API unsigned DefaultLinuxSignalsNotInterceptedByGdbCount =
|
|
sizeof(DefaultLinuxSignalsNotInterceptedByGdb) / sizeof(DefaultLinuxSignalsNotInterceptedByGdb[0]);
|
|
|
|
#else
|
|
|
|
/*!
|
|
* Signals not initially intercepted by GDB.
|
|
*/
|
|
DEBUGGER_PROTOCOL_API extern EVENT DefaultLinuxSignalsNotInterceptedByGdb[];
|
|
|
|
/*!
|
|
* Number entries in DefaultLinuxSignalsNotInterceptedByGdb.
|
|
*/
|
|
DEBUGGER_PROTOCOL_API extern unsigned DefaultLinuxSignalsNotInterceptedByGdbCount;
|
|
|
|
#endif
|
|
|
|
|
|
/*!
|
|
* In the future, new fields may be added to the end of the EVENT_INFO_LINUX32
|
|
* or EVENT_INFO_LINUX64 structures. If this happens, clients can use the
|
|
* \e _version field to retain backward compatibility.
|
|
*
|
|
* When a client writes information to these structures, it should set \e _version
|
|
* to the latest version that it supports.
|
|
*
|
|
* When a client reads these structures, it should use \e _version to tell which
|
|
* fields are valid. A client should allow that \e _version may be greater than
|
|
* the newest version it knows about, which happens if an older front-end runs
|
|
* with a newer back-end or vice-versa.
|
|
*/
|
|
enum EVENT_INFO_LINUX_VERSION
|
|
{
|
|
EVENT_INFO_LINUX_VERSION_0 ///< This is the only defined version currently.
|
|
};
|
|
|
|
/*!
|
|
* This has the same layout as the 32-bit system siginfo_t. If you are compiling on that
|
|
* system, you can safely cast to that type.
|
|
*/
|
|
struct /*<POD>*/ SIGINFO32
|
|
{
|
|
INT32 _signo;
|
|
INT32 _errno;
|
|
INT32 _code;
|
|
|
|
union
|
|
{
|
|
UINT32 _pad[(128 / sizeof(UINT32)) - 3]; // Total size of SIGINFO32 is 128 bytes
|
|
};
|
|
};
|
|
|
|
/*!
|
|
* This has the same layout as the 64-bit system siginfo_t. If you are compiling on that
|
|
* system, you can safely cast to that type.
|
|
*/
|
|
struct /*<POD>*/ SIGINFO64
|
|
{
|
|
INT32 _signo;
|
|
INT32 _errno;
|
|
INT32 _code;
|
|
INT32 _pad0;
|
|
|
|
union
|
|
{
|
|
UINT32 _pad1[(128 / sizeof(UINT32)) - 4]; // Total size of SIGINFO64 is 128 bytes
|
|
};
|
|
};
|
|
|
|
|
|
/*!
|
|
* Information about a signal received on a 32-bit Linux target.
|
|
*/
|
|
struct /*<POD>*/ EVENT_INFO_LINUX32
|
|
{
|
|
EVENT_INFO_LINUX_VERSION _version; ///< Tells which fields in this structure are valid.
|
|
SIGINFO32 _siginfo; ///< Signal information.
|
|
};
|
|
|
|
/*!
|
|
* Information about a signal received on a 64-bit Linux target.
|
|
*/
|
|
struct /*<POD>*/ EVENT_INFO_LINUX64
|
|
{
|
|
EVENT_INFO_LINUX_VERSION _version; ///< Tells which fields in this structure are valid.
|
|
SIGINFO64 _siginfo; ///< Signal information.
|
|
};
|
|
|
|
} // namespace
|
|
#endif // file guard
|