Commit 10088fb0 authored by T Karthik Reddy's avatar T Karthik Reddy Committed by Michal Simek
Browse files

common: hash: Manually relocate struct hash_algo



This patch adds manual relocation for struct hash_algo if
CONFIG_NEEDS_MANUAL_RELOC is enabled.
Signed-off-by: default avatarT Karthik Reddy <t.karthik.reddy@xilinx.com>
Signed-off-by: default avatarSiva Durga Prasad Paladugu <siva.durga.paladugu@xilinx.com>
Signed-off-by: default avatarMichal Simek <michal.simek@xilinx.com>
parent 62e3fb02
......@@ -30,6 +30,12 @@
#include <u-boot/sha256.h>
#include <u-boot/md5.h>
#if !defined(USE_HOSTCC) && defined(CONFIG_NEEDS_MANUAL_RELOC)
DECLARE_GLOBAL_DATA_PTR;
#endif
static void reloc_update(void);
#if defined(CONFIG_SHA1) && !defined(CONFIG_SHA_PROG_HW_ACCEL)
static int hash_init_sha1(struct hash_algo *algo, void **ctxp)
{
......@@ -215,10 +221,31 @@ static struct hash_algo hash_algo[] = {
#define multi_hash() 0
#endif
static void reloc_update(void)
{
#if !defined(USE_HOSTCC) && defined(CONFIG_NEEDS_MANUAL_RELOC)
int i;
static bool done;
if (!done) {
done = true;
for (i = 0; i < ARRAY_SIZE(hash_algo); i++) {
hash_algo[i].name += gd->reloc_off;
hash_algo[i].hash_func_ws += gd->reloc_off;
hash_algo[i].hash_init += gd->reloc_off;
hash_algo[i].hash_update += gd->reloc_off;
hash_algo[i].hash_finish += gd->reloc_off;
}
}
#endif
}
int hash_lookup_algo(const char *algo_name, struct hash_algo **algop)
{
int i;
reloc_update();
for (i = 0; i < ARRAY_SIZE(hash_algo); i++) {
if (!strcmp(algo_name, hash_algo[i].name)) {
*algop = &hash_algo[i];
......@@ -235,6 +262,8 @@ int hash_progressive_lookup_algo(const char *algo_name,
{
int i;
reloc_update();
for (i = 0; i < ARRAY_SIZE(hash_algo); i++) {
if (!strcmp(algo_name, hash_algo[i].name)) {
if (hash_algo[i].hash_init) {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment