xref: /haiku/headers/libs/zydis/Zydis/Status.h (revision 1003e004e6c97eb60657a98928dd334e141c59ee)
1*1003e004SJérôme Duval /***************************************************************************************************
2*1003e004SJérôme Duval 
3*1003e004SJérôme Duval   Zyan Disassembler Library (Zydis)
4*1003e004SJérôme Duval 
5*1003e004SJérôme Duval   Original Author : Florian Bernd
6*1003e004SJérôme Duval 
7*1003e004SJérôme Duval  * Permission is hereby granted, free of charge, to any person obtaining a copy
8*1003e004SJérôme Duval  * of this software and associated documentation files (the "Software"), to deal
9*1003e004SJérôme Duval  * in the Software without restriction, including without limitation the rights
10*1003e004SJérôme Duval  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11*1003e004SJérôme Duval  * copies of the Software, and to permit persons to whom the Software is
12*1003e004SJérôme Duval  * furnished to do so, subject to the following conditions:
13*1003e004SJérôme Duval  *
14*1003e004SJérôme Duval  * The above copyright notice and this permission notice shall be included in all
15*1003e004SJérôme Duval  * copies or substantial portions of the Software.
16*1003e004SJérôme Duval  *
17*1003e004SJérôme Duval  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18*1003e004SJérôme Duval  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19*1003e004SJérôme Duval  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20*1003e004SJérôme Duval  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21*1003e004SJérôme Duval  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22*1003e004SJérôme Duval  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23*1003e004SJérôme Duval  * SOFTWARE.
24*1003e004SJérôme Duval 
25*1003e004SJérôme Duval ***************************************************************************************************/
26*1003e004SJérôme Duval 
27*1003e004SJérôme Duval /**
28*1003e004SJérôme Duval  * @file
29*1003e004SJérôme Duval  * Status code definitions and check macros.
30*1003e004SJérôme Duval  */
31*1003e004SJérôme Duval 
32*1003e004SJérôme Duval #ifndef ZYDIS_STATUS_H
33*1003e004SJérôme Duval #define ZYDIS_STATUS_H
34*1003e004SJérôme Duval 
35*1003e004SJérôme Duval #include <Zycore/Status.h>
36*1003e004SJérôme Duval 
37*1003e004SJérôme Duval #ifdef __cplusplus
38*1003e004SJérôme Duval extern "C" {
39*1003e004SJérôme Duval #endif
40*1003e004SJérôme Duval 
41*1003e004SJérôme Duval /* ============================================================================================== */
42*1003e004SJérôme Duval /* Status codes                                                                                   */
43*1003e004SJérôme Duval /* ============================================================================================== */
44*1003e004SJérôme Duval 
45*1003e004SJérôme Duval /* ---------------------------------------------------------------------------------------------- */
46*1003e004SJérôme Duval /* Module IDs                                                                                     */
47*1003e004SJérôme Duval /* ---------------------------------------------------------------------------------------------- */
48*1003e004SJérôme Duval 
49*1003e004SJérôme Duval /**
50*1003e004SJérôme Duval  * The zydis module id.
51*1003e004SJérôme Duval  */
52*1003e004SJérôme Duval #define ZYAN_MODULE_ZYDIS   0x002u
53*1003e004SJérôme Duval 
54*1003e004SJérôme Duval /* ---------------------------------------------------------------------------------------------- */
55*1003e004SJérôme Duval /* Status codes                                                                                   */
56*1003e004SJérôme Duval /* ---------------------------------------------------------------------------------------------- */
57*1003e004SJérôme Duval 
58*1003e004SJérôme Duval /* ---------------------------------------------------------------------------------------------- */
59*1003e004SJérôme Duval /* Decoder                                                                                        */
60*1003e004SJérôme Duval /* ---------------------------------------------------------------------------------------------- */
61*1003e004SJérôme Duval 
62*1003e004SJérôme Duval /**
63*1003e004SJérôme Duval  * An attempt was made to read data from an input data-source that has no more
64*1003e004SJérôme Duval  * data available.
65*1003e004SJérôme Duval  */
66*1003e004SJérôme Duval #define ZYDIS_STATUS_NO_MORE_DATA \
67*1003e004SJérôme Duval     ZYAN_MAKE_STATUS(1u, ZYAN_MODULE_ZYDIS, 0x00u)
68*1003e004SJérôme Duval 
69*1003e004SJérôme Duval /**
70*1003e004SJérôme Duval  * An general error occured while decoding the current instruction. The
71*1003e004SJérôme Duval  * instruction might be undefined.
72*1003e004SJérôme Duval  */
73*1003e004SJérôme Duval #define ZYDIS_STATUS_DECODING_ERROR \
74*1003e004SJérôme Duval     ZYAN_MAKE_STATUS(1u, ZYAN_MODULE_ZYDIS, 0x01u)
75*1003e004SJérôme Duval 
76*1003e004SJérôme Duval /**
77*1003e004SJérôme Duval  * The instruction exceeded the maximum length of 15 bytes.
78*1003e004SJérôme Duval  */
79*1003e004SJérôme Duval #define ZYDIS_STATUS_INSTRUCTION_TOO_LONG \
80*1003e004SJérôme Duval     ZYAN_MAKE_STATUS(1u, ZYAN_MODULE_ZYDIS, 0x02u)
81*1003e004SJérôme Duval 
82*1003e004SJérôme Duval /**
83*1003e004SJérôme Duval  * The instruction encoded an invalid register.
84*1003e004SJérôme Duval  */
85*1003e004SJérôme Duval #define ZYDIS_STATUS_BAD_REGISTER \
86*1003e004SJérôme Duval     ZYAN_MAKE_STATUS(1u, ZYAN_MODULE_ZYDIS, 0x03u)
87*1003e004SJérôme Duval 
88*1003e004SJérôme Duval /**
89*1003e004SJérôme Duval  * A lock-prefix (F0) was found while decoding an instruction that does not
90*1003e004SJérôme Duval  * support locking.
91*1003e004SJérôme Duval  */
92*1003e004SJérôme Duval #define ZYDIS_STATUS_ILLEGAL_LOCK \
93*1003e004SJérôme Duval     ZYAN_MAKE_STATUS(1u, ZYAN_MODULE_ZYDIS, 0x04u)
94*1003e004SJérôme Duval 
95*1003e004SJérôme Duval /**
96*1003e004SJérôme Duval  * A legacy-prefix (F2, F3, 66) was found while decoding a XOP/VEX/EVEX/MVEX
97*1003e004SJérôme Duval  * instruction.
98*1003e004SJérôme Duval  */
99*1003e004SJérôme Duval #define ZYDIS_STATUS_ILLEGAL_LEGACY_PFX \
100*1003e004SJérôme Duval     ZYAN_MAKE_STATUS(1u, ZYAN_MODULE_ZYDIS, 0x05u)
101*1003e004SJérôme Duval 
102*1003e004SJérôme Duval /**
103*1003e004SJérôme Duval  * A rex-prefix was found while decoding a XOP/VEX/EVEX/MVEX instruction.
104*1003e004SJérôme Duval  */
105*1003e004SJérôme Duval #define ZYDIS_STATUS_ILLEGAL_REX \
106*1003e004SJérôme Duval     ZYAN_MAKE_STATUS(1u, ZYAN_MODULE_ZYDIS, 0x06u)
107*1003e004SJérôme Duval 
108*1003e004SJérôme Duval /**
109*1003e004SJérôme Duval  * An invalid opcode-map value was found while decoding a XOP/VEX/EVEX/MVEX-prefix.
110*1003e004SJérôme Duval  */
111*1003e004SJérôme Duval #define ZYDIS_STATUS_INVALID_MAP \
112*1003e004SJérôme Duval     ZYAN_MAKE_STATUS(1u, ZYAN_MODULE_ZYDIS, 0x07u)
113*1003e004SJérôme Duval 
114*1003e004SJérôme Duval /**
115*1003e004SJérôme Duval  * An error occured while decoding the EVEX-prefix.
116*1003e004SJérôme Duval  */
117*1003e004SJérôme Duval #define ZYDIS_STATUS_MALFORMED_EVEX \
118*1003e004SJérôme Duval     ZYAN_MAKE_STATUS(1u, ZYAN_MODULE_ZYDIS, 0x08u)
119*1003e004SJérôme Duval 
120*1003e004SJérôme Duval /**
121*1003e004SJérôme Duval  * An error occured while decoding the MVEX-prefix.
122*1003e004SJérôme Duval  */
123*1003e004SJérôme Duval #define ZYDIS_STATUS_MALFORMED_MVEX \
124*1003e004SJérôme Duval     ZYAN_MAKE_STATUS(1u, ZYAN_MODULE_ZYDIS, 0x09u)
125*1003e004SJérôme Duval 
126*1003e004SJérôme Duval /**
127*1003e004SJérôme Duval  * An invalid write-mask was specified for an EVEX/MVEX instruction.
128*1003e004SJérôme Duval  */
129*1003e004SJérôme Duval #define ZYDIS_STATUS_INVALID_MASK \
130*1003e004SJérôme Duval     ZYAN_MAKE_STATUS(1u, ZYAN_MODULE_ZYDIS, 0x0Au)
131*1003e004SJérôme Duval 
132*1003e004SJérôme Duval /* ---------------------------------------------------------------------------------------------- */
133*1003e004SJérôme Duval /* Formatter                                                                                      */
134*1003e004SJérôme Duval /* ---------------------------------------------------------------------------------------------- */
135*1003e004SJérôme Duval 
136*1003e004SJérôme Duval /**
137*1003e004SJérôme Duval  * Returning this status code in some specified formatter callbacks will cause
138*1003e004SJérôme Duval  * the formatter to omit the corresponding token.
139*1003e004SJérôme Duval  *
140*1003e004SJérôme Duval  * Valid callbacks:
141*1003e004SJérôme Duval  * - `ZYDIS_FORMATTER_FUNC_PRE_OPERAND`
142*1003e004SJérôme Duval  * - `ZYDIS_FORMATTER_FUNC_POST_OPERAND`
143*1003e004SJérôme Duval  * - `ZYDIS_FORMATTER_FUNC_FORMAT_OPERAND_REG`
144*1003e004SJérôme Duval  * - `ZYDIS_FORMATTER_FUNC_FORMAT_OPERAND_MEM`
145*1003e004SJérôme Duval  * - `ZYDIS_FORMATTER_FUNC_FORMAT_OPERAND_PTR`
146*1003e004SJérôme Duval  * - `ZYDIS_FORMATTER_FUNC_FORMAT_OPERAND_IMM`
147*1003e004SJérôme Duval  */
148*1003e004SJérôme Duval #define ZYDIS_STATUS_SKIP_TOKEN \
149*1003e004SJérôme Duval     ZYAN_MAKE_STATUS(0u, ZYAN_MODULE_ZYDIS, 0x0Bu)
150*1003e004SJérôme Duval 
151*1003e004SJérôme Duval /* ---------------------------------------------------------------------------------------------- */
152*1003e004SJérôme Duval /* Encoder                                                                                        */
153*1003e004SJérôme Duval /* ---------------------------------------------------------------------------------------------- */
154*1003e004SJérôme Duval 
155*1003e004SJérôme Duval #define ZYDIS_STATUS_IMPOSSIBLE_INSTRUCTION \
156*1003e004SJérôme Duval     ZYAN_MAKE_STATUS(1u, ZYAN_MODULE_ZYDIS, 0x0Cu)
157*1003e004SJérôme Duval 
158*1003e004SJérôme Duval /* ---------------------------------------------------------------------------------------------- */
159*1003e004SJérôme Duval 
160*1003e004SJérôme Duval /* ============================================================================================== */
161*1003e004SJérôme Duval 
162*1003e004SJérôme Duval 
163*1003e004SJérôme Duval #ifdef __cplusplus
164*1003e004SJérôme Duval }
165*1003e004SJérôme Duval #endif
166*1003e004SJérôme Duval 
167*1003e004SJérôme Duval #endif /* ZYDIS_STATUS_H */
168