Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4973 right-hear 1
#ifndef __EFMT_H
2
#define __EFMT_H
3
 
4
#ifndef __PACKED__
5
#define __PACKED__	__attribute__((packed))
6
#endif
7
 
8
typedef struct
9
{
10
    unsigned long magic		__PACKED__;
11
    unsigned char bitness	__PACKED__;
12
    unsigned char endian	__PACKED__;
13
    unsigned char elf_ver_1	__PACKED__;
14
    unsigned char res[9]	__PACKED__;
15
    unsigned short file_type	__PACKED__;
16
    unsigned short machine	__PACKED__;
17
    unsigned long elf_ver_2	__PACKED__;
18
    unsigned long entry_pt	__PACKED__;
19
    unsigned long phtab_offset	__PACKED__;
20
    unsigned long shtab_offset	__PACKED__;
21
    unsigned long flags		__PACKED__;
22
    unsigned short file_hdr_size __PACKED__;
23
    unsigned short phtab_ent_size __PACKED__;
24
    unsigned short num_phtab_ents __PACKED__;
25
    unsigned short shtab_ent_size __PACKED__;
26
    unsigned short num_sects	__PACKED__;
27
    unsigned short shstrtab_index __PACKED__;
28
} elf_file_t;
29
 
30
typedef struct
31
{
32
    unsigned long sect_name	__PACKED__;
33
    unsigned long type		__PACKED__;
34
    unsigned long flags		__PACKED__;
35
    unsigned long virt_adr	__PACKED__;
36
    unsigned long offset	__PACKED__;
37
    unsigned long size		__PACKED__;
38
    unsigned long link		__PACKED__;
39
    unsigned long info		__PACKED__;
40
    unsigned long align		__PACKED__;
41
    unsigned long ent_size	__PACKED__;
42
} elf_sect_t;
43
 
44
typedef struct
45
{
46
    unsigned long adr		__PACKED__;
47
    unsigned char type		__PACKED__;
48
    unsigned long symtab_index:24 __PACKED__;
49
    unsigned long addend	__PACKED__;
50
} elf_reloc_t;
51
 
52
typedef struct
53
{
54
    unsigned long name		__PACKED__;
55
    unsigned long value		__PACKED__;
56
    unsigned long size		__PACKED__;
57
    unsigned type:4		__PACKED__;
58
    unsigned binding:4		__PACKED__;
59
    unsigned char zero		__PACKED__;
60
    unsigned short section	__PACKED__;
61
} elf_sym_t;
62
 
63
typedef struct
64
{
65
 unsigned char * file, * sects,*bss,*symtab;
66
 char * strtab;
67
 unsigned long bss_sect_num,entry;
68
} exe_file_t;
69
 
70
int get_elf_section_name(exe_file_t * f,unsigned short sect_num,char * namebuf);
71
int get_elf_section_addr(exe_file_t * f,unsigned short sect_num,unsigned long * adr);
72
int get_elf_symbol_addr(exe_file_t * f,unsigned long i,
73
    unsigned long * sym_val,unsigned short sect_num,
74
    int (* lookup_fn)(char * symname,unsigned long * val));
75
int do_elf_relocation(exe_file_t * f,elf_reloc_t * reloc,
76
 unsigned short sect_num,unsigned long symtab_sect_num,
77
 int (* sym_lookup_fn)(char * symname,unsigned long * val),int ignore_ext);
78
int get_elf_section_index(exe_file_t * f,char * sect_name,unsigned long * i);
79
int elf_load_from_mem(exe_file_t * f);
80
int relocate_elf_file(exe_file_t * f,
81
 int (* sym_lookup_fn)(char * symname,unsigned long * val),int ignore_ext);
82
int get_elf_symbol_value(exe_file_t * f,char * symname,unsigned long * symval);
83
 
84
 
85
#endif