Function pointers from crypto_algos array are relocated, when NEEDS_MANUAL_RELOC is set. This relocation doesn't happen if the algo is placed in a linker list. Implement this relocation.
Signed-off-by: Alexandru Gagniuc <mr.nuke...@gmail.com> Reviewed-by: Simon Glass <s...@chromium.org> --- common/image-sig.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/common/image-sig.c b/common/image-sig.c index 498cd78af4..5c7ddd984d 100644 --- a/common/image-sig.c +++ b/common/image-sig.c @@ -98,6 +98,19 @@ struct crypto_algo *image_get_crypto_algo(const char *full_name) int i; const char *name; +#if defined(CONFIG_NEEDS_MANUAL_RELOC) + static bool done; + + if (!done) { + crypto = ll_entry_start(struct crypto_algo, cryptos); + end = ll_entry_end(struct crypto_algo, cryptos); + for (; crypto < end; crypto++) { + crypto->name += gd->reloc_off; + crypto->verify += gd->reloc_off; + } + } +#endif + /* Move name to after the comma */ name = strchr(full_name, ','); if (!name) -- 2.31.1