binutils-gdb/gprofng/libcollector/hwprofile.h
Alan Modra 76bdc7266a Update year range in gprofng copyright notices
This adds 'Innovative Computing Labs' as an external author to
update-copyright.py, to cover the copyright notice in
gprofng/common/opteron_pcbe.c, and uses that plus another external
author 'Oracle and' to update gprofng copyright dates.  I'm not going
to commit 'Oracle and' as an accepted author, but that covers the
string "Copyright (c) 2006, 2012, Oracle and/or its affiliates. All
rights reserved." found in gprofng/testsuite/gprofng.display/jsynprog
files.
2023-01-01 23:26:30 +10:30

90 lines
3.0 KiB
C

/* Copyright (C) 2021-2023 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 _HWPROFILE_H
#define _HWPROFILE_H
#include <data_pckts.h>
typedef struct Hwcntr_packet
{ /* HW counter profiling packet */
Common_packet comm;
uint32_t tag; /* hw counter index, register */
uint64_t interval; /* overflow value */
} Hwcntr_packet;
typedef struct MHwcntr_packet
{ /* extended (superset) Hwcntr_packet */
Common_packet comm;
uint32_t tag; /* hw counter index, register */
uint64_t interval; /* overflow value */
Vaddr_type ea_vaddr; /* virtual addr causing HWC event */
Vaddr_type pc_vaddr; /* candidate eventPC */
uint64_t ea_paddr; /* physical address for ea_vaddr */
uint64_t pc_paddr; /* physical address for pc_vaddr */
uint64_t ea_pagesz; /* pagesz (bytes) for ea_paddr */
uint64_t pc_pagesz; /* pagesz (bytes) for pc_paddr */
uint32_t ea_lgrp; /* latency group of ea_paddr */
uint32_t pc_lgrp; /* latency group of pc_paddr */
uint32_t lgrp_lwp; /* locality group of lwp */
uint32_t lgrp_ps; /* locality group of process */
uint64_t latency; /* latency in cycles (sampling only) */
uint64_t data_source; /* data source (sampling only) */
} MHwcntr_packet;
#if ARCH(SPARC)
#define CONTEXT_PC MC_PC
#define CONTEXT_SP MC_O6
#define CONTEXT_FP MC_O7
#define SETFUNCTIONCONTEXT(ucp,funcp) \
(ucp)->uc_mcontext.gregs[CONTEXT_PC] = (greg_t)(funcp); \
(ucp)->uc_mcontext.gregs[CONTEXT_SP] = 0; \
(ucp)->uc_mcontext.gregs[CONTEXT_FP] = 0;
#elif ARCH(Intel)
#include <sys/reg.h>
#if WSIZE(64)
#define CONTEXT_PC REG_RIP
#define CONTEXT_FP REG_RBP
#define CONTEXT_SP REG_RSP
#elif WSIZE(32)
#define CONTEXT_PC REG_EIP
#define CONTEXT_FP REG_EBP
#define CONTEXT_SP REG_ESP
#endif /* WSIZE() */
#define SETFUNCTIONCONTEXT(ucp,funcp) \
(ucp)->uc_mcontext.gregs[CONTEXT_PC] = (intptr_t)(funcp); \
(ucp)->uc_mcontext.gregs[CONTEXT_SP] = 0; \
(ucp)->uc_mcontext.gregs[CONTEXT_FP] = 0;
#elif ARCH(Aarch64)
#define CONTEXT_PC 15
#define CONTEXT_FP 14
#define CONTEXT_SP 13
#define SETFUNCTIONCONTEXT(ucp,funcp) \
(ucp)->uc_mcontext.regs[CONTEXT_PC] = (greg_t)(funcp); \
(ucp)->uc_mcontext.regs[CONTEXT_SP] = 0; \
(ucp)->uc_mcontext.regs[CONTEXT_FP] = 0;
#endif /* ARCH() */
#endif