Blame lib/eu-config.h

Packit Service 97d2fb
/* Configuration definitions.
Packit Service 97d2fb
   Copyright (C) 2008, 2009 Red Hat, Inc.
Packit Service 97d2fb
   This file is part of elfutils.
Packit Service 97d2fb
Packit Service 97d2fb
   This file is free software; you can redistribute it and/or modify
Packit Service 97d2fb
   it under the terms of either
Packit Service 97d2fb
Packit Service 97d2fb
     * the GNU Lesser General Public License as published by the Free
Packit Service 97d2fb
       Software Foundation; either version 3 of the License, or (at
Packit Service 97d2fb
       your option) any later version
Packit Service 97d2fb
Packit Service 97d2fb
   or
Packit Service 97d2fb
Packit Service 97d2fb
     * the GNU General Public License as published by the Free
Packit Service 97d2fb
       Software Foundation; either version 2 of the License, or (at
Packit Service 97d2fb
       your option) any later version
Packit Service 97d2fb
Packit Service 97d2fb
   or both in parallel, as here.
Packit Service 97d2fb
Packit Service 97d2fb
   elfutils is distributed in the hope that it will be useful, but
Packit Service 97d2fb
   WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 97d2fb
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service 97d2fb
   General Public License for more details.
Packit Service 97d2fb
Packit Service 97d2fb
   You should have received copies of the GNU General Public License and
Packit Service 97d2fb
   the GNU Lesser General Public License along with this program.  If
Packit Service 97d2fb
   not, see <http://www.gnu.org/licenses/>.  */
Packit Service 97d2fb
Packit Service 97d2fb
#ifndef EU_CONFIG_H
Packit Service 97d2fb
#define EU_CONFIG_H	1
Packit Service 97d2fb
Packit Service 97d2fb
#ifdef USE_LOCKS
Packit Service 97d2fb
# include <pthread.h>
Packit Service 97d2fb
# include <assert.h>
Packit Service 97d2fb
# define rwlock_define(class,name)	class pthread_rwlock_t name
Packit Service 97d2fb
# define RWLOCK_CALL(call)		\
Packit Service 97d2fb
  ({ int _err = pthread_rwlock_ ## call; assert_perror (_err); })
Packit Service 97d2fb
# define rwlock_init(lock)		RWLOCK_CALL (init (&lock, NULL))
Packit Service 97d2fb
# define rwlock_fini(lock)		RWLOCK_CALL (destroy (&lock))
Packit Service 97d2fb
# define rwlock_rdlock(lock)		RWLOCK_CALL (rdlock (&lock))
Packit Service 97d2fb
# define rwlock_wrlock(lock)		RWLOCK_CALL (wrlock (&lock))
Packit Service 97d2fb
# define rwlock_unlock(lock)		RWLOCK_CALL (unlock (&lock))
Packit Service 97d2fb
#else
Packit Service 97d2fb
/* Eventually we will allow multi-threaded applications to use the
Packit Service 97d2fb
   libraries.  Therefore we will add the necessary locking although
Packit Service 97d2fb
   the macros used expand to nothing for now.  */
Packit Service 97d2fb
# define rwlock_define(class,name) class int name
Packit Service 97d2fb
# define rwlock_init(lock) ((void) (lock))
Packit Service 97d2fb
# define rwlock_fini(lock) ((void) (lock))
Packit Service 97d2fb
# define rwlock_rdlock(lock) ((void) (lock))
Packit Service 97d2fb
# define rwlock_wrlock(lock) ((void) (lock))
Packit Service 97d2fb
# define rwlock_unlock(lock) ((void) (lock))
Packit Service 97d2fb
#endif	/* USE_LOCKS */
Packit Service 97d2fb
Packit Service 97d2fb
/* gettext helper macro.  */
Packit Service 97d2fb
#define N_(Str) Str
Packit Service 97d2fb
Packit Service 97d2fb
/* Compiler-specific definitions.  */
Packit Service 97d2fb
#define strong_alias(name, aliasname) \
Packit Service 97d2fb
  extern __typeof (name) aliasname __attribute__ ((alias (#name)));
Packit Service 97d2fb
Packit Service 97d2fb
#ifdef __i386__
Packit Service 97d2fb
# define internal_function __attribute__ ((regparm (3), stdcall))
Packit Service 97d2fb
#else
Packit Service 97d2fb
# define internal_function /* nothing */
Packit Service 97d2fb
#endif
Packit Service 97d2fb
Packit Service 97d2fb
#define internal_strong_alias(name, aliasname) \
Packit Service 97d2fb
  extern __typeof (name) aliasname __attribute__ ((alias (#name))) internal_function;
Packit Service 97d2fb
Packit Service 97d2fb
#ifdef HAVE_VISIBILITY
Packit Service 97d2fb
#define attribute_hidden \
Packit Service 97d2fb
  __attribute__ ((visibility ("hidden")))
Packit Service 97d2fb
#else
Packit Service 97d2fb
#define attribute_hidden /* empty */
Packit Service 97d2fb
#endif
Packit Service 97d2fb
Packit Service 97d2fb
#ifdef HAVE_GCC_STRUCT
Packit Service 97d2fb
#define attribute_packed \
Packit Service 97d2fb
  __attribute__ ((packed, gcc_struct))
Packit Service 97d2fb
#else
Packit Service 97d2fb
#define attribute_packed \
Packit Service 97d2fb
  __attribute__ ((packed))
Packit Service 97d2fb
#endif
Packit Service 97d2fb
Packit Service 97d2fb
/* Define ALLOW_UNALIGNED if the architecture allows operations on
Packit Service 97d2fb
   unaligned memory locations.  */
Packit Service 97d2fb
#define SANITIZE_UNDEFINED 1
Packit Service 97d2fb
#if (defined __i386__ || defined __x86_64__) && ! CHECK_UNDEFINED
Packit Service 97d2fb
# define ALLOW_UNALIGNED	1
Packit Service 97d2fb
#else
Packit Service 97d2fb
# define ALLOW_UNALIGNED	0
Packit Service 97d2fb
#endif
Packit Service 97d2fb
Packit Service 97d2fb
#if DEBUGPRED
Packit Service 97d2fb
# ifdef __x86_64__
Packit Service 97d2fb
asm (".section predict_data, \"aw\"; .previous\n"
Packit Service 97d2fb
     ".section predict_line, \"a\"; .previous\n"
Packit Service 97d2fb
     ".section predict_file, \"a\"; .previous");
Packit Service 97d2fb
#  ifndef PIC
Packit Service 97d2fb
#   define debugpred__(e, E) \
Packit Service 97d2fb
  ({ long int _e = !!(e); \
Packit Service 97d2fb
     asm volatile (".pushsection predict_data; ..predictcnt%=: .quad 0; .quad 0\n" \
Packit Service 97d2fb
                   ".section predict_line; .quad %c1\n" \
Packit Service 97d2fb
                   ".section predict_file; .quad %c2; .popsection\n" \
Packit Service 97d2fb
                   "addq $1,..predictcnt%=(,%0,8)" \
Packit Service 97d2fb
                   : : "r" (_e == E), "i" (__LINE__), "i" (__FILE__)); \
Packit Service 97d2fb
    __builtin_expect (_e, E); \
Packit Service 97d2fb
  })
Packit Service 97d2fb
#  endif
Packit Service 97d2fb
# elif defined __i386__
Packit Service 97d2fb
asm (".section predict_data, \"aw\"; .previous\n"
Packit Service 97d2fb
     ".section predict_line, \"a\"; .previous\n"
Packit Service 97d2fb
     ".section predict_file, \"a\"; .previous");
Packit Service 97d2fb
#  ifndef PIC
Packit Service 97d2fb
#   define debugpred__(e, E) \
Packit Service 97d2fb
  ({ long int _e = !!(e); \
Packit Service 97d2fb
     asm volatile (".pushsection predict_data; ..predictcnt%=: .long 0; .long 0\n" \
Packit Service 97d2fb
                   ".section predict_line; .long %c1\n" \
Packit Service 97d2fb
                   ".section predict_file; .long %c2; .popsection\n" \
Packit Service 97d2fb
                   "incl ..predictcnt%=(,%0,8)" \
Packit Service 97d2fb
                   : : "r" (_e == E), "i" (__LINE__), "i" (__FILE__)); \
Packit Service 97d2fb
    __builtin_expect (_e, E); \
Packit Service 97d2fb
  })
Packit Service 97d2fb
#  endif
Packit Service 97d2fb
# endif
Packit Service 97d2fb
# ifdef debugpred__
Packit Service 97d2fb
#  define unlikely(e) debugpred__ (e,0)
Packit Service 97d2fb
#  define likely(e) debugpred__ (e,1)
Packit Service 97d2fb
# endif
Packit Service 97d2fb
#endif
Packit Service 97d2fb
#ifndef likely
Packit Service 97d2fb
# define unlikely(expr) __builtin_expect (!!(expr), 0)
Packit Service 97d2fb
# define likely(expr) __builtin_expect (!!(expr), 1)
Packit Service 97d2fb
#endif
Packit Service 97d2fb
Packit Service 97d2fb
#define obstack_calloc(ob, size) \
Packit Service 97d2fb
  ({ size_t _s = (size); memset (obstack_alloc (ob, _s), '\0', _s); })
Packit Service 97d2fb
#define obstack_strdup(ob, str) \
Packit Service 97d2fb
  ({ const char *_s = (str); obstack_copy0 (ob, _s, strlen (_s)); })
Packit Service 97d2fb
#define obstack_strndup(ob, str, n) \
Packit Service 97d2fb
  ({ const char *_s = (str); obstack_copy0 (ob, _s, strnlen (_s, n)); })
Packit Service 97d2fb
Packit Service 97d2fb
#if __STDC_VERSION__ >= 199901L
Packit Service 97d2fb
# define flexarr_size /* empty */
Packit Service 97d2fb
#else
Packit Service 97d2fb
# define flexarr_size 0
Packit Service 97d2fb
#endif
Packit Service 97d2fb
Packit Service 97d2fb
/* Calling conventions.  */
Packit Service 97d2fb
#ifdef __i386__
Packit Service 97d2fb
# define CALLING_CONVENTION regparm (3), stdcall
Packit Service 97d2fb
# define AND_CALLING_CONVENTION , regparm (3), stdcall
Packit Service 97d2fb
#else
Packit Service 97d2fb
# define CALLING_CONVENTION
Packit Service 97d2fb
# define AND_CALLING_CONVENTION
Packit Service 97d2fb
#endif
Packit Service 97d2fb
Packit Service 97d2fb
/* Avoid PLT entries.  */
Packit Service 97d2fb
#ifdef PIC
Packit Service 97d2fb
# define INTUSE(name) _INTUSE(name)
Packit Service 97d2fb
# define _INTUSE(name) __##name##_internal
Packit Service 97d2fb
# define INTDEF(name) _INTDEF(name)
Packit Service 97d2fb
# define _INTDEF(name) \
Packit Service 97d2fb
  extern __typeof__ (name) __##name##_internal __attribute__ ((alias (#name)));
Packit Service 97d2fb
# define INTDECL(name) _INTDECL(name)
Packit Service 97d2fb
# define _INTDECL(name) \
Packit Service 97d2fb
  extern __typeof__ (name) __##name##_internal attribute_hidden;
Packit Service 97d2fb
#else
Packit Service 97d2fb
# define INTUSE(name) name
Packit Service 97d2fb
# define INTDEF(name) /* empty */
Packit Service 97d2fb
# define INTDECL(name) /* empty */
Packit Service 97d2fb
#endif
Packit Service 97d2fb
Packit Service 97d2fb
/* This macro is used by the tests conditionalize for standalone building.  */
Packit Service 97d2fb
#define ELFUTILS_HEADER(name) <lib##name.h>
Packit Service 97d2fb
Packit Service 97d2fb
Packit Service 97d2fb
#ifdef SYMBOL_VERSIONING
Packit Service 97d2fb
# define OLD_VERSION(name, version) \
Packit Service 97d2fb
  asm (".globl _compat." #version "." #name "\n" \
Packit Service 97d2fb
       "_compat." #version "." #name " = " #name "\n" \
Packit Service 97d2fb
       ".symver _compat." #version "." #name "," #name "@" #version);
Packit Service 97d2fb
# define NEW_VERSION(name, version) \
Packit Service 97d2fb
  asm (".symver " #name "," #name "@@@" #version);
Packit Service 97d2fb
# define COMPAT_VERSION_NEWPROTO(name, version, prefix) \
Packit Service 97d2fb
  asm (".symver _compat." #version "." #name "," #name "@" #version); \
Packit Service 97d2fb
  __typeof (_compat_##prefix##_##name) _compat_##prefix##_##name \
Packit Service 97d2fb
    asm ("_compat." #version "." #name);
Packit Service 97d2fb
# define COMPAT_VERSION(name, version, prefix) \
Packit Service 97d2fb
  asm (".symver _compat." #version "." #name "," #name "@" #version); \
Packit Service 97d2fb
  __typeof (name) _compat_##prefix##_##name asm ("_compat." #version "." #name);
Packit Service 97d2fb
#else
Packit Service 97d2fb
# define OLD_VERSION(name, version) /* Nothing for static linking.  */
Packit Service 97d2fb
# define NEW_VERSION(name, version) /* Nothing for static linking.  */
Packit Service 97d2fb
# define COMPAT_VERSION_NEWPROTO(name, version, prefix) \
Packit Service 97d2fb
  error "should use #ifdef SYMBOL_VERSIONING"
Packit Service 97d2fb
# define COMPAT_VERSION(name, version, prefix) error "should use #ifdef SYMBOL_VERSIONING"
Packit Service 97d2fb
#endif
Packit Service 97d2fb
Packit Service 97d2fb
#ifndef FALLTHROUGH
Packit Service 97d2fb
# ifdef HAVE_FALLTHROUGH
Packit Service 97d2fb
#  define FALLTHROUGH __attribute__ ((fallthrough))
Packit Service 97d2fb
# else
Packit Service 97d2fb
#  define FALLTHROUGH ((void) 0)
Packit Service 97d2fb
# endif
Packit Service 97d2fb
#endif
Packit Service 97d2fb
Packit Service 97d2fb
#endif	/* eu-config.h */