> This permits disabling the code relation in U-Boot which is useful when > debugging with an ICE. > > To use it define CONFIG_SYS_SKIP_ARM_RELOCATION in your board. > > Signed-off-by: Simon Glass <s...@chromium.org> > --- > arch/arm/config.mk | 2 ++ > arch/arm/cpu/armv7/start.S | 3 +-- > arch/arm/include/asm/global_data.h | 3 +++ > arch/arm/lib/board.c | 10 ++++++++++ > 4 files changed, 16 insertions(+), 2 deletions(-) > > diff --git a/arch/arm/config.mk b/arch/arm/config.mk > index 45f9dca..46b52af 100644 > --- a/arch/arm/config.mk > +++ b/arch/arm/config.mk > @@ -79,5 +79,7 @@ endif > > # needed for relocation > ifndef CONFIG_NAND_SPL > +ifndef CONFIG_SYS_SKIP_ARM_RELOCATION > LDFLAGS_u-boot += -pie > endif > +endif > diff --git a/arch/arm/cpu/armv7/start.S b/arch/arm/cpu/armv7/start.S > index ef08a55..82eac7c 100644 > --- a/arch/arm/cpu/armv7/start.S > +++ b/arch/arm/cpu/armv7/start.S > @@ -183,8 +183,7 @@ stack_setup: > mov sp, r4 > > adr r0, _start > - cmp r0, r6 > - moveq r9, #0 /* no relocation. relocation offset(r9) = 0 */ > + subs r9, r6, r0 /* r9 <- relocation offset */ > beq clear_bss /* skip relocation */ > mov r1, r6 /* r1 <- scratch for copy_loop */ > ldr r3, _image_copy_end_ofs > diff --git a/arch/arm/include/asm/global_data.h > b/arch/arm/include/asm/global_data.h index c3ff789..23a6077 100644 > --- a/arch/arm/include/asm/global_data.h > +++ b/arch/arm/include/asm/global_data.h > @@ -77,6 +77,9 @@ typedef struct global_data { > unsigned long tlb_addr; > #endif > const void *fdt_blob; /* Our device tree, NULL if none */ > +#ifdef CONFIG_SYS_SKIP_ARM_RELOCATION > + ulong malloc_end; /* End of malloc region (addr + 1) */ > +#endif > void **jt; /* jump table */ > char env_buf[32]; /* buffer for getenv() before reloc. */ > #if defined(CONFIG_POST) || defined(CONFIG_LOGBUFFER) > diff --git a/arch/arm/lib/board.c b/arch/arm/lib/board.c > index 3d78274..81293c3 100644 > --- a/arch/arm/lib/board.c > +++ b/arch/arm/lib/board.c > @@ -355,6 +355,7 @@ void board_init_f(ulong bootflag) > #endif /* CONFIG_FB_ADDR */ > #endif /* CONFIG_LCD */ > > +#ifndef CONFIG_SYS_SKIP_ARM_RELOCATION > /* > * reserve memory for U-Boot code, data & bss > * round down to next 4 kB limit > @@ -363,6 +364,7 @@ void board_init_f(ulong bootflag) > addr &= ~(4096 - 1); > > debug("Reserving %ldk for U-Boot at: %08lx\n", gd->mon_len >> 10, addr); > +#endif > > #ifndef CONFIG_SPL_BUILD > /* > @@ -419,6 +421,10 @@ void board_init_f(ulong bootflag) > dram_init_banksize(); > display_dram_config(); /* and display it */ > > +#ifdef CONFIG_SYS_SKIP_ARM_RELOCATION > + gd->malloc_end = addr; > + addr = _TEXT_BASE; > +#endif > gd->relocaddr = addr; > gd->start_addr_sp = addr_sp; > gd->reloc_off = addr - _TEXT_BASE; > @@ -478,7 +484,11 @@ void board_init_r(gd_t *id, ulong dest_addr) > #endif > > /* The Malloc area is immediately below the monitor copy in DRAM */ > +#ifdef CONFIG_SYS_SKIP_ARM_RELOCATION > + malloc_start = gd->malloc_end - TOTAL_MALLOC_LEN; > +#else > malloc_start = dest_addr - TOTAL_MALLOC_LEN; > +#endif > mem_malloc_init (malloc_start, TOTAL_MALLOC_LEN); > > #if !defined(CONFIG_SYS_NO_FLASH)
Why would you need this one ? Is there any user for this patch? M _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot