|  | /* Copyright (C) 2021 Free Software Foundation, Inc. | 
|  | Contributed by Oracle. | 
|  |  | 
|  | This file is part of GNU Binutils. | 
|  |  | 
|  | This program is free software; you can redistribute it and/or modify | 
|  | it under the terms of the GNU General Public License as published by | 
|  | the Free Software Foundation; either version 3, or (at your option) | 
|  | any later version. | 
|  |  | 
|  | This program is distributed in the hope that it will be useful, | 
|  | but WITHOUT ANY WARRANTY; without even the implied warranty of | 
|  | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
|  | GNU General Public License for more details. | 
|  |  | 
|  | You should have received a copy of the GNU General Public License | 
|  | along with this program; if not, write to the Free Software | 
|  | Foundation, 51 Franklin Street - Fifth Floor, Boston, | 
|  | MA 02110-1301, USA.  */ | 
|  |  | 
|  | #ifndef _DATA_PCKTS_H | 
|  | #define _DATA_PCKTS_H | 
|  |  | 
|  | /* | 
|  | * This file contains structure definitions for the binary file formats | 
|  | * used in the experiment.  It is implemented as C header file so that | 
|  | * it can be processed by both ANSI-C and C++. | 
|  | */ | 
|  |  | 
|  | #include <pthread.h> | 
|  | #include <stdint.h> | 
|  |  | 
|  | #include "gp-defs.h" | 
|  | #include "gp-time.h" | 
|  |  | 
|  | #if WSIZE(64) | 
|  | typedef uint64_t Vaddr_type;    /* process address for 64 bit apps */ | 
|  | typedef uint64_t Size_type;     /* size_t for 64 bit apps */ | 
|  | #else | 
|  | typedef uint32_t Vaddr_type;    /* process address */ | 
|  | typedef uint32_t Size_type;     /* size_t for 32 bit apps */ | 
|  | #endif | 
|  |  | 
|  | /* marker to indicate dump of O7 register on stack (support for leaf routines) */ | 
|  | #define SP_LEAF_CHECK_MARKER    ((uint64_t)(-1)) | 
|  |  | 
|  | /* marker to indicate truncated stack */ | 
|  | #define SP_TRUNC_STACK_MARKER   ((uint64_t)(-2)) | 
|  |  | 
|  | /* marker to indicate failed stack unwind */ | 
|  | #define SP_FAILED_UNWIND_MARKER ((uint64_t)(-3)) | 
|  |  | 
|  | #define PROFILE_BUFFER_CHUNK    16384 | 
|  |  | 
|  | typedef enum | 
|  | { | 
|  | MASTER_SMPL = 0, | 
|  | PROGRAM_SMPL, | 
|  | PERIOD_SMPL, | 
|  | MANUAL_SMPL | 
|  | } Smpl_type; | 
|  |  | 
|  | typedef enum | 
|  | { /* values for "profpckt kind" stored in log.xml */ | 
|  | EMPTY_PCKT = 0, | 
|  | PROF_PCKT, | 
|  | SYNC_PCKT, | 
|  | HW_PCKT, | 
|  | XHWC_PCKT, | 
|  | HEAP_PCKT, | 
|  | MPI_PCKT, | 
|  | MHWC_PCKT, | 
|  | OPROF_PCKT, | 
|  | OMP_PCKT, | 
|  | RACE_PCKT, | 
|  | FRAME_PCKT, | 
|  | OMP2_PCKT, | 
|  | DEADLOCK_PCKT, | 
|  | OMP3_PCKT, | 
|  | OMP4_PCKT, | 
|  | OMP5_PCKT, | 
|  | UID_PCKT, | 
|  | FRAME2_PCKT, | 
|  | IOTRACE_PCKT, | 
|  | LAST_PCKT,            /* last data packet type */ | 
|  | CLOSED_PCKT = 65535   /*  -1, this packet closes a block */ | 
|  | } Pckt_type; | 
|  |  | 
|  | typedef enum | 
|  | { | 
|  | EMPTY_INFO = 0, | 
|  | STACK_INFO, | 
|  | JAVA_INFO, | 
|  | OMP_INFO, | 
|  | MPI_INFO, | 
|  | OMP2_INFO, | 
|  | LAST_INFO             /* keep this one last */ | 
|  | } Info_type; | 
|  |  | 
|  | #define COMPRESSED_INFO 0x80000000 | 
|  |  | 
|  | #define JAVA_PCKT       0x80 | 
|  | #define OMPS_PCKT       0x40  /* packet contains OMP state info */ | 
|  | #define PCKT_TYPE(x)    ((x) & 0x1f) | 
|  |  | 
|  | typedef struct CommonHead_packet | 
|  | { | 
|  | unsigned int tsize : 16; | 
|  | unsigned int type : 16; | 
|  | } CommonHead_packet; | 
|  |  | 
|  | // All collector modules record their packets as extensions of CM_Packet | 
|  | typedef struct CM_Packet | 
|  | { | 
|  | unsigned int tsize : 16; | 
|  | unsigned int type : 16; | 
|  | } CM_Packet; | 
|  |  | 
|  | typedef struct Common_packet | 
|  | { | 
|  | unsigned int tsize : 16; /* packet size  */ | 
|  | unsigned int type : 16; | 
|  | pthread_t    lwp_id; | 
|  | pthread_t    thr_id; | 
|  | uint32_t     cpu_id; | 
|  | hrtime_t     tstamp; | 
|  | uint64_t     frinfo; | 
|  | } Common_packet; | 
|  |  | 
|  | /* Definition of values stored in the experiment PROP_MSTATE field */ | 
|  | /* They include: | 
|  | *   LWP microstates (copied from msacct.h).  Also see PrUsage class. | 
|  | *   Linux's CPU time | 
|  | *   er_kernel time | 
|  | */ | 
|  | /*   Can be used with LMS_STATE_STRINGS (below) */ | 
|  | #define LMS_USER        0   /* running in user mode */ | 
|  | #define LMS_SYSTEM      1   /* running in sys call or page fault */ | 
|  | #define LMS_TRAP        2   /* running in other trap */ | 
|  | #define LMS_TFAULT      3   /* asleep in user text page fault */ | 
|  | #define LMS_DFAULT      4   /* asleep in user data page fault */ | 
|  | #define LMS_KFAULT      5   /* asleep in kernel page fault */ | 
|  | #define LMS_USER_LOCK   6   /* asleep waiting for user-mode lock */ | 
|  | #define LMS_SLEEP       7   /* asleep for any other reason */ | 
|  | #define LMS_WAIT_CPU    8   /* waiting for CPU (latency) */ | 
|  | #define LMS_STOPPED     9   /* stopped (/proc, jobcontrol, or lwp_stop) */ | 
|  | #define LMS_LINUX_CPU   10  /* LINUX timer_create(CLOCK_THREAD_CPUTIME_ID) */ | 
|  | #define LMS_KERNEL_CPU  11  /* LINUX timer_create(CLOCK_THREAD_CPUTIME_ID) */ | 
|  | #define LMS_NUM_STATES  12  /* total number of above states */ | 
|  | #define LMS_NUM_SOLARIS_MSTATES     10  /* LMS microstates thru LMS_STOPPED */ | 
|  |  | 
|  | // Magic value stored in experiments that identifies which LMS states are valid | 
|  | #define LMS_MAGIC_ID_SOLARIS        10  // Solaris: LMS_USER thru LMS_STOPPED | 
|  | #define LMS_MAGIC_ID_ERKERNEL_USER   2  // er_kernel user: LMS_USER, LMS_SYSTEM | 
|  | #define LMS_MAGIC_ID_ERKERNEL_KERNEL 3  // er_kernel kernel: LMS_KERNEL_CPU | 
|  | #define LMS_MAGIC_ID_LINUX           1  // Linux: LMS_LINUX_CPU | 
|  |  | 
|  | #define LMS_STATE_STRINGS \ | 
|  | { \ | 
|  | NTXT("USER"),         /* LMS_USER */ \ | 
|  | NTXT("SYSTEM"),       /* LMS_SYSTEM */ \ | 
|  | NTXT("TRAP"),         /* LMS_TRAP */ \ | 
|  | NTXT("TFAULT"),       /* LMS_TFAULT */ \ | 
|  | NTXT("DFAULT"),       /* LMS_DFAULT */ \ | 
|  | NTXT("KFAULT"),       /* LMS_KFAULT */ \ | 
|  | NTXT("USER_LOCK"),    /* LMS_USER_LOCK */ \ | 
|  | NTXT("SLEEP"),        /* LMS_SLEEP */ \ | 
|  | NTXT("WAIT_CPU"),     /* LMS_WAIT_CPU */ \ | 
|  | NTXT("STOPPED"),      /* LMS_STOPPED */ \ | 
|  | NTXT("LINUX_CPU"),    /* LMS_LINUX_CPU */ \ | 
|  | NTXT("KERNEL_CPU")    /* LMS_KERNEL_CPU */ \ | 
|  | } | 
|  | #define LMS_STATE_USTRINGS \ | 
|  | { \ | 
|  | GTXT("User CPU"),             /* LMS_USER */ \ | 
|  | GTXT("System CPU"),           /* LMS_SYSTEM */ \ | 
|  | GTXT("Trap CPU"),             /* LMS_TRAP */ \ | 
|  | GTXT("Text Page Fault"),      /* LMS_TFAULT */ \ | 
|  | GTXT("Data Page Fault"),      /* LMS_DFAULT */ \ | 
|  | GTXT("Kernel Page Fault"),    /* LMS_KFAULT */ \ | 
|  | GTXT("User Lock"),            /* LMS_USER_LOCK */ \ | 
|  | GTXT("Sleep"),                /* LMS_SLEEP */ \ | 
|  | GTXT("Wait CPU"),             /* LMS_WAIT_CPU */ \ | 
|  | GTXT("Stopped"),              /* LMS_STOPPED */ \ | 
|  | GTXT("User+System CPU"),      /* LMS_LINUX_CPU */ \ | 
|  | GTXT("Kernel CPU")            /* LMS_KERNEL_CPU */ \ | 
|  | } | 
|  |  | 
|  | typedef enum | 
|  | { | 
|  | MALLOC_TRACE = 0, | 
|  | FREE_TRACE, | 
|  | REALLOC_TRACE, | 
|  | MMAP_TRACE, | 
|  | MUNMAP_TRACE, | 
|  | HEAPTYPE_LAST | 
|  | } Heap_type; | 
|  |  | 
|  | #define HEAPTYPE_STATE_STRINGS \ | 
|  | { \ | 
|  | NTXT("MALLOC"), \ | 
|  | NTXT("FREE"), \ | 
|  | NTXT("REALLOC"), \ | 
|  | NTXT("MMAP"), \ | 
|  | NTXT("MUNMAP") \ | 
|  | } | 
|  | #define HEAPTYPE_STATE_USTRINGS \ | 
|  | { \ | 
|  | GTXT("malloc"), \ | 
|  | GTXT("free"), \ | 
|  | GTXT("realloc"), \ | 
|  | GTXT("mmap"), \ | 
|  | GTXT("munmap") \ | 
|  | } | 
|  |  | 
|  | typedef enum | 
|  | { | 
|  | ZFS_TYPE = 0, | 
|  | NFS_TYPE, | 
|  | UFS_TYPE, | 
|  | UDFS_TYPE, | 
|  | LOFS_TYPE, | 
|  | VXFS_TYPE, | 
|  | TMPFS_TYPE, | 
|  | PCFS_TYPE, | 
|  | HSFS_TYPE, | 
|  | PROCFS_TYPE, | 
|  | FIFOFS_TYPE, | 
|  | SWAPFS_TYPE, | 
|  | CACHEFS_TYPE, | 
|  | AUTOFS_TYPE, | 
|  | SPECFS_TYPE, | 
|  | SOCKFS_TYPE, | 
|  | FDFS_TYPE, | 
|  | MNTFS_TYPE, | 
|  | NAMEFS_TYPE, | 
|  | OBJFS_TYPE, | 
|  | SHAREFS_TYPE, | 
|  | EXT2FS_TYPE, | 
|  | EXT3FS_TYPE, | 
|  | EXT4FS_TYPE, | 
|  | UNKNOWNFS_TYPE, | 
|  | FSTYPE_LAST | 
|  | } FileSystem_type; | 
|  |  | 
|  | typedef enum | 
|  | { | 
|  | READ_TRACE = 0, | 
|  | WRITE_TRACE, | 
|  | OPEN_TRACE, | 
|  | CLOSE_TRACE, | 
|  | OTHERIO_TRACE, | 
|  | READ_TRACE_ERROR, | 
|  | WRITE_TRACE_ERROR, | 
|  | OPEN_TRACE_ERROR, | 
|  | CLOSE_TRACE_ERROR, | 
|  | OTHERIO_TRACE_ERROR, | 
|  | IOTRACETYPE_LAST | 
|  | } IOTrace_type; | 
|  |  | 
|  | #define IOTRACETYPE_STATE_STRINGS \ | 
|  | { \ | 
|  | NTXT("READ"), \ | 
|  | NTXT("WRITE"), \ | 
|  | NTXT("OPEN"), \ | 
|  | NTXT("CLOSE"), \ | 
|  | NTXT("OTHERIO"), \ | 
|  | NTXT("READERROR"), \ | 
|  | NTXT("WRITEERROR"), \ | 
|  | NTXT("OPENERROR"), \ | 
|  | NTXT("CLOSEERROR"), \ | 
|  | NTXT("OTHERIOERROR") \ | 
|  | } | 
|  | #define IOTRACETYPE_STATE_USTRINGS \ | 
|  | { \ | 
|  | GTXT("Read"), \ | 
|  | GTXT("Write"), \ | 
|  | GTXT("Open"), \ | 
|  | GTXT("Close"), \ | 
|  | GTXT("Other I/O"), \ | 
|  | GTXT("Read error"), \ | 
|  | GTXT("Write error"), \ | 
|  | GTXT("Open error"), \ | 
|  | GTXT("Close error"), \ | 
|  | GTXT("Other I/O error") \ | 
|  | } | 
|  |  | 
|  | // the type of racing memory access with redundance flag | 
|  | typedef enum | 
|  | { | 
|  | WRITE_RACE = 0, | 
|  | WRITE_RACE_RED, | 
|  | READ_RACE, | 
|  | READ_RACE_RED, | 
|  | RACETYPE_LAST | 
|  | } Race_type; | 
|  |  | 
|  | typedef struct Frame_packet | 
|  | { | 
|  | unsigned int tsize : 16; /* packet size */ | 
|  | unsigned int type : 16; | 
|  | uint32_t hsize;           /* header size */ | 
|  | uint64_t uid;             /* unique id (experiment wide) */ | 
|  | } Frame_packet; | 
|  |  | 
|  | typedef struct Uid_packet | 
|  | { | 
|  | unsigned int tsize : 16;  /* packet size */ | 
|  | unsigned int type : 16; | 
|  | uint32_t flags; | 
|  | uint64_t uid;             /* unique id (experiment wide) */ | 
|  | } Uid_packet; | 
|  |  | 
|  | /* | 
|  | * Components of the variable part of Frame_packet | 
|  | */ | 
|  | typedef struct Common_info | 
|  | { | 
|  | unsigned int hsize;   /* size of this info */ | 
|  | unsigned int kind; | 
|  | uint64_t uid;         /* unique id of this info if any */ | 
|  | } Common_info; | 
|  |  | 
|  | typedef struct Stack_info | 
|  | { /* Native call stack */ | 
|  | unsigned int hsize; | 
|  | unsigned int kind; | 
|  | uint64_t uid; | 
|  | } Stack_info; | 
|  |  | 
|  | typedef struct Java_info | 
|  | { /* Java call stack */ | 
|  | unsigned int hsize; | 
|  | unsigned int kind; | 
|  | uint64_t uid; | 
|  | } Java_info; | 
|  |  | 
|  | typedef struct OMP_info | 
|  | { /* OMP thread state */ | 
|  | unsigned int hsize; | 
|  | unsigned int kind; | 
|  | uint32_t omp_state; | 
|  | uint32_t pad; | 
|  | } OMP_info; | 
|  |  | 
|  | typedef struct OMP2_info | 
|  | { /* OpenMP user call stack */ | 
|  | unsigned int hsize; | 
|  | unsigned int kind; | 
|  | uint32_t omp_state; | 
|  | uint32_t pad; | 
|  | uint64_t uid; | 
|  | } OMP2_info; | 
|  |  | 
|  | /* OMP thread states as recorded in the experiment */ | 
|  | /*   Definition of values stored in the experiment PROP_OMPSTATE field */ | 
|  |  | 
|  | /*   Can be used with OMP_THR_STATE_STRINGS (below) */ | 
|  | typedef enum | 
|  | { | 
|  | OMP_NO_STATE = 0, /* Not initialized */ | 
|  | OMP_OVHD_STATE, /* Overhead */ | 
|  | OMP_WORK_STATE, /* Useful work, excluding reduction, master, single, critical */ | 
|  | OMP_IBAR_STATE, /* In an implicit barrier */ | 
|  | OMP_EBAR_STATE, /* In an explicit barrier */ | 
|  | OMP_IDLE_STATE, /* Slave waiting */ | 
|  | OMP_SERL_STATE, /* User OMPead not in any OMP parallel region */ | 
|  | OMP_RDUC_STATE, /* Reduction */ | 
|  | OMP_LKWT_STATE, /* Waiting for lock */ | 
|  | OMP_CTWT_STATE, /* Waiting to enter critical section */ | 
|  | OMP_ODWT_STATE, /* Waiting to execute an ordered section */ | 
|  | OMP_ATWT_STATE, /* Wait for atomic */ | 
|  | OMP_TSKWT_STATE, /* Task wait */ | 
|  | OMP_LAST_STATE | 
|  | } OMP_THR_STATE; | 
|  | #define OMP_THR_STATE_STRINGS \ | 
|  | { \ | 
|  | NTXT("NO"),       /* OMP_NO_STATE */ \ | 
|  | NTXT("OVHD"),     /* OMP_OVHD_STATE */ \ | 
|  | NTXT("WORK"),     /* OMP_WORK_STATE */ \ | 
|  | NTXT("IBAR"),     /* OMP_IBAR_STATE */ \ | 
|  | NTXT("EBAR"),     /* OMP_EBAR_STATE */ \ | 
|  | NTXT("IDLE"),     /* OMP_IDLE_STATE */ \ | 
|  | NTXT("SERL"),     /* OMP_SERL_STATE */ \ | 
|  | NTXT("RDUC"),     /* OMP_RDUC_STATE */ \ | 
|  | NTXT("LKWT"),     /* OMP_LKWT_STATE */ \ | 
|  | NTXT("CTWT"),     /* OMP_CTWT_STATE */ \ | 
|  | NTXT("ODWT"),     /* OMP_ODWT_STATE */ \ | 
|  | NTXT("ATWT"),     /* OMP_ATWT_STATE */ \ | 
|  | NTXT("TSKWT")     /* OMP_TSKWT_STATE */ \ | 
|  | } | 
|  | #define OMP_THR_STATE_USTRINGS \ | 
|  | { \ | 
|  | GTXT("None"),                 /* OMP_NO_STATE */ \ | 
|  | GTXT("Overhead"),             /* OMP_OVHD_STATE */ \ | 
|  | GTXT("Work"),                 /* OMP_WORK_STATE */ \ | 
|  | GTXT("Implicit Barrier"),     /* OMP_IBAR_STATE */ \ | 
|  | GTXT("Explicit Barrier"),     /* OMP_EBAR_STATE */ \ | 
|  | GTXT("Idle"),                 /* OMP_IDLE_STATE */ \ | 
|  | GTXT("Serial"),               /* OMP_SERL_STATE */ \ | 
|  | GTXT("Reduction"),            /* OMP_RDUC_STATE */ \ | 
|  | GTXT("Lock Wait"),            /* OMP_LKWT_STATE */ \ | 
|  | GTXT("Critical Section Wait"), /* OMP_CTWT_STATE */ \ | 
|  | GTXT("Ordered Section Wait"), /* OMP_ODWT_STATE */ \ | 
|  | GTXT("Atomic Wait"),          /* OMP_ATWT_STATE */ \ | 
|  | GTXT("Task Wait")             /* OMP_TSKWT_STATE */ \ | 
|  | } | 
|  |  | 
|  | /* sub-packet for MPI state information */ | 
|  | typedef struct MPI_info | 
|  | { /* MPI thread state */ | 
|  | unsigned int hsize; | 
|  | unsigned int kind; | 
|  | uint32_t mpi_state; | 
|  | uint32_t pad; | 
|  | } MPI_info; | 
|  |  | 
|  | /* MPI thread states, as recorded in the experiment */ | 
|  | typedef enum | 
|  | { | 
|  | MPI_NO_STATE = 0,     /* Not initialized */ | 
|  | MPI_USER,             /* Executing user code, not in MPI */ | 
|  | MPI_PROG,             /* Executing in the MPI library (progressing) */ | 
|  | MPI_WAIT              /* Waiting in the MPI library */ | 
|  | } MPI_THR_STATE; | 
|  |  | 
|  | /* | 
|  | *	Dyntext file structure | 
|  | */ | 
|  | typedef enum | 
|  | { | 
|  | DT_HEADER = 1, | 
|  | DT_CODE, | 
|  | DT_LTABLE, | 
|  | DT_SRCFILE | 
|  | } DT_type; | 
|  |  | 
|  | typedef struct DT_common | 
|  | { | 
|  | DT_type type; | 
|  | unsigned int size; | 
|  | } DT_common; | 
|  |  | 
|  | typedef struct DT_header | 
|  | { | 
|  | DT_type type; | 
|  | unsigned int size; | 
|  | hrtime_t time; /* time of loading */ | 
|  | uint64_t vaddr; | 
|  | } DT_header; | 
|  |  | 
|  | typedef struct DT_code | 
|  | { | 
|  | DT_type type; | 
|  | unsigned int size; | 
|  | } DT_code; | 
|  |  | 
|  | typedef struct DT_ltable | 
|  | { | 
|  | DT_type type; | 
|  | unsigned int size; | 
|  | } DT_ltable; | 
|  |  | 
|  | typedef struct DT_lineno | 
|  | { | 
|  | unsigned int offset; | 
|  | unsigned int lineno; | 
|  | } DT_lineno; | 
|  |  | 
|  | typedef struct DT_srcfile | 
|  | { | 
|  | DT_type type; | 
|  | unsigned int size; | 
|  | } DT_srcfile; | 
|  |  | 
|  | /* | 
|  | *	Archive file structure | 
|  | */ | 
|  | #define ARCH_VERSION 0x100 /* version 1.0 */ | 
|  |  | 
|  | /* For compatibility with older archives append new types only */ | 
|  | typedef enum | 
|  | { | 
|  | ARCH_SEGMENT_TYPE = 1, | 
|  | ARCH_MSG_TYPE, | 
|  | ARCH_PLT_TYPE, | 
|  | ARCH_MODULE_TYPE, | 
|  | ARCH_FUNCTION_TYPE, | 
|  | ARCH_LDINSTR_TYPE, | 
|  | ARCH_STINSTR_TYPE, | 
|  | ARCH_PREFETCH_TYPE, | 
|  | ARCH_BRTARGET_TYPE, | 
|  | ARCH_JCLASS_TYPE, | 
|  | ARCH_JMETHOD_TYPE, | 
|  | ARCH_JUNLOAD_TYPE, | 
|  | ARCH_INF_TYPE, | 
|  | ARCH_JCLASS_LOCATION_TYPE | 
|  | } ARCH_type; | 
|  |  | 
|  | #define ARCH_TYPE(x,y)      ((ARCH_##x##_TYPE<<8)|y) | 
|  |  | 
|  | typedef struct | 
|  | { | 
|  | unsigned int type : 16; | 
|  | unsigned int size : 16; | 
|  | } ARCH_common; | 
|  |  | 
|  | /* The maximum value that fits into ARCH_common.size */ | 
|  | #define ARCH_MAX_SIZE 0xffff | 
|  |  | 
|  | #define ARCH_SEGMENT ARCH_TYPE(SEGMENT, 0) | 
|  |  | 
|  | typedef struct | 
|  | { | 
|  | ARCH_common common; | 
|  | int version; | 
|  | uint32_t inode; | 
|  | uint32_t textsz;      /* text segment size */ | 
|  | uint32_t platform;    /* sparc, intel, etc. */ | 
|  | } ARCH_segment; | 
|  |  | 
|  | #define ARCH_MSG ARCH_TYPE(MSG, 0) | 
|  |  | 
|  | typedef struct | 
|  | { | 
|  | ARCH_common common; | 
|  | uint32_t errcode; | 
|  | } ARCH_message; | 
|  |  | 
|  | #define ARCH_INF ARCH_TYPE(INF, 0) | 
|  |  | 
|  | typedef struct | 
|  | { | 
|  | ARCH_common common; | 
|  | } ARCH_info; | 
|  |  | 
|  | #define ARCH_MODULE ARCH_TYPE(MODULE, 0) | 
|  |  | 
|  | typedef struct | 
|  | { | 
|  | ARCH_common common; | 
|  | unsigned int lang_code; | 
|  | unsigned int fragmented; | 
|  | } ARCH_module; | 
|  |  | 
|  | #define ARCH_FUNCTION ARCH_TYPE(FUNCTION, 0) | 
|  |  | 
|  | typedef struct | 
|  | { | 
|  | ARCH_common common; | 
|  | uint32_t offset; | 
|  | uint32_t size; | 
|  | uint32_t save_addr; | 
|  | } ARCH_function; | 
|  |  | 
|  | #define ARCH_LDINSTR  ARCH_TYPE(LDINSTR, 0) | 
|  | #define ARCH_STINSTR  ARCH_TYPE(STINSTR, 0) | 
|  | #define ARCH_PREFETCH ARCH_TYPE(PREFETCH, 0) | 
|  | #define ARCH_BRTARGET ARCH_TYPE(BRTARGET, 0) | 
|  |  | 
|  | typedef struct | 
|  | { | 
|  | ARCH_common common; | 
|  | } ARCH_aninfo; | 
|  |  | 
|  | #define ARCH_JCLASS_LOCATION ARCH_TYPE(JCLASS_LOCATION, 3) | 
|  |  | 
|  | typedef struct | 
|  | { | 
|  | CM_Packet comm; | 
|  | uint32_t pad; | 
|  | uint64_t class_id; | 
|  | } ARCH_jclass_location; | 
|  |  | 
|  | #define ARCH_JCLASS ARCH_TYPE(JCLASS, 3) | 
|  |  | 
|  | typedef struct | 
|  | { | 
|  | CM_Packet comm; | 
|  | uint32_t pad; | 
|  | uint64_t class_id; | 
|  | hrtime_t tstamp; | 
|  | } ARCH_jclass; | 
|  |  | 
|  | #define ARCH_JMETHOD ARCH_TYPE(JMETHOD, 3) | 
|  |  | 
|  | typedef struct | 
|  | { | 
|  | CM_Packet comm; | 
|  | uint32_t pad; | 
|  | uint64_t class_id; | 
|  | uint64_t method_id; | 
|  | } ARCH_jmethod; | 
|  |  | 
|  | #endif /* _DATA_PCKTS_H */ |