
On Fri, 2010-07-30 at 08:00 +0200, Heiko Schocher wrote:
Hello Peter,
Peter Tyser wrote:
+#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;
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++;
- }
+}
A number of other arches have this same logic in arch-specific code, eg arch/mips/lib/board.c. Could you also convert them to use the new fixup_cmdtable() in this patch?
Ah, Ok, I can try it. This will then result, that this patch can go direct to mainline, right?
Yes, I'd think this patch would be accepted regardless of the other ARM relocation changes as its a general improvement.
As I see in the code, this should be possible for the following architectures:
avr32 m68k mips
I believe sparc should also be included.
Best, Peter