1139825Simp/*- 21156Sjkh * Copyright (c) 1993 Paul Kranenburg 31156Sjkh * All rights reserved. 41156Sjkh * 51156Sjkh * Redistribution and use in source and binary forms, with or without 61156Sjkh * modification, are permitted provided that the following conditions 71156Sjkh * are met: 81156Sjkh * 1. Redistributions of source code must retain the above copyright 91156Sjkh * notice, this list of conditions and the following disclaimer. 101156Sjkh * 2. Redistributions in binary form must reproduce the above copyright 111156Sjkh * notice, this list of conditions and the following disclaimer in the 121156Sjkh * documentation and/or other materials provided with the distribution. 131156Sjkh * 3. All advertising materials mentioning features or use of this software 141156Sjkh * must display the following acknowledgement: 151156Sjkh * This product includes software developed by Paul Kranenburg. 161156Sjkh * 4. The name of the author may not be used to endorse or promote products 1713771Smpp * derived from this software without specific prior written permission 181156Sjkh * 191156Sjkh * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 201156Sjkh * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 211156Sjkh * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 221156Sjkh * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 231156Sjkh * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 241156Sjkh * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 251156Sjkh * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 261156Sjkh * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 271156Sjkh * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 281156Sjkh * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 291156Sjkh * 3050473Speter * $FreeBSD$ 311156Sjkh */ 321156Sjkh 331156Sjkh/* 34697Spaul * RRS section definitions. 35697Spaul * 361156Sjkh * The layout of some data structures defined in this header file is 371156Sjkh * such that we can provide compatibility with the SunOS 4.x shared 381156Sjkh * library scheme. 39697Spaul */ 40697Spaul 41102284Speter#ifndef _SYS_LINK_ELF_H_ 42186668Sobrien#define _SYS_LINK_ELF_H_ 43697Spaul 44168313Skan#include <sys/elf.h> 4536311Sdfr 46110804Skan/* 47110804Skan * Flags that describe the origin of the entries in Dl_serinfo. 48110804Skan * SunOS has these in <sys/link.h>, we follow the suit. 49110804Skan */ 50110804Skan#define LA_SER_ORIG 0x01 /* original (needed) name */ 51110804Skan#define LA_SER_LIBPATH 0x02 /* LD_LIBRARY_PATH entry prepended */ 52110804Skan#define LA_SER_RUNPATH 0x04 /* runpath entry prepended */ 53110804Skan#define LA_SER_CONFIG 0x08 /* configuration entry prepended */ 54110804Skan#define LA_SER_DEFAULT 0x40 /* default path prepended */ 55110804Skan#define LA_SER_SECURE 0x80 /* default (secure) path prepended */ 56110804Skan 57110804Skantypedef struct link_map { 5836311Sdfr caddr_t l_addr; /* Base Address of library */ 5936311Sdfr#ifdef __mips__ 6036311Sdfr caddr_t l_offs; /* Load Offset of library */ 6136311Sdfr#endif 6236311Sdfr const char *l_name; /* Absolute Path to Library */ 6336311Sdfr const void *l_ld; /* Pointer to .dynamic in memory */ 6436311Sdfr struct link_map *l_next, *l_prev; /* linked list of of mapped libs */ 65110804Skan} Link_map; 6636311Sdfr 6736311Sdfrstruct r_debug { 6836311Sdfr int r_version; /* not used */ 6936311Sdfr struct link_map *r_map; /* list of loaded images */ 7066043Sjdp void (*r_brk)(struct r_debug *, struct link_map *); 7166043Sjdp /* pointer to break point */ 7236311Sdfr enum { 73186668Sobrien RT_CONSISTENT, /* things are stable */ 74186668Sobrien RT_ADD, /* adding a shared library */ 75186668Sobrien RT_DELETE /* removing a shared library */ 7636311Sdfr } r_state; 7736311Sdfr}; 7836311Sdfr 79168313Skanstruct dl_phdr_info 80168313Skan{ 81168313Skan Elf_Addr dlpi_addr; /* module relocation base */ 82168313Skan const char *dlpi_name; /* module name */ 83168313Skan const Elf_Phdr *dlpi_phdr; /* pointer to module's phdr */ 84168313Skan Elf_Half dlpi_phnum; /* number of entries in phdr */ 85168313Skan unsigned long long int dlpi_adds; /* total # of loads */ 86168313Skan unsigned long long int dlpi_subs; /* total # of unloads */ 87168313Skan size_t dlpi_tls_modid; 88168313Skan void *dlpi_tls_data; 89168313Skan}; 90168313Skan 91168313Skan__BEGIN_DECLS 92168313Skan 93186668Sobrientypedef int (*__dl_iterate_hdr_callback)(struct dl_phdr_info *, size_t, void *); 94168313Skanextern int dl_iterate_phdr(__dl_iterate_hdr_callback, void *); 95211705Skibint _rtld_addr_phdr(const void *, struct dl_phdr_info *); 96217153Skibint _rtld_get_stack_prot(void); 97168313Skan 98168313Skan__END_DECLS 99168313Skan 100102284Speter#endif /* _SYS_LINK_ELF_H_ */ 101