1 /*
2  * Track misc arch-specific features that aren't config options
3  */
4 
5 #ifndef _BITS_UCLIBC_ARCH_FEATURES_H
6 #define _BITS_UCLIBC_ARCH_FEATURES_H
7 
8 /* instruction used when calling abort() to kill yourself */
9 #define __UCLIBC_ABORT_INSTRUCTION__ "bl abort"
10 
11 /* can your target use syscall6() for mmap ? */
12 #undef __UCLIBC_MMAP_HAS_6_ARGS__
13 
14 /* does your target align 64bit values in register pairs ? (32bit arches only) */
15 #ifdef __ARM_EABI__
16 #define __UCLIBC_SYSCALL_ALIGN_64BIT__
17 #else
18 #undef __UCLIBC_SYSCALL_ALIGN_64BIT__
19 #endif
20 
21 /* does your target have a broken create_module() ? */
22 #define __UCLIBC_BROKEN_CREATE_MODULE__
23 
24 /* does your target have to worry about older [gs]etrlimit() ? */
25 #undef __UCLIBC_HANDLE_OLDER_RLIMIT__
26 
27 /* does your target have an asm .set ? */
28 #define __UCLIBC_HAVE_ASM_SET_DIRECTIVE__
29 
30 /* define if target supports .weak */
31 #define __UCLIBC_HAVE_ASM_WEAK_DIRECTIVE__
32 
33 /* define if target supports .weakext */
34 #undef __UCLIBC_HAVE_ASM_WEAKEXT_DIRECTIVE__
35 
36 /* define if target supports CFI pseudo ops */
37 #undef __UCLIBC_HAVE_ASM_CFI_DIRECTIVES__
38 
39 /* define if target supports IEEE signed zero floats */
40 #define __UCLIBC_HAVE_SIGNED_ZERO__
41 
42 /* only weird assemblers generally need this */
43 #undef __UCLIBC_ASM_LINE_SEP__
44 
45 
46 /* The __ARM_ARCH define is provided by gcc 4.8.  Construct it otherwise.  */
47 #ifndef __ARM_ARCH
48 # ifdef __ARM_ARCH_2__
49 #  define __ARM_ARCH 2
50 # elif defined (__ARM_ARCH_3__) || defined (__ARM_ARCH_3M__)
51 #  define __ARM_ARCH 3
52 # elif defined (__ARM_ARCH_4__) || defined (__ARM_ARCH_4T__)
53 #  define __ARM_ARCH 4
54 # elif defined (__ARM_ARCH_5__) || defined (__ARM_ARCH_5E__) \
55        || defined(__ARM_ARCH_5T__) || defined(__ARM_ARCH_5TE__) \
56        || defined(__ARM_ARCH_5TEJ__)
57 #  define __ARM_ARCH 5
58 # elif defined (__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) \
59        || defined (__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) \
60        || defined (__ARM_ARCH_6K__) || defined(__ARM_ARCH_6T2__)
61 #  define __ARM_ARCH 6
62 # elif defined (__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) \
63        || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) \
64        || defined(__ARM_ARCH_7EM__)
65 #  define __ARM_ARCH 7
66 # else
67 #  error unknown arm architecture
68 # endif
69 #endif
70 
71 #ifdef __GNUC__
72 # define __need_uClibc_config_h
73 # include <bits/uClibc_config.h>
74 # undef __need_uClibc_config_h
75 # if defined __CONFIG_ARM_EABI__ && !defined __ARM_EABI__
76 #  error Your toolchain does not support EABI
77 # elif !defined __CONFIG_ARM_EABI__ && defined __ARM_EABI__
78 #  error Your toolchain was built for EABI, but you have chosen OABI
79 # endif
80 #endif
81 
82 #endif /* _BITS_UCLIBC_ARCH_FEATURES_H */
83