1*47e93860Sguenther /* $OpenBSD: link_elf.h,v 1.8 2022/01/28 04:59:15 guenther Exp $ */ 272bfe451Sart 372bfe451Sart /* 4f8949d5dSdrahn * Public domain. 572bfe451Sart */ 672bfe451Sart 74db8670aSpvalchev #ifndef _LINK_ELF_H 8f8949d5dSdrahn #define _LINK_ELF_H 94db8670aSpvalchev 1072bfe451Sart #include <elf_abi.h> 1172bfe451Sart 1272bfe451Sart #ifndef DT_PROCNUM 1372bfe451Sart #define DT_PROCNUM 0 1472bfe451Sart #endif 1572bfe451Sart 16f8949d5dSdrahn /* 17f8949d5dSdrahn * struct link_map is a part of the protocol between the debugger and 18*47e93860Sguenther * ld.so. ld.so may have additional fields in its version of this 194df96521Sjmc * structure but those are ld.so private fields. 20f8949d5dSdrahn */ 21f8949d5dSdrahn struct link_map { 22f8949d5dSdrahn caddr_t l_addr; /* Base address of library */ 23f8949d5dSdrahn const char *l_name; /* Absolute path to library */ 24f8949d5dSdrahn void *l_ld; /* pointer to _DYNAMIC */ 25f8949d5dSdrahn struct link_map *l_next; 26f8949d5dSdrahn struct link_map *l_prev; 2772bfe451Sart }; 289b86939fSkettenis 299b86939fSkettenis struct dl_phdr_info { 309b86939fSkettenis Elf_Addr dlpi_addr; 319b86939fSkettenis const char *dlpi_name; 329b86939fSkettenis const Elf_Phdr *dlpi_phdr; 339b86939fSkettenis Elf_Half dlpi_phnum; 349b86939fSkettenis }; 359b86939fSkettenis 369b86939fSkettenis __BEGIN_DECLS 379b86939fSkettenis int dl_iterate_phdr (int (*)(struct dl_phdr_info *, size_t, void *), 389b86939fSkettenis void *); 39e2d18ed9Skettenis void *dl_unwind_find_exidx(const void *, int *); 409b86939fSkettenis __END_DECLS 419b86939fSkettenis 424db8670aSpvalchev #endif /* !_LINK_ELF_H */ 43