diff options
author | Michal Simek <michal.simek@amd.com> | 2022-06-24 14:15:01 +0200 |
---|---|---|
committer | Michal Simek <michal.simek@amd.com> | 2022-06-24 14:15:01 +0200 |
commit | d58c007498258b73d9eb5e3b24973578498fc341 (patch) | |
tree | d3d54223dd11fcbd2db4dfdb2715a9dda4aa7f62 /arch/microblaze/config.mk | |
parent | 034944b33bc8dd42dd90f9d043c5c03cc0036f01 (diff) | |
download | u-boot-d58c007498258b73d9eb5e3b24973578498fc341.tar.gz |
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 'arch/microblaze/config.mk')
-rw-r--r-- | arch/microblaze/config.mk | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/arch/microblaze/config.mk b/arch/microblaze/config.mk index 3e84a832fc1..d35b4f6db7a 100644 --- a/arch/microblaze/config.mk +++ b/arch/microblaze/config.mk @@ -17,6 +17,11 @@ ifeq ($(CONFIG_SPL_BUILD),) PLATFORM_CPPFLAGS += -fPIC endif +ifeq ($(CONFIG_STATIC_RELA),y) +PLATFORM_CPPFLAGS += -fPIC +LDFLAGS_u-boot += -pic +endif + ifeq ($(CONFIG_SYS_LITTLE_ENDIAN),y) PLATFORM_ELFFLAGS += -B microblaze $(OBJCOPYFLAGS) -O elf32-microblazeel else |