diff options
author | Christophe Leroy <christophe.leroy@c-s.fr> | 2018-03-16 17:20:53 +0100 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2018-04-06 16:30:37 -0400 |
commit | 23ac79ff8011c290cc1755b8ab510df80e614db6 (patch) | |
tree | 46d1ba2e1ca3f7ed0934a409540ec3e1b2f68bca /env | |
parent | b3ede3317038abdd75c88f20d9b9685ab062b48a (diff) | |
download | u-boot-23ac79ff8011c290cc1755b8ab510df80e614db6.tar.gz u-boot-23ac79ff8011c290cc1755b8ab510df80e614db6.tar.bz2 u-boot-23ac79ff8011c290cc1755b8ab510df80e614db6.zip |
common: env_embedded: allow fine placement of environment object
Commit 7653942b10e9e ("common/env_embedded.c: drop support for
CONFIG_SYS_USE_PPCENV") dropped the .ppcenv section which was
used in linking scripts to allow fine placement of embedded
environment sections.
This implies that GCC randomly places objects from env/embedded.o
and environment is not guaranteed to be located at the correct address:
04003df8 g F .text 00000038 mii_init
04004000 g O .text 00000004 env_size
04004004 g O .text 00002000 environment
04006004 g F .text 00000040 .hidden __lshrdi3
This patch restores this capability by allocating each object marked
with __UBOOT_ENV_SECTION__ into a different section. Hence
'environment' will be alone in .text.environment, allowing a
fine placement in u-boot.lds with:
. = DEFINED(env_offset) ? env_offset : .;
env/embedded.o (.text.environment)
Fixes: 7653942b10e9e ("common/env_embedded.c: drop support for CONFIG_SYS_USE_PPCENV")
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
Diffstat (limited to 'env')
-rw-r--r-- | env/embedded.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/env/embedded.c b/env/embedded.c index 43694db70f..9b0a6a3c3d 100644 --- a/env/embedded.c +++ b/env/embedded.c @@ -35,11 +35,11 @@ * a seperate section. */ #if defined(USE_HOSTCC) /* Native for 'tools/envcrc' */ -# define __UBOOT_ENV_SECTION__ /*XXX DO_NOT_DEL_THIS_COMMENT*/ +# define __UBOOT_ENV_SECTION__(name) /*XXX DO_NOT_DEL_THIS_COMMENT*/ #else /* Environment is embedded in U-Boot's .text section */ /* XXX - This only works with GNU C */ -# define __UBOOT_ENV_SECTION__ __attribute__ ((section(".text"))) +# define __UBOOT_ENV_SECTION__(name) __attribute__ ((section(".text."#name))) #endif /* @@ -70,7 +70,7 @@ #include <env_default.h> #ifdef CONFIG_ENV_ADDR_REDUND -env_t redundand_environment __UBOOT_ENV_SECTION__ = { +env_t redundand_environment __UBOOT_ENV_SECTION__(redundand_environment) = { 0, /* CRC Sum: invalid */ 0, /* Flags: invalid */ { @@ -87,7 +87,7 @@ env_t redundand_environment __UBOOT_ENV_SECTION__ = { * .data/.sdata section. * */ -unsigned long env_size __UBOOT_ENV_SECTION__ = sizeof(env_t); +unsigned long env_size __UBOOT_ENV_SECTION__(env_size) = sizeof(env_t); /* * Add in absolutes. |