ff4ff35918
Red Bear OS is a full fork. All sources must be available from git clone with zero network access. Removed gitignore rules that excluded fetched source trees under recipes/*/source/, local/recipes/kde/*/source/, local/recipes/qt/*/source/, and vendor source trees. Build artifacts (target/, build/, source.tar, *.o, *.so) remain excluded. 127291 files added — kernel, relibc, base, bootloader, pkgar, all KDE/Qt frameworks, mesa, wayland, DRM drivers, and every other recipe source.
220 lines
5.8 KiB
C++
220 lines
5.8 KiB
C++
/* 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 */
|