* Loader finalization code. */
| 454 | * Loader finalization code. |
| 455 | */ |
| 456 | void *e9fini(const e9_config_s *config) |
| 457 | { |
| 458 | const uint8_t *loader_base = (const uint8_t *)config; |
| 459 | const uint8_t *elf_base = loader_base - config->base; |
| 460 | |
| 461 | const intptr_t *finis = (const intptr_t *)(loader_base + config->finis); |
| 462 | for (uint32_t i = 0; i < config->num_finis; i++) |
| 463 | { |
| 464 | fini_t fini = (fini_t)e9addr(finis[i], elf_base); |
| 465 | fini(config); |
| 466 | } |
| 467 | |
| 468 | void *fini = (void *)e9addr(config->fini, elf_base); |
| 469 | return fini; |
| 470 | } |
| 471 |