]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gprofng/src/dbe_structs.h
Update year range in gprofng copyright notices
[thirdparty/binutils-gdb.git] / gprofng / src / dbe_structs.h
CommitLineData
76bdc726 1/* Copyright (C) 2021-2023 Free Software Foundation, Inc.
bb368aad
VM
2 Contributed by Oracle.
3
4 This file is part of GNU Binutils.
5
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 3, or (at your option)
9 any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, 51 Franklin Street - Fifth Floor, Boston,
19 MA 02110-1301, USA. */
20
21#ifndef _DBE_STRUCTS_H
22#define _DBE_STRUCTS_H
23
24#include "dbe_types.h"
25#include "enums.h"
26
27typedef enum
28{
29 Sp_lang_unknown = 0,
30 Sp_lang_asm = 1,
31 Sp_lang_c = 2,
32 Sp_lang_ansic = 3,
33 Sp_lang_cplusplus = 4,
34 Sp_lang_fortran = 5,
35 Sp_lang_pascal = 6,
36 Sp_lang_fortran90 = 7,
37 Sp_lang_java = 8,
38 Sp_lang_c99 = 9,
39 Sp_lang_gcc = 16,
40 Sp_lang_KAI_KPTS = 32,
41 Sp_lang_KAI_KCC = 33,
42 Sp_lang_KAI_Kcc = 34
43} Sp_lang_code;
44
45struct Value
46{
47 union
48 {
49 short s;
50 int i;
51 float f;
52 double d;
53 timestruc_t t;
54 char *l; // Label
55 unsigned long long ll; // address
56 };
57};
58
59// sync enum changes with both AnMetric.java and AnVariable.java
60enum ValueTag
61{
62 VT_SHORT = 1,
63 VT_INT,
64 VT_LLONG,
65 VT_FLOAT,
66 VT_DOUBLE,
67 VT_HRTIME,
68 VT_LABEL,
69 VT_ADDRESS,
70 VT_OFFSET,
71 VT_ULLONG
72};
73
74// Tagged numeric value
75struct TValue
76{
77 ValueTag tag;
78 bool sign; // The print result will always begin with a sign (+ or -).
79 union
80 {
81 short s;
82 int i;
83 float f;
84 double d;
85 char *l;
86 void *p;
87 long long ll;
88 unsigned long long ull;
89 };
90 double to_double ();
91 int to_int ();
92 char *to_str (char *str, size_t strsz);
93 size_t get_len ();
94 void make_delta (TValue *v1, TValue *v2);
95 void make_ratio (TValue *v1, TValue *v2);
96 int compare (TValue *v);
97};
98
99// XXX MAX_HWCOUNT may need to be managed dynamically, not #defined
100#define MAX_HWCOUNT 64
101
102// Experiment collection parameters
103struct Collection_params
104{
105 int profile_mode; // if clock-profiling is on
106 long long ptimer_usec; // Clock profile timer interval (microseconds)
107 int lms_magic_id; // identifies which LMS_* states are live
108 int sync_mode; // if synctrace is on
109 int sync_threshold; // value of synctrace threshold, in microseconds
110 int sync_scope; // value of synctrace scope: Java and/or native
111
112 int heap_mode; // if heaptrace is on
113 int io_mode; // if iotrace is on
114 int race_mode; // if race-detection is on
115 int race_stack; // setting for stack data collection
116 int deadlock_mode; // if deadlock-detection is on
117 int omp_mode; // if omptrace is on
118
119 int hw_mode; // if hw-counter profiling is on
120 int xhw_mode; // if extended (true-PC) HW counter profiling for any counter
121
122 char *hw_aux_name[MAX_HWCOUNT];
123 char *hw_username[MAX_HWCOUNT];
124 int hw_interval[MAX_HWCOUNT]; // nominal interval for count
125 int hw_tpc[MAX_HWCOUNT]; // non-zero, if aggressive TPC/VA requested
126 int hw_metric_tag[MAX_HWCOUNT]; // tag as used for finding metrics
127 int hw_cpu_ver[MAX_HWCOUNT]; // Chip version number for this metric
128
129 int sample_periodic; // if periodic sampling is on
130 int sample_timer; // Sample timer (sec)
131 int limit; // experiment size limit
132 const char *pause_sig; // Pause/resume signal string
133 const char *sample_sig; // Sampling signal string
134 const char *start_delay; // Data collect start delay string
135 const char *terminate; // Data collection termination time string
136 char *linetrace;
137};
138
139const hrtime_t ZERO_TIME = (hrtime_t) 0;
140const hrtime_t MAX_TIME = (hrtime_t) 0x7fffffffffffffffLL;
141
142#define PCInvlFlag ((int) 0x8LL)
143#define PCLineFlag ((int) 0x4LL)
144#define PCTrgtFlag ((int) 0x2LL)
145#define MAKE_ADDRESS(idx, off) (((unsigned long long)(idx)<<32) | off)
146#define ADDRESS_SEG(x) ((unsigned int)(((x)>>32) & 0xffffffff))
147#define ADDRESS_OFF(x) ((unsigned int)((x) & 0xffffffff))
148
149//
150// Analyzer info
151#define AnalyzerInfoVersion 2
152
153typedef struct
154{
155 uint64_t text_labelref;
156 int32_t entries;
157 uint32_t version;
158} AnalyzerInfoHdr; // => header from .__analyzer_info
159
160typedef struct
161{
162 uint32_t offset; // offset relative to text_labelref
163 uint32_t id; // profiled instruction identifier
164 uint32_t signature; // signature of profiled instruction
165 uint32_t datatype_id; // referenced datatype identifier
166} memop_info_t; // => used for table_type=0,1,2
167
168typedef struct
169{
170 uint32_t offset; // offset relative to text_labelref
171} target_info_t; // => used for table_type=3
172
173typedef struct
174{
175 uint32_t type;
176 uint32_t offset;
177 union
178 {
179 memop_info_t *memop;
180 target_info_t *target;
181 };
182} inst_info_t;
183
184class DataObject;
185
186typedef struct
187{
188 uint32_t datatype_id; // datatype identifier (local)
189 uint32_t memop_refs; // count of referencing memops
190 uint32_t event_data; // count of event data
191 DataObject *dobj; // corresponding dataobject (unique)
192} datatype_t;
193
194typedef struct
195{
196 uint32_t offset; // entry offset in compilation unit
197 uint32_t extent; // sibling offset
198 void *parent; // container symbol
199 void *object; // resolved object
200} symbol_t;
201
202typedef struct
203{
204 char *old_prefix;
205 char *new_prefix;
206} pathmap_t;
207
208typedef struct
209{
210 char *libname;
211 enum LibExpand expand;
212} lo_expand_t;
213
214typedef struct
215{
216 int index1;
217 int index2;
218} int_pair_t;
219#endif /* _DBE_STRUCTS_H */