procps/proc/procps.h

118 lines
3.6 KiB
C
Raw Normal View History

2002-11-25 15:46:33 +05:30
#ifndef PROCPS_PROC_PROCPS_H
#define PROCPS_PROC_PROCPS_H
2002-12-09 12:30:07 +05:30
#ifdef __cplusplus
#define EXTERN_C_BEGIN extern "C" {
#define EXTERN_C_END }
#else
#define EXTERN_C_BEGIN
#define EXTERN_C_END
#endif
2002-02-02 04:17:29 +05:30
2003-01-16 13:33:40 +05:30
// Some ports make the mistake of running a 32-bit userspace
// on a 64-bit kernel. Shame on them. It's not at all OK to
// make everything "long long", since that causes unneeded
// slowness on 32-bit hardware.
//
// SPARC: The 32-bit kernel was looking like an ex-penguin,
// but it lives! ("I'm not dead yet.") So, 64-bit users will
// just have to compile for 64-bit. Aw, the suffering.
2003-01-16 13:33:40 +05:30
//
// MIPS: Used 32-bit for embedded systems and obsolete hardware.
// The 64-bit systems use an n32 format executable, defining
// _ABIN32 to indicate this. Since n32 doesn't currently run on
// any 32-bit system, nobody get hurt if it's bloated. Not that
// this is sane of course, but it won't hurt the 32-bit users.
// __mips_eabi means eabi, which comes in both sizes, but isn't used.
2003-01-16 13:33:40 +05:30
//
// PowerPC: Big ugly problem! 32-bit Macs are still popular. :-/
2003-01-16 13:33:40 +05:30
//
// x86-64: So far, nobody has been dumb enough to go 32-bit.
//
// Unknown: PA-RISC and zSeries
2003-01-16 13:33:40 +05:30
//
2005-02-28 08:59:57 +05:30
#if defined(k64test) || (defined(_ABIN32) && _MIPS_SIM == _ABIN32)
2003-01-16 13:33:40 +05:30
#define KLONG long long // not typedef; want "unsigned KLONG" to work
#define KLF "L"
#define STRTOUKL strtoull
#else
#define KLONG long
#define KLF "l"
#define STRTOUKL strtoul
#endif
2003-02-11 13:49:12 +05:30
// since gcc-2.5
#define NORETURN __attribute__((__noreturn__))
#define FUNCTION __attribute__((__const__)) // no access to global mem, even via ptr, and no side effect
2002-11-25 10:35:52 +05:30
#if !defined(restrict) && __STDC_VERSION__ < 199901
2003-02-11 13:49:12 +05:30
#if __GNUC__ > 2 || __GNUC_MINOR__ >= 92
2002-11-25 10:35:52 +05:30
#define restrict __restrict__
#else
#warning No restrict keyword?
#define restrict
#endif
#endif
2003-02-11 13:49:12 +05:30
#if __GNUC__ > 2 || __GNUC_MINOR__ >= 96
// won't alias anything, and aligned enough for anything
#define MALLOC __attribute__ ((__malloc__))
// no side effect, may read globals
#define PURE __attribute__ ((__pure__))
// tell gcc what to expect: if(unlikely(err)) die(err);
#define likely(x) __builtin_expect(!!(x),1)
#define unlikely(x) __builtin_expect(!!(x),0)
#define expected(x,y) __builtin_expect((x),(y))
#else
#define MALLOC
#define PURE
#define likely(x) (x)
#define unlikely(x) (x)
#define expected(x,y) (x)
#endif
#ifdef SHARED
# if SHARED==1 && (__GNUC__ > 2 || __GNUC_MINOR__ >= 96)
# define LABEL_OFFSET
# endif
2003-02-17 06:27:15 +05:30
#endif
#define STRINGIFY_ARG(a) #a
#define STRINGIFY(a) STRINGIFY_ARG(a)
2003-02-17 06:27:15 +05:30
// marks old junk, to warn non-procps-ng library users
2003-01-15 16:22:39 +05:30
#if ( __GNUC__ == 3 && __GNUC_MINOR__ > 0 ) || __GNUC__ > 3
#define OBSOLETE __attribute__((deprecated))
#else
#define OBSOLETE
#endif
2003-02-11 13:49:12 +05:30
#if ( __GNUC__ == 3 && __GNUC_MINOR__ > 1 ) || __GNUC__ > 3
2003-01-15 16:22:39 +05:30
// Tells gcc that function is library-internal;
// so no need to do dynamic linking at run-time.
2003-01-22 14:01:50 +05:30
// This might work with slightly older compilers too.
#define HIDDEN __attribute__((visibility("hidden")))
2004-08-27 19:53:36 +05:30
// The opposite, in case -fvisibility=hidden used
#define EXPORT __attribute__((visibility("default")))
2003-02-11 13:49:12 +05:30
// Tell g++ that a function won't throw exceptions.
#define NOTHROW __attribute__((__nothrow__))
2003-01-15 16:22:39 +05:30
#else
2003-01-22 14:01:50 +05:30
#define HIDDEN
2004-08-27 19:53:36 +05:30
#define EXPORT
2003-02-11 13:49:12 +05:30
#define NOTHROW
2003-01-22 14:01:50 +05:30
#endif
// Like HIDDEN, but for an alias that gets created.
// In gcc-3.2 there is an alias+hidden conflict.
// Many will have patched this bug, but oh well.
#if ( __GNUC__ == 3 && __GNUC_MINOR__ > 2 ) || __GNUC__ > 3
#define HIDDEN_ALIAS(x) extern __typeof(x) x##_direct __attribute__((alias(#x),visibility("hidden")))
#else
#define HIDDEN_ALIAS(x) extern __typeof(x) x##_direct __attribute__((alias(#x)))
2003-01-15 16:22:39 +05:30
#endif
typedef void (*message_fn)(const char *restrict, ...) __attribute__((format(printf,1,2)));
2002-11-25 15:46:33 +05:30
#endif