xref: /aosp_15_r20/external/strace/xlat.h (revision cf84ac9a129d8ea9952db616b4e9b904c4bdde56)
1*cf84ac9aSAndroid Build Coastguard Worker #ifndef STRACE_XLAT_H
2*cf84ac9aSAndroid Build Coastguard Worker #define STRACE_XLAT_H
3*cf84ac9aSAndroid Build Coastguard Worker 
4*cf84ac9aSAndroid Build Coastguard Worker # include <stdint.h>
5*cf84ac9aSAndroid Build Coastguard Worker 
6*cf84ac9aSAndroid Build Coastguard Worker enum xlat_type {
7*cf84ac9aSAndroid Build Coastguard Worker 	XT_NORMAL,
8*cf84ac9aSAndroid Build Coastguard Worker 	XT_SORTED,
9*cf84ac9aSAndroid Build Coastguard Worker 	XT_INDEXED,
10*cf84ac9aSAndroid Build Coastguard Worker };
11*cf84ac9aSAndroid Build Coastguard Worker 
12*cf84ac9aSAndroid Build Coastguard Worker enum xlat_style {
13*cf84ac9aSAndroid Build Coastguard Worker 	/**
14*cf84ac9aSAndroid Build Coastguard Worker 	 * Special value that is used for passing to *print{xval,flags}*_ex
15*cf84ac9aSAndroid Build Coastguard Worker 	 * routines that indicates that no overriding of user-supplied xlat
16*cf84ac9aSAndroid Build Coastguard Worker 	 * verbosity/formatting configuration is intended.
17*cf84ac9aSAndroid Build Coastguard Worker 	 */
18*cf84ac9aSAndroid Build Coastguard Worker 	XLAT_STYLE_DEFAULT = 0,
19*cf84ac9aSAndroid Build Coastguard Worker 
20*cf84ac9aSAndroid Build Coastguard Worker 	/** Print xlat value as is without xlat processing */
21*cf84ac9aSAndroid Build Coastguard Worker 	XLAT_STYLE_RAW     = 1 << 0,
22*cf84ac9aSAndroid Build Coastguard Worker 	/**
23*cf84ac9aSAndroid Build Coastguard Worker 	 * Historic strace style, process xlat and print the result (xlat
24*cf84ac9aSAndroid Build Coastguard Worker 	 * constant name/combination of flags), raw number only if nothing is
25*cf84ac9aSAndroid Build Coastguard Worker 	 * found.
26*cf84ac9aSAndroid Build Coastguard Worker 	 */
27*cf84ac9aSAndroid Build Coastguard Worker 	XLAT_STYLE_ABBREV  = 1 << 1,
28*cf84ac9aSAndroid Build Coastguard Worker 	/** Always print both raw number and xlat processing result. */
29*cf84ac9aSAndroid Build Coastguard Worker 	XLAT_STYLE_VERBOSE = XLAT_STYLE_RAW | XLAT_STYLE_ABBREV,
30*cf84ac9aSAndroid Build Coastguard Worker 
31*cf84ac9aSAndroid Build Coastguard Worker #define XLAT_STYLE_FORMAT_SHIFT   2
32*cf84ac9aSAndroid Build Coastguard Worker #define XLAT_STYLE_VERBOSITY_MASK ((1 << XLAT_STYLE_FORMAT_SHIFT) - 1)
33*cf84ac9aSAndroid Build Coastguard Worker 
34*cf84ac9aSAndroid Build Coastguard Worker 	XLAT_STYLE_FMT_X   = 0 << XLAT_STYLE_FORMAT_SHIFT,
35*cf84ac9aSAndroid Build Coastguard Worker 	XLAT_STYLE_FMT_U   = 1 << XLAT_STYLE_FORMAT_SHIFT,
36*cf84ac9aSAndroid Build Coastguard Worker 	XLAT_STYLE_FMT_D   = 2 << XLAT_STYLE_FORMAT_SHIFT,
37*cf84ac9aSAndroid Build Coastguard Worker 
38*cf84ac9aSAndroid Build Coastguard Worker #define XLAT_STYLE_FORMAT_MASK    (3 << XLAT_STYLE_FORMAT_SHIFT)
39*cf84ac9aSAndroid Build Coastguard Worker 
40*cf84ac9aSAndroid Build Coastguard Worker #define XLAT_STYLE_SPEC_BITS (XLAT_STYLE_FORMAT_SHIFT + 2)
41*cf84ac9aSAndroid Build Coastguard Worker #define XLAT_STYLE_MASK ((1 << XLAT_STYLE_SPEC_BITS) - 1)
42*cf84ac9aSAndroid Build Coastguard Worker };
43*cf84ac9aSAndroid Build Coastguard Worker 
44*cf84ac9aSAndroid Build Coastguard Worker struct xlat {
45*cf84ac9aSAndroid Build Coastguard Worker 	uint64_t val;
46*cf84ac9aSAndroid Build Coastguard Worker 	const char *str;
47*cf84ac9aSAndroid Build Coastguard Worker };
48*cf84ac9aSAndroid Build Coastguard Worker 
49*cf84ac9aSAndroid Build Coastguard Worker # define XLAT(val)			{ (unsigned)(val), #val }
50*cf84ac9aSAndroid Build Coastguard Worker # define XLAT_PAIR(val, str)		{ (unsigned)(val), str  }
51*cf84ac9aSAndroid Build Coastguard Worker # define XLAT_TYPE(type, val)		{     (type)(val), #val }
52*cf84ac9aSAndroid Build Coastguard Worker # define XLAT_TYPE_PAIR(type, val, str)	{     (type)(val), str  }
53*cf84ac9aSAndroid Build Coastguard Worker # define XLAT_END			{		0, 0    }
54*cf84ac9aSAndroid Build Coastguard Worker 
55*cf84ac9aSAndroid Build Coastguard Worker #endif /* !STRACE_XLAT_H */
56