summaryrefslogtreecommitdiff
blob: fb7d9381315771ac5ab012451afd4ddab3e23f9a (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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
/*
 * Copyright 2003-2016 Gentoo Foundation
 * Distributed under the terms of the GNU General Public License v2
 *
 * Copyright 2003-2012 Ned Ludd        - <solar@gentoo.org>
 * Copyright 2004-2016 Mike Frysinger  - <vapier@gentoo.org>
 */

#ifndef _PAX_LDSO_H
#define _PAX_LDSO_H

/*
 * ld.so.cache logic
 */

#if !defined(__GLIBC__) && \
    !defined(__UCLIBC__)
# ifdef __ELF__
#  warning Cache support not implemented for your target
# endif
# define PAX_LDSO_CACHE 0
#else
# define PAX_LDSO_CACHE 1
#endif

#if PAX_LDSO_CACHE
extern char *ldso_cache_lookup_lib(elfobj *elf, const char *fname);
#else
static inline char *ldso_cache_lookup_lib(__unused__ elfobj *elf, __unused__ const char *fname)
{
	return NULL;
}
#endif

/*
 * ld.so.conf logic
 */

#if !defined(__GLIBC__) && \
    !defined(__UCLIBC__) && \
    !defined(__NetBSD__) && \
    !defined(__FreeBSD__) && \
    !defined(__DragonFly__)
# ifdef __ELF__
#  warning Cache config support not implemented for your target
# endif
# define PAX_LDSO_CONFIG 0
#else
# define PAX_LDSO_CONFIG 1
#endif

/* Consumers refer to ldpaths directly, so can't hide its def. */
extern array_t *ldpaths;
#if PAX_LDSO_CONFIG
extern int ldso_config_load(const char *fname);
#else
static inline int ldso_config_load(__unused__ const char *fname)
{
	return 0;
}
#endif

#if PAX_LDSO_CACHE || PAX_LDSO_CONFIG
extern void paxldso_cleanup(void);
#else
# define paxldso_cleanup()
#endif

/* Path to ld.so.cache. Usually overridden for tests. */
extern const char * ldcache_path;

#endif