Lines Matching refs:module
17 static inline int rmodule_is_loaded(const struct rmodule *module) in rmodule_is_loaded() argument
19 return module->location != NULL; in rmodule_is_loaded()
23 static inline void *rmodule_load_addr(const struct rmodule *module, in rmodule_load_addr() argument
26 char *loc = module->location; in rmodule_load_addr()
27 return &loc[blob_addr - module->header->module_link_start_address]; in rmodule_load_addr()
31 int rmodule_parse(void *ptr, struct rmodule *module) in rmodule_parse() argument
49 module->location = NULL; in rmodule_parse()
52 module->header = rhdr; in rmodule_parse()
55 module->payload = &base[rhdr->payload_begin_offset]; in rmodule_parse()
56 module->payload_size = rhdr->payload_end_offset - in rmodule_parse()
58 module->relocations = &base[rhdr->relocations_begin_offset]; in rmodule_parse()
63 int rmodule_memory_size(const struct rmodule *module) in rmodule_memory_size() argument
65 return module->header->module_program_size; in rmodule_memory_size()
68 void *rmodule_parameters(const struct rmodule *module) in rmodule_parameters() argument
70 if (!rmodule_is_loaded(module)) in rmodule_parameters()
74 if (module->header->parameters_begin == module->header->parameters_end) in rmodule_parameters()
77 return rmodule_load_addr(module, module->header->parameters_begin); in rmodule_parameters()
80 int rmodule_entry_offset(const struct rmodule *module) in rmodule_entry_offset() argument
82 return module->header->module_entry_point - in rmodule_entry_offset()
83 module->header->module_link_start_address; in rmodule_entry_offset()
86 void *rmodule_entry(const struct rmodule *module) in rmodule_entry() argument
88 if (!rmodule_is_loaded(module)) in rmodule_entry()
91 return rmodule_load_addr(module, module->header->module_entry_point); in rmodule_entry()
94 static void rmodule_clear_bss(struct rmodule *module) in rmodule_clear_bss() argument
99 begin = rmodule_load_addr(module, module->header->bss_begin); in rmodule_clear_bss()
100 size = module->header->bss_end - module->header->bss_begin; in rmodule_clear_bss()
104 static inline size_t rmodule_number_relocations(const struct rmodule *module) in rmodule_number_relocations() argument
108 r = module->header->relocations_end_offset; in rmodule_number_relocations()
109 r -= module->header->relocations_begin_offset; in rmodule_number_relocations()
114 static void rmodule_copy_payload(const struct rmodule *module) in rmodule_copy_payload() argument
118 module->location, rmodule_entry(module), in rmodule_copy_payload()
119 module->payload_size, rmodule_memory_size(module)); in rmodule_copy_payload()
123 if (module->location == module->payload) in rmodule_copy_payload()
126 memcpy(module->location, module->payload, module->payload_size); in rmodule_copy_payload()
129 static int rmodule_relocate(const struct rmodule *module) in rmodule_relocate() argument
137 adjustment = (uintptr_t)rmodule_load_addr(module, 0); in rmodule_relocate()
139 reloc = module->relocations; in rmodule_relocate()
140 num_relocations = rmodule_number_relocations(module); in rmodule_relocate()
149 adjust_loc = rmodule_load_addr(module, *reloc); in rmodule_relocate()
162 int rmodule_load_alignment(const struct rmodule *module) in rmodule_load_alignment() argument
171 int rmodule_load(void *base, struct rmodule *module) in rmodule_load() argument
182 module->location = base; in rmodule_load()
183 rmodule_copy_payload(module); in rmodule_load()
184 if (rmodule_relocate(module)) in rmodule_load()
186 rmodule_clear_bss(module); in rmodule_load()
188 prog_segment_loaded((uintptr_t)module->location, in rmodule_load()
189 rmodule_memory_size(module), SEG_FINAL); in rmodule_load()