blob: 657e9a04bd9d72ad75cc2764c3a935b7c4e26158 [file] [log] [blame]
Doug Horn1427b6a2018-12-11 13:19:16 -08001#pragma once
2
3#ifdef __cplusplus
4extern "C" {
5#endif
6
7#include <elf.h>
8#define __NEED_size_t
9#define __NEED_uint32_t
10#include <bits/alltypes.h>
11
12#define ElfW(type) Elf64_##type
13
14/* this is the same everywhere except alpha and s390 */
15typedef uint32_t Elf_Symndx;
16
17struct dl_phdr_info {
18 ElfW(Addr) dlpi_addr;
19 const char* dlpi_name;
20 const ElfW(Phdr) * dlpi_phdr;
21 ElfW(Half) dlpi_phnum;
22 unsigned long long int dlpi_adds;
23 unsigned long long int dlpi_subs;
24 size_t dlpi_tls_modid;
25 void* dlpi_tls_data;
26};
27
28struct link_map {
29 ElfW(Addr) l_addr;
30 char* l_name;
31 ElfW(Dyn) * l_ld;
32 struct link_map *l_next, *l_prev;
33};
34
35struct r_debug {
36 int r_version;
37 struct link_map* r_map;
38 ElfW(Addr) r_brk;
39 enum { RT_CONSISTENT,
40 RT_ADD,
41 RT_DELETE } r_state;
42 ElfW(Addr) r_ldbase;
43};
44
45int dl_iterate_phdr(int (*)(struct dl_phdr_info*, size_t, void*), void*);
46
47#ifdef __cplusplus
48}
49#endif