17c478bd9Sstevel@tonic-gate/* 27c478bd9Sstevel@tonic-gate * CDDL HEADER START 37c478bd9Sstevel@tonic-gate * 47c478bd9Sstevel@tonic-gate * The contents of this file are subject to the terms of the 510a4fa49Srie * Common Development and Distribution License (the "License"). 610a4fa49Srie * You may not use this file except in compliance with the License. 77c478bd9Sstevel@tonic-gate * 87c478bd9Sstevel@tonic-gate * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 97c478bd9Sstevel@tonic-gate * or http://www.opensolaris.org/os/licensing. 107c478bd9Sstevel@tonic-gate * See the License for the specific language governing permissions 117c478bd9Sstevel@tonic-gate * and limitations under the License. 127c478bd9Sstevel@tonic-gate * 137c478bd9Sstevel@tonic-gate * When distributing Covered Code, include this CDDL HEADER in each 147c478bd9Sstevel@tonic-gate * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 157c478bd9Sstevel@tonic-gate * If applicable, add the following below this CDDL HEADER, with the 167c478bd9Sstevel@tonic-gate * fields enclosed by brackets "[]" replaced with your own identifying 177c478bd9Sstevel@tonic-gate * information: Portions Copyright [yyyy] [name of copyright owner] 187c478bd9Sstevel@tonic-gate * 197c478bd9Sstevel@tonic-gate * CDDL HEADER END 207c478bd9Sstevel@tonic-gate */ 217c478bd9Sstevel@tonic-gate 227c478bd9Sstevel@tonic-gate/* 232a93c375SAli Bahrami * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. 247c478bd9Sstevel@tonic-gate */ 257c478bd9Sstevel@tonic-gate 267257d1b4Sraf/* LINTLIBRARY */ 277257d1b4Sraf/* PROTOLIB1 */ 287257d1b4Sraf 297c478bd9Sstevel@tonic-gate/* 307c478bd9Sstevel@tonic-gate * Generic interface definition for usr/src/lib/libelf. 317c478bd9Sstevel@tonic-gate */ 327c478bd9Sstevel@tonic-gate 332a93c375SAli Bahrami#include <_libelf.h> 347c478bd9Sstevel@tonic-gate#include <nlist.h> 357c478bd9Sstevel@tonic-gate 367c478bd9Sstevel@tonic-gate 377c478bd9Sstevel@tonic-gate/* 387c478bd9Sstevel@tonic-gate * Elf32 Symbols 397c478bd9Sstevel@tonic-gate */ 407c478bd9Sstevel@tonic-gatesize_t elf32_fsize(Elf_Type, size_t, uint_t); 417c478bd9Sstevel@tonic-gateElf32_Ehdr * elf32_getehdr(Elf *); 427c478bd9Sstevel@tonic-gateElf32_Phdr * elf32_getphdr(Elf *); 437c478bd9Sstevel@tonic-gateElf32_Shdr * elf32_getshdr(Elf_Scn *); 447c478bd9Sstevel@tonic-gateElf32_Ehdr * elf32_newehdr(Elf *); 457c478bd9Sstevel@tonic-gateElf32_Phdr * elf32_newphdr(Elf *, size_t); 467c478bd9Sstevel@tonic-gateElf_Data * elf32_xlatetof(Elf_Data *, const Elf_Data *, uint_t); 477c478bd9Sstevel@tonic-gateElf_Data * elf32_xlatetom(Elf_Data *, const Elf_Data *, uint_t); 487c478bd9Sstevel@tonic-gate 497c478bd9Sstevel@tonic-gate 507c478bd9Sstevel@tonic-gate/* 517c478bd9Sstevel@tonic-gate * Elf64 Symbols 527c478bd9Sstevel@tonic-gate */ 537c478bd9Sstevel@tonic-gatesize_t elf64_fsize(Elf_Type, size_t, uint_t); 547c478bd9Sstevel@tonic-gateElf64_Ehdr * elf64_getehdr(Elf *); 557c478bd9Sstevel@tonic-gateElf64_Phdr * elf64_getphdr(Elf *); 567c478bd9Sstevel@tonic-gateElf64_Shdr * elf64_getshdr(Elf_Scn *); 577c478bd9Sstevel@tonic-gateElf64_Ehdr * elf64_newehdr(Elf *); 587c478bd9Sstevel@tonic-gateElf64_Phdr * elf64_newphdr(Elf *, size_t); 597c478bd9Sstevel@tonic-gateElf_Data * elf64_xlatetof(Elf_Data *, const Elf_Data *, uint_t); 607c478bd9Sstevel@tonic-gateElf_Data * elf64_xlatetom(Elf_Data *, const Elf_Data *, uint_t); 617c478bd9Sstevel@tonic-gate 627c478bd9Sstevel@tonic-gate 637c478bd9Sstevel@tonic-gate/* 647c478bd9Sstevel@tonic-gate * GElf Symbols 657c478bd9Sstevel@tonic-gate */ 667c478bd9Sstevel@tonic-gatesize_t gelf_fsize(Elf *, Elf_Type, size_t, uint_t); 677c478bd9Sstevel@tonic-gateint gelf_getclass(Elf *); 687c478bd9Sstevel@tonic-gateGElf_Ehdr * gelf_getehdr(Elf *, GElf_Ehdr *); 697c478bd9Sstevel@tonic-gateint gelf_update_ehdr(Elf *, GElf_Ehdr *); 707c478bd9Sstevel@tonic-gateulong_t gelf_newehdr(Elf *, int); 717c478bd9Sstevel@tonic-gateGElf_Phdr * gelf_getphdr(Elf *, int, GElf_Phdr *); 727c478bd9Sstevel@tonic-gateint gelf_update_phdr(Elf *, int, GElf_Phdr *); 737c478bd9Sstevel@tonic-gateulong_t gelf_newphdr(Elf *, size_t); 747c478bd9Sstevel@tonic-gateGElf_Shdr * gelf_getshdr(Elf_Scn *, GElf_Shdr *); 757c478bd9Sstevel@tonic-gateint gelf_update_shdr(Elf_Scn *, GElf_Shdr *); 767c478bd9Sstevel@tonic-gateElf_Data * gelf_xlatetof(Elf *, Elf_Data *, const Elf_Data *, uint_t); 777c478bd9Sstevel@tonic-gateElf_Data * gelf_xlatetom(Elf *, Elf_Data *, const Elf_Data *, uint_t); 787c478bd9Sstevel@tonic-gateGElf_Sym * gelf_getsym(Elf_Data *, int, GElf_Sym *); 797c478bd9Sstevel@tonic-gateint gelf_update_sym(Elf_Data *, int, GElf_Sym *); 807c478bd9Sstevel@tonic-gateGElf_Syminfo * gelf_getsyminfo(Elf_Data *, int, GElf_Syminfo *); 817c478bd9Sstevel@tonic-gateint gelf_update_syminfo(Elf_Data *, int, GElf_Syminfo *); 827c478bd9Sstevel@tonic-gateGElf_Sym * gelf_getsymshndx(Elf_Data *, Elf_Data *, int, GElf_Sym *, 837c478bd9Sstevel@tonic-gate Elf32_Word *); 847c478bd9Sstevel@tonic-gateint gelf_update_symshndx(Elf_Data *, Elf_Data *, int, GElf_Sym *, 857c478bd9Sstevel@tonic-gate Elf32_Word); 867c478bd9Sstevel@tonic-gateGElf_Move * gelf_getmove(Elf_Data *, int, GElf_Move *); 877c478bd9Sstevel@tonic-gateint gelf_update_move(Elf_Data *, int, GElf_Move *); 887c478bd9Sstevel@tonic-gateGElf_Dyn * gelf_getdyn(Elf_Data *, int, GElf_Dyn *); 897c478bd9Sstevel@tonic-gateint gelf_update_dyn(Elf_Data *, int, GElf_Dyn *); 907c478bd9Sstevel@tonic-gateGElf_Rela * gelf_getrela(Elf_Data *, int, GElf_Rela *); 917c478bd9Sstevel@tonic-gateint gelf_update_rela(Elf_Data *, int, GElf_Rela *); 927c478bd9Sstevel@tonic-gateGElf_Rel * gelf_getrel(Elf_Data *, int, GElf_Rel *); 937c478bd9Sstevel@tonic-gateint gelf_update_rel(Elf_Data *, int, GElf_Rel *); 947c478bd9Sstevel@tonic-gateGElf_Cap * gelf_getcap(Elf_Data *, int, GElf_Cap *); 957c478bd9Sstevel@tonic-gateint gelf_update_cap(Elf_Data *, int, GElf_Cap *); 967c478bd9Sstevel@tonic-gate 9710a4fa49SrieGElf_Xword _gelf_getdyndtflags_1(Elf *); 987c478bd9Sstevel@tonic-gate 997c478bd9Sstevel@tonic-gate/* 1007c478bd9Sstevel@tonic-gate * Class-Independent Elf Symbols 1017c478bd9Sstevel@tonic-gate */ 1027c478bd9Sstevel@tonic-gateElf * elf_begin(int, Elf_Cmd, Elf *); 1037c478bd9Sstevel@tonic-gateint elf_cntl(Elf *, Elf_Cmd); 1047c478bd9Sstevel@tonic-gateint elf_end(Elf *); 1057c478bd9Sstevel@tonic-gateconst char * elf_errmsg(int); 1067c478bd9Sstevel@tonic-gateint elf_errno(void); 1077c478bd9Sstevel@tonic-gatevoid elf_fill(int); 1087c478bd9Sstevel@tonic-gateuint_t elf_flagdata(Elf_Data *, Elf_Cmd, uint_t); 1097c478bd9Sstevel@tonic-gateuint_t elf_flagehdr(Elf *, Elf_Cmd, uint_t); 1107c478bd9Sstevel@tonic-gateuint_t elf_flagelf(Elf *, Elf_Cmd, uint_t); 1117c478bd9Sstevel@tonic-gateuint_t elf_flagphdr(Elf *, Elf_Cmd, uint_t); 1127c478bd9Sstevel@tonic-gateuint_t elf_flagscn(Elf_Scn *, Elf_Cmd, uint_t); 1137c478bd9Sstevel@tonic-gateuint_t elf_flagshdr(Elf_Scn *, Elf_Cmd, uint_t); 1147c478bd9Sstevel@tonic-gateElf_Arhdr * elf_getarhdr(Elf *); 1157c478bd9Sstevel@tonic-gateElf_Arsym * elf_getarsym(Elf *, size_t *); 1167c478bd9Sstevel@tonic-gateoff_t elf_getbase(Elf *); 1177c478bd9Sstevel@tonic-gateElf_Data * elf_getdata(Elf_Scn *, Elf_Data *); 1187c478bd9Sstevel@tonic-gatechar * elf_getident(Elf *, size_t *); 11930da1432Sahlint elf_getphnum(Elf *, size_t *); 1207c478bd9Sstevel@tonic-gateint elf_getshnum(Elf *, size_t *); 1217c478bd9Sstevel@tonic-gateint elf_getshstrndx(Elf *, size_t *); 1227c478bd9Sstevel@tonic-gateElf_Scn * elf_getscn(Elf *elf, size_t); 1237c478bd9Sstevel@tonic-gateulong_t elf_hash(const char *); 1247c478bd9Sstevel@tonic-gateElf_Kind elf_kind(Elf *); 1257c478bd9Sstevel@tonic-gateElf * elf_memory(char *, size_t); 1267c478bd9Sstevel@tonic-gatesize_t elf_ndxscn(Elf_Scn *); 1277c478bd9Sstevel@tonic-gateElf_Data * elf_newdata(Elf_Scn *); 1287c478bd9Sstevel@tonic-gateElf_Scn * elf_newscn(Elf *); 1297c478bd9Sstevel@tonic-gateElf_Cmd elf_next(Elf *); 1307c478bd9Sstevel@tonic-gateElf_Scn * elf_nextscn(Elf *, Elf_Scn *); 1317c478bd9Sstevel@tonic-gatesize_t _elf_outsync(int, char *, size_t, uint_t); 1327c478bd9Sstevel@tonic-gatesize_t elf_rand(Elf *, size_t); 1337c478bd9Sstevel@tonic-gateElf_Data * elf_rawdata(Elf_Scn *, Elf_Data *); 1347c478bd9Sstevel@tonic-gatechar * elf_rawfile(Elf *, size_t *); 1357c478bd9Sstevel@tonic-gatechar * elf_strptr(Elf *, size_t, size_t); 1367c478bd9Sstevel@tonic-gateoff_t elf_update(Elf *, Elf_Cmd); 1377c478bd9Sstevel@tonic-gateuint_t elf_version(uint_t); 1387c478bd9Sstevel@tonic-gateint nlist(const char *, struct nlist *); 1397c478bd9Sstevel@tonic-gate 1407c478bd9Sstevel@tonic-gate 1417c478bd9Sstevel@tonic-gate/* 1427c478bd9Sstevel@tonic-gate * Private Symbols 1437c478bd9Sstevel@tonic-gate */ 1442a93c375SAli Bahramiextern void _elf_execfill(_elf_execfill_func_t *); 1452a93c375SAli Bahramiextern off_t _elf_getarhdrbase(Elf *); 146*ba7866cdSAli Bahramiextern size_t _elf_getarsymwordsize(Elf *); 1472a93c375SAli Bahramiextern size_t _elf_getnextoff(Elf *); 1487c478bd9Sstevel@tonic-gateElf64_Off _elf_getxoff(Elf_Data *); 149ba2be530Sab196087int _elf_swap_wrimage(Elf *); 150f3324781Sab196087uint_t _elf_sys_encoding(void); 1512a93c375SAli Bahrami 1522a93c375SAli Bahramiextern GElf_Xword _gelf_getdyndtflags_1(Elf *); 153