2 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
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.
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.
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.
29 typedef int (*ld_init_t
)(void);
30 typedef int (*ld_fini_t
)(void);
33 typedef int (*ld_resolve_t
)(void *binary
, _Elf_Sym
*sym
, _Elf_Sxword
*value
);
35 typedef int (*ld_resolve_t
)(void *binary
, _Elf_Sym
*sym
, _Elf_Sword
*value
);
36 #endif //__TARGET_64__ | __TARGET_32__
38 typedef int (*ld_translate_t
)(void *binary
, void *in
, void **out
);
40 int ld_Elf_Ehdr_to_Elf_Shdr(_Elf_Ehdr
*ehdr
, _Elf_Shdr
**shdr
, size_t *size
);
42 int ld_Elf_Ehdr_to_Elf_Phdr(_Elf_Ehdr
*ehdr
, _Elf_Phdr
**phdr
, size_t *size
);
44 int ld_binary_to_Elf_Ehdr(void *binary
, _Elf_Ehdr
**ehdr
);
46 int ld_get_entry(void *binary
, void **entry
);
48 int ld_get_name(void *binary
, char **name
);
50 int ld_get_version(void *binary
, char **version
);
52 int ld_get_string(char *strtab
, int index
, char **string
);
54 int ld_get_symbol(_Elf_Sym
*symtab
, int index
, _Elf_Sym
**symbol
);
56 int ld_get_base(void *binary
, void **address
);
58 int ld_get_size(void *binary
, size_t *size
);
60 int ld_get_sect(void *binary
, char *name
, void **section
, size_t *size
);
63 int ld_get_dynamic_relatab(void *binary
, _Elf_Rela
**rela
, size_t *size
);
65 int ld_get_dynamic_reltab(void *binary
, _Elf_Rel
**rel
, size_t *size
);
66 #endif //__TARGET_64__ | __TARGET_32__
68 int ld_get_dynamic_symtab(void *binary
, _Elf_Sym
**symtab
, size_t *size
);
70 int ld_get_dynamic_strtab(void *binary
, char **strtab
, size_t *size
);
73 int ld_fixup_dynamic_relatab(void *binary
, ld_resolve_t resolve
, ld_translate_t translate
);
75 int ld_fixup_dynamic_reltab(void *binary
, ld_resolve_t resolve
, ld_translate_t translate
);
76 #endif //__TARGET_64__ | __TARGET_32__
78 int ld_fixup_dynamic_plttab(void *binary
, ld_resolve_t resolve
, ld_translate_t translate
);