decon_reg: silence literal conversion warning
[GitHub/exynos8895/android_kernel_samsung_universal8895.git] / init / ld.h
1 /*
2 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17 *
18 */
19
20
21 #ifndef __LD_H__
22 #define __LD_H__
23
24
25 #define __TARGET_64__
26
27 #include "elf.h"
28
29 typedef int (*ld_init_t)(void);
30 typedef int (*ld_fini_t)(void);
31
32 #ifdef __TARGET_64__
33 typedef int (*ld_resolve_t)(void *binary, _Elf_Sym *sym, _Elf_Sxword *value);
34 #else //__TARGET_32__
35 typedef int (*ld_resolve_t)(void *binary, _Elf_Sym *sym, _Elf_Sword *value);
36 #endif //__TARGET_64__ | __TARGET_32__
37
38 typedef int (*ld_translate_t)(void *binary, void *in, void **out);
39
40 int ld_Elf_Ehdr_to_Elf_Shdr(_Elf_Ehdr *ehdr, _Elf_Shdr **shdr, size_t *size);
41
42 int ld_Elf_Ehdr_to_Elf_Phdr(_Elf_Ehdr *ehdr, _Elf_Phdr **phdr, size_t *size);
43
44 int ld_binary_to_Elf_Ehdr(void *binary, _Elf_Ehdr **ehdr);
45
46 int ld_get_entry(void *binary, void **entry);
47
48 int ld_get_name(void *binary, char **name);
49
50 int ld_get_version(void *binary, char **version);
51
52 int ld_get_string(char *strtab, int index, char **string);
53
54 int ld_get_symbol(_Elf_Sym *symtab, int index, _Elf_Sym **symbol);
55
56 int ld_get_base(void *binary, void **address);
57
58 int ld_get_size(void *binary, size_t *size);
59
60 int ld_get_sect(void *binary, char *name, void **section, size_t *size);
61
62 #ifdef __TARGET_64__
63 int ld_get_dynamic_relatab(void *binary, _Elf_Rela **rela, size_t *size);
64 #else //__TARGET_32__
65 int ld_get_dynamic_reltab(void *binary, _Elf_Rel **rel, size_t *size);
66 #endif //__TARGET_64__ | __TARGET_32__
67
68 int ld_get_dynamic_symtab(void *binary, _Elf_Sym **symtab, size_t *size);
69
70 int ld_get_dynamic_strtab(void *binary, char **strtab, size_t *size);
71
72 #ifdef __TARGET_64__
73 int ld_fixup_dynamic_relatab(void *binary, ld_resolve_t resolve, ld_translate_t translate);
74 #else //__TARGET_32__
75 int ld_fixup_dynamic_reltab(void *binary, ld_resolve_t resolve, ld_translate_t translate);
76 #endif //__TARGET_64__ | __TARGET_32__
77
78 int ld_fixup_dynamic_plttab(void *binary, ld_resolve_t resolve, ld_translate_t translate);
79
80 #endif //__LD_H__