Mark Wielaard 461cc5c003 Cleanup GPL header address notices by using http://www.gnu.org/licenses/
Sync VEX/LICENSE.GPL with top-level COPYING file. We used 3 different
addresses for writing to the FSF to receive a copy of the GPL. Replace
all different variants with an URL <http://www.gnu.org/licenses/>.

The following files might still have some slightly different (L)GPL
copyright notice because they were derived from other programs:

- files under coregrind/m_demangle which come from libiberty:
  cplus-dem.c, d-demangle.c, demangle.h, rust-demangle.c,
  safe-ctype.c and safe-ctype.h
- coregrind/m_demangle/dyn-string.[hc] derived from GCC.
- coregrind/m_demangle/ansidecl.h derived from glibc.
- VEX files for FMA detived from glibc:
  host_generic_maddf.h and host_generic_maddf.c
- files under coregrin/m_debuginfo derived from LZO:
  lzoconf.h, lzodefs.h, minilzo-inl.c and minilzo.h
- files under coregrind/m_gdbserver detived from GDB:
  gdb/signals.h, inferiors.c, regcache.c, regcache.h,
  regdef.h, remote-utils.c, server.c, server.h, signals.c,
  target.c, target.h and utils.c

Plus the following test files:

- none/tests/ppc32/testVMX.c derived from testVMX.
- ppc tests derived from QEMU: jm-insns.c, ppc64_helpers.h
  and test_isa_3_0.c
- tests derived from bzip2 (with embedded GPL text in code):
  hackedbz2.c, origin5-bz2.c, varinfo6.c
- tests detived from glibc: str_tester.c, pth_atfork1.c
- test detived from GCC libgomp: tc17_sembar.c
- performance tests derived from bzip2 or tinycc (with embedded GPL
  text in code): bz2.c, test_input_for_tinycc.c and tinycc.c
2019-05-26 20:07:51 +02:00

132 lines
4.9 KiB
C

/*--------------------------------------------------------------------*/
/*--- Callgrind ---*/
/*--- events.h ---*/
/*--------------------------------------------------------------------*/
/*
This file is part of Callgrind, a Valgrind tool for call tracing.
Copyright (C) 2002-2017, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
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 2 of the
License, 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, see <http://www.gnu.org/licenses/>.
The GNU General Public License is contained in the file COPYING.
*/
/* Abstractions for 64-bit cost lists (events.h) */
#ifndef CLG_EVENTS
#define CLG_EVENTS
#include "pub_tool_basics.h"
#define CLG_(str) VGAPPEND(vgCallgrind_,str)
/* Event groups consist of one or more named event types.
* Event sets are constructed from such event groups.
*
* Event groups have to be registered globally with a unique ID
* before they can be used in an event set.
* A group can appear at most once in a event set.
*/
#define MAX_EVENTGROUP_COUNT 10
typedef struct _EventGroup EventGroup;
struct _EventGroup {
Int size;
const HChar* name[0];
};
/* return 0 if event group can not be registered */
EventGroup* CLG_(register_event_group) (int id, const HChar*);
EventGroup* CLG_(register_event_group2)(int id, const HChar*, const HChar*);
EventGroup* CLG_(register_event_group3)(int id, const HChar*, const HChar*,
const HChar*);
EventGroup* CLG_(register_event_group4)(int id, const HChar*, const HChar*,
const HChar*, const HChar*);
EventGroup* CLG_(get_event_group)(int id);
/* Event sets are defined by event groups they consist of. */
typedef struct _EventSet EventSet;
struct _EventSet {
/* if subset with ID x is in the set, then bit x is set */
UInt mask;
Int count;
Int size;
Int offset[MAX_EVENTGROUP_COUNT];
};
/* Same event set is returned when requesting same event groups */
EventSet* CLG_(get_event_set)(Int id);
EventSet* CLG_(get_event_set2)(Int id1, Int id2);
EventSet* CLG_(add_event_group)(EventSet*, Int id);
EventSet* CLG_(add_event_group2)(EventSet*, Int id1, Int id2);
EventSet* CLG_(add_event_set)(EventSet*, EventSet*);
/* Operations on costs. A cost pointer of 0 means zero cost.
* Functions ending in _lz allocate cost arrays only when needed
*/
ULong* CLG_(get_eventset_cost)(EventSet*);
/* Set costs of event set to 0 */
void CLG_(init_cost)(EventSet*,ULong*);
/* This always allocates counter and sets them to 0 */
void CLG_(init_cost_lz)(EventSet*,ULong**);
/* Set costs of an event set to zero */
void CLG_(zero_cost)(EventSet*,ULong*);
Bool CLG_(is_zero_cost)(EventSet*,ULong*);
void CLG_(copy_cost)(EventSet*,ULong* dst, ULong* src);
void CLG_(copy_cost_lz)(EventSet*,ULong** pdst, ULong* src);
void CLG_(add_cost)(EventSet*,ULong* dst, ULong* src);
void CLG_(add_cost_lz)(EventSet*,ULong** pdst, ULong* src);
/* Adds src to dst and zeros src. Returns false if nothing changed */
Bool CLG_(add_and_zero_cost)(EventSet*,ULong* dst, ULong* src);
Bool CLG_(add_and_zero_cost2)(EventSet*,ULong* dst,EventSet*,ULong* src);
/* Adds difference of new and old to to dst, and set old to new.
* Returns false if nothing changed */
Bool CLG_(add_diff_cost)(EventSet*,ULong* dst, ULong* old, ULong* new_cost);
Bool CLG_(add_diff_cost_lz)(EventSet*,ULong** pdst, ULong* old, ULong* new_cost);
/* EventMapping: An ordered subset of events from an event set.
* This is used to print out part of an EventSet, or in another order.
*/
struct EventMappingEntry {
Int group;
Int index;
Int offset;
};
typedef struct _EventMapping EventMapping;
struct _EventMapping {
EventSet* es;
Int size;
Int capacity;
struct EventMappingEntry entry[0];
};
/* Allocate space for an event mapping */
EventMapping* CLG_(get_eventmapping)(EventSet*);
void CLG_(append_event)(EventMapping*, const HChar*);
/* Returns event mapping as a character string. That string is dynamically
allocated and it is the caller's responsibility to free it.
The function never returns NULL. */
HChar *CLG_(eventmapping_as_string)(const EventMapping*);
/* Returns mapping cost as a character string. That string is dynamically
allocated and it is the caller's responsibility to free it.
The function never returns NULL. */
HChar *CLG_(mappingcost_as_string)(const EventMapping*, const ULong*);
#endif /* CLG_EVENTS */