1cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* Configuration definitions.
2cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   Copyright (C) 2008 Red Hat, Inc.
3cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   This file is part of Red Hat elfutils.
4cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
5cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   Red Hat elfutils is free software; you can redistribute it and/or modify
6cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   it under the terms of the GNU General Public License as published by the
7cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   Free Software Foundation; version 2 of the License.
8cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
9cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   Red Hat elfutils is distributed in the hope that it will be useful, but
10cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   WITHOUT ANY WARRANTY; without even the implied warranty of
11cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   General Public License for more details.
13cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
14cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   You should have received a copy of the GNU General Public License along
15cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   with Red Hat elfutils; if not, write to the Free Software Foundation,
16cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
17cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
18cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   In addition, as a special exception, Red Hat, Inc. gives You the
19cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   additional right to link the code of Red Hat elfutils with code licensed
20cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   under an Open Source Initiative certified open source license
21cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   (http://www.opensource.org/licenses/index.php) and to distribute linked
22cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   combinations including the two.  Non-GPL Code permitted under this
23cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   exception must only link to the code of Red Hat elfutils through those
24cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   well defined interfaces identified in the file named EXCEPTION found in
25cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   the source code files (the "Approved Interfaces").  The files of Non-GPL
26cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   Code may instantiate templates or use macros or inline functions from
27cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   the Approved Interfaces without causing the resulting work to be covered
28cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   by the GNU General Public License.  Only Red Hat, Inc. may make changes
29cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   or additions to the list of Approved Interfaces.  Red Hat's grant of
30cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   this exception is conditioned upon your not adding any new exceptions.
31cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   If you wish to add a new Approved Interface or exception, please contact
32cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   Red Hat.  You must obey the GNU General Public License in all respects
33cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   for all of the Red Hat elfutils code and other code used in conjunction
34cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   with Red Hat elfutils except the Non-GPL Code covered by this exception.
35cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   If you modify this file, you may extend this exception to your version
36cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   of the file, but you are not obligated to do so.  If you do not wish to
37cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   provide this exception without modification, you must delete this
38cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   exception statement from your version and license this file solely under
39cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   the GPL without exception.
40cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
41cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   Red Hat elfutils is an included package of the Open Invention Network.
42cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   An included package of the Open Invention Network is a package for which
43cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   Open Invention Network licensees cross-license their patents.  No patent
44cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   license is granted, either expressly or impliedly, by designation as an
45cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   included package.  Should you wish to participate in the Open Invention
46cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   Network licensing program, please visit www.openinventionnetwork.com
47cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   <http://www.openinventionnetwork.com>.  */
48cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
49cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#ifdef USE_TLS
50cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# include <pthread.h>
51cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# include <assert.h>
52cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# define tls_key_t			__thread void *
53cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# define key_create(keyp, freefct)	(1)
54cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# define getspecific(key)		key
55cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# define setspecific(key,val)		key = val
56cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# define once_define(class,name)	class struct { } name
57cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# define once_execute(name,fct)		((void) &name, (void) (fct))
58cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# define rwlock_define(class,name)	class pthread_rwlock_t name
59cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# define RWLOCK_CALL(call)		\
60cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  ({ int _err = pthread_rwlock_ ## call; assert_perror (_err); })
61cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# define rwlock_init(lock)		RWLOCK_CALL (init (&lock, NULL))
62cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# define rwlock_fini(lock)		RWLOCK_CALL (destroy (&lock))
63cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# define rwlock_rdlock(lock)		RWLOCK_CALL (rdlock (&lock))
64cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# define rwlock_wrlock(lock)		RWLOCK_CALL (wrlock (&lock))
65cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# define rwlock_unlock(lock)		RWLOCK_CALL (unlock (&lock))
66cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#else
67cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* Eventually we will allow multi-threaded applications to use the
68cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   libraries.  Therefore we will add the necessary locking although
69cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   the macros used expand to nothing for now.  */
70cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# define lock_lock(lock) ((void) (lock))
71cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# define rwlock_define(class,name) class int name
72cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# define rwlock_init(lock) ((void) (lock))
73cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# define rwlock_fini(lock) ((void) (lock))
74cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# define rwlock_rdlock(lock) ((void) (lock))
75cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# define rwlock_wrlock(lock) ((void) (lock))
76cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# define rwlock_unlock(lock) ((void) (lock))
77cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# define tls_key_t void *
78cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# define key_create(keyp, freefct) (1)
79cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# define getspecific(key) key
80cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# define setspecific(key,val) key = val
81cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# define once_define(class,name) class int name
82cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# define once_execute(name,fct) \
83cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  do {									      \
84cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    if (name == 0)							      \
85cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng      fct ();								      \
86cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    name = 1;								      \
87cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  } while (0)
88cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#endif	/* USE_TLS */
89cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
90cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* gettext helper macro.  */
91cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#define N_(Str) Str
92cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
93cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* Compiler-specific definitions.  */
94cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#define strong_alias(name, aliasname) \
95cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  extern __typeof (name) aliasname __attribute__ ((alias (#name)));
96cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
97cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#ifdef __i386__
98cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# define internal_function __attribute__ ((regparm (3), stdcall))
99cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#else
100cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# define internal_function /* nothing */
101cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#endif
102cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
103cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#define internal_strong_alias(name, aliasname) \
104cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  extern __typeof (name) aliasname __attribute__ ((alias (#name))) internal_function;
105cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
106cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#define attribute_hidden \
107cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  __attribute__ ((visibility ("hidden")))
108cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
109cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* Define ALLOW_UNALIGNED if the architecture allows operations on
110cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng   unaligned memory locations.  */
111cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#if defined __i386__ || defined __x86_64__
112cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# define ALLOW_UNALIGNED	1
113cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#else
114cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# define ALLOW_UNALIGNED	0
115cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#endif
116cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
117cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#if DEBUGPRED
118cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# ifdef __x86_64__
119cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengasm (".section predict_data, \"aw\"; .previous\n"
120cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng     ".section predict_line, \"a\"; .previous\n"
121cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng     ".section predict_file, \"a\"; .previous");
122cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#  ifndef PIC
123cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#   define debugpred__(e, E) \
124cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  ({ long int _e = !!(e); \
125cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng     asm volatile (".pushsection predict_data; ..predictcnt%=: .quad 0; .quad 0\n" \
126cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng                   ".section predict_line; .quad %c1\n" \
127cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng                   ".section predict_file; .quad %c2; .popsection\n" \
128cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng                   "addq $1,..predictcnt%=(,%0,8)" \
129cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng                   : : "r" (_e == E), "i" (__LINE__), "i" (__FILE__)); \
130cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    __builtin_expect (_e, E); \
131cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  })
132cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#  endif
133cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# elif defined __i386__
134cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengasm (".section predict_data, \"aw\"; .previous\n"
135cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng     ".section predict_line, \"a\"; .previous\n"
136cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng     ".section predict_file, \"a\"; .previous");
137cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#  ifndef PIC
138cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#   define debugpred__(e, E) \
139cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  ({ long int _e = !!(e); \
140cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng     asm volatile (".pushsection predict_data; ..predictcnt%=: .long 0; .long 0\n" \
141cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng                   ".section predict_line; .long %c1\n" \
142cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng                   ".section predict_file; .long %c2; .popsection\n" \
143cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng                   "incl ..predictcnt%=(,%0,8)" \
144cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng                   : : "r" (_e == E), "i" (__LINE__), "i" (__FILE__)); \
145cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng    __builtin_expect (_e, E); \
146cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  })
147cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#  endif
148cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# endif
149cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# ifdef debugpred__
150cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#  define unlikely(e) debugpred__ (e,0)
151cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#  define likely(e) debugpred__ (e,1)
152cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# endif
153cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#endif
154cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#ifndef likely
155cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# define unlikely(expr) __builtin_expect (!!(expr), 0)
156cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# define likely(expr) __builtin_expect (!!(expr), 1)
157cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#endif
158cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
159cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#define obstack_calloc(ob, size) \
160cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  ({ size_t _s = (size); memset (obstack_alloc (ob, _s), '\0', _s); })
161cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#define obstack_strdup(ob, str) \
162cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  ({ const char *_s = (str); obstack_copy0 (ob, _s, strlen (_s)); })
163cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#define obstack_strndup(ob, str, n) \
164cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  ({ const char *_s = (str); obstack_copy0 (ob, _s, strnlen (_s, n)); })
165cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
166cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#if __STDC_VERSION__ >= 199901L
167cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# define flexarr_size /* empty */
168cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#else
169cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# define flexarr_size 0
170cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#endif
171cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
172cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* Calling conventions.  */
173cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#ifdef __i386__
174cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# define CALLING_CONVENTION regparm (3), stdcall
175cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# define AND_CALLING_CONVENTION , regparm (3), stdcall
176cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#else
177cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# define CALLING_CONVENTION
178cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# define AND_CALLING_CONVENTION
179cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#endif
180cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
181cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* Avoid PLT entries.  */
182cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#ifdef PIC
183cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# define INTUSE(name) _INTUSE(name)
184cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# define _INTUSE(name) __##name##_internal
185cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# define INTDEF(name) _INTDEF(name)
186cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# define _INTDEF(name) \
187cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  extern __typeof__ (name) __##name##_internal __attribute__ ((alias (#name)));
188cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# define INTDECL(name) _INTDECL(name)
189cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# define _INTDECL(name) \
190cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng  extern __typeof__ (name) __##name##_internal attribute_hidden;
191cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#else
192cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# define INTUSE(name) name
193cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# define INTDEF(name) /* empty */
194cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng# define INTDECL(name) /* empty */
195cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#endif
196cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng
197cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* This macro is used by the tests conditionalize for standalone building.  */
198cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#define ELFUTILS_HEADER(name) <lib##name.h>
199