blob: b872b6f6778ed435695dd402e61fec4d70c9fa1f [file] [log] [blame]
Juan Cespedes1cd999a2001-07-03 00:46:04 +02001#ifndef LTRACE_ELF_H
2#define LTRACE_ELF_H
3
Juan Cespedesd914a202004-11-10 00:15:33 +01004#include <gelf.h>
5#include <stdlib.h>
6
Ian Wienand2d45b1a2006-02-20 22:48:07 +01007struct ltelf {
8 int fd;
9 Elf *elf;
10 GElf_Ehdr ehdr;
11 Elf_Data *dynsym;
12 size_t dynsym_count;
13 const char *dynstr;
14 GElf_Addr plt_addr;
15 size_t plt_size;
16 Elf_Data *relplt;
17 size_t relplt_count;
18 Elf_Data *symtab;
19 const char *strtab;
20 size_t symtab_count;
21 Elf_Data *opd;
22 GElf_Addr *opd_addr;
23 size_t opd_size;
24 Elf32_Word *hash;
Petr Machata35fe5182006-07-18 12:58:12 +020025 int hash_type;
Paul Gilliam76c61f12006-06-14 06:55:21 +020026 int lte_flags;
Joe Damato87f4f582010-11-08 15:47:36 -080027 GElf_Addr dyn_addr;
28 size_t dyn_sz;
Joe Damato07581fb2010-11-08 15:47:37 -080029 GElf_Addr base_addr;
Eric Vaitl1228a912006-12-28 16:16:56 +010030#ifdef __mips__
Juan Cespedesa413e5b2007-09-04 17:34:53 +020031 size_t pltgot_addr;
32 size_t mips_local_gotno;
33 size_t mips_gotsym;
Eric Vaitl1228a912006-12-28 16:16:56 +010034#endif // __mips__
Petr Machatafe1c1712010-10-27 16:57:34 +020035 GElf_Addr plt_stub_vma;
Juan Cespedes1cd999a2001-07-03 00:46:04 +020036};
37
Paul Gilliam76c61f12006-06-14 06:55:21 +020038#define LTE_HASH_MALLOCED 1
39#define LTE_PLT_EXECUTABLE 2
40
41#define PLTS_ARE_EXECUTABLE(lte) ((lte->lte_flags & LTE_PLT_EXECUTABLE) != 0)
42
Juan Cespedes1cd999a2001-07-03 00:46:04 +020043extern int library_num;
Juan Cespedes8d1b92b2009-07-03 10:39:34 +020044extern char *library[MAX_LIBRARIES];
Juan Cespedes1cd999a2001-07-03 00:46:04 +020045
Juan Cespedesa8909f72009-04-28 20:02:41 +020046extern struct library_symbol *read_elf(Process *);
Juan Cespedesd914a202004-11-10 00:15:33 +010047
Ian Wienand2d45b1a2006-02-20 22:48:07 +010048extern GElf_Addr arch_plt_sym_val(struct ltelf *, size_t, GElf_Rela *);
Juan Cespedes96935a91997-08-09 23:45:39 +020049
Olaf Hering03c087b2006-09-25 02:31:27 +020050#ifndef SHT_GNU_HASH
51#define SHT_GNU_HASH 0x6ffffff6 /* GNU-style hash table. */
52#endif
Juan Cespedes1cd999a2001-07-03 00:46:04 +020053#endif