aboutsummaryrefslogtreecommitdiff
path: root/common/board_f.c
diff options
context:
space:
mode:
authorMichal Simek <michal.simek@amd.com>2022-06-24 14:15:01 +0200
committerMichal Simek <michal.simek@amd.com>2022-06-24 14:15:01 +0200
commitd58c007498258b73d9eb5e3b24973578498fc341 (patch)
treed3d54223dd11fcbd2db4dfdb2715a9dda4aa7f62 /common/board_f.c
parent034944b33bc8dd42dd90f9d043c5c03cc0036f01 (diff)
downloadu-boot-d58c007498258b73d9eb5e3b24973578498fc341.zip
u-boot-d58c007498258b73d9eb5e3b24973578498fc341.tar.gz
u-boot-d58c007498258b73d9eb5e3b24973578498fc341.tar.bz2
microblaze: Add support for run time relocation
Microblaze is using NEEDS_MANUAL_RELOC from the beginnging. This is causing issues with function pointer arrays which need to be updated manually after relocation. Building code with -fPIC and linking with -pic will remove this limitation and there is no longer need to run manual update. By default still old option is enabled but by disabling NEEDS_MANUAL_RELOC code will be compiled for full relocation. The patch does couple of things which are connected to each other. - Define STATIC_RELA dependency to call relocate-rela to fill sections. - REMAKE_ELF was already enabled but u-boot file can't be used because sections are empty. relocate-rela will fill them and output file is u-boot.elf which should be used. - Add support for full relocation (u-boot.elf) - Add support for early relocation when u-boot.bin is loaded to different address then CONFIG_SYS_TEXT_BASE - Add rela.dyn and dynsym sections Disabling NEEDS_MANUAL_RELOC U-Boot size increased by 10% of it's original size (550kB to 608kB). Signed-off-by: Michal Simek <michal.simek@amd.com> Link: https://lore.kernel.org/r/a845670b34925859b2e321875f7588a29f6655f9.1655299267.git.michal.simek@amd.com
Diffstat (limited to 'common/board_f.c')
-rw-r--r--common/board_f.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/common/board_f.c b/common/board_f.c
index 51d2f3c..a5666ca 100644
--- a/common/board_f.c
+++ b/common/board_f.c
@@ -684,6 +684,8 @@ static int setup_reloc(void)
#ifdef CONFIG_SYS_TEXT_BASE
#ifdef ARM
gd->reloc_off = gd->relocaddr - (unsigned long)__image_copy_start;
+#elif defined(CONFIG_MICROBLAZE)
+ gd->reloc_off = gd->relocaddr - (u32)_start;
#elif defined(CONFIG_M68K)
/*
* On all ColdFire arch cpu, monitor code starts always