Lines Matching full:binary
159 static bool read_private_lds_symbols(struct ac_rtld_binary *binary, unsigned part_idx, in read_private_lds_symbols() argument
177 struct ac_rtld_part *part = &binary->parts[part_idx]; in read_private_lds_symbols()
210 const struct ac_rtld_symbol *shared = find_symbol(&binary->lds_symbols, s.name, part_idx); in read_private_lds_symbols()
217 util_dynarray_append(&binary->lds_symbols, struct ac_rtld_symbol, s); in read_private_lds_symbols()
227 * Open a binary consisting of one or more shader parts.
229 * \param binary the uninitialized struct
230 * \param i binary opening parameters
232 bool ac_rtld_open(struct ac_rtld_binary *binary, struct ac_rtld_open_info i) in ac_rtld_open() argument
240 memset(binary, 0, sizeof(*binary)); in ac_rtld_open()
241 memcpy(&binary->options, &i.options, sizeof(binary->options)); in ac_rtld_open()
242 binary->wave_size = i.wave_size; in ac_rtld_open()
243 binary->gfx_level = i.info->gfx_level; in ac_rtld_open()
244 binary->num_parts = i.num_parts; in ac_rtld_open()
245 binary->parts = calloc(sizeof(*binary->parts), i.num_parts); in ac_rtld_open()
246 if (!binary->parts) in ac_rtld_open()
271 if (!util_dynarray_resize(&binary->lds_symbols, struct ac_rtld_symbol, in ac_rtld_open()
275 memcpy(binary->lds_symbols.data, i.shared_lds_symbols, binary->lds_symbols.size); in ac_rtld_open()
278 util_dynarray_foreach (&binary->lds_symbols, struct ac_rtld_symbol, symbol) in ac_rtld_open()
284 if (!layout_symbols(binary->lds_symbols.data, i.num_shared_lds_symbols, &shared_lds_size)) in ac_rtld_open()
292 binary->lds_size = shared_lds_size; in ac_rtld_open()
298 if (binary->options.halt_at_entry) in ac_rtld_open()
302 struct ac_rtld_part *part = &binary->parts[part_idx]; in ac_rtld_open()
304 util_dynarray_num_elements(&binary->lds_symbols, struct ac_rtld_symbol); in ac_rtld_open()
360 if (!read_private_lds_symbols(binary, part_idx, section, &lds_end_align)) in ac_rtld_open()
366 if (!layout_symbols(util_dynarray_element(&binary->lds_symbols, struct ac_rtld_symbol, in ac_rtld_open()
368 util_dynarray_num_elements(&binary->lds_symbols, struct ac_rtld_symbol) - in ac_rtld_open()
372 binary->lds_size = MAX2(binary->lds_size, part_lds_size); in ac_rtld_open()
375 binary->rx_end_markers = pasted_text_size; in ac_rtld_open()
383 binary->lds_size = align(binary->lds_size, lds_end_align); in ac_rtld_open()
386 util_dynarray_grow(&binary->lds_symbols, struct ac_rtld_symbol, 1); in ac_rtld_open()
390 lds_end->offset = binary->lds_size; in ac_rtld_open()
394 if (binary->lds_size > max_lds_size) { in ac_rtld_open()
396 (unsigned)binary->lds_size, max_lds_size); in ac_rtld_open()
401 binary->rx_size = pasted_text_size; in ac_rtld_open()
402 binary->rx_size = align(binary->rx_size, rx_align); in ac_rtld_open()
405 struct ac_rtld_part *part = &binary->parts[part_idx]; in ac_rtld_open()
412 s->offset += binary->rx_size; in ac_rtld_open()
416 binary->rx_size += rx_size; in ac_rtld_open()
417 binary->exec_size = exec_size; in ac_rtld_open()
425 ac_rtld_close(binary); in ac_rtld_open()
429 void ac_rtld_close(struct ac_rtld_binary *binary) in ac_rtld_close() argument
431 for (unsigned i = 0; i < binary->num_parts; ++i) { in ac_rtld_close()
432 struct ac_rtld_part *part = &binary->parts[i]; in ac_rtld_close()
437 util_dynarray_fini(&binary->lds_symbols); in ac_rtld_close()
438 free(binary->parts); in ac_rtld_close()
439 binary->parts = NULL; in ac_rtld_close()
440 binary->num_parts = 0; in ac_rtld_close()
464 bool ac_rtld_get_section_by_name(struct ac_rtld_binary *binary, const char *name, const char **data, in ac_rtld_get_section_by_name() argument
467 assert(binary->num_parts == 1); in ac_rtld_get_section_by_name()
468 return get_section_by_name(&binary->parts[0], name, data, nbytes); in ac_rtld_get_section_by_name()
471 bool ac_rtld_read_config(const struct radeon_info *info, struct ac_rtld_binary *binary, in ac_rtld_read_config() argument
474 for (unsigned i = 0; i < binary->num_parts; ++i) { in ac_rtld_read_config()
475 struct ac_rtld_part *part = &binary->parts[i]; in ac_rtld_read_config()
484 ac_parse_shader_binary_config(config_data, config_nbytes, binary->wave_size, info, &c); in ac_rtld_read_config()
521 const struct ac_rtld_symbol *lds_sym = find_symbol(&u->binary->lds_symbols, name, part_idx); in resolve_symbol()
530 if (u->get_external_symbol(u->binary->gfx_level, u->cb_data, name, value)) in resolve_symbol()
537 struct ac_rtld_part *part = &u->binary->parts[part_idx]; in resolve_symbol()
573 struct ac_rtld_part *part = &u->binary->parts[part_idx]; in apply_relocs()
688 * Upload the binary or binaries to the provided GPU buffers, including
709 if (u->binary->options.halt_at_entry) { in ac_rtld_upload()
715 for (unsigned i = 0; i < u->binary->num_parts; ++i) { in ac_rtld_upload()
716 struct ac_rtld_part *part = &u->binary->parts[i]; in ac_rtld_upload()
736 if (u->binary->rx_end_markers) { in ac_rtld_upload()
737 uint32_t *dst = (uint32_t *)(u->rx_ptr + u->binary->rx_end_markers); in ac_rtld_upload()
745 for (unsigned i = 0; i < u->binary->num_parts; ++i) { in ac_rtld_upload()
746 struct ac_rtld_part *part = &u->binary->parts[i]; in ac_rtld_upload()