xref: /titanic_51/usr/src/cmd/sgs/libelf/common/llib-lelf (revision bb25c06cca41ca78e5fb87fbb8e81d55beb18c95)
1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21/* LINTLIBRARY */
22/* PROTOLIB1 */
23
24/*
25 * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
26 * Use is subject to license terms.
27 */
28
29#pragma ident	"%Z%%M%	%I%	%E% SMI"
30
31/*
32 * Generic interface definition for usr/src/lib/libelf.
33 */
34
35#include <libelf.h>
36#include <gelf.h>
37#include <nlist.h>
38
39
40/*
41 * Elf32 Symbols
42 */
43size_t		elf32_fsize(Elf_Type, size_t, uint_t);
44size_t		_elf32_fsize(Elf_Type, size_t, uint_t);
45Elf32_Ehdr *	elf32_getehdr(Elf *);
46Elf32_Ehdr *	_elf32_getehdr(Elf *);
47Elf32_Phdr *	elf32_getphdr(Elf *);
48Elf32_Phdr *	_elf32_getphdr(Elf *);
49Elf32_Shdr *	elf32_getshdr(Elf_Scn *);
50Elf32_Shdr *	_elf32_getshdr(Elf_Scn *);
51Elf32_Ehdr *	elf32_newehdr(Elf *);
52Elf32_Ehdr *	_elf32_newehdr(Elf *);
53Elf32_Phdr *	elf32_newphdr(Elf *, size_t);
54Elf32_Phdr *	_elf32_newphdr(Elf *, size_t);
55Elf_Data *	elf32_xlatetof(Elf_Data *, const Elf_Data *, uint_t);
56Elf_Data *	_elf32_xlatetof(Elf_Data *, const Elf_Data *, uint_t);
57Elf_Data *	elf32_xlatetom(Elf_Data *, const Elf_Data *, uint_t);
58Elf_Data *	_elf32_xlatetom(Elf_Data *, const Elf_Data *, uint_t);
59
60
61/*
62 * Elf64 Symbols
63 */
64size_t		elf64_fsize(Elf_Type, size_t, uint_t);
65Elf64_Ehdr *	elf64_getehdr(Elf *);
66Elf64_Phdr *	elf64_getphdr(Elf *);
67Elf64_Shdr *	elf64_getshdr(Elf_Scn *);
68Elf64_Ehdr *	elf64_newehdr(Elf *);
69Elf64_Phdr *	elf64_newphdr(Elf *, size_t);
70Elf_Data *	elf64_xlatetof(Elf_Data *, const Elf_Data *, uint_t);
71Elf_Data *	elf64_xlatetom(Elf_Data *, const Elf_Data *, uint_t);
72
73
74/*
75 * GElf Symbols
76 */
77size_t		gelf_fsize(Elf *, Elf_Type, size_t, uint_t);
78int		gelf_getclass(Elf *);
79GElf_Ehdr *	gelf_getehdr(Elf *, GElf_Ehdr *);
80int		gelf_update_ehdr(Elf *, GElf_Ehdr *);
81ulong_t		gelf_newehdr(Elf *, int);
82GElf_Phdr *	gelf_getphdr(Elf *, int, GElf_Phdr *);
83int		gelf_update_phdr(Elf *, int, GElf_Phdr *);
84ulong_t		gelf_newphdr(Elf *, size_t);
85GElf_Shdr *	gelf_getshdr(Elf_Scn *,  GElf_Shdr *);
86int		gelf_update_shdr(Elf_Scn *, GElf_Shdr *);
87Elf_Data *	gelf_xlatetof(Elf *, Elf_Data *, const Elf_Data *, uint_t);
88Elf_Data *	gelf_xlatetom(Elf *, Elf_Data *, const Elf_Data *, uint_t);
89GElf_Sym *	gelf_getsym(Elf_Data *, int, GElf_Sym *);
90int		gelf_update_sym(Elf_Data *, int, GElf_Sym *);
91GElf_Syminfo *	gelf_getsyminfo(Elf_Data *, int, GElf_Syminfo *);
92int		gelf_update_syminfo(Elf_Data *, int, GElf_Syminfo *);
93GElf_Sym *	gelf_getsymshndx(Elf_Data *, Elf_Data *, int, GElf_Sym *,
94		    Elf32_Word *);
95int		gelf_update_symshndx(Elf_Data *, Elf_Data *, int, GElf_Sym *,
96		    Elf32_Word);
97GElf_Move *	gelf_getmove(Elf_Data *, int, GElf_Move *);
98int		gelf_update_move(Elf_Data *, int, GElf_Move *);
99GElf_Dyn *	gelf_getdyn(Elf_Data *, int, GElf_Dyn *);
100int		gelf_update_dyn(Elf_Data *, int, GElf_Dyn *);
101GElf_Rela *	gelf_getrela(Elf_Data *, int, GElf_Rela *);
102int		gelf_update_rela(Elf_Data *, int, GElf_Rela *);
103GElf_Rel *	gelf_getrel(Elf_Data *, int, GElf_Rel *);
104int		gelf_update_rel(Elf_Data *, int, GElf_Rel *);
105GElf_Cap *	gelf_getcap(Elf_Data *, int, GElf_Cap *);
106int		gelf_update_cap(Elf_Data *, int, GElf_Cap *);
107
108GElf_Xword	_gelf_getdyndtflags_1(Elf *);
109
110/*
111 * Class-Independent Elf Symbols
112 */
113Elf *		elf_begin(int, Elf_Cmd, Elf *);
114Elf *		_elf_begin(int, Elf_Cmd, Elf *);
115int		elf_cntl(Elf *, Elf_Cmd);
116int		_elf_cntl(Elf *, Elf_Cmd);
117int		elf_end(Elf *);
118int		_elf_end(Elf *);
119const char *	elf_errmsg(int);
120const char *	_elf_errmsg(int);
121int		elf_errno(void);
122int		_elf_errno(void);
123void		elf_fill(int);
124void		_elf_fill(int);
125uint_t		elf_flagdata(Elf_Data *, Elf_Cmd, uint_t);
126uint_t		_elf_flagdata(Elf_Data *, Elf_Cmd, uint_t);
127uint_t		elf_flagehdr(Elf *, Elf_Cmd,  uint_t);
128uint_t		_elf_flagehdr(Elf *, Elf_Cmd,  uint_t);
129uint_t		elf_flagelf(Elf *, Elf_Cmd,  uint_t);
130uint_t		_elf_flagelf(Elf *, Elf_Cmd,  uint_t);
131uint_t		elf_flagphdr(Elf *, Elf_Cmd,  uint_t);
132uint_t		_elf_flagphdr(Elf *, Elf_Cmd,  uint_t);
133uint_t		elf_flagscn(Elf_Scn *, Elf_Cmd, uint_t);
134uint_t		_elf_flagscn(Elf_Scn *, Elf_Cmd, uint_t);
135uint_t		elf_flagshdr(Elf_Scn *, Elf_Cmd, uint_t);
136uint_t		_elf_flagshdr(Elf_Scn *, Elf_Cmd, uint_t);
137Elf_Arhdr *	elf_getarhdr(Elf *);
138Elf_Arhdr *	_elf_getarhdr(Elf *);
139Elf_Arsym *	elf_getarsym(Elf *, size_t *);
140Elf_Arsym *	_elf_getarsym(Elf *, size_t *);
141off_t		elf_getbase(Elf *);
142off_t		_elf_getbase(Elf *);
143Elf_Data *	elf_getdata(Elf_Scn *, Elf_Data *);
144Elf_Data *	_elf_getdata(Elf_Scn *, Elf_Data *);
145char *		elf_getident(Elf *, size_t *);
146char *		_elf_getident(Elf *, size_t *);
147int		elf_getphnum(Elf *, size_t *);
148int		elf_getshnum(Elf *, size_t *);
149int		elf_getshstrndx(Elf *, size_t *);
150Elf_Scn *	elf_getscn(Elf *elf, size_t);
151Elf_Scn *	_elf_getscn(Elf *elf, size_t);
152ulong_t		elf_hash(const char *);
153ulong_t		_elf_hash(const char *);
154Elf_Kind	elf_kind(Elf *);
155Elf_Kind	_elf_kind(Elf *);
156Elf *		elf_memory(char *, size_t);
157Elf *		_elf_memory(char *, size_t);
158size_t		elf_ndxscn(Elf_Scn *);
159size_t		_elf_ndxscn(Elf_Scn *);
160Elf_Data *	elf_newdata(Elf_Scn *);
161Elf_Data *	_elf_newdata(Elf_Scn *);
162Elf_Scn *	elf_newscn(Elf *);
163Elf_Scn *	_elf_newscn(Elf *);
164Elf_Cmd		elf_next(Elf *);
165Elf_Cmd		_elf_next(Elf *);
166Elf_Scn *	elf_nextscn(Elf *, Elf_Scn *);
167Elf_Scn *	_elf_nextscn(Elf *, Elf_Scn *);
168size_t		_elf_outsync(int, char *, size_t, uint_t);
169size_t		elf_rand(Elf *, size_t);
170size_t		_elf_rand(Elf *, size_t);
171Elf_Data *	elf_rawdata(Elf_Scn *, Elf_Data *);
172Elf_Data *	_elf_rawdata(Elf_Scn *, Elf_Data *);
173char *		elf_rawfile(Elf *, size_t *);
174char *		_elf_rawfile(Elf *, size_t *);
175char *		elf_strptr(Elf *, size_t, size_t);
176char *		_elf_strptr(Elf *, size_t, size_t);
177off_t		elf_update(Elf *, Elf_Cmd);
178off_t		_elf_update(Elf *, Elf_Cmd);
179uint_t		elf_version(uint_t);
180uint_t		_elf_version(uint_t);
181int		nlist(const char *, struct nlist *);
182
183
184/*
185 * Private Symbols
186 */
187Elf64_Off	_elf_getxoff(Elf_Data *);
188