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