mirror of
https://github.com/u-boot/u-boot.git
synced 2024-11-27 22:56:49 +08:00
d58c007498
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
30 lines
722 B
Makefile
30 lines
722 B
Makefile
# SPDX-License-Identifier: GPL-2.0+
|
|
#
|
|
# (C) Copyright 2007-2008 Michal Simek
|
|
# Michal SIMEK <monstr@monstr.eu>
|
|
#
|
|
# (C) Copyright 2004 Atmark Techno, Inc.
|
|
# Yasushi SHOJI <yashi@atmark-techno.com>
|
|
|
|
CONFIG_STANDALONE_LOAD_ADDR ?= 0x80F00000
|
|
|
|
PLATFORM_CPPFLAGS += -ffixed-r31 -D__microblaze__
|
|
PLATFORM_CPPFLAGS += -fdata-sections -ffunction-sections
|
|
|
|
LDFLAGS_FINAL += --gc-sections
|
|
|
|
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
|
|
PLATFORM_ELFFLAGS += -B microblaze $(OBJCOPYFLAGS) -O elf32-microblaze
|
|
endif
|