diff options
| author | Heiko Schocher <hs@denx.de> | 2010-09-17 13:10:33 +0200 | 
|---|---|---|
| committer | Wolfgang Denk <wd@denx.de> | 2010-09-19 19:29:51 +0200 | 
| commit | 620f1f6a64095ed558e68d37f1965d015cd49b02 (patch) | |
| tree | f2704340052bdeabf49dcde31f3f99cfcdc0bd24 /common/command.c | |
| parent | 7e4a9e6dc819b2b3499659ca90e1e9c6d4ca3077 (diff) | |
| download | olio-uboot-2014.01-620f1f6a64095ed558e68d37f1965d015cd49b02.tar.xz olio-uboot-2014.01-620f1f6a64095ed558e68d37f1965d015cd49b02.zip | |
relocation: fixup cmdtable
fixup_cmdtable() did all work for fixing up the cmdtable,
if CONFIG_RELOC_FIXUP_WORKS is not defined.
CONFIG_RELOC_FIXUP_WORKS is missing for i386! I talked
with Graeme Russ, and he will fix this soon.
Portions of this work were supported by funding from
the CE Linux Forum.
Signed-off-by: Heiko Schocher <hs@denx.de>
Diffstat (limited to 'common/command.c')
| -rw-r--r-- | common/command.c | 37 | 
1 files changed, 37 insertions, 0 deletions
| diff --git a/common/command.c b/common/command.c index 72266c326..d47d71977 100644 --- a/common/command.c +++ b/common/command.c @@ -465,3 +465,40 @@ int cmd_get_data_size(char* arg, int default_size)  	return default_size;  }  #endif + +#if !defined(CONFIG_RELOC_FIXUP_WORKS) +DECLARE_GLOBAL_DATA_PTR; + +void fixup_cmdtable(cmd_tbl_t *cmdtp, int size) +{ +	int	i; + +	if (gd->reloc_off == 0) +		return; + +	for (i = 0; i < size; i++) { +		ulong addr; + +		addr = (ulong) (cmdtp->cmd) + gd->reloc_off; +#if DEBUG_COMMANDS +		printf("Command \"%s\": 0x%08lx => 0x%08lx\n", +		       cmdtp->name, (ulong) (cmdtp->cmd), addr); +#endif +		cmdtp->cmd = +			(int (*)(struct cmd_tbl_s *, int, int, char * const []))addr; +		addr = (ulong)(cmdtp->name) + gd->reloc_off; +		cmdtp->name = (char *)addr; +		if (cmdtp->usage) { +			addr = (ulong)(cmdtp->usage) + gd->reloc_off; +			cmdtp->usage = (char *)addr; +		} +#ifdef	CONFIG_SYS_LONGHELP +		if (cmdtp->help) { +			addr = (ulong)(cmdtp->help) + gd->reloc_off; +			cmdtp->help = (char *)addr; +		} +#endif +		cmdtp++; +	} +} +#endif |