| /* Copyright (C) 2021-2024 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 _EXP_LAYOUT_H | |
| #define _EXP_LAYOUT_H | |
| #include <sys/time.h> | |
| #include <sys/types.h> | |
| #include "dbe_types.h" | |
| #include "gp-experiment.h" | |
| #include "data_pckts.h" | |
| #include "ABS.h" | |
| #include "Data_window.h" | |
| #include "Histable.h" | |
| #include "vec.h" | |
| class PrUsage | |
| { | |
| public: | |
| PrUsage (); | |
| PrUsage *bind32 (void *p, bool need_swap_endian); | |
| PrUsage *bind64 (void *p, bool need_swap_endian); | |
| static uint64_t bind32Size (); | |
| static uint64_t bind64Size (); | |
| Vector<long long> * getMstateValues (); | |
| hrtime_t pr_tstamp; | |
| hrtime_t pr_create; | |
| hrtime_t pr_term; | |
| hrtime_t pr_rtime; | |
| // the following correspond to PROP_MSTATE LMS_* offsets; see newMstateVec() | |
| hrtime_t pr_utime; | |
| hrtime_t pr_stime; | |
| hrtime_t pr_ttime; | |
| hrtime_t pr_tftime; | |
| hrtime_t pr_dftime; | |
| hrtime_t pr_kftime; | |
| hrtime_t pr_ltime; | |
| hrtime_t pr_slptime; | |
| hrtime_t pr_wtime; | |
| hrtime_t pr_stoptime; | |
| uint64_t pr_minf; | |
| uint64_t pr_majf; | |
| uint64_t pr_nswap; | |
| uint64_t pr_inblk; | |
| uint64_t pr_oublk; | |
| uint64_t pr_msnd; | |
| uint64_t pr_mrcv; | |
| uint64_t pr_sigs; | |
| uint64_t pr_vctx; | |
| uint64_t pr_ictx; | |
| uint64_t pr_sysc; | |
| uint64_t pr_ioch; | |
| }; | |
| class DataView; | |
| extern void *getStack (VMode, DataView*, long); | |
| extern int stackSize (VMode, DataView*, long); | |
| extern Histable *getStackPC (int, VMode, DataView*, long); | |
| extern Vector<Histable*> *getStackPCs (VMode, DataView*, long); | |
| class CommonPacket // use only for RacePacket, please | |
| { | |
| public: | |
| CommonPacket (); | |
| void *getStack (VMode); | |
| Histable *getStackPC (int, VMode); | |
| Vector<Histable*>*getStackPCs (VMode); | |
| static int cmp (const void *a, const void *b); | |
| enum Tag_type { LWP, THR, CPU }; | |
| static const int NTAGS = 3; | |
| uint32_t tags[NTAGS]; // lwp_id, thr_id, cpu_id | |
| hrtime_t tstamp; | |
| struct JThread *jthread_TBR; // pointer to JThread or NULL | |
| uint64_t frinfo; // frame info | |
| Vaddr leafpc; // raw leaf PC if availabe | |
| void *nat_stack; // native stack | |
| void *user_stack; // user stack (Java, OMP, etc.) | |
| static void *jvm_overhead; | |
| }; | |
| class FramePacket | |
| { | |
| public: | |
| int | |
| stackSize (bool java = false) | |
| { | |
| return java ? jstack->size () / 2 : stack->size (); | |
| } | |
| Vaddr | |
| getFromStack (int n) | |
| { | |
| return stack->fetch (n); | |
| } | |
| Vaddr | |
| getMthdFromStack (int n) | |
| { | |
| return jstack->fetch (2 * n + 1); | |
| } | |
| int | |
| getBciFromStack (int n) | |
| { | |
| return (int) jstack->fetch (2 * n); | |
| } | |
| bool | |
| isLeafMark (int n) | |
| { | |
| return stack->fetch (n) == (Vaddr) SP_LEAF_CHECK_MARKER; | |
| } | |
| bool | |
| isTruncatedStack (bool java = false) | |
| { | |
| return java ? jtruncated : truncated == (Vaddr) SP_TRUNC_STACK_MARKER; | |
| } | |
| bool | |
| isFailedUnwindStack () | |
| { | |
| return truncated == (Vaddr) SP_FAILED_UNWIND_MARKER; | |
| } | |
| uint32_t omp_state; // OpenMP thread state | |
| uint32_t mpi_state; // MPI state | |
| uint64_t omp_cprid; // OpenMP parallel region id (omptrace) | |
| Vector<Vaddr> *stack; | |
| Vaddr truncated; | |
| Vector<Vaddr> *jstack; | |
| bool jtruncated; | |
| Vector<Vaddr> *ompstack; | |
| Vaddr omptruncated; | |
| }; | |
| #endif /* _EXP_LAYOUT_H */ |