usr/src/cmd/sgs/rtld/common/_elf.h
author Rod Evans <Rod.Evans@Sun.COM>
Wed, 19 May 2010 22:33:49 -0700
changeset 12449 a87750d92895
parent 11827 d7ef53deac3f
child 12889 69001e4756ae
permissions -rw-r--r--
6943772 Testing for a symbols existence with RTLD_PROBE is compromised by RTLD_BIND_NOW PSARC/2010/175 Deferred symbol references 6943432 dlsym(RTLD_PROBE) should only bind to symbol definitions 6668759 an external method for determining whether an ELF dependency is optional
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     1
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     2
 * CDDL HEADER START
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     3
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     4
 * The contents of this file are subject to the terms of the
2766
897bcb036a29 PSARC 2006/526 SHT_SUNW_LDYNSYM - default local symbol addition
ab196087
parents: 0
diff changeset
     5
 * Common Development and Distribution License (the "License").
897bcb036a29 PSARC 2006/526 SHT_SUNW_LDYNSYM - default local symbol addition
ab196087
parents: 0
diff changeset
     6
 * You may not use this file except in compliance with the License.
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     7
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     8
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     9
 * or http://www.opensolaris.org/os/licensing.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    10
 * See the License for the specific language governing permissions
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    11
 * and limitations under the License.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    12
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    13
 * When distributing Covered Code, include this CDDL HEADER in each
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    14
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    15
 * If applicable, add the following below this CDDL HEADER, with the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    16
 * fields enclosed by brackets "[]" replaced with your own identifying
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    17
 * information: Portions Copyright [yyyy] [name of copyright owner]
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    18
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    19
 * CDDL HEADER END
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    20
 */
8598
0867fc633d66 6686372 ld.so.1 should use mmapobj(2)
Rod Evans <Rod.Evans@Sun.COM>
parents: 8159
diff changeset
    21
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    22
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    23
 *	Copyright (c) 1988 AT&T
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    24
 *	  All Rights Reserved
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    25
 *
12449
a87750d92895 6943772 Testing for a symbols existence with RTLD_PROBE is compromised by RTLD_BIND_NOW
Rod Evans <Rod.Evans@Sun.COM>
parents: 11827
diff changeset
    26
 * Copyright (c) 1991, 2010, Oracle and/or its affiliates. All rights reserved.
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    27
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    28
#ifndef	__ELF_DOT_H
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    29
#define	__ELF_DOT_H
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    30
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    31
#include <sys/types.h>
8598
0867fc633d66 6686372 ld.so.1 should use mmapobj(2)
Rod Evans <Rod.Evans@Sun.COM>
parents: 8159
diff changeset
    32
#include <sys/mman.h>
11827
d7ef53deac3f 6918143 symbol capabilities
Rod Evans <Rod.Evans@Sun.COM>
parents: 9577
diff changeset
    33
#include <sgs.h>
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    34
#include <elf.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    35
#include <_rtld.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    36
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    37
#ifdef	__cplusplus
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    38
extern "C" {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    39
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    40
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    41
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    42
 * Common extern functions for ELF file class.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    43
 */
8598
0867fc633d66 6686372 ld.so.1 should use mmapobj(2)
Rod Evans <Rod.Evans@Sun.COM>
parents: 8159
diff changeset
    44
extern	int	elf_config(Rt_map *, int);
0867fc633d66 6686372 ld.so.1 should use mmapobj(2)
Rod Evans <Rod.Evans@Sun.COM>
parents: 8159
diff changeset
    45
extern	Rtc_obj	*elf_config_ent(const char *, Word, int, const char **);
0867fc633d66 6686372 ld.so.1 should use mmapobj(2)
Rod Evans <Rod.Evans@Sun.COM>
parents: 8159
diff changeset
    46
extern	void	elf_config_flt(Lm_list *, const char *, const char *,
0867fc633d66 6686372 ld.so.1 should use mmapobj(2)
Rod Evans <Rod.Evans@Sun.COM>
parents: 8159
diff changeset
    47
		    Alist **, Aliste);
0867fc633d66 6686372 ld.so.1 should use mmapobj(2)
Rod Evans <Rod.Evans@Sun.COM>
parents: 8159
diff changeset
    48
#if	defined(__i386)
0867fc633d66 6686372 ld.so.1 should use mmapobj(2)
Rod Evans <Rod.Evans@Sun.COM>
parents: 8159
diff changeset
    49
extern	int	elf_copy_gen(Rt_map *);
0867fc633d66 6686372 ld.so.1 should use mmapobj(2)
Rod Evans <Rod.Evans@Sun.COM>
parents: 8159
diff changeset
    50
#endif
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    51
extern	int	elf_copy_reloc(char *, Sym *, Rt_map *, void *, Sym *,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    52
		    Rt_map *, const void *);
11827
d7ef53deac3f 6918143 symbol capabilities
Rod Evans <Rod.Evans@Sun.COM>
parents: 9577
diff changeset
    53
extern	int	elf_find_sym(Slookup *, Sresult *, uint_t *, int *);
d7ef53deac3f 6918143 symbol capabilities
Rod Evans <Rod.Evans@Sun.COM>
parents: 9577
diff changeset
    54
extern	int	elf_lazy_find_sym(Slookup *, Sresult *, uint_t *, int *);
6387
4977cc444d39 6509323 Need to disable the Multiple Files loading - same name, different directories (or its stat() use)
rie
parents: 6150
diff changeset
    55
extern	Rt_map	*elf_lazy_load(Rt_map *, Slookup *, uint_t, const char *,
9577
dca915fd85d3 6831308 ld.so.1: symbol rescanning does a little too much work
Rod Evans <Rod.Evans@Sun.COM>
parents: 8598
diff changeset
    56
		    uint_t, Grp_hdl **, int *);
11827
d7ef53deac3f 6918143 symbol capabilities
Rod Evans <Rod.Evans@Sun.COM>
parents: 9577
diff changeset
    57
extern	int	elf_lookup_filtee(Slookup *, Sresult *, uint_t *, uint_t,
6387
4977cc444d39 6509323 Need to disable the Multiple Files loading - same name, different directories (or its stat() use)
rie
parents: 6150
diff changeset
    58
		    int *);
8598
0867fc633d66 6686372 ld.so.1 should use mmapobj(2)
Rod Evans <Rod.Evans@Sun.COM>
parents: 8159
diff changeset
    59
extern	int	elf_mach_flags_check(Rej_desc *, Ehdr *);
0867fc633d66 6686372 ld.so.1 should use mmapobj(2)
Rod Evans <Rod.Evans@Sun.COM>
parents: 8159
diff changeset
    60
extern	Rt_map	*elf_new_lmp(Lm_list *, Aliste, Fdesc *, Addr, size_t, void *,
0867fc633d66 6686372 ld.so.1 should use mmapobj(2)
Rod Evans <Rod.Evans@Sun.COM>
parents: 8159
diff changeset
    61
		    int *);
0867fc633d66 6686372 ld.so.1 should use mmapobj(2)
Rod Evans <Rod.Evans@Sun.COM>
parents: 8159
diff changeset
    62
extern	Rt_map	*elf_obj_file(Lm_list *, Aliste, const char *,
0867fc633d66 6686372 ld.so.1 should use mmapobj(2)
Rod Evans <Rod.Evans@Sun.COM>
parents: 8159
diff changeset
    63
		    mmapobj_result_t *, mmapobj_result_t *, uint_t);
0867fc633d66 6686372 ld.so.1 should use mmapobj(2)
Rod Evans <Rod.Evans@Sun.COM>
parents: 8159
diff changeset
    64
extern	Rt_map	*elf_obj_fini(Lm_list *, Rt_map *, int *);
0867fc633d66 6686372 ld.so.1 should use mmapobj(2)
Rod Evans <Rod.Evans@Sun.COM>
parents: 8159
diff changeset
    65
extern	void	elf_plt_init(void *, caddr_t);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    66
#if	defined(__sparcv9)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    67
extern	void	elf_plt2_init(uint_t *, Rt_map *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    68
#endif
8598
0867fc633d66 6686372 ld.so.1 should use mmapobj(2)
Rod Evans <Rod.Evans@Sun.COM>
parents: 8159
diff changeset
    69
extern	int	elf_reloc(Rt_map *, uint_t, int *, APlist **);
0867fc633d66 6686372 ld.so.1 should use mmapobj(2)
Rod Evans <Rod.Evans@Sun.COM>
parents: 8159
diff changeset
    70
extern	void	elf_reloc_bad(Rt_map *, void *, uchar_t, ulong_t,
0867fc633d66 6686372 ld.so.1 should use mmapobj(2)
Rod Evans <Rod.Evans@Sun.COM>
parents: 8159
diff changeset
    71
		    ulong_t);
0867fc633d66 6686372 ld.so.1 should use mmapobj(2)
Rod Evans <Rod.Evans@Sun.COM>
parents: 8159
diff changeset
    72
extern	int	elf_reloc_error(Rt_map *, const char *, void *, uint_t);
0867fc633d66 6686372 ld.so.1 should use mmapobj(2)
Rod Evans <Rod.Evans@Sun.COM>
parents: 8159
diff changeset
    73
extern	int	elf_rtld_load();
0867fc633d66 6686372 ld.so.1 should use mmapobj(2)
Rod Evans <Rod.Evans@Sun.COM>
parents: 8159
diff changeset
    74
extern	long	elf_static_tls(Rt_map *, Sym *, void *, uchar_t, char *,
0867fc633d66 6686372 ld.so.1 should use mmapobj(2)
Rod Evans <Rod.Evans@Sun.COM>
parents: 8159
diff changeset
    75
		    ulong_t, long);
0867fc633d66 6686372 ld.so.1 should use mmapobj(2)
Rod Evans <Rod.Evans@Sun.COM>
parents: 8159
diff changeset
    76
extern	Fct	*elf_verify(caddr_t, size_t, Fdesc *, const char *, Rej_desc *);
0867fc633d66 6686372 ld.so.1 should use mmapobj(2)
Rod Evans <Rod.Evans@Sun.COM>
parents: 8159
diff changeset
    77
extern	int	elf_verify_vers(const char *, Rt_map *, Rt_map *);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    78
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    79
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    80
 * Padinfo
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    81
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    82
 * Used to track the which PLTpadd entries have been used and
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    83
 * to where they are bound.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    84
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    85
 * NOTE: these are only currently used for SparcV9
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    86
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    87
typedef struct pltpadinfo {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    88
	Addr	pp_addr;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    89
	void	*pp_plt;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    90
} Pltpadinfo;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    91
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    92
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    93
 * Private data for an ELF file class.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    94
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    95
typedef struct _rt_elf_private {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    96
	void		*e_symtab;	/* symbol table */
2766
897bcb036a29 PSARC 2006/526 SHT_SUNW_LDYNSYM - default local symbol addition
ab196087
parents: 0
diff changeset
    97
	void		*e_sunwsymtab;	/* symtab augmented with local fcns */
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    98
	uint_t		*e_hash;	/* hash table */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    99
	char		*e_strtab;	/* string table */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   100
	void		*e_reloc;	/* relocation table */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   101
	uint_t		*e_pltgot;	/* addrs for procedure linkage table */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   102
	void		*e_jmprel;	/* plt relocations */
3492
cd4326c9ab0e PSARC 2007/026 ELF symbol sort sections
ab196087
parents: 2766
diff changeset
   103
	ulong_t		e_sunwsortent;	/* size of sunw[sym|tls]sort entry */
cd4326c9ab0e PSARC 2007/026 ELF symbol sort sections
ab196087
parents: 2766
diff changeset
   104
	uint_t		*e_sunwsymsort;	/* sunwsymtab indices sorted by addr */
cd4326c9ab0e PSARC 2007/026 ELF symbol sort sections
ab196087
parents: 2766
diff changeset
   105
	ulong_t		e_sunwsymsortsz; /* size of sunwsymtab */
cd4326c9ab0e PSARC 2007/026 ELF symbol sort sections
ab196087
parents: 2766
diff changeset
   106
	ulong_t		e_sunwsymsz;	/* size of e_sunwsymtab */
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   107
	ulong_t		e_pltrelsize;	/* size of PLT relocation entries */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   108
	ulong_t		e_relsz;	/* size of relocs */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   109
	ulong_t		e_relent;	/* size of base reloc entry */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   110
	ulong_t		e_movesz;	/* size of movetabs */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   111
	ulong_t		e_moveent;	/* size of base movetab entry */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   112
	ulong_t		e_tlsstatoff;	/* TLS offset into static block */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   113
	void		*e_movetab;	/* movetable address */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   114
	Phdr		*e_pttls;	/* PT_TLS */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   115
	Phdr		*e_ptunwind;	/* PT_SUNW_UNWIND (amd64 specific) */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   116
	ulong_t		e_syment;	/* size of symtab entry */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   117
	Verneed		*e_verneed;	/* versions needed by this image and */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   118
	int		e_verneednum;	/*	their associated count */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   119
	Verdef		*e_verdef;	/* versions defined by this image and */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   120
	int		e_verdefnum;	/*	their associated count */
3875
aede79dcec2e 6516665 The link-editors should be more resilient against gcc's symbol versioning
ab196087
parents: 3731
diff changeset
   121
	Versym 		*e_versym;	/* Per-symbol versions */
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   122
	ulong_t		e_syminent;	/* syminfo entry size */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   123
	void		*e_pltpad;	/* PLTpad table */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   124
	void		*e_pltpadend;	/* end of PLTpad table */
11827
d7ef53deac3f 6918143 symbol capabilities
Rod Evans <Rod.Evans@Sun.COM>
parents: 9577
diff changeset
   125
	Syscapset	e_capset;	/* capabilities set */
d7ef53deac3f 6918143 symbol capabilities
Rod Evans <Rod.Evans@Sun.COM>
parents: 9577
diff changeset
   126
	Capinfo		*e_capinfo;	/* symbol capabilities information */
d7ef53deac3f 6918143 symbol capabilities
Rod Evans <Rod.Evans@Sun.COM>
parents: 9577
diff changeset
   127
	uint_t		e_capchainent;	/* size of capabilities chain entry */
d7ef53deac3f 6918143 symbol capabilities
Rod Evans <Rod.Evans@Sun.COM>
parents: 9577
diff changeset
   128
	uint_t		e_capchainsz;	/* size of capabilities chain data */
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   129
} Rt_elfp;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   130
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   131
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   132
 * Macros for getting to linker ELF private data.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   133
 */
3492
cd4326c9ab0e PSARC 2007/026 ELF symbol sort sections
ab196087
parents: 2766
diff changeset
   134
#define	ELFPRV(X)		((X)->rt_priv)
cd4326c9ab0e PSARC 2007/026 ELF symbol sort sections
ab196087
parents: 2766
diff changeset
   135
#define	SYMTAB(X)		(((Rt_elfp *)(X)->rt_priv)->e_symtab)
cd4326c9ab0e PSARC 2007/026 ELF symbol sort sections
ab196087
parents: 2766
diff changeset
   136
#define	SUNWSYMTAB(X)		(((Rt_elfp *)(X)->rt_priv)->e_sunwsymtab)
cd4326c9ab0e PSARC 2007/026 ELF symbol sort sections
ab196087
parents: 2766
diff changeset
   137
#define	HASH(X)			(((Rt_elfp *)(X)->rt_priv)->e_hash)
cd4326c9ab0e PSARC 2007/026 ELF symbol sort sections
ab196087
parents: 2766
diff changeset
   138
#define	STRTAB(X)		(((Rt_elfp *)(X)->rt_priv)->e_strtab)
cd4326c9ab0e PSARC 2007/026 ELF symbol sort sections
ab196087
parents: 2766
diff changeset
   139
#define	REL(X)			(((Rt_elfp *)(X)->rt_priv)->e_reloc)
cd4326c9ab0e PSARC 2007/026 ELF symbol sort sections
ab196087
parents: 2766
diff changeset
   140
#define	PLTGOT(X)		(((Rt_elfp *)(X)->rt_priv)->e_pltgot)
cd4326c9ab0e PSARC 2007/026 ELF symbol sort sections
ab196087
parents: 2766
diff changeset
   141
#define	MOVESZ(X)		(((Rt_elfp *)(X)->rt_priv)->e_movesz)
cd4326c9ab0e PSARC 2007/026 ELF symbol sort sections
ab196087
parents: 2766
diff changeset
   142
#define	MOVEENT(X)		(((Rt_elfp *)(X)->rt_priv)->e_moveent)
cd4326c9ab0e PSARC 2007/026 ELF symbol sort sections
ab196087
parents: 2766
diff changeset
   143
#define	MOVETAB(X)		(((Rt_elfp *)(X)->rt_priv)->e_movetab)
cd4326c9ab0e PSARC 2007/026 ELF symbol sort sections
ab196087
parents: 2766
diff changeset
   144
#define	JMPREL(X)		(((Rt_elfp *)(X)->rt_priv)->e_jmprel)
cd4326c9ab0e PSARC 2007/026 ELF symbol sort sections
ab196087
parents: 2766
diff changeset
   145
#define	SUNWSYMSZ(X)		(((Rt_elfp *)(X)->rt_priv)->e_sunwsymsz)
cd4326c9ab0e PSARC 2007/026 ELF symbol sort sections
ab196087
parents: 2766
diff changeset
   146
#define	PTTLS(X)		(((Rt_elfp *)(X)->rt_priv)->e_pttls)
cd4326c9ab0e PSARC 2007/026 ELF symbol sort sections
ab196087
parents: 2766
diff changeset
   147
#define	PTUNWIND(X)		(((Rt_elfp *)(X)->rt_priv)->e_ptunwind)
cd4326c9ab0e PSARC 2007/026 ELF symbol sort sections
ab196087
parents: 2766
diff changeset
   148
#define	TLSSTATOFF(X)		(((Rt_elfp *)(X)->rt_priv)->e_tlsstatoff)
cd4326c9ab0e PSARC 2007/026 ELF symbol sort sections
ab196087
parents: 2766
diff changeset
   149
#define	PLTRELSZ(X)		(((Rt_elfp *)(X)->rt_priv)->e_pltrelsize)
cd4326c9ab0e PSARC 2007/026 ELF symbol sort sections
ab196087
parents: 2766
diff changeset
   150
#define	RELSZ(X)		(((Rt_elfp *)(X)->rt_priv)->e_relsz)
cd4326c9ab0e PSARC 2007/026 ELF symbol sort sections
ab196087
parents: 2766
diff changeset
   151
#define	RELENT(X)		(((Rt_elfp *)(X)->rt_priv)->e_relent)
cd4326c9ab0e PSARC 2007/026 ELF symbol sort sections
ab196087
parents: 2766
diff changeset
   152
#define	SYMENT(X)		(((Rt_elfp *)(X)->rt_priv)->e_syment)
cd4326c9ab0e PSARC 2007/026 ELF symbol sort sections
ab196087
parents: 2766
diff changeset
   153
#define	VERNEED(X)		(((Rt_elfp *)(X)->rt_priv)->e_verneed)
cd4326c9ab0e PSARC 2007/026 ELF symbol sort sections
ab196087
parents: 2766
diff changeset
   154
#define	VERNEEDNUM(X)		(((Rt_elfp *)(X)->rt_priv)->e_verneednum)
cd4326c9ab0e PSARC 2007/026 ELF symbol sort sections
ab196087
parents: 2766
diff changeset
   155
#define	VERDEF(X)		(((Rt_elfp *)(X)->rt_priv)->e_verdef)
cd4326c9ab0e PSARC 2007/026 ELF symbol sort sections
ab196087
parents: 2766
diff changeset
   156
#define	VERDEFNUM(X)		(((Rt_elfp *)(X)->rt_priv)->e_verdefnum)
3875
aede79dcec2e 6516665 The link-editors should be more resilient against gcc's symbol versioning
ab196087
parents: 3731
diff changeset
   157
#define	VERSYM(X)		(((Rt_elfp *)(X)->rt_priv)->e_versym)
3492
cd4326c9ab0e PSARC 2007/026 ELF symbol sort sections
ab196087
parents: 2766
diff changeset
   158
#define	SYMINENT(X)		(((Rt_elfp *)(X)->rt_priv)->e_syminent)
cd4326c9ab0e PSARC 2007/026 ELF symbol sort sections
ab196087
parents: 2766
diff changeset
   159
#define	PLTPAD(X)		(((Rt_elfp *)(X)->rt_priv)->e_pltpad)
cd4326c9ab0e PSARC 2007/026 ELF symbol sort sections
ab196087
parents: 2766
diff changeset
   160
#define	PLTPADEND(X)		(((Rt_elfp *)(X)->rt_priv)->e_pltpadend)
cd4326c9ab0e PSARC 2007/026 ELF symbol sort sections
ab196087
parents: 2766
diff changeset
   161
#define	SUNWSORTENT(X)		(((Rt_elfp *)(X)->rt_priv)->e_sunwsortent)
cd4326c9ab0e PSARC 2007/026 ELF symbol sort sections
ab196087
parents: 2766
diff changeset
   162
#define	SUNWSYMSORT(X)		(((Rt_elfp *)(X)->rt_priv)->e_sunwsymsort)
cd4326c9ab0e PSARC 2007/026 ELF symbol sort sections
ab196087
parents: 2766
diff changeset
   163
#define	SUNWSYMSORTSZ(X)	(((Rt_elfp *)(X)->rt_priv)->e_sunwsymsortsz)
11827
d7ef53deac3f 6918143 symbol capabilities
Rod Evans <Rod.Evans@Sun.COM>
parents: 9577
diff changeset
   164
#define	CAPSET(X)		(((Rt_elfp *)(X)->rt_priv)->e_capset)
d7ef53deac3f 6918143 symbol capabilities
Rod Evans <Rod.Evans@Sun.COM>
parents: 9577
diff changeset
   165
#define	CAPINFO(X)		(((Rt_elfp *)(X)->rt_priv)->e_capinfo)
d7ef53deac3f 6918143 symbol capabilities
Rod Evans <Rod.Evans@Sun.COM>
parents: 9577
diff changeset
   166
#define	CAPCHAINENT(X)		(((Rt_elfp *)(X)->rt_priv)->e_capchainent)
d7ef53deac3f 6918143 symbol capabilities
Rod Evans <Rod.Evans@Sun.COM>
parents: 9577
diff changeset
   167
#define	CAPCHAINSZ(X)		(((Rt_elfp *)(X)->rt_priv)->e_capchainsz)
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   168
8598
0867fc633d66 6686372 ld.so.1 should use mmapobj(2)
Rod Evans <Rod.Evans@Sun.COM>
parents: 8159
diff changeset
   169
/*
0867fc633d66 6686372 ld.so.1 should use mmapobj(2)
Rod Evans <Rod.Evans@Sun.COM>
parents: 8159
diff changeset
   170
 * Most of the above macros are used from ELF specific routines, however there
0867fc633d66 6686372 ld.so.1 should use mmapobj(2)
Rod Evans <Rod.Evans@Sun.COM>
parents: 8159
diff changeset
   171
 * are a couple of instances where we need to ensure the file being processed
0867fc633d66 6686372 ld.so.1 should use mmapobj(2)
Rod Evans <Rod.Evans@Sun.COM>
parents: 8159
diff changeset
   172
 * is ELF before dereferencing the macro.
0867fc633d66 6686372 ld.so.1 should use mmapobj(2)
Rod Evans <Rod.Evans@Sun.COM>
parents: 8159
diff changeset
   173
 */
0867fc633d66 6686372 ld.so.1 should use mmapobj(2)
Rod Evans <Rod.Evans@Sun.COM>
parents: 8159
diff changeset
   174
#define	THIS_IS_ELF(X)		(FCT(X) == &elf_fct)
0867fc633d66 6686372 ld.so.1 should use mmapobj(2)
Rod Evans <Rod.Evans@Sun.COM>
parents: 8159
diff changeset
   175
#define	THIS_IS_NOT_ELF(X)	(FCT(X) != &elf_fct)
0867fc633d66 6686372 ld.so.1 should use mmapobj(2)
Rod Evans <Rod.Evans@Sun.COM>
parents: 8159
diff changeset
   176
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   177
#ifdef	__cplusplus
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   178
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   179
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   180
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   181
#endif	/* __ELF_DOT_H */