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: T Karthik Reddy <t.karthik.reddy@xilinx.com>
Signed-off-by: Siva Durga Prasad Paladugu <siva.durga.paladugu@xilinx.com>
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
This commit is contained in:
T Karthik Reddy 2019-03-16 15:23:01 +05:30 committed by Michal Simek
parent 62e3fb027b
commit 10088fb037

View File

@ -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) {