diff options
Diffstat (limited to 'core/utils.c')
-rw-r--r-- | core/utils.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/core/utils.c b/core/utils.c index 63046fc..1a81ae2 100644 --- a/core/utils.c +++ b/core/utils.c @@ -68,3 +68,30 @@ char __attrconst tohex(uint8_t nibble) return __tohex[nibble]; } +unsigned long get_symbol(unsigned long addr, char **sym, char **sym_end) +{ + unsigned long prev = 0, next; + char *psym = NULL, *p = __sym_map_start; + + *sym = *sym_end = NULL; + while(p < __sym_map_end) { + next = strtoul(p, &p, 16) | SKIBOOT_BASE; + if (next > addr && prev <= addr) { + p = psym + 3;; + if (p >= __sym_map_end) + return 0; + *sym = p; + while(p < __sym_map_end && *p != 10) + p++; + *sym_end = p; + return prev; + } + prev = next; + psym = p; + while(p < __sym_map_end && *p != 10) + p++; + p++; + } + return 0; +} + |