|  | /* 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 _DBE_STRUCTS_H | 
|  | #define _DBE_STRUCTS_H | 
|  |  | 
|  | #include "dbe_types.h" | 
|  | #include "enums.h" | 
|  |  | 
|  | typedef enum | 
|  | { | 
|  | Sp_lang_unknown   = 0, | 
|  | Sp_lang_asm       = 1, | 
|  | Sp_lang_c         = 2, | 
|  | Sp_lang_ansic     = 3, | 
|  | Sp_lang_cplusplus = 4, | 
|  | Sp_lang_fortran   = 5, | 
|  | Sp_lang_pascal    = 6, | 
|  | Sp_lang_fortran90 = 7, | 
|  | Sp_lang_java      = 8, | 
|  | Sp_lang_c99       = 9, | 
|  | Sp_lang_gcc       = 16, | 
|  | Sp_lang_KAI_KPTS  = 32, | 
|  | Sp_lang_KAI_KCC   = 33, | 
|  | Sp_lang_KAI_Kcc   = 34 | 
|  | } Sp_lang_code; | 
|  |  | 
|  | struct Value | 
|  | { | 
|  | union | 
|  | { | 
|  | short s; | 
|  | int i; | 
|  | float f; | 
|  | double d; | 
|  | timestruc_t t; | 
|  | char *l;                // Label | 
|  | unsigned long long ll;  // address | 
|  | }; | 
|  | }; | 
|  |  | 
|  | // sync enum changes with both AnMetric.java and AnVariable.java | 
|  | enum ValueTag | 
|  | { | 
|  | VT_SHORT = 1, | 
|  | VT_INT, | 
|  | VT_LLONG, | 
|  | VT_FLOAT, | 
|  | VT_DOUBLE, | 
|  | VT_HRTIME, | 
|  | VT_LABEL, | 
|  | VT_ADDRESS, | 
|  | VT_OFFSET, | 
|  | VT_ULLONG | 
|  | }; | 
|  |  | 
|  | // Tagged numeric value | 
|  | struct TValue | 
|  | { | 
|  | ValueTag tag; | 
|  | bool sign;    // The print result will always begin with a sign (+ or -). | 
|  | union | 
|  | { | 
|  | short s; | 
|  | int i; | 
|  | float f; | 
|  | double d; | 
|  | char *l; | 
|  | void *p; | 
|  | long long ll; | 
|  | unsigned long long ull; | 
|  | }; | 
|  | double to_double (); | 
|  | int to_int (); | 
|  | char *to_str (char *str, size_t strsz); | 
|  | size_t get_len (); | 
|  | void make_delta (TValue *v1, TValue *v2); | 
|  | void make_ratio (TValue *v1, TValue *v2); | 
|  | int compare (TValue *v); | 
|  | }; | 
|  |  | 
|  | // XXX MAX_HWCOUNT may need to be managed dynamically, not #defined | 
|  | #define MAX_HWCOUNT 64 | 
|  |  | 
|  | // Experiment collection parameters | 
|  | struct Collection_params | 
|  | { | 
|  | int profile_mode;     // if clock-profiling is on | 
|  | long long ptimer_usec; // Clock profile timer interval (microseconds) | 
|  | int lms_magic_id;     // identifies which LMS_* states are live | 
|  | int sync_mode;        // if synctrace is on | 
|  | int sync_threshold;   // value of synctrace threshold, in microseconds | 
|  | int sync_scope;       // value of synctrace scope: Java and/or native | 
|  |  | 
|  | int heap_mode;        // if heaptrace is on | 
|  | int io_mode;          // if iotrace is on | 
|  | int race_mode;        // if race-detection is on | 
|  | int race_stack;       // setting for stack data collection | 
|  | int deadlock_mode;    // if deadlock-detection is on | 
|  | int omp_mode;         // if omptrace is on | 
|  |  | 
|  | int hw_mode;          // if hw-counter profiling is on | 
|  | int xhw_mode;    // if extended (true-PC) HW counter profiling for any counter | 
|  |  | 
|  | char *hw_aux_name[MAX_HWCOUNT]; | 
|  | char *hw_username[MAX_HWCOUNT]; | 
|  | int hw_interval[MAX_HWCOUNT];     // nominal interval for count | 
|  | int hw_tpc[MAX_HWCOUNT];          // non-zero, if aggressive TPC/VA requested | 
|  | int hw_metric_tag[MAX_HWCOUNT];   // tag as used for finding metrics | 
|  | int hw_cpu_ver[MAX_HWCOUNT];      // Chip version number for this metric | 
|  |  | 
|  | int sample_periodic;      // if periodic sampling is on | 
|  | int sample_timer;         // Sample timer (sec) | 
|  | int limit;                // experiment size limit | 
|  | const char *pause_sig;    // Pause/resume signal string | 
|  | const char *sample_sig;   // Sampling signal string | 
|  | const char *start_delay;  // Data collect start delay string | 
|  | const char *terminate;    // Data collection termination time string | 
|  | char *linetrace; | 
|  | }; | 
|  |  | 
|  | const hrtime_t ZERO_TIME = (hrtime_t) 0; | 
|  | const hrtime_t MAX_TIME = (hrtime_t) 0x7fffffffffffffffLL; | 
|  |  | 
|  | #define PCInvlFlag              ((int) 0x8LL) | 
|  | #define PCLineFlag              ((int) 0x4LL) | 
|  | #define PCTrgtFlag              ((int) 0x2LL) | 
|  | #define MAKE_ADDRESS(idx, off)  (((unsigned long long)(idx)<<32) | off) | 
|  | #define ADDRESS_SEG(x)          ((unsigned int)(((x)>>32) & 0xffffffff)) | 
|  | #define ADDRESS_OFF(x)          ((unsigned int)((x) & 0xffffffff)) | 
|  |  | 
|  | // | 
|  | //	Analyzer info | 
|  | #define AnalyzerInfoVersion 2 | 
|  |  | 
|  | typedef struct | 
|  | { | 
|  | uint64_t text_labelref; | 
|  | int32_t entries; | 
|  | uint32_t version; | 
|  | } AnalyzerInfoHdr;      // => header from .__analyzer_info | 
|  |  | 
|  | typedef struct | 
|  | { | 
|  | uint32_t offset;      // offset relative to text_labelref | 
|  | uint32_t id;          // profiled instruction identifier | 
|  | uint32_t signature;   // signature of profiled instruction | 
|  | uint32_t datatype_id; // referenced datatype identifier | 
|  | } memop_info_t;         // => used for table_type=0,1,2 | 
|  |  | 
|  | typedef struct | 
|  | { | 
|  | uint32_t offset;      // offset relative to text_labelref | 
|  | } target_info_t;        // => used for table_type=3 | 
|  |  | 
|  | typedef struct | 
|  | { | 
|  | uint32_t type; | 
|  | uint32_t offset; | 
|  | union | 
|  | { | 
|  | memop_info_t *memop; | 
|  | target_info_t *target; | 
|  | }; | 
|  | } inst_info_t; | 
|  |  | 
|  | class DataObject; | 
|  |  | 
|  | typedef struct | 
|  | { | 
|  | uint32_t datatype_id; // datatype identifier (local) | 
|  | uint32_t memop_refs;  // count of referencing memops | 
|  | uint32_t event_data;  // count of event data | 
|  | DataObject *dobj;     // corresponding dataobject (unique) | 
|  | } datatype_t; | 
|  |  | 
|  | typedef struct | 
|  | { | 
|  | uint32_t offset;      // entry offset in compilation unit | 
|  | uint32_t extent;      // sibling offset | 
|  | void *parent;         // container symbol | 
|  | void *object;         // resolved object | 
|  | } symbol_t; | 
|  |  | 
|  | typedef struct | 
|  | { | 
|  | char *old_prefix; | 
|  | char *new_prefix; | 
|  | } pathmap_t; | 
|  |  | 
|  | typedef struct | 
|  | { | 
|  | char *libname; | 
|  | enum LibExpand expand; | 
|  | } lo_expand_t; | 
|  |  | 
|  | typedef struct | 
|  | { | 
|  | int index1; | 
|  | int index2; | 
|  | } int_pair_t; | 
|  | #endif /* _DBE_STRUCTS_H */ |