miasm
Reverse engineering framework
int_endianness.h
Go to the documentation of this file.
1
//===-- int_endianness.h - configuration header for compiler-rt -----------===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
//
9
// This file is a configuration header for compiler-rt.
10
// This file is not part of the interface of this library.
11
//
12
//===----------------------------------------------------------------------===//
13
14
#ifndef INT_ENDIANNESS_H
15
#define INT_ENDIANNESS_H
16
17
#if defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && \
18
defined(__ORDER_LITTLE_ENDIAN__)
19
20
// Clang and GCC provide built-in endianness definitions.
21
#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
22
#define _YUGA_LITTLE_ENDIAN 0
23
#define _YUGA_BIG_ENDIAN 1
24
#elif __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
25
#define _YUGA_LITTLE_ENDIAN 1
26
#define _YUGA_BIG_ENDIAN 0
27
#endif // __BYTE_ORDER__
28
29
#else // Compilers other than Clang or GCC.
30
31
#if defined(__SVR4) && defined(__sun)
32
#include <sys/byteorder.h>
33
34
#if defined(_BIG_ENDIAN)
35
#define _YUGA_LITTLE_ENDIAN 0
36
#define _YUGA_BIG_ENDIAN 1
37
#elif defined(_LITTLE_ENDIAN)
38
#define _YUGA_LITTLE_ENDIAN 1
39
#define _YUGA_BIG_ENDIAN 0
40
#else // !_LITTLE_ENDIAN
41
#error "unknown endianness"
42
#endif // !_LITTLE_ENDIAN
43
44
#endif // Solaris and AuroraUX.
45
46
// ..
47
48
#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__DragonFly__) || \
49
defined(__minix)
50
#include <sys/endian.h>
51
52
#if _BYTE_ORDER == _BIG_ENDIAN
53
#define _YUGA_LITTLE_ENDIAN 0
54
#define _YUGA_BIG_ENDIAN 1
55
#elif _BYTE_ORDER == _LITTLE_ENDIAN
56
#define _YUGA_LITTLE_ENDIAN 1
57
#define _YUGA_BIG_ENDIAN 0
58
#endif // _BYTE_ORDER
59
60
#endif // *BSD
61
62
#if defined(__OpenBSD__)
63
#include <machine/endian.h>
64
65
#if _BYTE_ORDER == _BIG_ENDIAN
66
#define _YUGA_LITTLE_ENDIAN 0
67
#define _YUGA_BIG_ENDIAN 1
68
#elif _BYTE_ORDER == _LITTLE_ENDIAN
69
#define _YUGA_LITTLE_ENDIAN 1
70
#define _YUGA_BIG_ENDIAN 0
71
#endif // _BYTE_ORDER
72
73
#endif // OpenBSD
74
75
// ..
76
77
// Mac OSX has __BIG_ENDIAN__ or __LITTLE_ENDIAN__ automatically set by the
78
// compiler (at least with GCC)
79
#if defined(__APPLE__) || defined(__ellcc__)
80
81
#ifdef __BIG_ENDIAN__
82
#if __BIG_ENDIAN__
83
#define _YUGA_LITTLE_ENDIAN 0
84
#define _YUGA_BIG_ENDIAN 1
85
#endif
86
#endif // __BIG_ENDIAN__
87
88
#ifdef __LITTLE_ENDIAN__
89
#if __LITTLE_ENDIAN__
90
#define _YUGA_LITTLE_ENDIAN 1
91
#define _YUGA_BIG_ENDIAN 0
92
#endif
93
#endif // __LITTLE_ENDIAN__
94
95
#endif // Mac OSX
96
97
// ..
98
99
#if defined(_WIN32)
100
101
#define _YUGA_LITTLE_ENDIAN 1
102
#define _YUGA_BIG_ENDIAN 0
103
104
#endif // Windows
105
106
#endif // Clang or GCC.
107
108
// .
109
110
#if !defined(_YUGA_LITTLE_ENDIAN) || !defined(_YUGA_BIG_ENDIAN)
111
#error Unable to determine endian
112
#endif // Check we found an endianness correctly.
113
114
#endif // INT_ENDIANNESS_H
test_doc_miasm
miasm
miasm
runtime
int_endianness.h
Generated by
1.8.20