blob: 0a5c9c16253511e3853a762b6ee65baaab3fd81f [file] [log] [blame]
/* 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 _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 */