124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- DNBDefs.h -----------------------------------------------*- C++ -*-===//
224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                     The LLVM Compiler Infrastructure
424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source
624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details.
724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===//
924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//  Created by Greg Clayton on 6/26/07.
1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===//
1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef __DNBDefs_h__
1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define __DNBDefs_h__
1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <stdint.h>
1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <signal.h>
1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <stdio.h>
2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <sys/syslimits.h>
2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <unistd.h>
2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Define nub_addr_t and the invalid address value from the architecture
2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#if defined (__x86_64__) || defined (__ppc64__)
2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 64 bit address architectures
3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnertypedef uint64_t        nub_addr_t;
3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define INVALID_NUB_ADDRESS     ((nub_addr_t)~0ull)
3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#elif defined (__i386__) || defined (__powerpc__) || defined (__ppc__) || defined (__arm__)
3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 32 bit address architectures
3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnertypedef uint32_t        nub_addr_t;
4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define INVALID_NUB_ADDRESS     ((nub_addr_t)~0ul)
4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#else
4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Default to 64 bit address for unrecognized architectures.
4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#warning undefined architecture, defaulting to 8 byte addresses
5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnertypedef uint64_t        nub_addr_t;
5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define INVALID_NUB_ADDRESS     ((nub_addr_t)~0ull)
5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif
5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnertypedef size_t          nub_size_t;
5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnertypedef ssize_t         nub_ssize_t;
5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnertypedef uint32_t        nub_index_t;
5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnertypedef pid_t           nub_process_t;
6044eb9fb021023027159df55f91c3e95384088970Jason Molendatypedef uint64_t        nub_thread_t;
6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnertypedef uint32_t        nub_event_t;
6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnertypedef uint32_t        nub_bool_t;
6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define INVALID_NUB_PROCESS     ((nub_process_t)0)
6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define INVALID_NUB_THREAD      ((nub_thread_t)0)
6631d8918cb12fa1f715920db37a2290b3911e62eeJohnny Chen#define INVALID_NUB_WATCH_ID    ((nub_watch_t)0)
6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define INVALID_NUB_HW_INDEX    UINT32_MAX
6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define INVALID_NUB_REGNUM      UINT32_MAX
6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define NUB_GENERIC_ERROR       UINT32_MAX
7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Watchpoint types
7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define WATCH_TYPE_READ     (1u << 0)
7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define WATCH_TYPE_WRITE    (1u << 1)
7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnertypedef enum
7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    eStateInvalid = 0,
7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    eStateUnloaded,
7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    eStateAttaching,
8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    eStateLaunching,
8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    eStateStopped,
8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    eStateRunning,
8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    eStateStepping,
8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    eStateCrashed,
8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    eStateDetached,
8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    eStateExited,
8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    eStateSuspended
8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} nub_state_t;
8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnertypedef enum
9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
9224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    eLaunchFlavorDefault = 0,
9324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    eLaunchFlavorPosixSpawn,
9424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    eLaunchFlavorForkExec,
959a5bbd2a14cacac731424f7a253f6cc16b22c10aJason Molenda#ifdef WITH_SPRINGBOARD
9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    eLaunchFlavorSpringBoard,
9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif
9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} nub_launch_flavor_t;
9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define NUB_STATE_IS_RUNNING(s) ((s) == eStateAttaching ||\
10124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                 (s) == eStateLaunching ||\
10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                 (s) == eStateRunning ||\
10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                 (s) == eStateStepping ||\
10424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                 (s) == eStateDetached)
10524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
10624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define NUB_STATE_IS_STOPPED(s) ((s) == eStateUnloaded ||\
10724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                 (s) == eStateStopped ||\
10824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                 (s) == eStateCrashed ||\
10924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                 (s) == eStateExited)
11024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
11124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerenum
11224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
11324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    eEventProcessRunningStateChanged = 1 << 0,  // The process has changed state to running
11424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    eEventProcessStoppedStateChanged = 1 << 1,  // The process has changed state to stopped
11524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    eEventSharedLibsStateChange = 1 << 2,       // Shared libraries loaded/unloaded state has changed
11624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    eEventStdioAvailable = 1 << 3,              // Something is available on stdout/stderr
117fb9cee64303d36d6fe5d87e63dd8701d1ddb70a9Han Ming Ong    eEventProfileDataAvailable = 1 << 4,        // Profile data ready for retrieval
11824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    kAllEventsMask = eEventProcessRunningStateChanged |
11924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                     eEventProcessStoppedStateChanged |
12024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                     eEventSharedLibsStateChange |
12124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                     eEventStdioAvailable |
1220689f164af4e83dad8b48dc1248433f65a553f20Greg Clayton                     eEventProfileDataAvailable
12324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
12424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
12524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define LOG_VERBOSE             (1u << 0)
12624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define LOG_PROCESS             (1u << 1)
12724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define LOG_THREAD              (1u << 2)
12824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define LOG_EXCEPTIONS          (1u << 3)
12924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define LOG_SHLIB               (1u << 4)
13024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define LOG_MEMORY              (1u << 5)    // Log memory reads/writes calls
13124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define LOG_MEMORY_DATA_SHORT   (1u << 6)    // Log short memory reads/writes bytes
13224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define LOG_MEMORY_DATA_LONG    (1u << 7)    // Log all memory reads/writes bytes
13324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define LOG_MEMORY_PROTECTIONS  (1u << 8)    // Log memory protection changes
13424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define LOG_BREAKPOINTS         (1u << 9)
13524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define LOG_EVENTS              (1u << 10)
13624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define LOG_WATCHPOINTS         (1u << 11)
13724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define LOG_STEP                (1u << 12)
13824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define LOG_TASK                (1u << 13)
13924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define LOG_LO_USER             (1u << 16)
14024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define LOG_HI_USER             (1u << 31)
14124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define LOG_ALL                 0xFFFFFFFFu
14224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define LOG_DEFAULT             ((LOG_PROCESS) |\
14324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                 (LOG_TASK) |\
14424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                 (LOG_THREAD) |\
14524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                 (LOG_EXCEPTIONS) |\
14624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                 (LOG_SHLIB) |\
14724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                 (LOG_MEMORY) |\
14824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                 (LOG_BREAKPOINTS) |\
14924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                 (LOG_WATCHPOINTS) |\
15024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                 (LOG_STEP))
15124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
15224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
15324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define REGISTER_SET_ALL        0
15424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Generic Register set to be defined by each architecture for access to common
15524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// register values.
15624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define REGISTER_SET_GENERIC    ((uint32_t)0xFFFFFFFFu)
15724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define GENERIC_REGNUM_PC       0   // Program Counter
15824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define GENERIC_REGNUM_SP       1   // Stack Pointer
15924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define GENERIC_REGNUM_FP       2   // Frame Pointer
16024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define GENERIC_REGNUM_RA       3   // Return Address
16124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define GENERIC_REGNUM_FLAGS    4   // Processor flags register
162997b1e82f098a8b748b490d1ae6d0bbe597a59d5Greg Clayton#define GENERIC_REGNUM_ARG1     5   // The register that would contain pointer size or less argument 1 (if any)
163997b1e82f098a8b748b490d1ae6d0bbe597a59d5Greg Clayton#define GENERIC_REGNUM_ARG2     6   // The register that would contain pointer size or less argument 2 (if any)
164997b1e82f098a8b748b490d1ae6d0bbe597a59d5Greg Clayton#define GENERIC_REGNUM_ARG3     7   // The register that would contain pointer size or less argument 3 (if any)
165997b1e82f098a8b748b490d1ae6d0bbe597a59d5Greg Clayton#define GENERIC_REGNUM_ARG4     8   // The register that would contain pointer size or less argument 4 (if any)
166997b1e82f098a8b748b490d1ae6d0bbe597a59d5Greg Clayton#define GENERIC_REGNUM_ARG5     9   // The register that would contain pointer size or less argument 5 (if any)
167997b1e82f098a8b748b490d1ae6d0bbe597a59d5Greg Clayton#define GENERIC_REGNUM_ARG6     10  // The register that would contain pointer size or less argument 6 (if any)
168997b1e82f098a8b748b490d1ae6d0bbe597a59d5Greg Clayton#define GENERIC_REGNUM_ARG7     11  // The register that would contain pointer size or less argument 7 (if any)
169997b1e82f098a8b748b490d1ae6d0bbe597a59d5Greg Clayton#define GENERIC_REGNUM_ARG8     12  // The register that would contain pointer size or less argument 8 (if any)
17024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
17124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerenum DNBRegisterType
17224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
17324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    InvalidRegType = 0,
17424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Uint,               // unsigned integer
17524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Sint,               // signed integer
17624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    IEEE754,            // float
17724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Vector              // vector registers
17824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
17924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
18024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerenum DNBRegisterFormat
18124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
18224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    InvalidRegFormat = 0,
18324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Binary,
18424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Decimal,
18524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Hex,
18624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Float,
18724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    VectorOfSInt8,
18824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    VectorOfUInt8,
18924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    VectorOfSInt16,
19024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    VectorOfUInt16,
19124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    VectorOfSInt32,
19224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    VectorOfUInt32,
19324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    VectorOfFloat32,
19424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    VectorOfUInt128
19524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
19624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
19724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerstruct DNBRegisterInfo
19824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
19924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    uint32_t    set;            // Register set
20024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    uint32_t    reg;            // Register number
20124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const char *name;           // Name of this register
20224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const char *alt;            // Alternate name
20324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    uint16_t    type;           // Type of the register bits (DNBRegisterType)
20424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    uint16_t    format;         // Default format for display (DNBRegisterFormat),
20524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    uint32_t    size;           // Size in bytes of the register
20624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    uint32_t    offset;         // Offset from the beginning of the register context
20724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    uint32_t    reg_gcc;        // GCC register number (INVALID_NUB_REGNUM when none)
20824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    uint32_t    reg_dwarf;      // DWARF register number (INVALID_NUB_REGNUM when none)
20924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    uint32_t    reg_generic;    // Generic register number (INVALID_NUB_REGNUM when none)
21024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    uint32_t    reg_gdb;        // The GDB register number (INVALID_NUB_REGNUM when none)
211c290ba49b79c88ace8e5c58917489415e429ef01Greg Clayton    uint32_t    *pseudo_regs;   // If this register is a part of another register, list the one or more registers
212c290ba49b79c88ace8e5c58917489415e429ef01Greg Clayton    uint32_t    *update_regs;   // If modifying this register will invalidate other registers, list them here
21324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
21424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
21524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerstruct DNBRegisterSetInfo
21624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
21724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const char *name;                           // Name of this register set
21824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const struct DNBRegisterInfo *registers;    // An array of register descriptions
21924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    nub_size_t num_registers;                   // The number of registers in REGISTERS array above
22024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
22124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
22224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerstruct DNBThreadResumeAction
22324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
22424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    nub_thread_t tid;   // The thread ID that this action applies to, INVALID_NUB_THREAD for the default thread action
22524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    nub_state_t state;  // Valid values are eStateStopped/eStateSuspended, eStateRunning, and eStateStepping.
22624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    int signal;         // When resuming this thread, resume it with this signal
22724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    nub_addr_t addr;    // If not INVALID_NUB_ADDRESS, then set the PC for the thread to ADDR before resuming/stepping
22824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
22924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
23024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerenum DNBThreadStopType
23124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
23224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    eStopTypeInvalid = 0,
23324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    eStopTypeSignal,
2344d4ff9e8f7746ba1b1d597512b7cb711350c0206Greg Clayton    eStopTypeException,
2354d4ff9e8f7746ba1b1d597512b7cb711350c0206Greg Clayton    eStopTypeExec
23624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
23724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
23824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerenum DNBMemoryPermissions
23924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
24024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    eMemoryPermissionsWritable    = (1 << 0),
24124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    eMemoryPermissionsReadable    = (1 << 1),
24224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    eMemoryPermissionsExecutable  = (1 << 2)
24324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
24424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
24524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define DNB_THREAD_STOP_INFO_MAX_DESC_LENGTH    256
24624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define DNB_THREAD_STOP_INFO_MAX_EXC_DATA       8
24724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
24824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
24924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// DNBThreadStopInfo
25024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
25124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Describes the reason a thread stopped.
25224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
25324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerstruct DNBThreadStopInfo
25424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
25524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    DNBThreadStopType reason;
25624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    char description[DNB_THREAD_STOP_INFO_MAX_DESC_LENGTH];
25724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    union
25824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
25924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        // eStopTypeSignal
26024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        struct
26124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        {
26224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            uint32_t signo;
26324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        } signal;
26424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
26524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        // eStopTypeException
26624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        struct
26724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        {
26824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            uint32_t type;
26924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            nub_size_t data_count;
27024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            nub_addr_t data[DNB_THREAD_STOP_INFO_MAX_EXC_DATA];
27124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        } exception;
27224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    } details;
27324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
27424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
27524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
27624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerstruct DNBRegisterValue
27724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
27824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    struct DNBRegisterInfo info;    // Register information for this register
27924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    union
28024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
28124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        int8_t      sint8;
28224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        int16_t     sint16;
28324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        int32_t     sint32;
28424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        int64_t     sint64;
28524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        uint8_t     uint8;
28624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        uint16_t    uint16;
28724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        uint32_t    uint32;
28824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        uint64_t    uint64;
28924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        float       float32;
29024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        double      float64;
2914d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan        int8_t      v_sint8[32];
2924d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan        int16_t     v_sint16[16];
2934d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan        int32_t     v_sint32[8];
2944d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan        int64_t     v_sint64[4];
2954d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan        uint8_t     v_uint8[32];
2964d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan        uint16_t    v_uint16[16];
2974d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan        uint32_t    v_uint32[8];
2984d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan        uint64_t    v_uint64[4];
2994d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan        float       v_float32[8];
3004d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan        double      v_float64[4];
30124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        void        *pointer;
30224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        char        *c_str;
30324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    } value;
30424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
30524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
30624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerenum DNBSharedLibraryState
30724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
30824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    eShlibStateUnloaded    = 0,
30924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    eShlibStateLoaded    = 1
31024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
31124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
31224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef DNB_MAX_SEGMENT_NAME_LENGTH
31324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define DNB_MAX_SEGMENT_NAME_LENGTH    32
31424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif
31524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
31624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerstruct DNBSegment
31724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
31824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    char        name[DNB_MAX_SEGMENT_NAME_LENGTH];
31924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    nub_addr_t  addr;
32024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    nub_addr_t  size;
32124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
32224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
32324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerstruct DNBExecutableImageInfo
32424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
32524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    char        name[PATH_MAX]; // Name of the executable image (usually a full path)
32624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    uint32_t    state;          // State of the executable image (see enum DNBSharedLibraryState)
32724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    nub_addr_t  header_addr;    // Executable header address
32824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    uuid_t      uuid;           // Unique indentifier for matching with symbols
32924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    uint32_t    num_segments;   // Number of contiguous memory segments to in SEGMENTS array
33024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    DNBSegment  *segments;      // Array of contiguous memory segments in executable
33124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
33224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
333a9385537809ef342c843c5ab972e513742652047Greg Claytonstruct DNBRegionInfo
334a9385537809ef342c843c5ab972e513742652047Greg Clayton{
335a9385537809ef342c843c5ab972e513742652047Greg Clayton    nub_addr_t addr;
336a9385537809ef342c843c5ab972e513742652047Greg Clayton    nub_addr_t size;
337a9385537809ef342c843c5ab972e513742652047Greg Clayton    uint32_t permissions;
338a9385537809ef342c843c5ab972e513742652047Greg Clayton};
339a9385537809ef342c843c5ab972e513742652047Greg Clayton
340cec43ab7f30085ac7f65a26a58b956a69e363a3bHan Ming Ongenum DNBProfileDataScanType
341cec43ab7f30085ac7f65a26a58b956a69e363a3bHan Ming Ong{
342cec43ab7f30085ac7f65a26a58b956a69e363a3bHan Ming Ong    eProfileHostCPU             = (1 << 0),
343cec43ab7f30085ac7f65a26a58b956a69e363a3bHan Ming Ong    eProfileCPU                 = (1 << 1),
344cec43ab7f30085ac7f65a26a58b956a69e363a3bHan Ming Ong
345cec43ab7f30085ac7f65a26a58b956a69e363a3bHan Ming Ong    eProfileThreadsCPU          = (1 << 2), // By default excludes eProfileThreadName and eProfileQueueName.
346cec43ab7f30085ac7f65a26a58b956a69e363a3bHan Ming Ong    eProfileThreadName          = (1 << 3), // Assume eProfileThreadsCPU, get thread name as well.
347cec43ab7f30085ac7f65a26a58b956a69e363a3bHan Ming Ong    eProfileQueueName           = (1 << 4), // Assume eProfileThreadsCPU, get queue name as well.
348cec43ab7f30085ac7f65a26a58b956a69e363a3bHan Ming Ong
349cec43ab7f30085ac7f65a26a58b956a69e363a3bHan Ming Ong    eProfileHostMemory          = (1 << 5),
350cec43ab7f30085ac7f65a26a58b956a69e363a3bHan Ming Ong
351cec43ab7f30085ac7f65a26a58b956a69e363a3bHan Ming Ong    eProfileMemory              = (1 << 6), // By default, excludes eProfileMemoryDirtyPage.
352cec43ab7f30085ac7f65a26a58b956a69e363a3bHan Ming Ong    eProfileMemoryDirtyPage     = (1 << 7), // Assume eProfileMemory, get Dirty Page size as well.
35377d340f114b99ec8e2f7a48cbb674c93e237022bHan Ming Ong    eProfileMemoryAnonymous     = (1 << 8), // Assume eProfileMemory, get Anonymous memory as well.
354cec43ab7f30085ac7f65a26a58b956a69e363a3bHan Ming Ong
355cec43ab7f30085ac7f65a26a58b956a69e363a3bHan Ming Ong    eProfileAll                 = 0xffffffff
356cec43ab7f30085ac7f65a26a58b956a69e363a3bHan Ming Ong};
357cec43ab7f30085ac7f65a26a58b956a69e363a3bHan Ming Ong
35824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnertypedef nub_addr_t (*DNBCallbackNameToAddress)(nub_process_t pid, const char *name, const char *shlib_regex, void *baton);
35924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnertypedef nub_size_t (*DNBCallbackCopyExecutableImageInfos)(nub_process_t pid, struct DNBExecutableImageInfo **image_infos, nub_bool_t only_changed, void *baton);
36024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnertypedef void (*DNBCallbackLog)(void *baton, uint32_t flags, const char *format, va_list args);
36124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
36224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif    // #ifndef __DNBDefs_h__
363