mirror of
https://github.com/linux-sunxi/u-boot-sunxi.git
synced 2024-02-12 11:16:03 +08:00
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>
This commit is contained in:

committed by
Wolfgang Denk

parent
7e4a9e6dc8
commit
620f1f6a64
@ -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
|
||||
|
Reference in New Issue
Block a user