Add support for Linux-like kallsysms

The kernel stores address<->symbol names in it so things can be decoded at
runtime.  Do it in U-Boot, and we get nice symbol decoding when crashing.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
This commit is contained in:
Mike Frysinger
2009-05-20 04:35:14 -04:00
committed by Wolfgang Denk
parent 36c9169aa6
commit ecb1dc8922
8 changed files with 75 additions and 53 deletions

View File

@@ -1,18 +0,0 @@
/*
* system_map.S - optional symbol lookup for debugging
*
* Copyright (c) 2007 Analog Devices Inc.
* Licensed under the GPL-2 or later.
*/
#include <config.h>
#ifdef CONFIG_DEBUG_DUMP_SYMS
.data
.global _system_map
.type _system_map,@object
_system_map:
#include SYM_FILE
.asciz ""
.size _system_map,.-_system_map
#endif

View File

@@ -171,38 +171,13 @@ void trap_c(struct pt_regs *regs)
# define ENABLE_DUMP 0
#endif
#ifdef CONFIG_DEBUG_DUMP_SYMS
# define ENABLE_DUMP_SYMS 1
#else
# define ENABLE_DUMP_SYMS 0
#endif
static const char *symbol_lookup(unsigned long addr, unsigned long *caddr)
#ifndef CONFIG_KALLSYMS
const char *symbol_lookup(unsigned long addr, unsigned long *caddr)
{
if (!ENABLE_DUMP_SYMS)
return NULL;
extern const char system_map[] __attribute__((__weak__));
const char *sym, *csym;
char *esym;
unsigned long sym_addr;
sym = system_map;
csym = NULL;
*caddr = 0;
while (*sym) {
sym_addr = simple_strtoul(sym, &esym, 16);
sym = esym;
if (sym_addr > addr)
break;
*caddr = sym_addr;
csym = sym;
sym += strlen(sym) + 1;
}
return csym;
*caddr = addr;
return "N/A";
}
#endif
static void decode_address(char *buf, unsigned long address)
{