-/* Copyright (c) 1997,2011,2014 Apple Inc.
- *
- * comDebug.h
- */
-
-#ifndef _COM_DEBUG_H_
-#define _COM_DEBUG_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * enable general debugging printfs and error checking.
- */
-#define COM_DEBUG 0
-#if COM_DEBUG
-#include <stdio.h>
-
-#define ddprintf(x) printf x
-#else
-#define ddprintf(x)
-#endif
-
-/*
- * block parsing debug
- */
-#define COM_SCAN_DEBUG 0
-#if COM_SCAN_DEBUG
-#define scprintf(x) printf x
-#else
-#define scprintf(x)
-#endif
-
-/*
- * 2nd-level comcrypt debug
- */
-#define LEVEL2_DEBUG 0
-#if LEVEL2_DEBUG
-#include <stdio.h>
-
-#define l2printf(x) printf x
-#else
-#define l2printf(x)
-#endif
-
-/*
- * lookahead queue debug
- */
-#define COM_LA_DEBUG 0
-#define COM_LA_PRINTF 0
-#if COM_LA_PRINTF
-#define laprintf(x) printf x
-#else
-#define laprintf(x)
-#endif
-
-/*
- * Statistics measurements. This is a private API.
- */
-#if COM_DEBUG
-#define COM_STATS 0
-#else
-#define COM_STATS 0
-#endif
-
-#if COM_STATS
-
-/*
- * Info obtained via a call to getComStats()
- */
-typedef struct {
- unsigned level1blocks;
- unsigned plaintextBytes;
- unsigned ciphertextBytes;
- unsigned oneByteFrags; // 1st level only
- unsigned twoByteFrags; // ditto
- unsigned level2oneByteFrags; // second level only
- unsigned level2twoByteFrags; // ditto
- unsigned level2byteCode; // bytes, pre-encrypted
- unsigned level2cipherText; // bytes, post-encrypt
- unsigned level2blocks; // 2nd-level blocks
- unsigned level2jmatch; // total jmatch (at first level) of
- // 2nd level blocks
-} comStats;
-
-extern comStats _comStats;
-#define incrComStat(stat, num) _comStats.stat += num;
-
-#define incr1byteFrags(recursLevel) { \
- if(recursLevel == 1) { \
- incrComStat(level2oneByteFrags, 1); \
- } \
- else { \
- incrComStat(oneByteFrags, 1); \
- } \
-}
-#define incr2byteFrags(recursLevel) { \
- if(recursLevel == 1) { \
- incrComStat(level2twoByteFrags, 1); \
- } \
- else { \
- incrComStat(twoByteFrags, 1); \
- } \
-}
-
-extern void resetComStats();
-extern void getComStats(comStats *stats);
-
-#else
-#define incrComStat(stat, num)
-#define incr1byteFrags(recursLevel)
-#define incr2byteFrags(recursLevel)
-#endif
-
-/*
- * Profiling measurement. A private API when enabled.
- */
-#if COM_DEBUG
-#define COM_PROFILE 0
-#else
-#define COM_PROFILE 0
-#endif
-
-#if COM_PROFILE
-
-#include <kern/time_stamp.h>
-
-/*
- * Global profiling enable. It turns out the the cost of doing the
- * kern_timestamp() call twice per codeword is way more expensive
- * than the actual comcryption code. Setting this variable to zero
- * avoids the cost of all the timestamps for reference without
- * rebuilding. Also, the cmcPerWordOhead calibrates the actual
- * cost of the two kern_timestamp() calls per word.
- */
-extern unsigned comProfEnable;
-
-/*
- * Profiling accumulators.
- */
-typedef unsigned comprof_t;
-
-extern comprof_t cmcTotal;
-extern comprof_t cmcQueSearch;
-extern comprof_t cmcQueMatchMove;
-extern comprof_t cmcQueMissMove;
-extern comprof_t cmcPerWordOhead;
-extern comprof_t cmcLevel2;
-
-
-/*
- * Place one of these in the local variable declaration list of each routine
- * which will do profiling.
- */
-#define COMPROF_LOCALS \
- struct tsval _profStartTime; \
- struct tsval _profEndTime;
-
-/*
- * Start the clock.
- */
-#define COMPROF_START \
- if(comProfEnable) { \
- kern_timestamp(&_profStartTime); \
- }
-
-/*
- * Stop the clock and gather elapsed time to specified accumulator.
- */
-#define COMPROF_END(accum) \
- if(comProfEnable) { \
- kern_timestamp(&_profEndTime); \
- accum += (_profEndTime.low_val - _profStartTime.low_val); \
- }
-
-
-#else
-
-#define COMPROF_LOCALS
-#define COMPROF_START
-#define COMPROF_END(accum)
-
-#endif /* COM_PROFILE */
-
-/*
- * Get/set parameter API, private, for debug only.
- */
-#if COM_DEBUG
-#define COM_PARAM_ENABLE 1
-#else
-#define COM_PARAM_ENABLE 0
-#endif /*COM_DEBUG*/
-
-#if COM_PARAM_ENABLE
-
-extern unsigned getF1(comcryptObj cobj);
-extern void setF1(comcryptObj cobj, unsigned f1);
-extern unsigned getF2(comcryptObj cobj);
-extern void setF2(comcryptObj cobj, unsigned f2);
-extern unsigned getJmatchThresh(comcryptObj cobj);
-extern void setJmatchThresh(comcryptObj cobj, unsigned jmatchThresh);
-extern unsigned getMinByteCode(comcryptObj cobj);
-extern void setMinByteCode(comcryptObj cobj, unsigned minByteCode);
-
-#endif /*COM_PARAM_ENABLE*/
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /*_COM_DEBUG_H_*/