114 lines
3.3 KiB
C
114 lines
3.3 KiB
C
/******************************************************************************
|
|
* gcov.h
|
|
*
|
|
* Coverage structures exported by Xen.
|
|
* Structure is different from Gcc one.
|
|
*
|
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
* of this software and associated documentation files (the "Software"), to
|
|
* deal in the Software without restriction, including without limitation the
|
|
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
|
* sell copies of the Software, and to permit persons to whom the Software is
|
|
* furnished to do so, subject to the following conditions:
|
|
*
|
|
* The above copyright notice and this permission notice shall be included in
|
|
* all copies or substantial portions of the Software.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
* DEALINGS IN THE SOFTWARE.
|
|
*
|
|
* Copyright (c) 2013, Citrix Systems R&D Ltd.
|
|
*/
|
|
|
|
#ifndef __XEN_PUBLIC_GCOV_H__
|
|
#define __XEN_PUBLIC_GCOV_H__ __XEN_PUBLIC_GCOV_H__
|
|
|
|
#define XENCOV_COUNTERS 5
|
|
#define XENCOV_TAG_BASE 0x58544300u
|
|
#define XENCOV_TAG_FILE (XENCOV_TAG_BASE+0x46u)
|
|
#define XENCOV_TAG_FUNC (XENCOV_TAG_BASE+0x66u)
|
|
#define XENCOV_TAG_COUNTER(n) (XENCOV_TAG_BASE+0x30u+((n)&0xfu))
|
|
#define XENCOV_TAG_END (XENCOV_TAG_BASE+0x2eu)
|
|
#define XENCOV_IS_TAG_COUNTER(n) \
|
|
((n) >= XENCOV_TAG_COUNTER(0) && (n) < XENCOV_TAG_COUNTER(XENCOV_COUNTERS))
|
|
#define XENCOV_COUNTER_NUM(n) ((n)-XENCOV_TAG_COUNTER(0))
|
|
|
|
/*
|
|
* The main structure for the blob is
|
|
* BLOB := FILE.. END
|
|
* FILE := TAG_FILE VERSION STAMP FILENAME COUNTERS FUNCTIONS
|
|
* FILENAME := LEN characters
|
|
* characters are padded to 32 bit
|
|
* LEN := 32 bit value
|
|
* COUNTERS := TAG_COUNTER(n) NUM COUNTER..
|
|
* NUM := 32 bit valie
|
|
* COUNTER := 64 bit value
|
|
* FUNCTIONS := TAG_FUNC NUM FUNCTION..
|
|
* FUNCTION := IDENT CHECKSUM NUM_COUNTERS
|
|
*
|
|
* All tagged structures are aligned to 8 bytes
|
|
*/
|
|
|
|
/**
|
|
* File information
|
|
* Prefixed with XENCOV_TAG_FILE and a string with filename
|
|
* Aligned to 8 bytes
|
|
*/
|
|
struct xencov_file
|
|
{
|
|
uint32_t tag; /* XENCOV_TAG_FILE */
|
|
uint32_t version;
|
|
uint32_t stamp;
|
|
uint32_t fn_len;
|
|
char filename[1];
|
|
};
|
|
|
|
/**
|
|
* Counters information
|
|
* Prefixed with XENCOV_TAG_COUNTER(n) where n is 0..(XENCOV_COUNTERS-1)
|
|
* Aligned to 8 bytes
|
|
*/
|
|
struct xencov_counter
|
|
{
|
|
uint32_t tag; /* XENCOV_TAG_COUNTER(n) */
|
|
uint32_t num;
|
|
uint64_t values[1];
|
|
};
|
|
|
|
/**
|
|
* Information for each function
|
|
* Number of counter is equal to the number of counter structures got before
|
|
*/
|
|
struct xencov_function
|
|
{
|
|
uint32_t ident;
|
|
uint32_t checksum;
|
|
uint32_t num_counters[1];
|
|
};
|
|
|
|
/**
|
|
* Information for all functions
|
|
* Aligned to 8 bytes
|
|
*/
|
|
struct xencov_functions
|
|
{
|
|
uint32_t tag; /* XENCOV_TAG_FUNC */
|
|
uint32_t num;
|
|
struct xencov_function xencov_function[1];
|
|
};
|
|
|
|
/**
|
|
* Terminator
|
|
*/
|
|
struct xencov_end
|
|
{
|
|
uint32_t tag; /* XENCOV_TAG_END */
|
|
};
|
|
|
|
#endif /* __XEN_PUBLIC_GCOV_H__ */
|