diff options
Diffstat (limited to 'gprofng/src/Exp_Layout.h')
-rw-r--r-- | gprofng/src/Exp_Layout.h | 158 |
1 files changed, 158 insertions, 0 deletions
diff --git a/gprofng/src/Exp_Layout.h b/gprofng/src/Exp_Layout.h new file mode 100644 index 00000000000..c5fbe4cddeb --- /dev/null +++ b/gprofng/src/Exp_Layout.h @@ -0,0 +1,158 @@ +/* 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 _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 */ |