Message ID | ae6a0c7be8e730b3fe933ce859d97e99f2ae2b08.1521215903.git.christophe.leroy@c-s.fr |
---|---|
State | Accepted |
Delegated to: | Tom Rini |
Headers | show |
Series | Powerpc: mpc8xx: cleanup before migration to DM model | expand |
On Fri, Mar 16, 2018 at 05:20:53PM +0100, Christophe Leroy wrote: > 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> Applied to u-boot/master, thanks!
diff --git a/env/embedded.c b/env/embedded.c index 43694db70fe..9b0a6a3c3da 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. diff --git a/include/env_default.h b/include/env_default.h index b574345af25..dd741315ba4 100644 --- a/include/env_default.h +++ b/include/env_default.h @@ -11,7 +11,7 @@ #include <env_callback.h> #ifdef DEFAULT_ENV_INSTANCE_EMBEDDED -env_t environment __UBOOT_ENV_SECTION__ = { +env_t environment __UBOOT_ENV_SECTION__(environment) = { ENV_CRC, /* CRC Sum */ #ifdef CONFIG_SYS_REDUNDAND_ENVIRONMENT 1, /* Flags: valid */
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> --- env/embedded.c | 8 ++++---- include/env_default.h | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-)