Hi Simon, On 14/12/12 17:48, Simon Glass wrote: > We currently assume that the global data pointer is at the start of > struct global_data. We want to remove this restriction, and it is > easiest to do this in C. > > Remove the asm code and add equivalent code in C. > > This idea was proposed by Graeme Russ here: > http://patchwork.ozlabs.org/patch/199741/ > > Signed-off-by: Simon Glass <s...@chromium.org> > --- > Changes in v2: > - Add new patch to move gd pointer by C to asm on x86 > > arch/x86/cpu/cpu.c | 4 +++- > arch/x86/cpu/start.S | 6 ------ > 2 files changed, 3 insertions(+), 7 deletions(-) > > diff --git a/arch/x86/cpu/cpu.c b/arch/x86/cpu/cpu.c > index 315e87a..6a23974 100644 > --- a/arch/x86/cpu/cpu.c > +++ b/arch/x86/cpu/cpu.c > @@ -100,7 +100,9 @@ void setup_gdt(gd_t *id, u64 *gdt_addr) > gdt_addr[X86_GDT_ENTRY_32BIT_DS] = GDT_ENTRY(0xc093, 0, 0xfffff); > > /* FS: data, read/write, 4 GB, base (Global Data Pointer) */ > - gdt_addr[X86_GDT_ENTRY_32BIT_FS] = GDT_ENTRY(0xc093, (ulong)id, > 0xfffff); > + id->arch.gd_addr = id; > + gdt_addr[X86_GDT_ENTRY_32BIT_FS] = GDT_ENTRY(0xc093, > + (ulong)&id->arch.gd_addr, 0xfffff);
This patch needs to come before #12 as: - gdt_addr[X86_GDT_ENTRY_32BIT_FS] = GDT_ENTRY(0xc093, (ulong)id, 0xfffff); + id->gd_addr = id; + gdt_addr[X86_GDT_ENTRY_32BIT_FS] = GDT_ENTRY(0xc093, + (ulong)&id->gd_addr, 0xfffff); Then you can move gd_addr into arch-specific global data Regards, Graeme _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot