xref: /openbsd-src/include/link_elf.h (revision 47e938601bd5e1655e9581dbea9b3e88a85a836c)
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