summaryrefslogtreecommitdiff
path: root/src/hidden-visibility.h
blob: bc8d4c4d3e284585a5f3f69821d3b582192cc7a4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/*
 * hidden-visibility.h
 * Create hidden internal aliases so we dont have wasteful relocs.
 * Copyright 2007 Gentoo Foundation
 * Released under the GPLv2
 */

#ifndef _HIDDEN_VISIBILITY_H_
#define _HIDDEN_VISIBILITY_H_

#if defined(__ELF__) && defined(__GNUC__)
# define __hidden_asmname(name) __hidden_asmname1 (__USER_LABEL_PREFIX__, name)
# define __hidden_asmname1(prefix, name) __hidden_asmname2(prefix, name)
# define __hidden_asmname2(prefix, name) #prefix name
# define __hidden_proto(name, internal) \
	extern __typeof (name) name __asm__ (__hidden_asmname (#internal)) \
	__attribute__ ((visibility ("hidden")));
# define __hidden_ver(local, internal, name) \
   extern __typeof (name) __EI_##name __asm__(__hidden_asmname (#internal)); \
   extern __typeof (name) __EI_##name __attribute__((alias (__hidden_asmname1 (,#local))))
# define hidden_proto(name) __hidden_proto(name, __RC_##name)
# define hidden_def(name) __hidden_ver(__RC_##name, name, name);
#else
# define hidden_proto(name)
# define hidden_def(name)
#endif

#endif