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