From b84d7d8f1e1066f810866304a16a3583f88e7c98 Mon Sep 17 00:00:00 2001 From: Rafal Jaworowski Date: Fri, 23 Jan 2009 13:27:15 +0100 Subject: API: Use stack pointer as API signature search hint in the glue layer. De-hardcode range in RAM we search for the API signature. Instead use the stack pointer as a hint to narrow down the range in which the signature could reside (it is malloc'ed on the U-Boot heap, and is hoped to remain in some proximity from stack area). Adjust PowerPC code in API demo to the new scheme. Signed-off-by: Rafal Czubak Signed-off-by: Rafal Jaworowski --- api_examples/glue.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'api_examples/glue.c') diff --git a/api_examples/glue.c b/api_examples/glue.c index 2bf47ae3d2..200b163739 100644 --- a/api_examples/glue.c +++ b/api_examples/glue.c @@ -60,13 +60,20 @@ static int valid_sig(struct api_signature *sig) int api_search_sig(struct api_signature **sig) { unsigned char *sp; + uint32_t search_start = 0; + uint32_t search_end = 0; if (sig == NULL) return 0; - sp = (unsigned char *)API_SEARCH_START; + if (search_hint == 0) + search_hint = 255 * 1024 * 1024; - while ((sp + (int)API_SIG_MAGLEN) < (unsigned char *)API_SEARCH_END) { + search_start = search_hint & ~0x000fffff; + search_end = search_start + API_SEARCH_LEN - API_SIG_MAGLEN; + + sp = (unsigned char *)search_start; + while ((sp + API_SIG_MAGLEN) < (unsigned char *)search_end) { if (!memcmp(sp, API_SIG_MAGIC, API_SIG_MAGLEN)) { *sig = (struct api_signature *)sp; if (valid_sig(*sig)) -- cgit v1.2.3