VSF Documented
vsf_elfloader.h
Go to the documentation of this file.
1/*****************************************************************************
2 * Copyright(C)2009-2022 by VSF Team *
3 * *
4 * Licensed under the Apache License, Version 2.0 (the "License"); *
5 * you may not use this file except in compliance with the License. *
6 * You may obtain a copy of the License at *
7 * *
8 * http://www.apache.org/licenses/LICENSE-2.0 *
9 * *
10 * Unless required by applicable law or agreed to in writing, software *
11 * distributed under the License is distributed on an "AS IS" BASIS, *
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
13 * See the License for the specific language governing permissions and *
14 * limitations under the License. *
15 * *
16 ****************************************************************************/
17
29#ifndef __VSF_ELFLOADER_H__
30#define __VSF_ELFLOADER_H__
31
32/*============================ INCLUDES ======================================*/
33
35
36#if VSF_USE_LOADER == ENABLED && VSF_LOADER_USE_ELF == ENABLED
37
38#include <stdint.h>
39
40#if defined(__VSF_ELFLOADER_CLASS_IMPLEMENT)
41# define __VSF_CLASS_IMPLEMENT__
42#elif defined(__VSF_ELFLOADER_CLASS_INHERIT__)
43# define __VSF_CLASS_INHERIT__
44#endif
45
46#include "utilities/ooc_class.h"
47
48#if defined(__VSF_ELFLOADER_CLASS_INHERIT__) || defined(__VSF_ELFLOADER_CLASS_IMPLEMENT)
49# include "./elf.h"
50#endif
51
52#ifdef __cplusplus
53extern "C" {
54#endif
55
56/*============================ MACROS ========================================*/
57/*============================ MACROFIED FUNCTIONS ===========================*/
58/*============================ TYPES =========================================*/
59
61 public_member(
62 implement(vsf_loader_t)
63 )
64
65 protected_member(
66 void *arch_data;
67 )
68
69 private_member(
70 void *ram_base;
71
72 void *initarr;
73 void *finiarr;
74 uint32_t initarr_sz;
75 uint32_t finiarr_sz;
76
77 uintptr_t ram_base_vaddr;
78 uintptr_t ram_base_size;
79 bool is_xip;
80 bool is_got;
81 )
82};
83
85 VSF_ELFLOADER_SYM_NONE = 0, // STT_NOTYPE
86 VSF_ELFLOADER_SYM_OBJECT = 1, // STT_OBJECT
87 VSF_ELFLOADER_SYM_FUNC = 2, // STT_FUNC
88 VSF_ELFLOADER_SYM_SECTION = 3, // STT_SECTION
89 VSF_ELFLOADER_SYM_FILE = 4, // STT_FILE
91
92enum {
96};
97
98/*============================ GLOBAL VARIABLES ==============================*/
99
100extern const struct vsf_loader_op_t vsf_elfloader_op;
101
102/*============================ PROTOTYPES ====================================*/
103
104extern int vsf_elfloader_load(vsf_elfloader_t *elfloader, vsf_loader_target_t *target);
105extern void vsf_elfloader_cleanup(vsf_elfloader_t *elfloader);
107extern void vsf_elfloader_call_fini_array(vsf_elfloader_t *elfloader);
108extern void * vsf_elfloader_remap(vsf_elfloader_t *elfloader, void *vaddr);
109
110// can be called before vsf_elfloader_load
111#if defined(__VSF_ELFLOADER_CLASS_INHERIT__) || defined(__VSF_ELFLOADER_CLASS_IMPLEMENT)
112extern int vsf_elfloader_foreach_program_header(vsf_elfloader_t *elfloader, vsf_loader_target_t *target, void *param,
113 int (*callback)(vsf_elfloader_t *, vsf_loader_target_t *, Elf_Phdr *header, int index, void *param));
114extern int vsf_elfloader_foreach_section(vsf_elfloader_t *elfloader, vsf_loader_target_t *target, void *param,
115 int (*callback)(vsf_elfloader_t *, vsf_loader_target_t *, Elf_Shdr *header, char *name, int index, void *param));
116// vsf_elfloader_get_section returns size of the section if found, returns 0 if not found
118 const char *name, Elf_Shdr *header);
119#endif
120
121// CAN NOT be called before vsf_elfloader_load
123 const char *symbol_name, vsf_elfloader_sym_type_t symbol_type);
124
125#ifdef __cplusplus
126}
127#endif
128
129#undef __VSF_ELFLOADER_CLASS_IMPLEMENT
130#undef __VSF_ELFLOADER_CLASS_INHERIT__
131
// vsf_elfloader
133
134#endif // VSF_USE_ELFLOADER
135#endif // __VSF_ELFLOADER_H__
Definition vsf_elfloader.h:60
Definition vsf_loader.h:176
#define Elf_Phdr
Definition elf.h:359
#define Elf_Shdr
Definition elf.h:355
#define vsf_class(__name)
Definition ooc_class.h:48
uint32_t uintptr_t
Definition stdint.h:38
unsigned uint32_t
Definition stdint.h:9
Definition vsf_loader.h:167
Definition vsf_loader.h:132
int vsf_elfloader_foreach_program_header(vsf_elfloader_t *elfloader, vsf_loader_target_t *target, void *param, int(*callback)(vsf_elfloader_t *, vsf_loader_target_t *, Elf_Phdr *pheader, int index, void *param))
Definition vsf_elfloader.c:222
int vsf_elfloader_foreach_section(vsf_elfloader_t *elfloader, vsf_loader_target_t *target, void *param, int(*callback)(vsf_elfloader_t *, vsf_loader_target_t *, Elf_Shdr *header, char *name, int index, void *param))
Definition vsf_elfloader.c:181
uint32_t vsf_elfloader_get_section(vsf_elfloader_t *elfloader, vsf_loader_target_t *target, const char *name, Elf_Shdr *header)
Definition vsf_elfloader.c:657
void * vsf_elfloader_remap(vsf_elfloader_t *elfloader, void *vaddr)
Definition vsf_elfloader.c:279
void vsf_elfloader_call_fini_array(vsf_elfloader_t *elfloader)
Definition vsf_elfloader.c:263
vsf_elfloader_sym_type_t
Definition vsf_elfloader.h:84
@ VSF_ELFLOADER_SYM_NONE
Definition vsf_elfloader.h:85
@ VSF_ELFLOADER_SYM_OBJECT
Definition vsf_elfloader.h:86
@ VSF_ELFLOADER_SYM_FILE
Definition vsf_elfloader.h:89
@ VSF_ELFLOADER_SYM_FUNC
Definition vsf_elfloader.h:87
@ VSF_ELFLOADER_SYM_SECTION
Definition vsf_elfloader.h:88
int vsf_elfloader_call_init_array(vsf_elfloader_t *elfloader)
Definition vsf_elfloader.c:250
int vsf_elfloader_load(vsf_elfloader_t *elfloader, vsf_loader_target_t *target)
Definition vsf_elfloader.c:458
void vsf_elfloader_cleanup(vsf_elfloader_t *elfloader)
Definition vsf_elfloader.c:150
void * vsf_elfloader_get_symbol(vsf_elfloader_t *elfloader, const char *symbol_name, vsf_elfloader_sym_type_t symbol_type)
@ VSF_ELFLOADER_CB_GOON
Definition vsf_elfloader.h:94
@ VSF_ELFLOADER_CB_DONE
Definition vsf_elfloader.h:95
@ VSF_ELFLOADER_CB_FAIL
Definition vsf_elfloader.h:93
const struct vsf_loader_op_t vsf_elfloader_op
Definition vsf_elfloader.c:97