Files
m241Neelima/vxworks-6.9/target/h/arch/i86/dbgStrLib.h
T
2026-07-30 11:19:44 +05:30

358 lines
10 KiB
C

/* dbgStrLib.h - Debug Store mechanism definitions header file */
/* Copyright 2001-2002, 2010 Wind River Systems, Inc. */
/*
modification history
--------------------
01b,29apr10,pad Moved extern C statement after include statements.
01a,23jul01,hdn written
*/
#ifndef __INCdbgStrLibh
#define __INCdbgStrLibh
#include "arch/i86/regsP7.h"
#ifdef __cplusplus
extern "C" {
#endif
/* DS buffer : BTS/PEBS minimum/default/threshold size */
#define BTS_NBYTES_MIN 0x1000 /* 4KB minimum BTS buffer */
#define BTS_NBYTES_DEF 0x4000 /* 16KB default BTS buffer */
#define BTS_NBYTES_OFF 0x200 /* .5KB (max - threshold) BTS */
#define PEBS_NBYTES_MIN 0x1000 /* 4KB minimum PEBS buffer */
#define PEBS_NBYTES_DEF 0x4000 /* 16KB default PEBS buffer */
#define PEBS_NBYTES_OFF 0x200 /* .5KB (max - threshold) PEBS */
#define PEBS_DEF_RESET -1LL /* default reset counter value */
/* BTS : record bit */
#define BTS_PREDICTED 0x00000010 /* bit4: Branch Predicted */
/* PEBS : events */
#define PEBS_FRONT_END 0x01
#define PEBS_EXECUTION 0x02
#define PEBS_REPLAY 0x03
/* PEBS : metrics (Front End Event) */
#define PEBS_MEMORY_LOADS 0x01
#define PEBS_MEMORY_STORES 0x02
/* PEBS : metrics (Execution Event) */
#define PEBS_PACKED_SP 0x03
#define PEBS_PACKED_DP 0x04
#define PEBS_SCALAR_SP 0x05
#define PEBS_SCALAR_DP 0x06
#define PEBS_128BIT_MMX 0x07
#define PEBS_64BIT_MMX 0x08
#define PEBS_X87_FP 0x09
#define PEBS_X87_SIMD_MOVES 0x0a
/* PEBS : metrics (Replay Event) */
#define PEBS_1STL_CACHE_LOAD_MISS 0x0b
#define PEBS_2NDL_CACHE_LOAD_MISS 0x0c
#define PEBS_DTLB_LOAD_MISS 0x0d
#define PEBS_DTLB_STORE_MISS 0x0e
#define PEBS_DTLB_ALL_MISS 0x0f
#define PEBS_MOB_LOAD_REPLAY 0x10
#define PEBS_SPLIT_LOAD 0x11
#define PEBS_SPLIT_STORE 0x12
/* PEBS : ESCR, CCCR definitions (Front End Event) */
#define ESCR_FRONT_END \
(((0x08 << DS_SHIFT_25) & ESCR_EVENT_SELECT) | \
((DS_BIT_1 << DS_SHIFT_9) & ESCR_EVENT_MASK) | \
ESCR_TAG_ENABLE)
#define CCCR_FRONT_END \
(((0x05 << DS_SHIFT_13) & CCCR_ESCR_SELECT) | \
CCCR_RSVD)
#define ESCR_MEMORY_LOADS \
(((0x02 << DS_SHIFT_25) & ESCR_EVENT_SELECT) | \
((DS_BIT_1 << DS_SHIFT_9) & ESCR_EVENT_MASK) | \
ESCR_TAG_ENABLE)
#define ESCR_MEMORY_STORES \
(((0x02 << DS_SHIFT_25) & ESCR_EVENT_SELECT) | \
((DS_BIT_2 << DS_SHIFT_9) & ESCR_EVENT_MASK) | \
ESCR_TAG_ENABLE)
/* PEBS : ESCR, CCCR definitions (Execution Event) */
#define ESCR_EXECUTION \
(((0x0c << DS_SHIFT_25) & ESCR_EVENT_SELECT) | \
((DS_BIT_0 << DS_SHIFT_9) & ESCR_EVENT_MASK) | \
((DS_BIT_0 << DS_SHIFT_5) & ESCR_TAG_VALUE) | \
ESCR_TAG_ENABLE)
#define CCCR_EXECUTION \
(((0x05 << DS_SHIFT_13) & CCCR_ESCR_SELECT) | \
CCCR_RSVD)
#define ESCR_PACKED_SP \
(((0x08 << DS_SHIFT_25) & ESCR_EVENT_SELECT) | \
((DS_BIT_15 << DS_SHIFT_9) & ESCR_EVENT_MASK) |\
((DS_BIT_0 << DS_SHIFT_5) & ESCR_TAG_VALUE) | \
ESCR_TAG_ENABLE)
#define ESCR_PACKED_DP \
(((0x0c << DS_SHIFT_25) & ESCR_EVENT_SELECT) | \
((DS_BIT_15 << DS_SHIFT_9) & ESCR_EVENT_MASK) |\
((DS_BIT_0 << DS_SHIFT_5) & ESCR_TAG_VALUE) | \
ESCR_TAG_ENABLE)
#define ESCR_SCALAR_SP \
(((0x0a << DS_SHIFT_25) & ESCR_EVENT_SELECT) | \
((DS_BIT_15 << DS_SHIFT_9) & ESCR_EVENT_MASK) |\
((DS_BIT_0 << DS_SHIFT_5) & ESCR_TAG_VALUE) | \
ESCR_TAG_ENABLE)
#define ESCR_SCALAR_DP \
(((0x0e << DS_SHIFT_25) & ESCR_EVENT_SELECT) | \
((DS_BIT_15 << DS_SHIFT_9) & ESCR_EVENT_MASK) |\
((DS_BIT_0 << DS_SHIFT_5) & ESCR_TAG_VALUE) | \
ESCR_TAG_ENABLE)
#define ESCR_64BIT_MMX \
(((0x02 << DS_SHIFT_25) & ESCR_EVENT_SELECT) | \
((DS_BIT_15 << DS_SHIFT_9) & ESCR_EVENT_MASK) |\
((DS_BIT_0 << DS_SHIFT_5) & ESCR_TAG_VALUE) | \
ESCR_TAG_ENABLE)
#define ESCR_128BIT_MMX \
(((0x1a << DS_SHIFT_25) & ESCR_EVENT_SELECT) | \
((DS_BIT_15 << DS_SHIFT_9) & ESCR_EVENT_MASK) |\
((DS_BIT_0 << DS_SHIFT_5) & ESCR_TAG_VALUE) | \
ESCR_TAG_ENABLE)
#define ESCR_X87_FP \
(((0x04 << DS_SHIFT_25) & ESCR_EVENT_SELECT) | \
((DS_BIT_15 << DS_SHIFT_9) & ESCR_EVENT_MASK) |\
((DS_BIT_0 << DS_SHIFT_5) & ESCR_TAG_VALUE) | \
ESCR_TAG_ENABLE)
#define ESCR_X87_SIMD_MOVES \
(((0x2e << DS_SHIFT_25) & ESCR_EVENT_SELECT) | \
(((DS_BIT_3 | DS_BIT_4) << DS_SHIFT_9) & ESCR_EVENT_MASK) | \
((DS_BIT_0 << DS_SHIFT_5) & ESCR_TAG_VALUE) | \
ESCR_TAG_ENABLE)
/* PEBS : ESCR, CCCR definitions (Replay Event) */
#define ESCR_REPLAY \
(((0x09 << DS_SHIFT_25) & ESCR_EVENT_SELECT) | \
((DS_BIT_0 << DS_SHIFT_9) & ESCR_EVENT_MASK) | \
((DS_BIT_0 << DS_SHIFT_5) & ESCR_TAG_VALUE) | \
ESCR_TAG_ENABLE)
#define CCCR_REPLAY \
(((0x05 << DS_SHIFT_13) & CCCR_ESCR_SELECT) | \
CCCR_RSVD)
#define ESCR_MOB_LOAD_REPLAY \
(((0x03 << DS_SHIFT_25) & ESCR_EVENT_SELECT) | \
(((DS_BIT_4 | DS_BIT_5) << DS_SHIFT_9) & ESCR_EVENT_MASK) | \
ESCR_TAG_ENABLE)
#define ESCR_SPLIT_LOAD \
(((0x04 << DS_SHIFT_25) & ESCR_EVENT_SELECT) | \
((DS_BIT_1 << DS_SHIFT_9) & ESCR_EVENT_MASK) | \
ESCR_TAG_ENABLE)
#define ESCR_SPLIT_STORE \
(((0x05 << DS_SHIFT_25) & ESCR_EVENT_SELECT) | \
((DS_BIT_1 << DS_SHIFT_9) & ESCR_EVENT_MASK) | \
ESCR_TAG_ENABLE)
/* DS : MSR(ESCR) bit definition */
#define DS_BIT_0 0x00000001
#define DS_BIT_1 0x00000002
#define DS_BIT_2 0x00000004
#define DS_BIT_3 0x00000008
#define DS_BIT_4 0x00000010
#define DS_BIT_5 0x00000020
#define DS_BIT_6 0x00000040
#define DS_BIT_7 0x00000080
#define DS_BIT_8 0x00000100
#define DS_BIT_9 0x00000200
#define DS_BIT_10 0x00000400
#define DS_BIT_11 0x00000800
#define DS_BIT_12 0x00001000
#define DS_BIT_13 0x00002000
#define DS_BIT_14 0x00004000
#define DS_BIT_15 0x00008000
#define DS_BIT_16 0x00010000
#define DS_BIT_17 0x00020000
#define DS_BIT_18 0x00040000
#define DS_BIT_19 0x00080000
#define DS_BIT_20 0x00100000
#define DS_BIT_21 0x00200000
#define DS_BIT_22 0x00400000
#define DS_BIT_23 0x00800000
#define DS_BIT_24 0x01000000
#define DS_BIT_25 0x02000000
#define DS_BIT_26 0x04000000
#define DS_BIT_27 0x08000000
#define DS_BIT_28 0x10000000
#define DS_BIT_29 0x20000000
#define DS_BIT_30 0x40000000
#define DS_BIT_31 0x80000000
/* DS : MSR(ESCR, CCCR) shift count definition */
#define DS_SHIFT_1 1
#define DS_SHIFT_2 2
#define DS_SHIFT_3 3
#define DS_SHIFT_4 4
#define DS_SHIFT_5 5
#define DS_SHIFT_6 6
#define DS_SHIFT_7 7
#define DS_SHIFT_8 8
#define DS_SHIFT_9 9
#define DS_SHIFT_10 10
#define DS_SHIFT_11 11
#define DS_SHIFT_12 12
#define DS_SHIFT_13 13
#define DS_SHIFT_14 14
#define DS_SHIFT_15 15
#define DS_SHIFT_16 16
#define DS_SHIFT_17 17
#define DS_SHIFT_18 18
#define DS_SHIFT_19 19
#define DS_SHIFT_20 20
#define DS_SHIFT_21 21
#define DS_SHIFT_22 22
#define DS_SHIFT_23 23
#define DS_SHIFT_24 24
#define DS_SHIFT_25 25
#define DS_SHIFT_26 26
#define DS_SHIFT_27 27
#define DS_SHIFT_28 28
#define DS_SHIFT_29 29
#define DS_SHIFT_30 30
#define DS_SHIFT_31 31
#ifndef _ASMLANGUAGE
typedef struct btsRec /* BTS (Branch Trace Store) record */
{
UINT32 pcFm; /* Last Branch From */
UINT32 pcTo; /* Last Branch To */
UINT32 misc; /* bit4: Branch Predicted */
} BTS_REC;
typedef struct pebsRec /* PEBS (Precise Event Based Sampling) rec */
{
UINT32 eflags; /* EFLAGS */
UINT32 eip; /* Linear IP */
UINT32 eax; /* EAX */
UINT32 ebx; /* EBX */
UINT32 ecx; /* ECX */
UINT32 edx; /* EDX */
UINT32 esi; /* ESI */
UINT32 edi; /* EDI */
UINT32 ebp; /* EBP */
UINT32 esp; /* ESP */
} PEBS_REC;
typedef struct dsBufHeader /* DS (Debug Store) buffer management */
{
BTS_REC * btsBase; /* BTS buffer base */
BTS_REC * btsIndex; /* BTS index */
UINT32 btsMax; /* BTS absolute maximum */
UINT32 btsThreshold; /* BTS interrupt threshold */
PEBS_REC * pebsBase; /* PEBS buffer base */
PEBS_REC * pebsIndex; /* PEBS index */
UINT32 pebsMax; /* PEBS absolute maximum */
UINT32 pebsThreshold; /* PEBS interrupt threshold */
LL_INT pebsCtr; /* PEBS counter reset value */
UINT32 reserved[3]; /* reserved */
} DS_BUF_HEADER;
typedef struct dsConfig /* DS (Debug Store) configuration */
{
UINT32 btsNbytes; /* BTS buffer size */
BOOL btsAvailable; /* TRUE if BTS is available */
BOOL btsEnabled; /* TRUE if BTS is enabled */
BOOL btsIntMode; /* TRUE for interrupt mode */
BOOL btsBufMode; /* TRUE to store BTMs */
UINT32 pebsNbytes; /* PEBS buffer size */
BOOL pebsAvailable; /* TRUE if PEBS is available */
BOOL pebsEnabled; /* TRUE if PEBS is enabled */
INT32 pebsEvent; /* PEBS event */
INT32 pebsMetric; /* PEBS metric */
BOOL pebsOs; /* PEBS os */
LL_INT pebsCtr; /* PEBS counter */
DS_BUF_HEADER * pH; /* DS buffer header */
} DS_CONFIG;
/* function declarations */
#if defined(__STDC__) || defined(__cplusplus)
extern STATUS dbgStrLibInit (UINT32 nBytesBts, UINT32 nBytesPebs,
BOOL sysMode);
extern DS_BUF_HEADER * dbgStrBufInit (DS_BUF_HEADER * pH,
BTS_REC * btsBufAddr,
UINT32 btsMaxOffset,
UINT32 btsIntOffset,
PEBS_REC * pebsBufAddr,
UINT32 pebsMaxOffset,
UINT32 pebsIntOffset);
extern STATUS dbgStrBufAlloc (WIND_TCB * pTcb);
extern STATUS dbgStrBufFree (WIND_TCB * pTcb);
extern STATUS dbgStrConfig (WIND_TCB * pTcb,
BOOL btsEnable, BOOL pebsEnable,
BOOL btsIntMode, BOOL btsBufMode,
INT32 pebsEvent, INT32 pebsMetric,
BOOL pebsOs, LL_INT * pPebsValue);
extern STATUS dbgStrStart (WIND_TCB * pTcb);
extern STATUS dbgStrStop (WIND_TCB * pTcb);
extern STATUS dbgStrBtsModeSet (BOOL intMode, BOOL bufMode);
extern BOOL dbgStrBtsEnable (BOOL enable);
extern STATUS dbgStrPebsModeSet (INT32 event, INT32 metric, BOOL os,
LL_INT * pValue);
extern BOOL dbgStrPebsEnable (BOOL enable);
extern void dbgStrShowInit (void);
extern void dbgStrShow (WIND_TCB * pTcb, int type);
#else /* __STDC__ */
extern STATUS dbgStrLibInit ();
extern DS_BUF_HEADER * dbgStrBufInit ();
extern STATUS dbgStrBufAlloc ();
extern STATUS dbgStrBufFree ();
extern STATUS dbgStrConfig ();
extern STATUS dbgStrStart ();
extern STATUS dbgStrStop ();
extern STATUS dbgStrBtsModeSet ();
extern BOOL dbgStrBtsEnable ();
extern STATUS dbgStrPebsModeSet ();
extern BOOL dbgStrPebsEnable ();
extern void dbgStrShowInit ();
extern void dbgStrShow ();
#endif /* __STDC__ */
#endif /* _ASMLANGUAGE */
#ifdef __cplusplus
}
#endif
#endif /* __INCdbgStrLibh */