llib-lelf revision 10a4fa49f51ed9ae1c857a626de6ce9ebf41661a
b341a780162d809b187a8f35a10bba7642b69798vboxsync/*
d34409ad02ea0d28e08a6c4b089a412fdb3b4c9cvboxsync * CDDL HEADER START
b341a780162d809b187a8f35a10bba7642b69798vboxsync *
b341a780162d809b187a8f35a10bba7642b69798vboxsync * The contents of this file are subject to the terms of the
b341a780162d809b187a8f35a10bba7642b69798vboxsync * Common Development and Distribution License (the "License").
8d1ef2acf41d1d8a0f69bfe0ac1f41638160399cvboxsync * You may not use this file except in compliance with the License.
b341a780162d809b187a8f35a10bba7642b69798vboxsync *
b341a780162d809b187a8f35a10bba7642b69798vboxsync * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
b341a780162d809b187a8f35a10bba7642b69798vboxsync * or http://www.opensolaris.org/os/licensing.
b341a780162d809b187a8f35a10bba7642b69798vboxsync * See the License for the specific language governing permissions
b341a780162d809b187a8f35a10bba7642b69798vboxsync * and limitations under the License.
b341a780162d809b187a8f35a10bba7642b69798vboxsync *
b341a780162d809b187a8f35a10bba7642b69798vboxsync * When distributing Covered Code, include this CDDL HEADER in each
b341a780162d809b187a8f35a10bba7642b69798vboxsync * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
b341a780162d809b187a8f35a10bba7642b69798vboxsync * If applicable, add the following below this CDDL HEADER, with the
b341a780162d809b187a8f35a10bba7642b69798vboxsync * fields enclosed by brackets "[]" replaced with your own identifying
b341a780162d809b187a8f35a10bba7642b69798vboxsync * information: Portions Copyright [yyyy] [name of copyright owner]
b341a780162d809b187a8f35a10bba7642b69798vboxsync *
b341a780162d809b187a8f35a10bba7642b69798vboxsync * CDDL HEADER END
8bf8c6b1914c9e7e60b1547888400668f1774497vboxsync */
b341a780162d809b187a8f35a10bba7642b69798vboxsync/* LINTLIBRARY */
9508848aea94fe052556767bbf87e1c212380a66vboxsync/* PROTOLIB1 */
b341a780162d809b187a8f35a10bba7642b69798vboxsync
8bf8c6b1914c9e7e60b1547888400668f1774497vboxsync/*
b341a780162d809b187a8f35a10bba7642b69798vboxsync * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
d05e0aca826e72aa0cc78aced33dc8fc036c4483vboxsync * Use is subject to license terms.
e2b54646f72dde25f46401f08ed8cc504a37f704vboxsync */
e2b54646f72dde25f46401f08ed8cc504a37f704vboxsync
e2b54646f72dde25f46401f08ed8cc504a37f704vboxsync#pragma ident "%Z%%M% %I% %E% SMI"
e2b54646f72dde25f46401f08ed8cc504a37f704vboxsync
8bf8c6b1914c9e7e60b1547888400668f1774497vboxsync/*
8bf8c6b1914c9e7e60b1547888400668f1774497vboxsync * Generic interface definition for usr/src/lib/libelf.
8bf8c6b1914c9e7e60b1547888400668f1774497vboxsync */
2d4c4983fd26f0ab406f52524949229724ccbe74vboxsync
2d4c4983fd26f0ab406f52524949229724ccbe74vboxsync#include <libelf.h>
2d4c4983fd26f0ab406f52524949229724ccbe74vboxsync#include <gelf.h>
8bf8c6b1914c9e7e60b1547888400668f1774497vboxsync#include <nlist.h>
0de1998ac52682bb5322df476e45f237265ea9b7vboxsync
4429cc47d1e3ca88d6237e5ee7a876dc409cdc24vboxsync
b073edf5c9b00e49e6d4132e85fe60818dbc50dbvboxsync/*
87b5b156b993057a03a22aee48c824ead49738a9vboxsync * Elf32 Symbols
87b5b156b993057a03a22aee48c824ead49738a9vboxsync */
069b9101fbd3b049610c5511b1cc9534d01ea472vboxsyncsize_t elf32_fsize(Elf_Type, size_t, uint_t);
069b9101fbd3b049610c5511b1cc9534d01ea472vboxsyncsize_t _elf32_fsize(Elf_Type, size_t, uint_t);
069b9101fbd3b049610c5511b1cc9534d01ea472vboxsyncElf32_Ehdr * elf32_getehdr(Elf *);
8bf8c6b1914c9e7e60b1547888400668f1774497vboxsyncElf32_Ehdr * _elf32_getehdr(Elf *);
1781347b2a037971c77ec6823ffa3fd07db4e8devboxsyncElf32_Phdr * elf32_getphdr(Elf *);
1781347b2a037971c77ec6823ffa3fd07db4e8devboxsyncElf32_Phdr * _elf32_getphdr(Elf *);
1781347b2a037971c77ec6823ffa3fd07db4e8devboxsyncElf32_Shdr * elf32_getshdr(Elf_Scn *);
1781347b2a037971c77ec6823ffa3fd07db4e8devboxsyncElf32_Shdr * _elf32_getshdr(Elf_Scn *);
e2b54646f72dde25f46401f08ed8cc504a37f704vboxsyncElf32_Ehdr * elf32_newehdr(Elf *);
b341a780162d809b187a8f35a10bba7642b69798vboxsyncElf32_Ehdr * _elf32_newehdr(Elf *);
b341a780162d809b187a8f35a10bba7642b69798vboxsyncElf32_Phdr * elf32_newphdr(Elf *, size_t);
b341a780162d809b187a8f35a10bba7642b69798vboxsyncElf32_Phdr * _elf32_newphdr(Elf *, size_t);
b341a780162d809b187a8f35a10bba7642b69798vboxsyncElf_Data * elf32_xlatetof(Elf_Data *, const Elf_Data *, uint_t);
0a6d1cee0381d167a5ba61880bf05456fff798d5vboxsyncElf_Data * _elf32_xlatetof(Elf_Data *, const Elf_Data *, uint_t);
0a6d1cee0381d167a5ba61880bf05456fff798d5vboxsyncElf_Data * elf32_xlatetom(Elf_Data *, const Elf_Data *, uint_t);
0a6d1cee0381d167a5ba61880bf05456fff798d5vboxsyncElf_Data * _elf32_xlatetom(Elf_Data *, const Elf_Data *, uint_t);
0a6d1cee0381d167a5ba61880bf05456fff798d5vboxsync
0a6d1cee0381d167a5ba61880bf05456fff798d5vboxsync
b341a780162d809b187a8f35a10bba7642b69798vboxsync/*
b341a780162d809b187a8f35a10bba7642b69798vboxsync * Elf64 Symbols
9939e2124ce2cb00f28b089e4d78a1c4569f1009vboxsync */
9939e2124ce2cb00f28b089e4d78a1c4569f1009vboxsyncsize_t elf64_fsize(Elf_Type, size_t, uint_t);
9939e2124ce2cb00f28b089e4d78a1c4569f1009vboxsyncElf64_Ehdr * elf64_getehdr(Elf *);
9939e2124ce2cb00f28b089e4d78a1c4569f1009vboxsyncElf64_Phdr * elf64_getphdr(Elf *);
9939e2124ce2cb00f28b089e4d78a1c4569f1009vboxsyncElf64_Shdr * elf64_getshdr(Elf_Scn *);
9939e2124ce2cb00f28b089e4d78a1c4569f1009vboxsyncElf64_Ehdr * elf64_newehdr(Elf *);
9939e2124ce2cb00f28b089e4d78a1c4569f1009vboxsyncElf64_Phdr * elf64_newphdr(Elf *, size_t);
9939e2124ce2cb00f28b089e4d78a1c4569f1009vboxsyncElf_Data * elf64_xlatetof(Elf_Data *, const Elf_Data *, uint_t);
9939e2124ce2cb00f28b089e4d78a1c4569f1009vboxsyncElf_Data * elf64_xlatetom(Elf_Data *, const Elf_Data *, uint_t);
9939e2124ce2cb00f28b089e4d78a1c4569f1009vboxsync
9939e2124ce2cb00f28b089e4d78a1c4569f1009vboxsync
9939e2124ce2cb00f28b089e4d78a1c4569f1009vboxsync/*
9939e2124ce2cb00f28b089e4d78a1c4569f1009vboxsync * GElf Symbols
9939e2124ce2cb00f28b089e4d78a1c4569f1009vboxsync */
1910146bc46e3eee5b8668806da594107fe9aabfvboxsyncsize_t gelf_fsize(Elf *, Elf_Type, size_t, uint_t);
d9992886d98f1ab92fe43b15a58f75a374cb3f1evboxsyncint gelf_getclass(Elf *);
b341a780162d809b187a8f35a10bba7642b69798vboxsyncGElf_Ehdr * gelf_getehdr(Elf *, GElf_Ehdr *);
d9992886d98f1ab92fe43b15a58f75a374cb3f1evboxsyncint gelf_update_ehdr(Elf *, GElf_Ehdr *);
d9992886d98f1ab92fe43b15a58f75a374cb3f1evboxsynculong_t gelf_newehdr(Elf *, int);
b341a780162d809b187a8f35a10bba7642b69798vboxsyncGElf_Phdr * gelf_getphdr(Elf *, int, GElf_Phdr *);
b341a780162d809b187a8f35a10bba7642b69798vboxsyncint gelf_update_phdr(Elf *, int, GElf_Phdr *);
2646f8fc98fb2780f8b84875b314ceddd08cf2a3vboxsynculong_t gelf_newphdr(Elf *, size_t);
d9992886d98f1ab92fe43b15a58f75a374cb3f1evboxsyncGElf_Shdr * gelf_getshdr(Elf_Scn *, GElf_Shdr *);
d9992886d98f1ab92fe43b15a58f75a374cb3f1evboxsyncint gelf_update_shdr(Elf_Scn *, GElf_Shdr *);
d9992886d98f1ab92fe43b15a58f75a374cb3f1evboxsyncElf_Data * gelf_xlatetof(Elf *, Elf_Data *, const Elf_Data *, uint_t);
b341a780162d809b187a8f35a10bba7642b69798vboxsyncElf_Data * gelf_xlatetom(Elf *, Elf_Data *, const Elf_Data *, uint_t);
b341a780162d809b187a8f35a10bba7642b69798vboxsyncGElf_Sym * gelf_getsym(Elf_Data *, int, GElf_Sym *);
a4b605335b7e6a6ba6d5a301bc96de0e89e4b663vboxsyncint gelf_update_sym(Elf_Data *, int, GElf_Sym *);
e2b54646f72dde25f46401f08ed8cc504a37f704vboxsyncGElf_Syminfo * gelf_getsyminfo(Elf_Data *, int, GElf_Syminfo *);
63053bf6ac5b4b7ea12b8d049180069e14f35d04vboxsyncint gelf_update_syminfo(Elf_Data *, int, GElf_Syminfo *);
2a54a98806b7ab4fb07a7f7be0e596da2c4c7397vboxsyncGElf_Sym * gelf_getsymshndx(Elf_Data *, Elf_Data *, int, GElf_Sym *,
63053bf6ac5b4b7ea12b8d049180069e14f35d04vboxsync Elf32_Word *);
0de1998ac52682bb5322df476e45f237265ea9b7vboxsyncint gelf_update_symshndx(Elf_Data *, Elf_Data *, int, GElf_Sym *,
9c017ff10920b7c2b1ed8ed650fd76717462d799vboxsync Elf32_Word);
8ed23859c0e44a03f928100d5ead26a135d1f68bvboxsyncGElf_Move * gelf_getmove(Elf_Data *, int, GElf_Move *);
8b30b381497d3266291378171b287f1324140dcfvboxsyncint gelf_update_move(Elf_Data *, int, GElf_Move *);
ce9bcdffe758afb7468df441551f0ce7b7084d55vboxsyncGElf_Dyn * gelf_getdyn(Elf_Data *, int, GElf_Dyn *);
ce9bcdffe758afb7468df441551f0ce7b7084d55vboxsyncint gelf_update_dyn(Elf_Data *, int, GElf_Dyn *);
ce9bcdffe758afb7468df441551f0ce7b7084d55vboxsyncGElf_Rela * gelf_getrela(Elf_Data *, int, GElf_Rela *);
49503a0bd81d413b5896c64a3db70b5e29db2049vboxsyncint gelf_update_rela(Elf_Data *, int, GElf_Rela *);
49503a0bd81d413b5896c64a3db70b5e29db2049vboxsyncGElf_Rel * gelf_getrel(Elf_Data *, int, GElf_Rel *);
2e1486246f81c66189020361c3bdc93ec90ebdd2vboxsyncint gelf_update_rel(Elf_Data *, int, GElf_Rel *);
2e1486246f81c66189020361c3bdc93ec90ebdd2vboxsyncGElf_Cap * gelf_getcap(Elf_Data *, int, GElf_Cap *);
2e1486246f81c66189020361c3bdc93ec90ebdd2vboxsyncint gelf_update_cap(Elf_Data *, int, GElf_Cap *);
3cdef5504e9fb186b78113c97636a33a479ffeebvboxsync
b0a76b6453ef81a9d6c62dcfeb042b9847ef5bf6vboxsyncGElf_Xword _gelf_getdyndtflags_1(Elf *);
3cdef5504e9fb186b78113c97636a33a479ffeebvboxsync
d4751d58b8426d696cfd906fed41ab30ae18bc9cvboxsync/*
34370838dcf25e846b2a3b0032ce1eb47a1eb351vboxsync * Class-Independent Elf Symbols
34370838dcf25e846b2a3b0032ce1eb47a1eb351vboxsync */
34370838dcf25e846b2a3b0032ce1eb47a1eb351vboxsyncElf * elf_begin(int, Elf_Cmd, Elf *);
34370838dcf25e846b2a3b0032ce1eb47a1eb351vboxsyncElf * _elf_begin(int, Elf_Cmd, Elf *);
d4751d58b8426d696cfd906fed41ab30ae18bc9cvboxsyncint elf_cntl(Elf *, Elf_Cmd);
d34fd1b6c462748ecf36c49b84c27a8f77bf5be6vboxsyncint _elf_cntl(Elf *, Elf_Cmd);
d34fd1b6c462748ecf36c49b84c27a8f77bf5be6vboxsyncint elf_end(Elf *);
abcb6b328dd9d49f1fff64745167abce1d448fd6vboxsyncint _elf_end(Elf *);
9e32493c5dc27f447f289b8e16ec77f5fcda3883vboxsyncconst char * elf_errmsg(int);
9e32493c5dc27f447f289b8e16ec77f5fcda3883vboxsyncconst char * _elf_errmsg(int);
9e32493c5dc27f447f289b8e16ec77f5fcda3883vboxsyncint elf_errno(void);
0ebe61ec4cb71b4672ce5aae561bb0708b841272vboxsyncint _elf_errno(void);
0ebe61ec4cb71b4672ce5aae561bb0708b841272vboxsyncvoid elf_fill(int);
0ebe61ec4cb71b4672ce5aae561bb0708b841272vboxsyncvoid _elf_fill(int);
62deca0ebd8d66e21f58703e5d4409922387084bvboxsyncuint_t elf_flagdata(Elf_Data *, Elf_Cmd, uint_t);
62deca0ebd8d66e21f58703e5d4409922387084bvboxsyncuint_t _elf_flagdata(Elf_Data *, Elf_Cmd, uint_t);
62deca0ebd8d66e21f58703e5d4409922387084bvboxsyncuint_t elf_flagehdr(Elf *, Elf_Cmd, uint_t);
64c6abf772e2599fb614ed75c11b8570a6da5697vboxsyncuint_t _elf_flagehdr(Elf *, Elf_Cmd, uint_t);
db813f691857a4b61f81ac59a3f2cf56e8afedb4vboxsyncuint_t elf_flagelf(Elf *, Elf_Cmd, uint_t);
db813f691857a4b61f81ac59a3f2cf56e8afedb4vboxsyncuint_t _elf_flagelf(Elf *, Elf_Cmd, uint_t);
49503a0bd81d413b5896c64a3db70b5e29db2049vboxsyncuint_t elf_flagphdr(Elf *, Elf_Cmd, uint_t);
49503a0bd81d413b5896c64a3db70b5e29db2049vboxsyncuint_t _elf_flagphdr(Elf *, Elf_Cmd, uint_t);
49503a0bd81d413b5896c64a3db70b5e29db2049vboxsyncuint_t elf_flagscn(Elf_Scn *, Elf_Cmd, uint_t);
b341a780162d809b187a8f35a10bba7642b69798vboxsyncuint_t _elf_flagscn(Elf_Scn *, Elf_Cmd, uint_t);
b341a780162d809b187a8f35a10bba7642b69798vboxsyncuint_t elf_flagshdr(Elf_Scn *, Elf_Cmd, uint_t);
d9992886d98f1ab92fe43b15a58f75a374cb3f1evboxsyncuint_t _elf_flagshdr(Elf_Scn *, Elf_Cmd, uint_t);
b341a780162d809b187a8f35a10bba7642b69798vboxsyncElf_Arhdr * elf_getarhdr(Elf *);
d9992886d98f1ab92fe43b15a58f75a374cb3f1evboxsyncElf_Arhdr * _elf_getarhdr(Elf *);
b341a780162d809b187a8f35a10bba7642b69798vboxsyncElf_Arsym * elf_getarsym(Elf *, size_t *);
b341a780162d809b187a8f35a10bba7642b69798vboxsyncElf_Arsym * _elf_getarsym(Elf *, size_t *);
2646f8fc98fb2780f8b84875b314ceddd08cf2a3vboxsyncoff_t elf_getbase(Elf *);
d9992886d98f1ab92fe43b15a58f75a374cb3f1evboxsyncoff_t _elf_getbase(Elf *);
d9992886d98f1ab92fe43b15a58f75a374cb3f1evboxsyncElf_Data * elf_getdata(Elf_Scn *, Elf_Data *);
b341a780162d809b187a8f35a10bba7642b69798vboxsyncElf_Data * _elf_getdata(Elf_Scn *, Elf_Data *);
b341a780162d809b187a8f35a10bba7642b69798vboxsyncchar * elf_getident(Elf *, size_t *);
2646f8fc98fb2780f8b84875b314ceddd08cf2a3vboxsyncchar * _elf_getident(Elf *, size_t *);
b094ef7cd1c380aa0bdec0b8d276ac397efb101bvboxsyncint elf_getphnum(Elf *, size_t *);
b094ef7cd1c380aa0bdec0b8d276ac397efb101bvboxsyncint elf_getshnum(Elf *, size_t *);
2646f8fc98fb2780f8b84875b314ceddd08cf2a3vboxsyncint elf_getshstrndx(Elf *, size_t *);
2646f8fc98fb2780f8b84875b314ceddd08cf2a3vboxsyncElf_Scn * elf_getscn(Elf *elf, size_t);
9e32493c5dc27f447f289b8e16ec77f5fcda3883vboxsyncElf_Scn * _elf_getscn(Elf *elf, size_t);
2646f8fc98fb2780f8b84875b314ceddd08cf2a3vboxsynculong_t elf_hash(const char *);
b094ef7cd1c380aa0bdec0b8d276ac397efb101bvboxsynculong_t _elf_hash(const char *);
2646f8fc98fb2780f8b84875b314ceddd08cf2a3vboxsyncElf_Kind elf_kind(Elf *);
2646f8fc98fb2780f8b84875b314ceddd08cf2a3vboxsyncElf_Kind _elf_kind(Elf *);
2646f8fc98fb2780f8b84875b314ceddd08cf2a3vboxsyncElf * elf_memory(char *, size_t);
2646f8fc98fb2780f8b84875b314ceddd08cf2a3vboxsyncElf * _elf_memory(char *, size_t);
2646f8fc98fb2780f8b84875b314ceddd08cf2a3vboxsyncsize_t elf_ndxscn(Elf_Scn *);
cfa82602cc477153717a0875667946520e6fee76vboxsyncsize_t _elf_ndxscn(Elf_Scn *);
2646f8fc98fb2780f8b84875b314ceddd08cf2a3vboxsyncElf_Data * elf_newdata(Elf_Scn *);
5c0a93a5d23fb128f357893b6d8c60f9ab62038fvboxsyncElf_Data * _elf_newdata(Elf_Scn *);
2646f8fc98fb2780f8b84875b314ceddd08cf2a3vboxsyncElf_Scn * elf_newscn(Elf *);
1781347b2a037971c77ec6823ffa3fd07db4e8devboxsyncElf_Scn * _elf_newscn(Elf *);
1781347b2a037971c77ec6823ffa3fd07db4e8devboxsyncElf_Cmd elf_next(Elf *);
1781347b2a037971c77ec6823ffa3fd07db4e8devboxsyncElf_Cmd _elf_next(Elf *);
1781347b2a037971c77ec6823ffa3fd07db4e8devboxsyncElf_Scn * elf_nextscn(Elf *, Elf_Scn *);
1781347b2a037971c77ec6823ffa3fd07db4e8devboxsyncElf_Scn * _elf_nextscn(Elf *, Elf_Scn *);
1781347b2a037971c77ec6823ffa3fd07db4e8devboxsyncsize_t _elf_outsync(int, char *, size_t, uint_t);
1781347b2a037971c77ec6823ffa3fd07db4e8devboxsyncsize_t elf_rand(Elf *, size_t);
1781347b2a037971c77ec6823ffa3fd07db4e8devboxsyncsize_t _elf_rand(Elf *, size_t);
1781347b2a037971c77ec6823ffa3fd07db4e8devboxsyncElf_Data * elf_rawdata(Elf_Scn *, Elf_Data *);
1781347b2a037971c77ec6823ffa3fd07db4e8devboxsyncElf_Data * _elf_rawdata(Elf_Scn *, Elf_Data *);
1781347b2a037971c77ec6823ffa3fd07db4e8devboxsyncchar * elf_rawfile(Elf *, size_t *);
1781347b2a037971c77ec6823ffa3fd07db4e8devboxsyncchar * _elf_rawfile(Elf *, size_t *);
1781347b2a037971c77ec6823ffa3fd07db4e8devboxsyncchar * elf_strptr(Elf *, size_t, size_t);
1781347b2a037971c77ec6823ffa3fd07db4e8devboxsyncchar * _elf_strptr(Elf *, size_t, size_t);
b341a780162d809b187a8f35a10bba7642b69798vboxsyncoff_t elf_update(Elf *, Elf_Cmd);
8d1ef2acf41d1d8a0f69bfe0ac1f41638160399cvboxsyncoff_t _elf_update(Elf *, Elf_Cmd);
4429cc47d1e3ca88d6237e5ee7a876dc409cdc24vboxsyncuint_t elf_version(uint_t);
2646f8fc98fb2780f8b84875b314ceddd08cf2a3vboxsyncuint_t _elf_version(uint_t);
b341a780162d809b187a8f35a10bba7642b69798vboxsyncint nlist(const char *, struct nlist *);
377e7dedbfa893b91c37bbcca7bdc1d68a018ae8vboxsync
377e7dedbfa893b91c37bbcca7bdc1d68a018ae8vboxsync
df99b216f298b5a3c25877ff677b190ba0f6f131vboxsync/*
df99b216f298b5a3c25877ff677b190ba0f6f131vboxsync * Private Symbols
df99b216f298b5a3c25877ff677b190ba0f6f131vboxsync */
df99b216f298b5a3c25877ff677b190ba0f6f131vboxsyncElf64_Off _elf_getxoff(Elf_Data *);
cae5cca5168e18e168df5541b11f462b60062a7avboxsync