1*9d224046SJerome Forissier /* SPDX-License-Identifier: BSD-2-Clause */ 2*9d224046SJerome Forissier /* 3*9d224046SJerome Forissier * Copyright (C) 2012 The Android Open Source Project 4*9d224046SJerome Forissier */ 5*9d224046SJerome Forissier 6*9d224046SJerome Forissier #ifndef _LINK_H_ 7*9d224046SJerome Forissier #define _LINK_H_ 8*9d224046SJerome Forissier 9*9d224046SJerome Forissier #include <elf.h> 10*9d224046SJerome Forissier #include <stddef.h> 11*9d224046SJerome Forissier 12*9d224046SJerome Forissier struct dl_phdr_info { 13*9d224046SJerome Forissier Elf_Addr dlpi_addr; /* module relocation base */ 14*9d224046SJerome Forissier const char *dlpi_name; /* module name */ 15*9d224046SJerome Forissier const Elf_Phdr *dlpi_phdr; /* pointer to module's phdr */ 16*9d224046SJerome Forissier Elf_Half dlpi_phnum; /* number of entries in phdr */ 17*9d224046SJerome Forissier unsigned long long dlpi_adds; /* total # of loads */ 18*9d224046SJerome Forissier unsigned long long dlpi_subs; /* total # of unloads */ 19*9d224046SJerome Forissier size_t dlpi_tls_modid; 20*9d224046SJerome Forissier void *dlpi_tls_data; 21*9d224046SJerome Forissier }; 22*9d224046SJerome Forissier 23*9d224046SJerome Forissier int dl_iterate_phdr(int (*callback)(struct dl_phdr_info *info, size_t size, 24*9d224046SJerome Forissier void *data), 25*9d224046SJerome Forissier void *data); 26*9d224046SJerome Forissier 27*9d224046SJerome Forissier #endif /* _LINK_H_ */ 28