Updated with Tizen:Base source codes
[external/procps.git] / proc / procps.h
1 #ifndef PROCPS_PROC_PROCPS_H
2 #define PROCPS_PROC_PROCPS_H
3
4 #ifdef  __cplusplus
5 #define EXTERN_C_BEGIN extern "C" {
6 #define EXTERN_C_END }
7 #else
8 #define EXTERN_C_BEGIN
9 #define EXTERN_C_END
10 #endif
11
12 // Some ports make the mistake of running a 32-bit userspace
13 // on a 64-bit kernel. Shame on them. It's not at all OK to
14 // make everything "long long", since that causes unneeded
15 // slowness on 32-bit hardware.
16 //
17 // SPARC: The 32-bit kernel was looking like an ex-penguin,
18 // but it lives! ("I'm not dead yet.") So, 64-bit users will
19 // just have to compile for 64-bit. Aw, the suffering.
20 //
21 // MIPS: Used 32-bit for embedded systems and obsolete hardware.
22 // The 64-bit systems use an n32 format executable, defining
23 // _ABIN32 to indicate this. Since n32 doesn't currently run on
24 // any 32-bit system, nobody get hurt if it's bloated. Not that
25 // this is sane of course, but it won't hurt the 32-bit users.
26 // __mips_eabi means eabi, which comes in both sizes, but isn't used.
27 //
28 // PowerPC: Big ugly problem! 32-bit Macs are still popular. :-/
29 //
30 // x86-64: So far, nobody has been dumb enough to go 32-bit.
31 //
32 // Unknown: PA-RISC and zSeries
33 //
34 #if defined(k64test) || (defined(_ABIN32) && _MIPS_SIM == _ABIN32)
35 #define KLONG long long    // not typedef; want "unsigned KLONG" to work
36 #define KLF "L"
37 #define STRTOUKL strtoull
38 #else
39 #define KLONG long
40 #define KLF "l"
41 #define STRTOUKL strtoul
42 #endif
43
44 // since gcc-2.5
45 #define NORETURN __attribute__((__noreturn__))
46 #define FUNCTION __attribute__((__const__))  // no access to global mem, even via ptr, and no side effect
47
48 #if !defined(restrict) && __STDC_VERSION__ < 199901
49 #if __GNUC__ > 2 || __GNUC_MINOR__ >= 92
50 #define restrict __restrict__
51 #else
52 #warning No restrict keyword?
53 #define restrict
54 #endif
55 #endif
56
57 #if __GNUC__ > 2 || __GNUC_MINOR__ >= 96
58 // won't alias anything, and aligned enough for anything
59 #define MALLOC __attribute__ ((__malloc__))
60 // no side effect, may read globals
61 #define PURE __attribute__ ((__pure__))
62 // tell gcc what to expect:   if(unlikely(err)) die(err);
63 #define likely(x)       __builtin_expect(!!(x),1)
64 #define unlikely(x)     __builtin_expect(!!(x),0)
65 #define expected(x,y)   __builtin_expect((x),(y))
66 #else
67 #define MALLOC
68 #define PURE
69 #define likely(x)       (x)
70 #define unlikely(x)     (x)
71 #define expected(x,y)   (x)
72 #endif
73
74 #if SHARED==1 && (__GNUC__ > 2 || __GNUC_MINOR__ >= 96)
75 #define LABEL_OFFSET
76 #endif
77
78 #define STRINGIFY_ARG(a)        #a
79 #define STRINGIFY(a)            STRINGIFY_ARG(a)
80
81 // marks old junk, to warn non-procps library users
82 #if ( __GNUC__ == 3 && __GNUC_MINOR__ > 0 ) || __GNUC__ > 3
83 #define OBSOLETE __attribute__((deprecated))
84 #else
85 #define OBSOLETE
86 #endif
87
88 #if ( __GNUC__ == 3 && __GNUC_MINOR__ > 1 ) || __GNUC__ > 3
89 // Tells gcc that function is library-internal;
90 // so no need to do dynamic linking at run-time.
91 // This might work with slightly older compilers too.
92 #define HIDDEN __attribute__((visibility("hidden")))
93 // The opposite, in case -fvisibility=hidden used
94 #define EXPORT __attribute__((visibility("default")))
95 // Tell g++ that a function won't throw exceptions.
96 #define NOTHROW __attribute__((__nothrow__))
97 #else
98 #define HIDDEN
99 #define EXPORT
100 #define NOTHROW
101 #endif
102
103 // Like HIDDEN, but for an alias that gets created.
104 // In gcc-3.2 there is an alias+hidden conflict.
105 // Many will have patched this bug, but oh well.
106 #if ( __GNUC__ == 3 && __GNUC_MINOR__ > 2 ) || __GNUC__ > 3
107 #define HIDDEN_ALIAS(x) extern __typeof(x) x##_direct __attribute__((alias(#x),visibility("hidden")))
108 #else
109 #define HIDDEN_ALIAS(x) extern __typeof(x) x##_direct __attribute__((alias(#x)))
110 #endif
111
112 #endif